Problème en C

Fermé
darkchristophetd Messages postés 1100 Date d'inscription mardi 26 février 2008 Statut Contributeur Dernière intervention 14 novembre 2010 - 27 sept. 2008 à 10:58
darkchristophetd Messages postés 1100 Date d'inscription mardi 26 février 2008 Statut Contributeur Dernière intervention 14 novembre 2010 - 27 sept. 2008 à 17:11
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 :
#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

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
27 sept. 2008 à 12:09
Salut,

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;
}
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
27 sept. 2008 à 12:32
Re,

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
1
darkchristophetd Messages postés 1100 Date d'inscription mardi 26 février 2008 Statut Contributeur Dernière intervention 14 novembre 2010 459
27 sept. 2008 à 17:11
super merci bcp !
1