Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 1297
Réponses : 7
Type : discussion
Etat : réponses autorisées

Algorithme d'Euclide complet

Mathérible le 21/11/2012 à 11:37
Salut

Je suis nouveau sur le site et j'aimerais savoir ce que vous pensez de mon programme qui contient:
-des calcules étapes par étapes
-Le résultat sous forme de PGCD
-Le résultat sous forme de PPCM

Info:
-=/=:Différent de
->=:supérieur ou égal
-<=:inférieur ou égal
-->:la flèche sto

Code
PROGRAM:ALGORITM
:EffEcr
:Input "X=",X
:X->A
:Disp ""
:Input "Y=",Y
:Y->B
:If X<=0 ou Y<=0
:Then
:EffEcr
:Disp "CALCUL","IMPOSSIBLE"
:Pause
:EffEcr
:Stop
:End
:If X=Y
:Goto 4
If X>Y
:Goto 1
:If X<Y
:Goto 2
:Lbl 1
:ent(X/Y)->Q
:X-Y*Q->R
:EffEcr
:Output(1,1,"Q=")
:Output(1,3,Q)
:Output(3,1,"R=")
:Output(3,3,R)
:Pause
:Goto 3
:Lbl 2
:ent(Y/X)->Q
:Y-X*Q->R
:EffEcr
:Output(1,1,"Q=")
:Output(1,3,Q)
:Output(3,1,"R=")
:Output(3,3,R)
:Pause
:Lbl 3
:EffEcr
:If R=/=0 et X>Y
:Then
:Y->X
:R->Y
:Output(1,1,"X=")
:Output(1,3,X)
:Output(3,1,"Y=")
:Output(3,3,Y)
:Pause
:Goto 1
:End
:If R=/=0 et X<Y
:Then
:R->Y
:Output(1,1,"X=")
:Output(1,3,X)
:Output(3,1,"Y=")
:Output(3,3,Y)
:Pause
:Goto 1
:End
:If R=0 et X>Y
:Goto 4
:If R=0 et X<Y
:X->Y
:Lbl 4
:EffEcr
:Output(1,1,"PGCD(")
:Output(1,6,A)
:Output(1,10,",")
:Output(1,11,B)
:Output(1,15,")=")
:Output(2,1,Y)
:A*B/Y->Z
:Output(4,1,"PPCM(")
:Output(4,6,A)
:Output(4,10,",")
:Output(4,11,B)
:Output(4,15,")=")
:Output(5,1,Z)
:Pause
:EffEcr


J'attend vos avis happy.gif
m@thieu41 le 21/11/2012 à 14:09
Coucou!
Bienvenue sur le forum alors bigmouth.gif
J'ai quelques conseils à te donner, par contre j'ai pas testé ton code (un peu la flemme de tout recopier). Déjà, tu n'as pas besoin de fermer les " et les ) avant:
_un retour à la ligne
_un ->

Il y a aussi un truc: le lbl 1 et le 2 font la même chose, pourquoi les séparer crazy.gif
Sinon, c'est pas mal comme programme, continue comme ça winkle.gif
linkakro le 21/11/2012 à 15:57
Les Lbl 1 et 2 servent à s'adapter selon celui des nombres le plus grand.

Cependant, et je ne m'en souvenais pas moi-même, l'algorithme fonctionne aussi quand le nombre le plus grand est donné en deuxième.

Les Gotos sont placés dans des alternatives If/Then, cela peut causer des problèmes.
Je t'invite à consulter les ressources suivantes pour en apprendre les conséquences.
https://web.archive.org/web/20[...]ec-les-end.html
https://tout82.pages-perso.fre[...].php?sujet=2757

Mon conseil le plus important est d'utiliser des boucles à la place des gotos pour répéter des actions.

exemple épuré à l'extrème : algeuc
Il ne manque plus que le calcul du ppcm et des affichages plus conséquents.

Echanger les valeurs dans les variables permet d'adapter l'algorithme selon la valeur la plus grande sans avoir besoin d'écrire deux fois l'algorithme.
Mais puisque l'agorithme fonctionne aussi pour une interversion ne nous dérangeons pas.

Ne pas refermer les parenthèses, guillemets, acollades et crochets permet d'économiser de la mémoire.
Malgré tout prend l'habitude de placer des guillemets sur les fins de lignes de texte si ce texte est une série d'espaces.
Output(1,1," "

Code
:EffEcr
:Input "X=",X
:X->A
:Disp ""
:Input "Y=",Y
:Y->B
:If X<=0 ou Y<=0
:Then
:EffEcr
:Disp "CALCUL","IMPOSSIBLE
:Pause
:EffEcr
:Stop
:End

:If X=/=Y
:Then
:While Y
:X-ent(X/Y)*Y->R
:Y->X
:R->Y
:Output(3,1,"Q=
:Output(3,3,Q
:Output(4,1,"R=
:Output(4,3,R
:Pause
:EffEcr
:If R
:Then
:Output(1,1,"X=
:Output(1,3,X
:Output(3,1,"Y=
:Output(3,3,Y
:Pause
:EffEcr
:End
:End
:End

 // attention : à partir d'ici j'ai remplacé Y par X.
Je n'ai pas placé de test pour éviter le stockage du pgcd dans X et 0 dans Y.
En conclusion le pgcd est dans X.

:EffEcr
:Output(1,1,"PGCD(
:Output(1,6,A
:Output(1,10,",
:Output(1,11,B
:Output(1,15,")=
:Output(2,1,X
:A*B/X->Z
:Output(4,1,"PPCM(
:Output(4,6,A
:Output(4,10,",
:Output(4,11,B
:Output(4,15,")=
:Output(5,1,Z
:Pause
:EffEcr
On peut aussi écrire dans le graphique pour faciliter la mise en page avec la fonction Text.
Code
Text(20,30,"PPCM",A,",",B,")=",Z
Dans cet exemple 20 et 30 sont des coordonnées.
Overdozage le 21/11/2012 à 17:09
Woaw quand je pense qu'il suffirait d'utiliser la fonction pgdc( et ppcm( au lieu de tous ces calculs ^^
linkakro le 21/11/2012 à 17:39
Oui mais il faut bien s'entraîner à programmer, non ?
De plus ces fonctions n'existent pas dans la ti82basique.
m@thieu41 le 21/11/2012 à 19:46
Oups minied.gif désolé j'avais pas vu que les X et les Y étaient inversés crazy.gif
Mathérible le 22/11/2012 à 18:03
Citation
Woaw quand je pense qu'il suffirait d'utiliser la fonction pgdc( et ppcm( au lieu de tous ces calculs ^^


Les touches pgcd( et ppcm( ne font pas de calculs par étape à ce que je sache Overdozage
Overdozage le 22/11/2012 à 18:22
Je sais, mais bon, comme l'a dit linkakro c'est pour s'entraîner (moi je disais juste ça parce que je savais pas que tu connaissais leur exsitence winkle.gif)