begin process at 2008 08 08 21:50:05
1 223 607 membres
365 nouveaux aujourd'hui
14 230 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PGCD RÉCURSIF


Information sur la source

Catégorie :Application Niveau : Débutant Date de création : 16/01/2003 Date de mise à jour : 16/01/2003 09:40:45 Vu : 2 202

Note :
Aucune note

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

calcul du PGCD en récursif

* Remarques : le pgcd de 2 nombres a et b, avec a >=b, peut etre défini de la
                facon suivante :  il est egal a b si b divise a.
                                    sinon il est egal au pgcd de 'b' et de 'a mod b'

Source

  • #pragma hdrstop
  • #pragma argsused
  • #include <conio.h>
  • #include <iomanip.h>
  • #include <iostream.h>
  • int pgcd(int a, int b) ;
  • void main(void)
  • {
  • int nb1, nb2 ;
  • int ret ;
  • cout << "entrez le 1er nombre : " ;
  • cin >> nb1 ;
  • cout << endl << "entrez le 2eme nombre : " ;
  • cin >> nb2 ;
  • ret = pgcd(nb1, nb2) ;
  • cout << endl << "le pgcd de " << nb1 << " et " << nb2 << " est : " << ret ;
  • cout << endl << endl << "appuyer sur une touche pour terminer..." ;
  • getch() ;
  • }
  • //---------------------------------------------------------------------------
  • int pgcd(int a, int b)
  • {
  • if (a % b == 0)
  • return b ;
  • return pgcd(b, a % b) ;
  • }
#pragma hdrstop

#pragma argsused

#include <conio.h>
#include <iomanip.h>
#include <iostream.h>

int pgcd(int a, int b) ;

void main(void)
    {
    int nb1, nb2 ;
    int ret ;

    cout << "entrez le 1er nombre : " ;
    cin >> nb1 ;

    cout << endl << "entrez le 2eme nombre : " ;
    cin >> nb2 ;

    ret = pgcd(nb1, nb2) ;

    cout << endl << "le pgcd de " << nb1 << " et " << nb2 << " est : " << ret ;

    cout << endl << endl << "appuyer sur une touche pour terminer..." ;
    getch() ;
    }
//---------------------------------------------------------------------------

int pgcd(int a, int b)
    {
    if (a % b == 0)
        return b ;

    return pgcd(b, a % b) ;
    }
  • signaler à un administrateur
    Commentaire de cmarsc le 16/01/2003 11:06:04

    #pragma hdrstop  #pragma argsused sont - ils indispensables
    #include &lt;iomanip.h&gt; ne sert pas à grand chose
    void main(void) return ;

  • signaler à un administrateur
    Commentaire de GoldenEye le 16/01/2003 16:32:28

    Mêmes remarques que mon collègue.
    Petite astuce d'optimisation : tu sais que l'opération modulo est très coûteuse en termes de temps de calcul dans la mesure où elle fait intervenir une division. Or tu calcules deux fois a%b dans ta fonction PGCD. Sauve le premier calcul dans une variable auxiliaire que tu réutiliseras afin de ne pas refaire le même calcul une seconde fois

    int pgcd(int a, int b)
        {
        int temp;
        if ((temp=a % b) == 0)
            return b ;

        return pgcd(b, temp) ;
        }

    Par ailleurs, tu m'as l'air d'être un(e) maniaque de la récursivité (c'est peut-être ton programme actuel de cours :-)). Si l'élégance de la méthode est incontestable, ses performances le sont moins (sauf dans des cas particuliers. En l'occurence ici, la méthode itérative du calcul de PGCD (l'algorithme d'Euclide) est plus performante.

    Voilà pour cette fois

  • signaler à un administrateur
    Commentaire de GoldenEye le 16/01/2003 16:36:12

    Autre chose, vive la compacité du C:

    int pgcd(int a,int b)
    {
    int temp;
    return((!(temp=a%b))?b:pgcd(b,temp));
    }

    Juste pour le clin d'oeil ;-)

  • signaler à un administrateur
    Commentaire de loraine9999 le 16/01/2003 18:12:18

    hé oui c est la récursivité en puissance en cours ces temps ci alors je fais partager... ;-)

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS