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 :

Besoin d'aide pour un programme de PGCD


Sujet :

C

  1. #1
    Membre du Club Avatar de Shapsed
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Points : 49
    Points
    49
    Par défaut Besoin d'aide pour un programme de PGCD
    J'aurais besoin d'un peu d'aide sur programme que j'ai fait en C.
    C'est un programme avec lequel vous devez entrer deux entiers naturels contenus dans les variables nombre_A et nombre_B afin d'avoir leur PGCD grâce à des divisions à reste successives.
    J'ai une erreur à la derniere ligne qui m'empêche de lancer le programme mais il m'est impossible d'identifier sa nature.
    Si vous pouvez détecter l'erreur en question.. et m'indiquer comment rectifier le tir ce serait vraiment génial!

    Merci d'avance.

    Voici le 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    #include <stdio> 
    #include <stdlib> 
     
    int main(int argc, char *argv[]) 
    { 
        unsigned long nombre_A = 0; // On initialise la variable A qui contiendra la plus grande valeur de l'opération 
        unsigned long nombre_B = 0; // On initialise la variable B  qui contiendra la plus petite valeur de l'opération 
     
        // On initialise 4 variables aptes à contenir le reste d'un modulo ou une autre valeur 
        unsigned long nombre_Q = 0; 
        unsigned long nombre_R = 0; 
        unsigned long nombre_S = 0; 
        unsigned long nombre_T = 0; 
     
        char finDeBoucle = 0; 
        char recommencer = 0; // On initialise la variable recommencer 
     
      printf ("Bienvenue dans le calculateur de PGCD!\nProgramme de Shapsed - http://shapsed.free.fr/ \n\n\n"); // Message de bienvenue 
     
      do // Boucle principale 
      { 
             printf ("Entrez un entier Naturel A > B > 0 \n"); // On propose d'entrer un nombre qui correspondra à la variable A (nombre_A) 
             scanf ("%ld", &nombre_A); // On saisit la variable A (nombre_A) 
     
             printf ("Entrez un entier Naturel B > 0 mais inferieur ou egal a A \n"); // On propose d'entrer un nombre qui correspondra à la variable B (nombre_B) 
             scanf ("%ld", &nombre_A); // On saisit la variable B (nombre_B) 
     
             while (finDeBoucle == 1) 
             { 
                     nombre_Q = nombre_A % nombre_B; // Reste de la division de A par B contenu dans la variable Q 
                   } 
                   if (nombre_Q == 0) 
                   { 
                                 printf ("Le PGCD de %ld et %ld est %ld.", nombre_A, nombre_B, nombre_B); 
                                 finDeBoucle++;         
                   } 
                     else 
                   { 
                     nombre_R = nombre_B % nombre_Q; // Reste de la division de B par Q contenu dans la variable R 
                   }             
                   if (nombre_R == 0) 
                   { 
                                 printf ("Le PGCD de %ld et %ld est %ld.", nombre_A, nombre_B, nombre_Q); 
                                 finDeBoucle++; 
                   } 
                     else 
                   { 
                     nombre_S = nombre_Q % nombre_R; // Reste de la division de Q par R contenu dans la variable S 
                   } 
                   if (nombre_S == 0) 
                   { 
                                 printf ("Le PGCD de %ld et %ld est %ld.", nombre_A, nombre_B, nombre_R); 
                                 finDeBoucle++; 
                   } 
                     else 
                   { 
                     nombre_T = nombre_R % nombre_S; // Reste de la division de R par S contenu dans la variable T 
                   if (nombre_T == 0) 
                   { 
                                 printf ("Le PGCD de %ld et %ld est %ld.", nombre_A, nombre_B, nombre_S); 
                                 finDeBoucle++; 
                   } 
     
      printf ("Voulez vous recommencer? \t 0.Non \t 1.Oui \n"); 
      scanf ("%ld", &recommencer);         
      } while (recommencer == 1); 
     
      finDeBoucle = 0; 
     
      system("PAUSE");    
      return 0; 
    }

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    aparement c'est juste des erreurs au niveau des accolades (mal placées / manquantes)

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        unsigned long nombre_A = 0; // On initialise la variable A qui contiendra la plus grande valeur de l'opération
        unsigned long nombre_B = 0; // On initialise la variable B  qui contiendra la plus petite valeur de l'opération
     
        // On initialise 4 variables aptes à contenir le reste d'un modulo ou une autre valeur
        unsigned long nombre_Q = 0;
        unsigned long nombre_R = 0;
        unsigned long nombre_S = 0;
        unsigned long nombre_T = 0;
     
        char finDeBoucle = 0;
        char recommencer = 0; // On initialise la variable recommencer
     
        printf ("Bienvenue dans le calculateur de PGCD!\nProgramme de Shapsed - http://shapsed.free.fr/ \n\n\n"); // Message de bienvenue
     
        do // Boucle principale
        {
            printf ("Entrez un entier Naturel A > B > 0 \n"); // On propose d'entrer un nombre qui correspondra à la variable A (nombre_A)
            scanf ("%ld", &nombre_A); // On saisit la variable A (nombre_A)
     
            printf ("Entrez un entier Naturel B > 0 mais inferieur ou egal a A \n"); // On propose d'entrer un nombre qui correspondra à la variable B (nombre_B)
            scanf ("%ld", &nombre_A); // On saisit la variable B (nombre_B)
     
            while (finDeBoucle == 1)
            {
                nombre_Q = nombre_A % nombre_B; // Reste de la division de A par B contenu dans la variable Q
     
                if (nombre_Q == 0)
                {
                    printf ("Le PGCD de %ld et %ld est %ld.", nombre_A, nombre_B, nombre_B);
                    finDeBoucle++;
                }
                else
                {
                    nombre_R = nombre_B % nombre_Q; // Reste de la division de B par Q contenu dans la variable R
                }
                if (nombre_R == 0)
                {
                    printf ("Le PGCD de %ld et %ld est %ld.", nombre_A, nombre_B, nombre_Q);
                    finDeBoucle++;
                }
                else
                {
                    nombre_S = nombre_Q % nombre_R; // Reste de la division de Q par R contenu dans la variable S
                }
                if (nombre_S == 0)
                {
                    printf ("Le PGCD de %ld et %ld est %ld.", nombre_A, nombre_B, nombre_R);
                    finDeBoucle++;
                }
                else
                {
                    nombre_T = nombre_R % nombre_S; // Reste de la division de R par S contenu dans la variable T
                }
                if (nombre_T == 0)
                {
                    printf ("Le PGCD de %ld et %ld est %ld.", nombre_A, nombre_B, nombre_S);
                    finDeBoucle++;
                }
     
                printf ("Voulez vous recommencer? \t 0.Non \t 1.Oui \n");
                scanf ("%ld", &recommencer);
            }
        }
        while (recommencer == 1);
     
        finDeBoucle = 0;
     
        system("PAUSE");
        return 0;
     
    }

  3. #3
    Membre du Club Avatar de Shapsed
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Points : 49
    Points
    49
    Par défaut
    Ah oui merci,
    Mon deuxième problème est que le résultat des calculs ne s'affiche pas, alors que ce genre de ligne devrait l'afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("Le PGCD de %ld et %ld est %ld.", nombre_A, nombre_B, nombre_B);
    Quel manquement peut être à l'origine de cette erreur?


  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Ton calcul du PGCD est bien compliqué. Il faut effectivement faire des divisions successives mais tu ne peux pas coder toutes ces divisions les unes derrière les autres. Voilà ce que j'ai écrit à la place en vitesse...
    A toi de mettre ce qu'il te faut dans le main. Il serait bien que tu sépares interaction avec l'utilisateur et calcul propre lié au PGCD.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #include <stdio.h>
    #include <stdlib.h>
     
    /* Version récursive */
    unsigned int pgcd1 (unsigned int a, unsigned int b) {
      unsigned int c = a % b;
      if (c == 0) {
        return b;
      } else {
        return pgcd1 (b, c);
      }
    }
     
    /* Version itérative */
    unsigned int pgcd2 (unsigned int a, unsigned int b) {
      unsigned int c = a % b;
      while (c != 0) {
        a = b;
        b = c;
        c = a % b;
      }
      return b;
    }
     
    int main (int argc, char **argv) {
      printf ("PGCD1(500,100)  = %d\n",  pgcd1(500,100));
      printf ("PGCD2(8136,492) = %d\n", pgcd2(8136,492));
      return 0;
    }

  5. #5
    Membre du Club Avatar de Shapsed
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Points : 49
    Points
    49
    Par défaut
    Merci de m'avoir éclairé à ce sujet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'aide pour mon programme
    Par pouyoudu17 dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 28/05/2007, 23h18
  2. Réponses: 4
    Dernier message: 24/04/2007, 11h18
  3. [débutant] besoin d'aide pour un programme
    Par acdchornet dans le forum C++
    Réponses: 12
    Dernier message: 26/10/2006, 23h32
  4. [Free Pascal] Besoin d'aide pour un programme
    Par ricomix dans le forum Free Pascal
    Réponses: 3
    Dernier message: 04/06/2006, 18h01

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