IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

[WD12] Calcul du PGCD de deux nombres


Sujet :

WinDev

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut [WD12] Calcul du PGCD de deux nombres
    Bonjour,
    je souhaite calculer le PGCD de deux nombre.
    J'ai fait ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    nba est un entier = "60"
    nbb est un entier = "168"
    nPlusGrand,nPlusPetit est un entier
    SI nba > nbb ALORS 
    	nPlusGrand=nba 
    	nPlusPetit=nbb 
    	SINON 
    	nPlusGrand=nbb 
    	nPlusPetit=nba
    FIN
    r est un entier = modulo(nPlusGrand,nPlusPetit)
     
     
    TANTQUE r <> 0
    nPlusGrand = nPlusPetit * Arrondi(nPlusGrand/nPlusPetit) + r
    r=modulo(nPlusGrand,nPlusPetit)
    FIN
    Trace(nPlusGrand)
    Mais, il entre dans une boucle infinie ^^
    Comment régler ce soucis ?
    Merci.

  2. #2
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Ça ressemble à travail d'école ça! Avec quels nombres il entre dans une boucle infinie? De plus, si je me souvient bien il n'y a qu'un modulo et des substitution dans l'algorithme d'Euclide? Tu es sûr de l'avoir bien codé?
    «Un problème bien défini est un problème à moitié résolu.»

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    Je viens de retranscrire en windev un code PHP, voila ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    PROCEDURE PGCD(nValA est un entier, nValB est un entier)
     
     
    statut,resultat est une chaîne
    reste,nNbEntier,petit,grand est un entier
     
    SI nValA < nValB ALORS
    	petit = nValA
    	grand = nValB
    SINON
    	petit = nValB
    	grand = nValA
    FIN
     
    statut = "1"
     
    TANTQUE statut = "1"
    	reste = Euclide(grand,petit)
    	SI reste = 0 ALORS
    		statut = "0"
    		resultat = petit	
    	SINON
    		statut = "1"
    		grand = petit
    		petit = reste
    	FIN
    FIN
     
    RENVOYER resultat
     
     
    PROCEDURE Euclide(nombre est un entier, diviseur est un entier)
     
    NbEntier, Reste sont des entiers
     
    NbEntier = nombre / diviseur
    Reste = modulo(nombre,diviseur)
     
    RENVOYER Reste
    Pour des nombres "basiques", cela fonctionne
    Exemple, je fait un Trace(PGCD(160,68))
    Il me rend bien "12"
    Mais, lorsque je met des nombres extremements grands (20 chiffres significatifs tel que 69723607025984632587), j'ai un "-1"

    D'ou vient le problème ?
    Merci
    (J'améliorerai la "propreté" du code après ... )

  4. #4
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Une variable de type "entier" est sur 32 bits (4 octets). Le plus grand nombre que tu peux y stocker est donc 2^32 = 4294967296. Si tu veux gérer des nombres plus grand, tu dois utiliser un type plus grand comme "entier sur 8 octets" (2^64 = 18446744073709551616) ou numérique.
    «Un problème bien défini est un problème à moitié résolu.»

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    Le PGCD renvoyé est 1 alors que, avec une calculatrice, j'ai un PGCD de 6 ...

  6. #6
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Pour quels nombres?
    «Un problème bien défini est un problème à moitié résolu.»

  7. #7
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    12056543270971033254 et 7964898

    Je tiens à rajouter que, par ma calculatrice, le PGCD est 6
    par ce site : http://site2wouf.fr/calculator.php#ici1
    le PGCD est 2

    Par celui-ci :
    http://euler.ac-versailles.fr/webMat...e/euclide1.jsp
    le PGCD est 6

  8. #8
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Tu atteinds les limites...

    Essaie avec des monétaires au cas ou mais il arrive un mioment où il faut savoir dire stop sinon on a des vertiges ( j'ai pas pu m'en empêcher)
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  9. #9
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut
    J'ai simplement fait un gauche(machaine,14) pour limiter la taille de ma chaine aux 14 premiers caractères ...
    Merci quand même !

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Points : 5 953
    Points
    5 953
    Par défaut
    Citation Envoyé par orditosh Voir le message
    Le PGCD renvoyé est 1 alors que, avec une calculatrice, j'ai un PGCD de 6 ...
    Ben, utilises la calculette, alors !

    Désolé !


  11. #11
    Débutant
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Points : 76
    Points
    76
    Par défaut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/11/2018, 07h11
  2. calcul de deux nombres en shell
    Par nina2007 dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 19/03/2008, 14h38
  3. comment calculer le produit de deux nombres en PHP
    Par batalich dans le forum Langage
    Réponses: 3
    Dernier message: 12/03/2007, 09h02
  4. Réponses: 9
    Dernier message: 12/10/2006, 00h36
  5. Algorithme permettant de calculer le PGCD de deux nombres
    Par zeyd dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 25/11/2005, 20h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo