Un petit programme qui calcule le pgcd via l'algorithme d' euclide :o)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 595 fois - Téléchargée 27 fois

Contenu du snippet

Salut à tous ... je suis nouveau ! cela fait 3 jours que je fait du C/C++ et je vous propose un petit code pas bien compliqué mais qui pourra peut etre donner des idées aux debutants .
C'est un programme qui calcule le pgcd de deux nombre via l'algorithme d' Euclide. Non seulement il donne le résultat , mais il donne en plus les etapes que l'on doit faire pour y arriver :o)
Merci de ne pas etre trop sévert , car c'est mon premier code :)
Il y a surement des trucs un peu tordu mais j'ai trouvé que ca marchait bien :)
J'attend vos suggestion.
Plopman

Source / Exemple :


/* par Plopman , permier programme :o) */
#include <math.h>
#include <stdio.h>
#include <iostream.h>

int main()
{

     cout << "Bienvenue :) Entre les deux nombres voullus pour obtenir :";
     cout << endl << "1)-Leurs PGCD";
     cout << endl << "2)-Les etapes de l'l'algorithme d'Euclide";
    /* on definit 2 nombres et on leur donne comme valeur 0 */
     double  nombre1;
     double nombre2;
     nombre1 = 0;
     nombre2 = 0;
     cout << endl << "";
/* Tant que les deux nombres ( nombre1 & nombre2 ) ne sont pas positifs , on recomence la boucle */
     while ((nombre1 < 1) || (nombre2 < 1) )
     {
     cout << endl << "Il faut entrer des nombres positifs et entier: ( pour quiter tapper 1)";
     cout << endl << "Entre le nombre 1: ->>";
     cin  >> nombre1;
     /* ici si on tappe 1 , c'est qu'on désir quitter */
     if (nombre1 == 1)  {
     return 0;
     }
     /* sinon on continue */
     else
     {
     cout << "Entre le nombre 2: ->>";
     cin  >> nombre2;
          }

/* Si nombre1 et nombre2 sont positif , on continue le prog. */
double  reste;
double p;
double  nbr1;
double  nbr2;
double  pgcd;
pgcd = nombre1/nombre2;
nbr1 = nombre1;
nbr2 = nombre2;
p = nombre1/nombre2;
reste = nombre1/nombre2;
/* Petit rapel sur l'l'algorithme d'Euclide ... le pgcd est le dernier reste non nul d'un serie de calcul, ici le reste est reste et l'avant dernier pgcd */
while ( reste >= 1)
{
pgcd = reste;
/* la fonction floor sert a prendre la partie intégrale d'un nombre a virgule */
reste = nombre1-nombre2*floor(p);
cout << endl << nombre1 << "=" << nombre2 << " X " << floor(p) << " + " << reste;
nombre1 = nombre2;
nombre2 = reste;
p = nombre1/nombre2;
}
     cout << endl << "donc Pgdc(" << nbr1 << ";" << nbr2 << ")=" << pgcd;
     cout << endl << "";
     }

}

Conclusion :


Je l'amélioerai peut être si il y a des suggestions .. Un bug subsiste , si on tappe un nombre pas entier mais je suis vraiment debutant et je ne connais pas la fonction :o)
Voila soyez pas trop mechant c'est mon 1er code et ca fait 3 jours que je script .. ;)

Plopman

A voir également

Ajouter un commentaire

Commentaires

BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
Salut,
pour la suite tu verifieras avant de poser que la meme chose ne s'y trouve pas deja. C'est le cas pour le PGCD et autres caculettes mode console que l'on retrouve en nombreux exemplaires.

ciao...
BruNews, Admin CS, MVP Visual C++
cs_plopman
Messages postés
67
Date d'inscription
dimanche 29 février 2004
Statut
Membre
Dernière intervention
13 septembre 2006
-
euhh oui dsl, mais il y en a aucun qui donne les étapes et je suis nouveau j'avais pas vu :(
Plopman
Ifrit235
Messages postés
30
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
17 juin 2004
-
j'avais fais une source identique a mes début mais qui n'utilise que
Sinon c'est pas mal pour une première source.
gvhecke
Messages postés
65
Date d'inscription
vendredi 17 octobre 2003
Statut
Membre
Dernière intervention
21 mai 2008
-
C'est amusant je viens de faire un compilateur pour l' Embedded C (source disponible sur ce site d'ailleurs) et j'ai tester mon compilateur avec le code C de l'algorithme d'euclide... mais un peu plus optimise que ta solution ;-)

int a;
int b;
int c;

void maint()
{
read(a); /* càd un bete cin>>a ; */
read(b); /* càd un bete cin>>b ; */
while(b)
{
c=b;
while(a>=b) /* calcul a modulo b */
a=a-b;
b=a;
a=c;
}
write(b); /* càd un bete cout<<b; */
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.