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

  FORUM HardWare.fr
  Programmation
  C

  Correction d'un code (exercice)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Correction d'un code (exercice)

n°1895349
jowhite
Posté le 15-06-2009 à 17:12:27  profilanswer
 

Bonjour bonjour,
 
C'est encore moi avec des exercices ^^.
Celui ci il faut juste corriger un code où il y a intentionnellement des erreurs.
 
Je pense avoir corrigé la plupart, mais il me reste deux warnings là ou j'ai marqué "erreurs à corriger"
Je voudrais juste votre avis.
 
Voilà le code de départ:
 

Code :
  1. #include <conio.h>
  2. #include <stdio.h>
  3. char codage (char lettre[], int i,int nb)
  4. {
  5.      char result;
  6.      int signe=1;
  7.      if (i%2==0) signe=-1;
  8.      i=(i/2)+1;
  9.      result=lettre+signe*i*nb;
  10.      return(result);
  11. }
  12. void main (void);
  13. {
  14.      char mot[30], code[30];
  15.      int nombre, erreur, i, chks;
  16.      do
  17.      {
  18.          printf ("Bonjour, veuillez saisir le nombre correspondant à votre choix :\n 1\t pour coder un mot\n 2\tpour decoder un mot\n 3\t pour voir le nombre correspondant à un mot\n" );
  19.          scanf ("%f", &nombre);
  20.          erreur = 0;
  21.          switch(nombre)
  22.          {
  23.                        case 1 : printf("Veuillez saisir votre mot\n" );
  24.                        scanf("%s",&mot);
  25.                        chks=0;
  26.                        for (i=0; i<strlen(mot); i++)
  27.                        {
  28.                            code[i]=codage(mot[i],i,1);
  29.                            chks+=mot[i]-65;}
  30.                            code[strlen(mot)]=0;
  31.                            printf ("Le mot %i se code en %i.\nSon code de validation est : %i\n",mot,code,chks);
  32.                        case 2 : printf("Veuillez saisir votre code\n" );
  33.                            scanf("%s",&code);
  34.                            chks=0;
  35.                            for (i=0; i<strlen(code); i++);
  36.                            {
  37.                                mot[i]=codage(code[i],i,-1);
  38.                                chks+=mot[i]-65;
  39.                                }
  40.                            mot[strlen(code)]=0;
  41.                            printf ("Le code %s se decode en %s.\nSon code de validation est : %i\n",code,mot,chks);
  42.                        case 3 : printf("Veuillez saisir votre mot\n" );
  43.                            scanf("%s",mot);
  44.                            chks=0;
  45.                            for (i=0; i<strlen(mot); i++)
  46.                            {
  47.                                chks+=mot[i]-65;}
  48.                                printf ("Son code de validation est : %i\n",chks);
  49.                            default : erreur=1;
  50.                                printf("Vous avez commis une erreur lors de la saisie.\n Pressez une touche pour recommencer\n" );
  51.                                getch();
  52.                                }
  53.          } while (erreur=1)
  54.                            printf("Le programme est maintenant fini. Appuyez sur une touche\n" );
  55.                            getch();
  56. }


 
Ma correction:

