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   -
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
Configuration: Windows XP
Firefox 2.0.0.16

3 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  3. darkchristophetd Messages postés 1100 Date d'inscription   Statut Contributeur Dernière intervention   459
     
    super merci bcp !
    1