Algorithme

Fermé
tulipe96 Messages postés 7 Date d'inscription samedi 12 décembre 2015 Statut Membre Dernière intervention 28 décembre 2015 - Modifié par baladur13 le 9/01/2016 à 14:19
Smiley32 Messages postés 155 Date d'inscription lundi 7 juillet 2014 Statut Membre Dernière intervention 10 février 2016 - 9 janv. 2016 à 14:18
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

Smiley32 Messages postés 155 Date d'inscription lundi 7 juillet 2014 Statut Membre Dernière intervention 10 février 2016 23
27 déc. 2015 à 16:35
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
tulipe96 Messages postés 7 Date d'inscription samedi 12 décembre 2015 Statut Membre Dernière intervention 28 décembre 2015
28 déc. 2015 à 13:41
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
28 déc. 2015 à 16:11
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
Smiley32 Messages postés 155 Date d'inscription lundi 7 juillet 2014 Statut Membre Dernière intervention 10 février 2016 23
9 janv. 2016 à 14:18
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