Code :
  1. #include <conio.h>
  2. #include <stdio.h>
  3. /*Erreur corrigée ci-dessous */
  4. #include <stdlib.h>
  5. char codage (char lettre[], int i,int nb)
  6. {
  7.      char result;
  8.      int signe=1;
  9.      if (i%2==0) signe=-1;
  10.      i=(i/2)+1;
  11.      /*Erreur à corrigée  */
  12.      result=lettre+signe*i*nb;
  13.      return(result);
  14. }
  15. /*Erreur corrigée ci-dessous */
  16. /*Erreur corrigée ci-dessous */
  17. int main (void)
  18. {
  19.         char mot[30], code[30];
  20.         int nombre, erreur, i, chks;
  21.         do
  22.         {
  23.             printf ("Bonjour, veuillez saisir le nombre correspondant à votre choix :\n 1\t pour coder un mot\n 2\t pour decoder un mot\n 3\t pour voir le nombre correspondant à un mot\n" );
  24.             /*Erreur corrigée ci-dessous */
  25.             scanf ("%i", &nombre);
  26.              /*Erreur corrigée ci-dessous */
  27.             erreur == 0;
  28.             switch(nombre)
  29.             {
  30.                           case 1 : printf("Veuillez saisir votre mot\n" );
  31.                           scanf("%s",&mot);
  32.                           chks=0;
  33.                           for (i=0; i<strlen(mot); i++)
  34.                           {
  35.                               /*Erreur à corrigée  */
  36.                               code[i]=codage(mot[i],i,1);
  37.                               chks+=mot[i]-65;
  38.                           }
  39.                           code[strlen(mot)]=0;
  40.                           /*Erreur corrigée ci-dessous */
  41.                           printf ("Le mot %i se code en %i.\nSon code de validation est : %i\n",mot,code,chks);break;
  42.                           case 2 : printf("Veuillez saisir votre code\n" );
  43.                           scanf("%s",&code);
  44.                           chks=0;
  45.                           /*Erreur corrigée ci-dessous */
  46.                           for (i=0; i<strlen(code); i++)
  47.                           {
  48.                               /*Erreur à corrigée  */
  49.                               mot[i]=codage(code[i],i,-1);
  50.                               chks+=mot[i]-65;
  51.                           }
  52.                           mot[strlen(code)]=0;
  53.                           /*Erreur corrigée ci-dessous */
  54.                           printf ("Le code %s se decode en %s.\nSon code de validation est : %i\n",code,mot,chks);break;
  55.                           case 3 : printf("Veuillez saisir votre mot\n" );
  56.                           /*Erreur corrigée ci-dessous */
  57.                           scanf("%s",&mot);
  58.                           chks=0;
  59.                           for (i=0; i<strlen(mot); i++)
  60.                           {
  61.                               chks+=mot[i]-65;
  62.                           }
  63.                           /*Erreur corrigée ci-dessous */
  64.                           printf ("Son code de validation est : %i\n",chks);break;
  65.                           default : erreur = 1;
  66.                           printf("Vous avez commis une erreur lors de la saisie.\n Pressez une touche pour recommencer\n" );
  67.                           /*Erreur corrigée ci-dessous */
  68.                           getch();break;
  69.             }
  70.              /*Erreur corrigée ci-dessous */
  71.         } while (erreur == 1);
  72. printf("Le programme est maintenant fini. Appuyez sur une touche\n" );
  73. getch();
  74. }


 
Merci beaucoup!

mood
Publicité
Posté le 15-06-2009 à 17:12:27  profilanswer
 

n°1895357
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-06-2009 à 17:24:18  profilanswer
 

(et les warnings, on doit les deviner ?)
Ouh putain, la ligne 13 [:ciler]
Et si jamais ton utilisateur saisit des mots de plus de 30 caractères, tu penseras à lui dire de redémarrer son PC ensuite, pour anticiper le plantage qui ne manquera pas d'arriver


---------------
J'ai un string dans l'array (Paris Hilton)
n°1895360
Elmoricq
Modérateur
Posté le 15-06-2009 à 17:31:46  profilanswer
 

Harkonnen a écrit :

(et les warnings, on doit les deviner ?)
Ouh putain, la ligne 13 [:ciler]
Et si jamais ton utilisateur saisit des mots de plus de 30 caractères, tu penseras à lui dire de redémarrer son PC ensuite, pour anticiper le plantage qui ne manquera pas d'arriver


 
Nan mais c'est terminé depuis presque 10 ans Win9x et ses écrans bleus sur un scanf(), hein. [:dawa]

n°1895362
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-06-2009 à 17:35:45  profilanswer
 

Elmoricq a écrit :


 
Nan mais c'est terminé depuis presque 10 ans Win9x et ses écrans bleus sur un scanf(), hein. [:dawa]


Ca correspond justement à la période où j'ai du écrire ma dernière ligne de C [:dawa]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1895378
jowhite
Posté le 15-06-2009 à 18:03:12  profilanswer
 

Harkonnen a écrit :

(et les warnings, on doit les deviner ?)


 
Oups !
 
Les voici:
13 C:\Documents and Settings\Administrator\Desktop\correction.c [Warning] assignment makes integer from pointer without a cast  
37 C:\Documents and Settings\Administrator\Desktop\correction.c [Warning] passing arg 1 of `codage' makes pointer from integer without a cast  
50 C:\Documents and Settings\Administrator\Desktop\correction.c [Warning] passing arg 1 of `codage' makes pointer from integer without a cast  

n°1895387
jowhite
Posté le 15-06-2009 à 18:20:37  profilanswer
 

Il ne faut pas mettre un & ou un * qq part à la ligne 13?

n°1895454
boblenain2​00
Posté le 15-06-2009 à 23:21:11  profilanswer
 

Ligne 13 : faut que tu castes tes int en char
result=lettre+(char)signe*(char)i*(char)nb;

n°1895455
boblenain2​00
Posté le 15-06-2009 à 23:23:04  profilanswer
 

Et je pense que pour les 2 autres erreurs, le probleme vient du prototype de la fonction codage, lettre est juste un char, pas un tableau de char
 
char codage (char lettre[], int i,int nb) --> char codage (char lettre, int i,int nb)

n°1895459
Joel F
Real men use unique_ptr
Posté le 15-06-2009 à 23:46:22  profilanswer
 

non tout faux, lire le code ne suffit pas, faut le comprendre aussi
et arreter d epenser qu'un warning de cast se resout en castant comme un porc
l13 :

 

result = lettre[signe*i*nb];

 

Message cité 2 fois
Message édité par Joel F le 15-06-2009 à 23:46:53
n°1895488
Turkleton
I don't quite understand you
Posté le 16-06-2009 à 07:43:24  profilanswer
 

Joel F a écrit :

non tout faux, lire le code ne suffit pas, faut le comprendre aussi
et arreter d epenser qu'un warning de cast se resout en castant comme un porc
l13 :
 
result = lettre[signe*i*nb];
 


 
J'aurais tendance à être plutôt de l'avis de boblenain, pour moi il ne faut envoyer qu'un char en premier paramètre de la fonction "codage", pas un tableau de char (sinon je vois pas bien l'intérêt de passer l'intégralité du tableau à chaque appel de la fonction, i.e à chaque itération de la boucle for). Du coup, "lettre" est de type char et n'accepte pas "lettre[xxx]". Par contre, je ne comprends pas bien la méthode de codage, cette ligne 13 reste mystérieuse.
 
Autre (petite) erreur spotted : ligne 34, les "%i" pour formater les string "mot" et "code" (d'ailleurs, je suis toujours mal à l'aise avec l'emploi de %i pour les int, j'ai toujours utilisé le %d, je me demandais si tous les compilateurs acceptaient le %i, j'imagine que oui)


---------------
If you think it could look good, then I guess it should
mood
Publicité
Posté le 16-06-2009 à 07:43:24  profilanswer
 

n°1895492
Joel F
Real men use unique_ptr
Posté le 16-06-2009 à 08:22:01  profilanswer
 

Turkleton a écrit :


J'aurais tendance à être plutôt de l'avis de boblenain, pour moi il ne faut envoyer qu'un char en premier paramètre de la fonction "codage", pas un tableau de char (sinon je vois pas bien l'intérêt de passer l'intégralité du tableau à chaque appel de la fonction, i.e à chaque itération de la boucle for). Du coup, "lettre" est de type char et n'accepte pas "lettre[xxx]". Par contre, je ne comprends pas bien la méthode de codage, cette ligne 13 reste mystérieuse.


 
J'ai pas lu le bon bout [:prozac]
 
Ouais char lettre oui mais n'empeche que le transtypage foireux à totu va = niet

n°1895697
boblenain2​00
Posté le 16-06-2009 à 13:31:58  profilanswer
 

Joel F a écrit :

non tout faux, lire le code ne suffit pas, faut le comprendre aussi


 

Joel F a écrit :


J'ai pas lu le bon bout [:prozac]


 :o  
 
Transtypage int <-> char, c'est pas du transtypage foireux à tout va amha. Sinon faut modifier bien plus de choses dans son code ..
 
 

n°1895699
Joel F
Real men use unique_ptr
Posté le 16-06-2009 à 13:42:48  profilanswer
 

Dans l'optique que j'en avais (pointer<->integer) si. La ofc non :o


Message édité par Joel F le 16-06-2009 à 13:42:54

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

  Correction d'un code (exercice)

 

Sujets relatifs
Problème de code dans userform[Edit] Analyseur de code pour C++
Error Javascript:"Object Required"- 5 lignes de code [RESOLU]Code source d'une page internet
[PHP] Problème d'enregistrement en base[PHP] Besoin d'aide pour du code PHP
[Resolu]Code qui passe toujours dans le IFCompiler du code java existant avec MAVEN
Récupérer le code source d'une page html différenteBesoin d'aide pour un code PHP
Plus de sujets relatifs à : Correction d'un code (exercice)


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