Algorithme

tulipe96 Messages postés 7 Statut Membre -  
Smiley32 Messages postés 157 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Smiley32 Messages postés 157 Date d'inscription   Statut Membre Dernière intervention   23
     
    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 ?
    0
    1. tulipe96 Messages postés 7 Statut Membre
       
      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 ...
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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>
      0
  2. Smiley32 Messages postés 157 Date d'inscription   Statut Membre Dernière intervention   23
     
    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
    0