begin process at 2013 05 25 15:33:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > PROGRAMME QUI CALCUL LE PPCM ET LE PGCD

PROGRAMME QUI CALCUL LE PPCM ET LE PGCD


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :programme, qui, calcul, pgcd, ppcm Niveau :Débutant Date de création :09/01/2010 Date de mise à jour :09/01/2010 19:47:38 Vu :15 449

Auteur : AnoSantino

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Algorithme qui sert à calculer le plus grand diviseur commun ,et le plus petit multiple commun.
Cela dit ,il est fait avec le langage C ,il peut être modifié vu que je suis encore un novice :).
Peut éventuellement servir aux novices comme moi.S'il y a une erreur j'aimerai bien en être informé,merci d'avance.

Source

  • #include<stdio.h>
  • #include<conio.h>
  • main()
  • {
  • int a,b,x,t,m;
  • printf("Entrez le premier entier positif:\t");
  • scanf("%d",&a);
  • printf("\nEntrez le deuxieme entier positif:\t");
  • scanf("%d",&b);
  • if (b>a)
  • {x=b;
  • b=a;
  • a=x;}
  • if (a%b==0)
  • printf("\nLe PPCM est :\t%d",a);
  • else
  • {t=(a*b);
  • while(b != 0)
  • {x = a%b;
  • a = b;
  • b = x;}
  • m=t/a;
  • printf("\nLe PPCM est :\t%d ",m);}
  • while(b != 0)
  • {x = a%b;
  • a = b;
  • b = x;}
  • printf("\nLe PGCD est :\t%d", a);
  • getch();
  • }
#include<stdio.h>
#include<conio.h>

main()
{
int a,b,x,t,m;
printf("Entrez le premier entier positif:\t");
scanf("%d",&a);
printf("\nEntrez le deuxieme entier positif:\t");
scanf("%d",&b);
if (b>a)
{x=b;
b=a;
a=x;}

if (a%b==0)
printf("\nLe PPCM est :\t%d",a);
  else
    {t=(a*b);
while(b != 0)
{x = a%b;
 a = b;
 b = x;}
 m=t/a;
printf("\nLe PPCM est :\t%d ",m);}
while(b != 0)
{x = a%b;
 a = b;
 b = x;}
printf("\nLe PGCD est :\t%d", a);
getch();
}



 Historique

09 janvier 2010 02:39:48 :
variable inutile
09 janvier 2010 03:09:13 :
une erreur sur le ppcm,donc j'ai modifier mon programme.
09 janvier 2010 12:46:35 :
Faute d'orthographe :)

 Sources de la même categorie

Source avec Zip Source avec une capture FONCTIONS EN ACTION par ringo73
CALCUL DE PI AVEC LA BIBLIOTHÈQUE GMP par lann
Source avec Zip Source avec une capture MAGEO3D, POUR GÉRER LES POINTS ET LES VECTEURS DE L'ESPACE R... par pgl10
Source avec Zip Source avec une capture ALGORITHME ACO TOILE D'ARAIGNÉE par RyBeN
Source avec Zip Source avec une capture TRAITEMENT D'IMAGE EN C++, QT par Akham75

 Sources en rapport avec celle ci

CALCUL DE PI AVEC LA BIBLIOTHÈQUE GMP par lann
CALCUL DE CLEF RIB par Renfield
Source avec Zip COMPRESSER SES SAUVEGARDES SMSBACKUPRESTORE (ANDROID) EN C A... par ThalLab
Source avec une capture CONVERTISSEUR par smartties
Source avec une capture CALCUL DE VARIANCE par Minilogus

Commentaires et avis

Commentaire de tuckleberry le 11/01/2010 11:40:36

Si je ne me trompe pas, après le calcul du PPCM, b est égal  0, du coup pour calculer le PGCD ça risque d'être compliqué ?

Commentaire de AnoSantino le 11/01/2010 17:46:12

Non ,vous avez fait une conclusion hâtive,le plus entier qu'on a entrer ne prend pas la valeur de 0 juste après le calcul du PPCM .J'ai séparer les blocs pour éviter ce problème ,et calculer le PPCM en premier.
Pour vous aidez à mieux me comprendre,je vous invite à lire ma structure qui est ce qui suit:
...
{
...
*(instruction 1)if (condition 1)
  {
   permutation
  }

*(instruction 2)if (condition2)
        printf("...");[bloc 1]
      else (!condition2)
        {t=(a*b)(mémorisation du produit);
         while(condition)
           {
            permutation
           }
            m=t/a;
            printf("...");
         }[bloc 2]
*(instruction 3) while(condition)
{
  permutation
}
printf("...");
getch();
}

Après si vous essayez mon programme et que vous voyez vraiment qu'il y a une erreur faite le moi savoir.
Je n'ai pas fait intentionnellement la boucle de contrôle .

Commentaire de Pariterre le 12/01/2010 05:29:41

Pourquoi ne pas passer par une fonction? ça réduirait grandement ton nombre de variables intermédiaires... et ça te permettrait de conserver tes valeurs de départ. De plus, ça donne un codage plus propre il me semble. Enfin, voici ce que je te propose :


#include<stdio.h>
#include<conio.h>

int calculPgcd(int a, int b)
{
    int x;
    while (b != 0)
    {
        x = a%b;
        a = b;
        b = x;
    }
    return a;
}

void trier(int *a,int *b)
{
    int x;
    if (b > a)
    {
        x = *b;
        *b = *a;
        *a = x;
    }
}

int main()
{
    int nbre1, nbre2, pgcd, ppcm;

    //Demander variables
    printf("Entrez le premier entier positif:\t");
    scanf("%d",&nbre1);
    printf("\nEntrez le deuxieme entier positif:\t");
    scanf("%d",&nbre2);

    //Trier en ordre décroissant
    trier(&nbre1, &nbre2);

    //Faire le calcul du PGCD
    pgcd = calculPgcd(nbre1, nbre2);
    ppcm = nbre1*nbre2/pgcd;

    //Écrire les réponse
    printf("\nLe PPCM est :\t%d ",ppcm);
    printf("\nLe PGCD est :\t%d", pgcd);
    return 0;
}



Si jamais tu n'as pas besoin d'utiliser pgcd et ppcm en tant que variable, il est possible de les supprimer et de remplace le printf("...", nbre1*nbre2/calculPgcd(nbre1,nbre2)) et l'autre par l'équivalent sans "nbre1*nbre2/"

