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

m@thieu41 le 21/11/2012 à 14:09
Coucou!
Bienvenue sur le forum alors

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
Sinon, c'est pas mal comme programme, continue comme ça

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.