begin process at 2012 05 27 17:53:58
  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 :10 654

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 UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

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
Source avec une capture CALCUL D'INCERTITUDE 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 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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 : 0,624 sec (3)

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