Problème en C
darkchristophetd
Messages postés
1100
Date d'inscription
Statut
Contributeur
Dernière intervention
-
darkchristophetd Messages postés 1100 Date d'inscription Statut Contributeur Dernière intervention -
darkchristophetd Messages postés 1100 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un problème sur un programme que je voudrais faire en C :
c'est un programme qui calcule le pgcd de deux nombres entrés.
(voir ici : http://fitoussi.serge.free.fr/Troisieme/pgcd.htm#pgcd pour le pgcd )
voici le code :
mais le programme ne marche pas : il me demande le nombre 1 puis affiche "0".
Pouvez vous me dire où est l'erreur ??
merci beaucoup
J'ai un problème sur un programme que je voudrais faire en C :
c'est un programme qui calcule le pgcd de deux nombres entrés.
(voir ici : http://fitoussi.serge.free.fr/Troisieme/pgcd.htm#pgcd pour le pgcd )
voici le code :
#include <stdio.h> #include <stdlib.h> long pgcd (long a,long b,long r); int main(int argc, char *argv[]) { long r = 0, a = 0, b = 0; printf("Entrez les deux nombres dont vous voulez \nle PGCD (en commençant par le plus petit)"); scanf("%ld", &a); //on entre le premier nombre ( le + petit ) et on le stocke dans a printf("\n Puis le deuxième."); scanf("ld", &b);//pareil avec le + grand b printf("\n %ld", b);//puis on affiche le pgcd calculé dans la fonction (b) system("PAUSE"); return 0; } long pgcd (long a,long b,long r) //fonction de calcul du PGCD { r = b % a; //reste de b par a while ( r != 0) //tant que le reste n'est pas égal à zéro { b = a; //on met la valeur de a dans b a = r;//et la valeur de r dans a r = b % a;/*et la valeur du reste de b par a dans r, jusqu'à ce que le reste (r) = 0. Quand r = 0, le pgcd est égal à la valeur actuelle de b*/ } return b; }
mais le programme ne marche pas : il me demande le nombre 1 puis affiche "0".
Pouvez vous me dire où est l'erreur ??
merci beaucoup
3 réponses
Salut,
regarde ce code
regarde ce code
#include <stdio.h> #include <stdlib.h> long pgcd (long a,long b); int main(int argc, char *argv[]) { long a = 0, b = 0; printf("Entrez les deux nombres dont vous voulez \nle PGCD (en commençant par le plus petit)"); scanf("%ld", &a); getchar(); printf("\n Puis le deuxième."); scanf("%ld", &b); printf("\n %ld", pgcd(a,b)); system("PAUSE"); return 0; } long pgcd (long a,long b) //fonction de calcul du PGCD { long r = 1; while ( r != 0) //tant que le reste n'est pas égal à zéro { r = b % a; b = a; a = r; } return b; }
Re,
les erreurs
1. tu as oublié un %
ici scanf("ld", &b);
tu dois écrire
2. tu n'appelles pas ta fonction pour afficher pgcd
printf("\n %ld", b);//puis on affiche le pgcd calculé dans la fonction (b)
ça n'affiche que la valeur de b et pas le retour de la fonction
donc j'ai mis cette ligne
3. la variable r (pour le reste)
la variable r n'est pas passer à la fonction
elle est juste une variable locale qu'on utilise seulement dans la fonction
main n'a pas besoin de voir la variable r
dans la fonction la variable on l'initialise à 1 juste pour entrer dans la boucle
tout le calcul se fera dans la boucle
les erreurs
1. tu as oublié un %
ici scanf("ld", &b);
tu dois écrire
scanf("%ld", &b);
2. tu n'appelles pas ta fonction pour afficher pgcd
printf("\n %ld", b);//puis on affiche le pgcd calculé dans la fonction (b)
ça n'affiche que la valeur de b et pas le retour de la fonction
donc j'ai mis cette ligne
printf("\n %ld", pgcd(a,b));
3. la variable r (pour le reste)
la variable r n'est pas passer à la fonction
elle est juste une variable locale qu'on utilise seulement dans la fonction
main n'a pas besoin de voir la variable r
dans la fonction la variable on l'initialise à 1 juste pour entrer dans la boucle
tout le calcul se fera dans la boucle