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