Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1201 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Vigenere

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Vigenere

n°2165943
Charly320
Posté le 28-11-2012 à 21:17:44  profilanswer
 

Bonjour,
 
débutant en informatique, j'essaie de créer un programme Vigenère.  
Malheureusement, je ne parviens lorsque j'essaie de compiler mon code, mais je ne comprend pas pourquoi ???
Merci pour votre aide.  
 
Voici mon code :  
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int rang(char lettre)
  5. {
  6.        char alphabet[26] = "abcdefghijklmnopqrstuvwxyz";
  7.     int i;
  8.    
  9.     for (i = 0; i < 26; i++)
  10.         if (lettre == alphabet[i])
  11.             return i;
  12. }
  13. void vigenere(char *phrase, char *cle, char *resultat, int crypte)
  14. /*
  15.     phrase: la phrase a codée
  16.  cle:    la cle pour codée
  17.  resultat: zone allouée de même taille que phrase
  18.  crypte: nul on décode, >=1 on code
  19. */
  20. {
  21. int i_ph = 0, i_cl=0, y, z, x;
  22.     int l_phrase = 0, l_cle;
  23.     char alphabet[26] = "abcdefghijklmnopqrstuvwxyz";
  24. if (resultat == NULL)
  25.   return ;
  26. l_phrase = strlen(phrase);
  27.     l_cle = strlen(cle);
  28.     for (i_ph = 0; i_ph < l_phrase; i_ph++)
  29.     {
  30.         if (phrase[i_ph] != ' ')
  31.  {
  32.   z = rang(phrase[i_ph]);
  33.   x = rang(cle[i_cl]);
  34.   i_cl = (i_cl+1) % l_cle;
  35.   if (crypte)
  36.    y = (z + x) % 26;            // + on encode
  37.   else
  38.   {
  39.    y = (z - x) ;            // - on encode
  40.    if (y < 0)
  41.     y += 26;
  42.   }
  43.   resultat[i_ph]=alphabet[y];
  44.  }
  45.         else
  46.   resultat[i_ph]=' ';
  47.     }
  48. resultat[i_ph]='\0';
  49.     return 0;
  50. }

mood
Publicité
Posté le 28-11-2012 à 21:17:44  profilanswer
 

n°2165955
gilou
Modérateur
Modzilla
Posté le 28-11-2012 à 22:02:37  profilanswer
 

Manifestement, ce code est incomplet (pas de main...)
Une fois complété, il marche, a la stricte condition qu'il n'y ait pas de caractère hors de "a..z" ou " " dans la phrase ou la clé, ce qui est très optimiste.
Faire renvoyer -1 a rang quand on a un caractère hors de "a..z" et en tenir compte dans vigenere est bien plus réaliste et blindé.
D'autre part, void vigenere(...) donc pas de return 0; avec.
 
Le bout de code que j'ai ajouté pour tester:
 

Code :
  1. int main() {
  2.     char *phrase = "hello world";
  3.     char *resultat = strdup("hello world" );
  4.     char *resultat1 = strdup("hello world" );
  5.     char *cle = "azor";
  6.     vigenere(phrase, cle, resultat, 1);
  7.     printf("%s\n", resultat);
  8.     vigenere(resultat, cle, resultat1, 0);
  9.     printf("%s\n", resultat1);
  10.     free(resultat);
  11.     free(resultat1);
  12.     return 0;
  13. }

qui donne:

C:\clang>vigenere
hdzco vcilc
hello world


 
On a récemment eu une question sur le sujet, mais en C++: http://forum.hardware.fr/hfr/Progr [...] 8091_1.htm
 
A+,


Message édité par gilou le 28-11-2012 à 22:04:44

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2165969
Charly320
Posté le 28-11-2012 à 22:51:37  profilanswer
 

Bonjour Gilou : merci pour ta réponse. A quel endroit as-tu rajouté ton morceau de code ? Au début ?  
J'avais vu effectivement le topic en C++ sur le sujet, mais comme je débute en C, j'essaie de ne pas trop compliqué en mélangeant avec du C++ (que je ne connais pas encore).

n°2165972
gilou
Modérateur
Modzilla
Posté le 28-11-2012 à 23:33:43  profilanswer
 

Il est rajouté à la fin.
Le main est la fonction obligatoirement présente dans un programme écrit en C. C'est elle qui est exécutée au lancement du programme.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2166085
Charly320
Posté le 29-11-2012 à 21:20:20  profilanswer
 

Je viens de remplacer la fin du code, mais visiblement il ne compile pas. Tu n'as pas eu ce problème ???
J'ai fais une erreur ??
 
voilà mon nouveau code :  
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int rang(char lettre)
  5. {
  6.        char alphabet[26] = "abcdefghijklmnopqrstuvwxyz";
  7.     int i;
  8.    
  9.     for (i = 0; i < 26; i++)
  10.         if (lettre == alphabet[i])
  11.             return i;
  12. }
  13. void vigenere(char *phrase, char *cle, char *resultat, int crypte)
  14. /*
  15.     phrase: la phrase a codée
  16.  cle:    la cle pour codée
  17.  resultat: zone allouée de même taille que phrase
  18.  crypte: nul on décode, >=1 on code
  19. */
  20.     int main() {
  21.         char *phrase = "hello world";
  22.         char *resultat = strdup("hello world" );
  23.         char *resultat1 = strdup("hello world" );
  24.         char *cle = "azor";
  25.         vigenere(phrase, cle, resultat, 1);
  26.         printf("%s\n", resultat);
  27.         vigenere(resultat, cle, resultat1, 0);
  28.         printf("%s\n", resultat1);
  29.         free(resultat);
  30.         free(resultat1);
  31.         return 0;
  32.     }

n°2166088
gilou
Modérateur
Modzilla
Posté le 29-11-2012 à 21:28:38  profilanswer
 

Manifestement, vous n'avez pas encore acquis les bases minimales nécessaires pour écrire cet exercice.
Alors commencez par le B A BA de la programmation (Hello World, etc) avec un bon manuel d'initiation, parce que la, je ne peux rien pour vous tant que vous ne comprendrez pas un minimum ce que vous faites, ce qui de toute évidence n'est pas le cas.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2166089
Terminapor
I'll see you rise.
Posté le 29-11-2012 à 21:29:22  profilanswer
 

Tu n'a pas déclarer le corps de void vigenere() :spamafote:


---------------
Perhaps you don't deserve to breathe

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Vigenere

 

Sujets relatifs
Algorithme de vigenere modifiéAlgorithme de Vigenere en C
Plus de sujets relatifs à : Vigenere


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR