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: 863 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: 863 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 |
|
|
|