Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Calak
Inscrit le: 03 Avr 2003 Messages: 122 Localisation: Au pays des frites ^___^
|
Posté le: 14 Oct 2003 13:07 Sujet du message: il m'?nerve ce PGCD |
|
|
Bon, je suisen train de faire un exo pour l'?cole ( recherche du plus grand diviseur commun), et je bloque sur un code...
je capte vraiment pas, j'ai beau faire toutes les v?rif que je veux ?a marche pas...
En fait, la boucle ne s'?x?cute pas, et j'ai pas la moindre id?e de la cause.
par exemple, je teste avec 20 et 15
j'ai tap? un printf de d?bug dans le doute, mais il me retourne bien les valeur que j'attend...
Le d?bug avant la boucle me retourne 1 - 0 - 1 donc la boucle devrait s'ex?cuter...
qqun peut m'?clairer sur ce probl?me?
Code: | #include <stdio.h>
int main(void){
int a,b,c;
scanf("%d%d",&a, &b);
if (a <= b)
{
c = a;
}
else
{
c = b;
}
printf("#DEBUG %d - %d - %d\n",a % c != 0, b % c != 0 , c > 0);
while(a % c != 0 && b % c != 0 && c > 0)
{
c--;
}
printf("le PGCD de %d et %d = %d\n",a,b,c);
return 0;
} |
j'aurais jamais cru avoir un probs un jour avec une boucle aussi simple
surtout qu'avant ?a j'ai enchain? plus de 30 exo sur les boucles, sans le moindre probl?me ( et des plus complexe... )>_< _________________
un grand sage a écrit: |
Heureux l'?tudiant qui comme l'eau suit son cours en restant dans son lit
|
|
|
Revenir en haut de page |
|
|
Fremen^SF GDB des Shit Fliez
Inscrit le: 21 Mar 2003 Messages: 849 Localisation: Versailles
|
Posté le: 14 Oct 2003 15:06 Sujet du message: |
|
|
En fait Calako, c'est bien ta boucle while qui cause probl?me.
Code: | while(a % c != 0 && b % c != 0 && c > 0) |
signifie :
tant que ( a % c != 0 ET b % c != 0 ET c > 0 ) continuer la boucle
Or, en logique, 1 ET 0 ET 1 = 0
Donc forc?ment ta boucle s'arr?te d?s le d?part (puisque b % c == 0).
Ce qui ne va pas, c'est que dans ton while, tu dois ?crire le contraire de "c divise b ET c divise a", et le contraire est "c ne divise pas b OU c ne divise pas a". Si on se comprend ^^ En fait, un truc correct ?a donnerait ?a :
tant que (( a % c != 0 OU b % c != 0 ) ET ( c > 0 )) continuer la boucle
En esp?rant que ?a t'aidera, en tout cas n'h?site pas ? repasser en cas de p?pin _________________
|
|
Revenir en haut de page |
|
|
Calak
Inscrit le: 03 Avr 2003 Messages: 122 Localisation: Au pays des frites ^___^
|
Posté le: 14 Oct 2003 16:47 Sujet du message: |
|
|
bon je vais tester, mais je t'explique pk je pensais que mon raisonnement ?tait juste ( tu pourra p-e me dire o? est mon erreur )
donc je reprend la ligne:
(a % c != 0 && b % c != 0 && c > 0)
prenons : a=20, b=15, c=15
(a % c != 0 && b % c != 0 && c > 0)
donc
(1 && 0 && 1) donc ( 0 )
...
...
c'est bon, j'ai compris ^^;
/me est un boulay ( (c) Moua ) _________________
un grand sage a écrit: |
Heureux l'?tudiant qui comme l'eau suit son cours en restant dans son lit
|
|
|
Revenir en haut de page |
|
|
Fremen^SF GDB des Shit Fliez
Inscrit le: 21 Mar 2003 Messages: 849 Localisation: Versailles
|
Posté le: 14 Oct 2003 17:15 Sujet du message: |
|
|
Meuh non t'es pas un boulet
Ou alors on est deux, ?a m'arrive tr?s souvent aussi de me tromper dans les boucles while. En fait d?s que je dois en ?crire une, je me la "traduit en fran?ais", en g?n?ral ?a permet d'?viter de faire des erreurs. _________________
|
|
Revenir en haut de page |
|
|
Calak
Inscrit le: 03 Avr 2003 Messages: 122 Localisation: Au pays des frites ^___^
|
Posté le: 14 Oct 2003 21:45 Sujet du message: |
|
|
le pire c'est que j'avais pas trop capt? ton texte ( c'est ?a de lire en diagonale ^^; )
mais qu'en tapant mon post j'ai capt? ce que tu voulais dire, et capt? que ce que je pensais ?tait faux ^^; _________________
un grand sage a écrit: |
Heureux l'?tudiant qui comme l'eau suit son cours en restant dans son lit
|
|
|
Revenir en haut de page |
|
|
|