IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Plus grand diviseur commun


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Plus grand diviseur commun
    bonjour, je cherche a calculer le plus grand diviseur comun de deux reel... a priori facile mais g des ereurs de compilations . Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
     
    int Pgcd(int A,int B){
        int R ;
        if (A >= B){
              do {
                  R=A%B ;
                  } 
                while ( R!=0 );
                return R;
                   }
    int main() {
        int X,Y;
        printf( " entrer deux entiers ");
        scanf("%d%d",&X,&Y);
        printf(" voici le pgcd",Pgcd(X,Y));
     
     
    return 0;
    }
    d'avance merci pour votre aide §

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Salut,

    Ton code ne compile pas car il manque une accolade fermante dans ta fonction. As-tu vraiment pris la peine de chercher ton erreur ?

    Le moyen le plus simple de coder la fonction PGCD est d'utiliser l'algorithme d'Euclide :
    « Soient deux entiers naturels a et b, on commence par tester si b est nul.
    Si oui, le PGCD est a. Sinon, on calcule c, le reste de la division de a par b (opérateur modulo). On remplace a par b, b par c et on recommence tant que le PGCD n'est pas trouvé. »

    La fonction peut s'écrire de manière « amusante » en une seule ligne (un ternaire récursif) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
     
    int pgcd(int a, int b)
    {
        return b ? pgcd(b, a % b) : a;
    }
     
    int main(void)
    {
        int a, b;
        puts("Entrez deux nombres entiers positifs :");
        scanf("%d %d", &a, &b);
        printf("Le PGCD de %d et %d est %d\n", a, b, pgcd(a, b));	
        return 0;
    }
    Tu peux bien sûr implémenter l'algorithme d'une meilleure façon.
    Voici quelques pistes à explorer :
    • Ajouter la gestion des entiers négatifs en entrée
    • La fonction devrait retourner un unsigned int, un PGCD ne peut pas être négatif
    • Faire une fonction itérative au lieu de récursive...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Merci !!!
    Merci haze pour cet éclaircissement...Le problème c'est que le code ne fait pas ce qu'on lui demande car il s'arrête au fait de rentrer deux valeurs positifs. Et je ne sais pourquoi il affiche pas le pgcd .

  4. #4
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Dans ton code, c'est tout à fait normal qu'il n'affiche pas le PGCD, tout simplement parce que tu ne lui demande pas de l'afficher !

    Ton code ne peut pas fonctionner. Tu oublies de fermer des accolades que tu ouvres. Si tu A qui est plus grand que B, tu ne renvois aucun résultat (ce qui est incorrect).

    De plus, le Pgcd ne s'affiche pas tout simplement parce que tu ne l'a pas demandé...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        printf(" voici le pgcd",Pgcd(X,Y));
    Dans cette partie du code, tu n'indiques à aucun moment ou il doit insérer le résultat du Pgcd que tu obtiens. De plus, pour être sûr que tous les messages soit affichés à la fin du programme, on vide le buffer stdout, ce qui se fait, soit en rajoutant un \n à la fin du printf, soit par purge :
    En ce qui concerne la bonne solution, Haze. t'as donné la bonne solution.

    ++

  5. #5
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par Haze. Voir le message
    La fonction devrait retourner un unsigned int
    Pourquoi?

    Citation Envoyé par ouissaou Voir le message
    bonjour, je cherche a calculer le plus grand diviseur comun de deux reel...
    Deux réels, tu es sûr?

Discussions similaires

  1. Calcul du Plus Grand Commun Diviseur (PGCD)
    Par hpalpha dans le forum Contribuez
    Réponses: 0
    Dernier message: 13/02/2011, 18h21
  2. Calcul du plus grand diviseur commun de deux entiers relatifs
    Par odsen.s dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 18h21
  3. Plus grand diviseur commun
    Par najwakhalid dans le forum Mathématiques
    Réponses: 2
    Dernier message: 24/10/2009, 16h03
  4. Algorithme d'Euclide et "plus grand commun diviseur"
    Par Jerome Briot dans le forum Téléchargez
    Réponses: 0
    Dernier message: 04/09/2009, 19h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo