Algorithme

Bonsoir
J'ai fait un algorithme d'Euclide (PGCD) svp, pourriez-vous me le corriger ?

Algorithme PGCD; 
Var A, B : réel; 
      m, r : entier; 
Debut 
  Ecrire("Introduisez deux nombres: "); 
  Lire(A, B); 
  Si (B=0) alors 
     debut 
       Ecrire ("Erreur de saisie"); 
      fin; 
   Sinon 
      debut 
         Si (A=B) alors 
           debut 
             Ecrire("PGCD(", A, ";", B, ")=", A); 
           fin; 
        Sinon 
          debut 
             si (A mod B) alors 
               debut 
                 Ecrire("PGCD(",A, ";", B , ")=", B); 
                fin; 
             Sinon 
               debut 
                 Repeter 
                    debut 
                     r <--- (A mod B); 
                     A <--- B; 
                     B <--- r; 
                     m <--- (A mod B); 
                     fin; 
                 jusqu'à (m=0) 
               Ecrire ("PGCD(", A, ";", B, ")=", B); 
             fin; 
           fin; 
        fin; 
FIN.


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,
    voici le code en C : rien n'est compliqué, c'est juste le langage qui change :

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int a, b;
        int m, r;
    
        printf("Introduisez deux nombres :\n");
        scanf("%d", &a);
        scanf("%d", &b);
    
        if(b == 0)
        {
            printf("Erreur de saisie\n");
        }
        else
        {
            if(a == b)
            {
                printf("PGCD(%d;%d)=%d", a, b, a);
            }
            else
            {
                if(a % b == 0)
                {
                    printf("PGCD(%d;%d)=%d", a, b, b);
                }
                else
                {
                    do
                    {
                        r = a % b;
                        a = b;
                        b = r;
                        m = a % b;
                    } while(m != 0);
                    printf("PGCD(%d;%d)=%d", a, b, b); // Erreur dans l'affichage : a et b ne sont plus ceux du départ
                }
            }
        }
    
        return 0;
    }
    


    Ensuite, j'ai repéré une petite erreur d'affichage : lors de ton affichage de a et b, il faut vérifier que a et b sont encore ceux du départ
    1. Tout d'abord, ta question n'a rien à voir avec du C, non ?
      Ensuite, tu pourais indenter un peu ton algo :

      Algorithme PGCD; 
      	Var A, B : réel; 
      	m, r : entier; 
      	Debut 
      		Ecrire("Introduisez deux nombres: "); 
      		Lire(A, B); 
      		Si (B=0) alors 
      		debut 
      			Ecrire ("Erreur de saisie"); 
      		fin; 
      		Sinon 
      		debut 
      			Si (A=B) alors 
      			debut 
      				Ecrire("PGCD(", A, ";", B, ")=", A); 
      			fin; 
      		Sinon 
      		debut 
      			si (A mod B) alors 
      				debut 
      				Ecrire("PGCD(",A, ";", B , ")=", B); 
      			fin; 
      			Sinon 
      			debut 
      				Repeter 
      				debut 
      					r <--- (A mod B); 
      					A <--- B; 
      					B <--- r; 
      					m <--- (A mod B); 
      				fin; 
      				jusqu'à (m=0) 
      				Ecrire ("PGCD(", A, ";", B, ")=", B); 
      			fin; 
      		fin; 
      	fin; 
      FIN.
      


      Ensuite, quand tu met "si (A mod B) alors ", tu cherches à tester quand A modulo B vaut 0 ? car je ne vois aucun test (ou alors avec 1 en programmation)

      De plus, tu pourquoi A et B sont réels ? Tu fais le PGCD de deux nombres réels avec un reste entier ?
      1. Merci beaucoup Smiley32, non c'est juste un algorithme simple en français, je ne l'ai pas traduit en langage c..
        je ne savais pas comment rendre l'algorithme plus clair comme vous l'avez fait, autrement je l'aurai modifié, merci pour votre aide
        oui j'ai oublié le zero dans ma condition (A mod B=0) sinon, j'ai essayé de le programmer en c et de l'exécuter avec le logiciel devc++, malgré qu'il n'y a pas d'erreurs son exécution ne donne aucun résultat à part celui de l'affichage du message "erreur de saisie" Je ne vois pas où est le problème, pourriez vous m'aider à retrouver mon erreur svp ...
      2. Contributeur
        Dans ce cas, c'est plutôt le code en C qu'il faudrait nous donner pour qu'on puisse te dire ce qui ne va pas.
        Et n'oublie pas d'utiliser la balise <code c>.
        Exemple :
        <code c>
        ici tu mets ton code
        </code>