Pour la lisibilité des autres, je te consille de commenter ton code (quoique ce n'est pas un très gros codage non plus celui-là.. mais surtout de mettre tes braquettes en évidence, j'ai eu de la difficulté à voir où se terminait les while, parfois.

Dernière chose, quand tu déclares ton main() (corrigez moi si je me trompe), si tu ne veux pas finir par un "return 0;", tu dois mettre un void main() et non rien. Sinon, il faut mettre "int main()".

Voilà, c'est mes commentaires :) bonne continuation

Commentaire de tuckleberry le 12/01/2010 09:50:23

ah oui j'ai mal vu la structure, manque d'habitude..
À propos de fonction sur wikipédia pour le PGCD on trouve un algo récursif :
int PGCD(int a, int b)
{
   if (b == 0)
      return a;
   else
      return PGCD(b, a%b);
}

Commentaire de Pariterre le 13/01/2010 00:08:49

Ah ouais! beaucoup plus encore! Je n'y avais pas pensé à celle-là ;)
Pour optimiser encore, on peut même enlever le "else"

Et hop! une variable intermédiaire de moins :D

Commentaire de abiolos le 14/01/2010 22:35:02

pourqoi n'écrit on pas les algo en français

Commentaire de Pariterre le 14/01/2010 22:43:43

Qu'est-ce que tu veux dire?
si tu parles d'expliquer la fonction, c'est parce qu'elle parle d'elle-même n fait :
exemple :
int PGCD(int a, int b)
{
   if (b == 0)
      return a;
   else
      return PGCD(b, a%b);
}

Signifie :
int PGCD(int a, int b) //Pour la fonction PGCD, cette fonction a besoin du paramètre a et du paramètre b (sans modifier les originaux) et lorsquelle finira envoyera à celui qui l'a appelé un integer.

if (b == 0)
      return a;
//Si b est égal à 0, il faut retourner (envoyer, c'est le int) la valeur "a".

else
      return PGCD(b, a%b);
//Sinon, revoyer la valeur donnée par la fonction PGCD avec les valeurs suivantes. Ici, la fonction appelle s'appelle elle-même. Ce qui va se passer, c'est que dans la valeur "a" elle va y placer la quantité "b" et dans la variable "b" elle y placera la quantité "a modulo b".

Au final, un moment donné la variable "b" égalera 0 et donc la fonction arrêtera de s'appeler elle-même et renvoyera au "main" la valeur de "a". Celui-ci, par définition [voir wikipédia PGCD] vaudra le PGCD.

C'était ta question?

Commentaire de abiolos le 23/01/2010 20:44:11

Salut à tous.Il faut comprendre ce que c'est que le PPCM.Si on dit que le PPCM de X et Y est Z alors Z mode X = Z mode Y=0.
Voici alors l'algo que je propose:

                ALGO: PPCFM

VAR: X, Y,a: ENTIERS

aFFICHER; Veuillez saisir un nombre
Saisir: X
Afficher: Veuillez saisir le second nombre
Saisir: Y
Si X<Y alors
a .=X
Répeter a mode X et a mode Y jusqu'à a mode X = a mode Y=0


Fin

Commentaire de AnoSantino le 11/04/2011 00:25:28

Merci de vos commentaires mais y'a une année de cela je venais à peine de commencer à utiliser la programmation( ne connaissons ni les fonctions ,ni la récursivité,je ne faisais que découvrir la programmation en langage C) .Maintenant quand je revois vos propositions elles sont nettement meilleures ,juste que je ne pouvais pas les comprendre à l'époque,merci.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Probleme sur un programme qui calcule un pgcd [ par El loco ] Voila j ai un probleme sur le programme suivant, il marche correctement avec une grande serie de nombres mais quand je tape 15 et 32 il me donne un pg Programme sur le calcul des racines reels ou complexes de polynomes:suites de sturm!!!!!!!! [ par prince83 ] Salut a tous !J'ai un petit probleme, c pour ca que j'ai recours a votre aide il faut que je trouve un programme en Ocaml sur ce theme: le calcul des PROGRAMME en lige de commande C++ ( ou C... ) [ par tekila_bandita ] Bonjourje pense connaitre la reponse, mais existe-t-il un moyen de faire des programmes en lignes de commandes du style foncion?? Quand je dis fonctio Calcul du temps d'execution en millisecondes [ par Yakurena ] Bonjour,  Je réalise un programme en C++ sous Linux dans lequel j'ai besoin de calculer le temps d'éxécution avec une précision en millisecondes.  Je ajouter des modules définies par l'utilisateur [ par boualiasma ] Bonjour, J'ai utilise dans mon programme principal "main.c deux modules : - "calcul.c" et "calcul.h" - "traitement.c" et "traitement.h" Est ce que je calcul du temps d'exécution d'un programme en c++ builder 6 [ par aylan ] comment faire un programme qui calcul le temps d'exécution d'un programme en c++ builder 6. j ai utilisé une fonction Timer ça n a pas marché. ajouter une librairie utilisateur à un programme C sous Visual Studio 2008 [ par boualiasma ] Salut,on peut implémenter des fonctions dans header par exemple calcul.h qui implémente les fonctions somme, multiplication. Dans mon programme main.c calcul tableau [ par 3463 ] Salut à tous !!! J'ai besoin de votre aide !!! J'ai un programme et je souhaite faire des calculs entre différentes colonnes (que l'utilisateur pourr prog pour projet [ par samich87 ] j'essaye d&#8217;écrire un programme qui me donne quelque résultat importantes dans mon P.F.E... j'ai besoin que ce programme exécute un autre program DLL - pointeurs - Allocation dynamique [ par deck_bsd ] Yop à tous, Voila, ça fait maintenant quelques temps que je planche sur ce problème sans trouver la solution. J'ai un programme dans lequel j'ai un


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,558 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales