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

  FORUM HardWare.fr
  Programmation
  C

  Traduction d'un algorithme en C

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Traduction d'un algorithme en C

n°1894425
jowhite
Posté le 12-06-2009 à 12:32:53  profilanswer
 

Bonjours à tous,
 
Je suis en train de réviser pour mon examen de c et je n'arrive pas à traduire un algorithme en C et de le faire fonctionner
Est ce que vous pourriez m'aider à trouver mes erreurs?
 
Le sujet est:
1ere partie:  
http://img198.imageshack.us/img198/6825/safaricransnapz001.jpg
 
2eme partie: (pouvez vous voir l'immage?
 
http://www.boostupload.com/files/image_141_Acrobat_cranSnapz001.jpg
et la fin:
 
http://www.boostupload.com/files/image_093_Acrobat_cranSnapz002.jpg
 
Et voici ce que j'ai traduis (sur devc++):

Code :
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. /*Fonction saisiesure*/
  5. int saisiesure ()
  6. {
  7.     int i, erreur;
  8.     int sortie=0;
  9.     do
  10.     {
  11.         char chaine [50];
  12.         int sortie=0;
  13.         erreur=0;
  14.         scanf ("%s", &chaine);
  15.         for (i=0; i<=(strlen(chaine)-2); i++)
  16.         {
  17.             if (erreur == 0)
  18.             {
  19.                 if ((chaine[i])<48 ||(chaine[i])>57)
  20.                 {
  21.                     erreur=1;
  22.                 }
  23.                 else
  24.                 {
  25.                     sortie+=(chaine[i])-48;
  26.                 }
  27.             }
  28.         }
  29.         if (erreur==1) printf ("erreur recommencez\n" );
  30.     } while (erreur==1);
  31.  
  32.     return (sortie);
  33. }
  34. int main (void)
  35. {
  36.     int nb1, nb2, pgcd, ppcm, temp1, temp2;
  37.     ppcm=0;
  38.     printf("1er nombre\n" );
  39.    
  40.     nb1= saisiesure();
  41.     printf("2er nombre\n" );
  42.    
  43.     nb2= saisiesure();
  44.     if (nb1<nb2)
  45.     {
  46.                 temp1=nb1;
  47.                 temp2=nb2;
  48.     }
  49.     else
  50.     {
  51.         temp2=nb1;
  52.         temp1=nb2;
  53.     }
  54.     do
  55.     {
  56.         pgcd=temp1;
  57.         temp1=temp2%temp1;
  58.         temp2=pgcd;
  59.     } while(temp1>0);
  60.     pgcd=temp2;
  61.     ppcm=(nb1*nb2)/pgcd;
  62.     printf("le pgcd de %i et de %i est %i et le ppcm est %i\n",nb1,nb2,pgcd,ppcm);
  63.     system ("pause" );//Attendre avant de quitter le programme
  64.           return(0);//Fin du programme sans erreur
  65. }


 
Quand je veux compiler, aucune erreur apparaît le exe se lance mais je reste bloqué après avoir rentré le 1er nombre... Une idée?  
 
 
Merci beaucoup!

Message cité 1 fois
Message édité par jowhite le 12-06-2009 à 15:16:54
mood
Publicité
Posté le 12-06-2009 à 12:32:53  profilanswer
 

n°1894433
Joel F
Real men use unique_ptr
Posté le 12-06-2009 à 13:03:57  profilanswer
 

tu fait un scanf avant et pendant ta fonction. Le premier scanf ne sert à rien


Message édité par Joel F le 12-06-2009 à 13:04:16
n°1894440
jowhite
Posté le 12-06-2009 à 13:19:48  profilanswer
 

Merci de ta réponse.
 
c'est vrai que je ne comprenais pas pourquoi il n'y avait pas de scan dans l'algo!
 
J'ai enlever les lignes 29 et 32 mais il se passe la même chose!

n°1894471
pataluc
Posté le 12-06-2009 à 14:16:11  profilanswer
 

pour ton erreur c normal dans tes if et tes while, il faut 2 "=", sinon tu modifie ta valeur et ton test est du coup tjs bon.

Code :
  1. if (c == 0) {...}
 

sinon, je mettrai des accolades pour bien délimiter le if vu qu'il yen a 2 imbriqués...
c'est du chipotage, mais normalement on déclare les variables de sorte que leur portée soit la plus petite possible (mais suffisante évidemment), donc, sauf erreur de ma part, ca serait plus joli comme ca (ca compilera pareil mais c plus conventionnel)  

Code :
  1. int saisiesure ()
  2. {
  3.     int erreur;
  4.     do
  5.     {
  6.         char chaine [50];
  7.         int sortie=0;
  8.         erreur=0;
  9.         scanf ("%s", &chaine);
  10.         for (int i=0; i<=(strlen(chaine)-2); i++)
  11.         {
  12.             if (erreur == 0)
  13.             {
  14.                 if ((chaine[i])<48 ||(chaine[i])>57)
  15.                 {
  16.                     erreur=1;
  17.                 }
  18.                 else
  19.                 {
  20.                     sortie+=(chaine[i])-48;
  21.                 }
  22.             }
  23.         }
  24.         if (erreur==1) printf ("erreur recommencez\n" );
  25.     } while (erreur==1);
  26.    
  27.     return sortie;
  28. }
 

j'ajoute algorithmiquement, le si erreur=faux n'a pas de sens.

 

j'ajoute aussi que les if (erreur==0) peuvent etre remplacés par if (!erreur) etc...

 


[Edit] j'ai édité mon post plusieurs fois...

Message cité 1 fois
Message édité par pataluc le 12-06-2009 à 14:52:44
n°1894488
jowhite
Posté le 12-06-2009 à 14:49:19  profilanswer
 

Merci à toi aussi pour ta réponse!
 
J'ai essayé de changer ce que tu as fais (copier coller), cependant, le compilateur m'indique ces erreurs:
Ligne 27:  `sortie' undeclared (first use in this function) --> pourquoi à tu enlevé les variables du débuts?
 
Ligne 10:  'for' loop initial declaration used outside C99 mode  --> tu as rajouté "int"? je ne sais pas pourquoi?
 
Sinon, après avoir corrigé les erreurs marqué par le compilateur, il n'y a pas d'amélioration.
 
J'edit mon post
Merci de ton aide!


Message édité par jowhite le 12-06-2009 à 14:53:54
n°1894492
pataluc
Posté le 12-06-2009 à 14:52:46  profilanswer
 

ah oui autant pour moi, en fait j'ai rentré sortie dans la boucle parce qu'elle n'étiat pas utilisée ailleurs, et du coup ca servait à rien de le définir aussi haut, puis ensuite je me suis apercu qu'il manquait le return, mais j'ai oublié de ressortir la variable sortie:

Code :
  1. int saisiesure ()
  2. {
  3.     int erreur;
  4.     int sortie=0;
  5.     do
  6.     {
  7.         char chaine [50];
  8.         erreur=0;
  9.         scanf ("%s", &chaine);
  10.         for (int i=0; i<=(strlen(chaine)-2); i++)
  11.         {
  12.             if (erreur == 0)
  13.             {
  14.                 if ((chaine[i])<48 ||(chaine[i])>57)
  15.                 {
  16.                     erreur=1;
  17.                 }
  18.                 else
  19.                 {
  20.                     sortie+=(chaine[i])-48;
  21.                 }
  22.             }
  23.         }
  24.         if (erreur==1) printf ("erreur recommencez\n" );
  25.     } while (erreur==1);
  26.    
  27.     return sortie;
  28. }


Message édité par pataluc le 12-06-2009 à 15:08:49
n°1894498
jowhite
Posté le 12-06-2009 à 14:56:05  profilanswer
 

Okay mais pour la ligne 10? ça veut dire quoi?

n°1894505
jowhite
Posté le 12-06-2009 à 15:01:18  profilanswer
 

En fait tu veux définir "i" juste avant de l'utiliser? Mais le compilateur n'accepte pas!
 
Sinon j'ai toujours le même affichage quand je lance le exe

Message cité 1 fois
Message édité par jowhite le 12-06-2009 à 15:02:01
n°1894507
jowhite
Posté le 12-06-2009 à 15:04:18  profilanswer
 

Aha il y a du progrès, le deuxieme nombre est demandé!
Mais même problème ensuite (j'avais oublier de mettre sortie=0)!
Je suppose que j'ai des erreurs vers la fin alors?
 
Merci à toi!


Message édité par jowhite le 12-06-2009 à 15:05:36
n°1894512
pataluc
Posté le 12-06-2009 à 15:10:41  profilanswer
 

jowhite a écrit :

En fait tu veux définir "i" juste avant de l'utiliser? Mais le compilateur n'accepte pas!

ah? dsl c'est loin le c j'ai pris les habitudes du java et du php...

mood
Publicité
Posté le 12-06-2009 à 15:10:41  profilanswer
 

n°1894513
jowhite
Posté le 12-06-2009 à 15:10:58  profilanswer
 

bah t'en fais pas!Moi je débute juste de toute façon!
 
Sinon, j'ai l'impression que ce n'est pas ça en fait!
Quand je saisie le nombre 3 pour nb1, rien ne se passe;
Par contre, si je choisi 10 il me demande le deuxieme nombre, si je rechoisi 10, le .exe plante...

Message cité 1 fois
Message édité par jowhite le 12-06-2009 à 15:12:05
n°1894514
pataluc
Posté le 12-06-2009 à 15:12:07  profilanswer
 

la tu vas avoir un problème tu définis 2 fois sortie...

n°1894515
pataluc
Posté le 12-06-2009 à 15:12:58  profilanswer
 

j'suis désolé en plus je vois pas les 2 dernières images de ton premier post (proxy de ma boite) du coup je connais pas le problème dans son ensemble...

n°1894517
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 15:14:34  profilanswer
 

pataluc a écrit :


j'ajoute algorithmiquement, le si erreur=faux n'a pas de sens.


 
C'est juste pour pas que, en cas d'erreur à un endroit de la chaine, le bloc if derrière ne soit parcouru à chaque fois jusqu'à la sortie du bloc for.
 
 
Sinon, pour jowhite, effectivement, la grosse erreur était l'absence de sortie=0 dans ton bloc do, qui fait que s'il y a une erreur, il va te redemander une saisie, qui va être ajoutée à la valeur de "sortie" donnée pendant le premier parcours ayant généré l'erreur.
Mais du coup, ça devrait marcher pour les deux nombres, pas juste pour le premier, c'est bizarre...


---------------
If you think it could look good, then I guess it should
n°1894519
jowhite
Posté le 12-06-2009 à 15:15:59  profilanswer
 

ah mince!
Je vais changer ça, comment je peux faire pour que tu puisse voir le reste du problème?

n°1894520
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 15:16:40  profilanswer
 

jowhite a écrit :

bah t'en fais pas!Moi je débute juste de toute façon!
 
Sinon, j'ai l'impression que ce n'est pas ça en fait!
Quand je saisie le nombre 3 pour nb1, rien ne se passe;
Par contre, si je choisi 10 il me demande le deuxieme nombre, si je rechoisi 10, le .exe plante...


 
Ca viendrait pas de ton "(strlen(chaine)-2)" qui fait que si tu entres un nombre à un seul digit, il ne passe pas dans la boucle ?


---------------
If you think it could look good, then I guess it should
n°1894521
pataluc
Posté le 12-06-2009 à 15:16:54  profilanswer
 

Turkleton a écrit :

C'est juste pour pas que, en cas d'erreur à un endroit de la chaine, le bloc if derrière ne soit parcouru à chaque fois jusqu'à la sortie du bloc for.


 
effectivement. (j'ai pas les yeux en face des trous auj moi...) mais dans ce cas la il faut pas mettre un for mais un while ca serait plus bô.

n°1894523
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 15:19:17  profilanswer
 

pataluc a écrit :


 
effectivement. (j'ai pas les yeux en face des trous auj moi...) mais dans ce cas la il faut pas mettre un for mais un while ca serait plus bô.


 
Yep, j'y ai pensé aussi, mais vu qu'il est censé traduire l'algo déjà écrit, faut pas modifier !  ;)  
En même temps, l'algo est pourri, sans le sortie=0 dans le do...while, en cas d'erreur, sortie va pas avoir la bonne valeur...


---------------
If you think it could look good, then I guess it should
n°1894524
jowhite
Posté le 12-06-2009 à 15:19:21  profilanswer
 

Je vais être franc avec vous,
Je suis en école de biologie et les cours de C qu'on a eu c'est genre 6H (+6h d'algo)... Je galère donc un peu!

Message cité 1 fois
Message édité par jowhite le 12-06-2009 à 15:20:48
n°1894526
jowhite
Posté le 12-06-2009 à 15:22:00  profilanswer
 

Turkleton, toi non plus tu ne peux pas voir le reste?

n°1894529
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 15:23:25  profilanswer
 

jowhite a écrit :

Je vais être franc avec vous,
Je suis en école de biologie et les cours de C qu'on a eu c'est genre 6H (+6h d'algo)... Je galère donc un peu!


Tu t'en sors pas mal pour si peu de formation. Peux-tu reposter l'intégralité de ton code, qu'on voit où tu en es rendu ?
 
EDIT : si, je vois bien le reste, mais je n'ai pas trop regardé, ça a l'air bon.

Message cité 1 fois
Message édité par Turkleton le 12-06-2009 à 15:24:00

---------------
If you think it could look good, then I guess it should
n°1894533
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 15:32:49  profilanswer
 

Oups, je dis n'importe quoi pour le "sortie=0" dans le do, il est bien dans l'algorithme et dans le premier code de jowhite, je me suis juste basé sur le code de pataluc, où il ne figure pas. Toutes mes confuses à l'auteur de l'algo !


---------------
If you think it could look good, then I guess it should
n°1894534
pataluc
Posté le 12-06-2009 à 15:32:56  profilanswer
 

Turkleton a écrit :


Tu t'en sors pas mal pour si peu de formation.

+1 j'avais dans ma formation des gars qui en bac+5 math appliquées et info n'auraient pas su faire ca. ^^
 


Message édité par pataluc le 12-06-2009 à 15:33:11
n°1894536
jowhite
Posté le 12-06-2009 à 15:33:05  profilanswer
 

Arf je suis bête, j'ai oublier de retirer le int sortie=0 de la boucle, en faisant ça ça marche!!!
 
Voici le tout:

Code :
  1. int saisiesure (void)
  2. {
  3.     int i, erreur;
  4.     int sortie=0;
  5.     do
  6.     {
  7.         char chaine [50];
  8.         sortie=0;
  9.         erreur=0;
  10.         scanf ("%s", &chaine);
  11.         for ( i=0; i<=(strlen(chaine)-2); i++)
  12.         {
  13.             if (erreur == 0)
  14.             {
  15.                 if ((chaine[i])<48 ||(chaine[i])>57)
  16.                 {
  17.                     erreur=1;
  18.                 }
  19.                 else
  20.                 {
  21.                     sortie+=(chaine[i])-48;
  22.                 }
  23.             }
  24.         }
  25.         if (erreur==1) printf ("erreur recommencez\n" );
  26.     } while (erreur==1);
  27.  
  28.     return (sortie);
  29. }
  30. int main (void)
  31. {
  32.     int nb1, nb2, pgcd, ppcm, temp1, temp2;
  33.     ppcm=0;
  34.     printf("1er nombre\n" );
  35.     nb1= saisiesure();
  36.     printf("2er nombre\n" );
  37.     nb2= saisiesure();
  38.     if (nb1<nb2)
  39.     {
  40.                 temp1=nb1;
  41.                 temp2=nb2;
  42.     }
  43.     else
  44.     {
  45.         temp2=nb1;
  46.         temp1=nb2;
  47.     }
  48.     do
  49.     {
  50.         pgcd=temp1;
  51.         temp1=temp2%temp1;
  52.         temp2=pgcd;
  53.     } while(temp1>0);
  54.     pgcd=temp2;
  55.     ppcm=(nb1*nb2)/pgcd;
  56.     printf("le pgcd de %i et de %i est %i et le ppcm est %i\n",nb1,nb2,pgcd,ppcm);
  57.     system ("pause" );//Attendre avant de quitter le programme
  58.           return(0);//Fin du programme sans erreur
  59. }


 

Citation :

1 j'avais dans ma formation des gars qui en bac+5 math appliquées et info n'auraient pas su faire ca.

A ce point? ^^

Message cité 1 fois
Message édité par jowhite le 12-06-2009 à 15:50:44
n°1894538
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 15:37:22  profilanswer
 

jowhite a écrit :

Arf je suis bête, j'ai oublier de retirer le int sortie=0 de la boucle, en faisant ça ça marche!!!


Rhaaa non, justement ! T'as pas lu mes 5 derniers posts ???  :D  
 
En fait (faudrait vraiment que tu redonnes le code en entier par contre), si tu enlèves le "sortie=0" de la boucle do...while, à chaque fois que tu vas entrer une saisie erronée, il va garder en mémoire ce qui a précédemment été mis dans ta variable sortie.
 
Ex : je rentre "1a2" dans la première saisie. Il va mettre le "1" dans sortie, puis va détecter une erreur et redemander une saisie. Je saisis "12" cette fois, et ben il va me l'ajouter au "1" qu'il y a déjà dans "sortie", et me donner donc "13".


---------------
If you think it could look good, then I guess it should
n°1894539
jowhite
Posté le 12-06-2009 à 15:39:47  profilanswer
 

Ah mince c'était l'autre qu'il fallait enlever?!
 
Quand j'enlève celui qui n'est pas dans la boucle, le compilateur me dit que la variable sortir n'est pas défini
 

Message cité 1 fois
Message édité par jowhite le 12-06-2009 à 15:42:19
n°1894543
pataluc
Posté le 12-06-2009 à 15:44:49  profilanswer
 

il faut que tu laisse le "int sortie" avant le "do", mais que tu remette sortie à 0 après le do...

n°1894544
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 15:45:17  profilanswer
 

jowhite a écrit :

Ah mince c'était l'autre qu'il fallait enlever!


Plus simplement, j'aurais laissé les deux, mais j'aurais juste enlevé le "int" devant celui qui est dans la boucle do/while, pour que sortie ne soit pas déclaré deux fois. Après, qu'une valeur lui soit affectée plusieurs fois, c'est pas grave, c'est même tout à fait normal.
 
Je ne sais pas ce qu'on t'a dit mais moi en C, je déclare toujours toutes mes variables au début de ma procédure. Ça évite ce genre de désagréments, et de ne plus savoir si une variable a été déclarée ou pas, et si oui, où.
 
EDIT : rha grillé

Message cité 1 fois
Message édité par Turkleton le 12-06-2009 à 15:45:44

---------------
If you think it could look good, then I guess it should
n°1894546
jowhite
Posté le 12-06-2009 à 15:48:05  profilanswer
 

Ah okay, mais le truc:
J'ai entré 15 pour le premier, et 20 pour le deuxieme et il me sort:
le pgcd de 4199552 et de 4199552 est de 4199552 et le ppcm est 262

n°1894549
jowhite
Posté le 12-06-2009 à 15:49:39  profilanswer
 

Turkleton a écrit :


 
 
Je ne sais pas ce qu'on t'a dit mais moi en C, je déclare toujours toutes mes variables au début de ma procédure. Ça évite ce genre de désagréments, et de ne plus savoir si une variable a été déclarée ou pas, et si oui, où.
 


 
Oui c'est ce que mon prof m'a dit

n°1894550
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 15:51:23  profilanswer
 

jowhite a écrit :

Ah okay, mais le truc:
J'ai entré 15 pour le premier, et 20 pour le deuxieme et il me sort:
le pgcd de 4199552 et de 4199552 est de 4199552 et le ppcm est 262


 
Haha, ça avance en tout cas !  :sarcastic:  
Code complet et corrigé please


---------------
If you think it could look good, then I guess it should
n°1894551
jowhite
Posté le 12-06-2009 à 15:51:59  profilanswer
 

Bon c'est bizarre, avec ce code:

Code :
  1. i#include <conio.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. /*Fonction saisiesure*/
  5. int saisiesure (void)
  6. {
  7.     int i, erreur;
  8.     int sortie=0;
  9.     do
  10.     {
  11.         char chaine [50];
  12.          sortie=0;
  13.         erreur=0;
  14.         scanf ("%s", &chaine);
  15.         for ( i=0; i<=(strlen(chaine)-2); i++)
  16.         {
  17.             if (erreur == 0)
  18.             {
  19.                 if ((chaine[i])<48 ||(chaine[i])>57)
  20.                 {
  21.                     erreur=1;
  22.                 }
  23.                 else
  24.                 {
  25.                     sortie+=(chaine[i])-48;
  26.                 }
  27.             }
  28.         }
  29.         if (erreur==1) printf ("erreur recommencez\n" );
  30.     } while (erreur==1);
  31.  
  32.     return (sortie);
  33. }
  34. int main (void)
  35. {
  36.     int nb1, nb2, pgcd, ppcm, temp1, temp2;
  37.     ppcm=0;
  38.     printf("1er nombre\n" );
  39.     nb1= saisiesure();
  40.     printf("2er nombre\n" );
  41.     nb2= saisiesure();
  42.     if (nb1<nb2)
  43.     {
  44.                 temp1=nb1;
  45.                 temp2=nb2;
  46.     }
  47.     else
  48.     {
  49.         temp2=nb1;
  50.         temp1=nb2;
  51.     }
  52.     do
  53.     {
  54.         pgcd=temp1;
  55.         temp1=temp2%temp1;
  56.         temp2=pgcd;
  57.     } while(temp1>0);
  58.     pgcd=temp2;
  59.     ppcm=(nb1*nb2)/pgcd;
  60.     printf("le pgcd de %d et de %d est %d et le ppcm est %d\n",nb1,nb2,pgcd,ppcm);
  61.     system ("pause" );//Attendre avant de quitter le programme
  62.           return(0);//Fin du programme sans erreur
  63. }


 
 
 
 j'obtiens :"le pgcd de 1 et de 2 est de 1 et le ppcm est 2"


Message édité par jowhite le 12-06-2009 à 16:01:53
n°1894554
pataluc
Posté le 12-06-2009 à 15:54:11  profilanswer
 

moi je comprends pas cette manière de lire un nombre... ya un transtypage qui va pas marcher la non? et puis l'algo s'il lit 15, il voit 1 et ensuite il ajoute 5, ca fait pas 15 mais 6, non?

n°1894556
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 15:55:03  profilanswer
 

Rhooo, la grosse erreur de débutant que j'avais même pas vue, honte à moi  :sweat:  
 
Dans un printf, pour afficher un int, il faut mettre %d, et pas %i (je sais, c'est pas logique) !
 
Allez, prochain essai, tu nous fait péter le champagne de la victoire de l'homme sur le code  [:harry rausey]


---------------
If you think it could look good, then I guess it should
n°1894559
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 15:57:43  profilanswer
 

pataluc a écrit :

moi je comprends pas cette manière de lire un nombre... ya un transtypage qui va pas marcher la non? et puis l'algo s'il lit 15, il voit 1 et ensuite il ajoute 5, ca fait pas 15 mais 6, non?


 
Non, j'ai mis du temps à comprendre aussi, mais il semblerait que chaine[x] donne une valeur en ascii si affectée à un int (comme "sortie" ici), je ne savais pas ça mais ça peut être bien pratique. Du coup, 1=code ascii 49 donc,  sortie+=(49)-48; va bien donner 1
 
EDIT : ...mais ça change pas le fait que tu aies raison, le boulay moi

Message cité 1 fois
Message édité par Turkleton le 12-06-2009 à 15:58:31

---------------
If you think it could look good, then I guess it should
n°1894560
pataluc
Posté le 12-06-2009 à 15:58:32  profilanswer
 

Turkleton a écrit :

 

Non, j'ai mis du temps à comprendre aussi, mais il semblerait que chaine[x] donne une valeur en ascii si affectée à un int (comme "sortie" ici), je ne savais pas ça mais ça peut être bien pratique. Du coup, 1=code ascii 49 donc,  sortie+=(49)-48; va bien donner 1


je suis d'accord, ca marche pour un nombre à 1 chiffre, mais sinon?

 

EDIT: j'avais pas vu ton edit... ^^

 

du coup pour moi faudrait multiplier sortie par 10 à chaque itération du for... sauf si ya un mécanisme en c que je connais pas et qui fait de la magie...


Message édité par pataluc le 12-06-2009 à 15:59:47
n°1894563
jowhite
Posté le 12-06-2009 à 15:59:48  profilanswer
 

Arf sorry mais c'est toujours pas ça!
 
J'ai le même résultat!
 
En tous cas, merci , on touche au but!


Message édité par jowhite le 12-06-2009 à 16:01:14
n°1894564
pataluc
Posté le 12-06-2009 à 16:00:00  profilanswer
 

ca donne quoi?

n°1894566
jowhite
Posté le 12-06-2009 à 16:03:05  profilanswer
 

Le même résultat

n°1894575
Turkleton
I don't quite understand you
Posté le 12-06-2009 à 16:15:29  profilanswer
 

jowhite a écrit :

Le même résultat


Honnêtement, pour moi, ton code me semble bon. Si ça ne retourne pas les valeurs prévues, tant pis, le sujet étant juste de traduire l'algorithme qu'on t'a donné, ce qui est fait. Si l'algo ne fonctionne pas à la base, c'est pas ton problème  :ange:  
 
Après, si tu veux vraiment le faire fonctionner, je pense qu'il va falloir modifier l'algo de base, notamment la ligne "sortie+=(chaine[i])-48;" qui, comme l'a noté pataluc, ne donne pas le résultat escompté.
 
EDIT : je viens de voir que tu avais toujours ton "strlen(chaine)-2" dans ton instruction for. Pourquoi "-2" ? Ça devrait être "-1". Si tu entres un nombre de deux chiffres dans ton scanf, strlen(chaine) va te donner la valeur 2 (il ne compte pas le /0 de fin). Donc il ne va y avoir qu'une seule itération de ta boucle for alors qu'il y a deux chiffres à traiter.


Message édité par Turkleton le 12-06-2009 à 16:41:39

---------------
If you think it could look good, then I guess it should
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  Traduction d'un algorithme en C

 

Sujets relatifs
Programmation C++ p4Syntaxe étrange en C++ avec GCC (résolu)
Développeurs passant à C#, relativement néophytes en POO[ Language C ] Copie du contenu d'un fichier dans un tableau.
[Resolu]Serveur Multi Thread en CLancer l'appli heure/zone horaire windows depuis C++
Langage C, Projet, Puissance 4 en langage C[C] Fork et Pipe
[C] Image ne s'affiche pas correctement sur un LCDSuppression auto des commentaires C/C++
Plus de sujets relatifs à : Traduction d'un algorithme en C


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