Page 1 sur 2

[Résolu] Optimisation de CE X-Pander

Message non luPosté: 19 Juin 2020, 16:16
de Astarus
Bonjour !

CE XPander est un programme en Basic de critor qui permet de rechercher une valeur exacte au dernier nombre enregistré dans la variable Rep.
Ce programme se compose de plusieurs sous programmes qui se lancent pour effectuer les calculs à l'aide de l'instruction prgm. J'ai voulu optimiser cet aspect et j'ai réussi à regrouper ces programmes en un seul. Ma version de CE XPander se compose maintenant de 2 programmes :

CEXP : c'est le programme à lancer. Il se contente de lancer le programme CEXPAND2 et affiche l'éventuel résultat. Voici le code.

Code: Tout sélectionner
Rep→N
0→dim(L₆
0→dim(L₄
0→⌊E(1
0→⌊D(1
{0,5,0,1→⌊M
a+b
Output(9,1,"Presser une touche pour abandonner…
N
prgmCEXPAND2
Output(10,1,"                         
Rep


CEXPAND2 : c'est ce programme qui fait tous les calculs. Je ne joint pas le code, ce machin fait 43Ko...

Quand je lance CEXP, tout se passe bien. Le programme affiche "Presser une touche pour abandonner..." ainsi qu'un indicateur d'avancement du programme (0%, 20%,...)

J'ai voulu intégrer CE XPand à un autre programme (appelons-le TEST). J'ai donc simplement recopié le code de CEXP dans TEST, auquel j'ai juste ajouter un Lbl et une pause pour afficher le résultat, ce qui nous donne :

Code: Tout sélectionner
Lbl 2Z
EffÉcran
Rep→N
0→dim(L₆
0→dim(L₄
0→⌊E(1
0→⌊D(1
{0,5,0,1→⌊M
a+b
Output(9,1,"Presser une touche pour abandonner…
N
prgmCEXPAND2
Output(10,1,"                         
Rep
Pause
Goto 2T


Comme on peut le constater, je n'ai pas touché aux instructions de CEXP. Et pourtant, quand je lance CE XPander via TEST, cela ne marche pas.
Il m'affiche bien "Presser une touche pour abandonner...", puis le programme est en pause. Si on appuie sur entrer, on retourne au programme TEST...

Je ne comprends pas cette réaction, alors que je n'ai pas touché à CEXP. Je précise que CEXPAND2 n'appelle à aucun moment CEXP avec l'instruction prgm, ce qui aurait pu être la cause du problème. Si quelqu'un a une idée, je l'en remercie d'avance.

Re: CE XPANDER optimisé mais...

Message non luPosté: 19 Juin 2020, 16:35
de Ti64CLi++
Parce que le programme CEXPAND2, d'après ce que je comprends retourne la valeur exacte dans Rep.
Or, quand tu appelles Rep sans commande d'affichage, cette valeur n'est pas affichée mais retourné dans Rep justement, c'est ce que fait la ligne N avant l'appel au programme CEXPAND2. La valeur de Rep est la valeur de N après cela.
Tu as le choix entre utiliser une fonction d'affichage comme Disp ou Output, ou stopper le programme après Rep pour que la valeur soit retournée.
Mais d'après ce que je comprends, ton programme ne se termine pas à cet endroit, donc il te suffit de rajouter un Disp devant le Rep après prgmCEXPAND2

Re: CE XPANDER optimisé mais...

Message non luPosté: 20 Juin 2020, 13:05
de Astarus
Bonjour Ti64CLi++ !

J'avais oublié le fonctionnement exact de cette commande, donc ta réponse m'a permis de mieux comprendre comment fonctionne CEXP. Malheureusement, le problème ne vient pas de là. J'ai ajouté le Disp devant Rep. Maintenant, quand je lance le tout via TEST, cela m'affiche "Presser une touche pour abandonner... 0%" puis quasi-immédiatement il me donne la valeur de Rep. Vu qu'il ne s'agit pas de celle entrée au début du programme - à chaque fois je teste avec la valeur approchée de sin(pi/8) retournée par la calculatrice, le programme me retourne 93 - il y a donc eu calcul.... Mais cela s'affiche trop vite pour que CEXPAND2 ait pu effectué tous les calculs (la preuve puisque 93 n'a rien à voir avec la valeur exacte de sin(pi/8)...). Donc j'ai l'impression qu'il faudrait répéter CEXP pour lancer plusieurs fois CEXPAND2. Or il n'y a PAS UN Repeat dans ces deux programmes. Tout cela me laisse perplexe.

Re: CE XPANDER optimisé mais...

Message non luPosté: 20 Juin 2020, 13:30
de Ti64CLi++
Est ce que ton nouveau code de ton programme CEXP est celui ci :
Code: Tout sélectionner
Lbl 2Z
EffÉcran
Rep→N
0→dim(L₆
0→dim(L₄
0→⌊E(1
0→⌊D(1
{0,5,0,1→⌊M
a+b
Output(9,1,"Presser une touche pour abandonner…
N
prgmCEXPAND2
Output(10,1,"                         
Disp Rep
Pause
Goto 2T

Re: CE XPANDER optimisé mais...

Message non luPosté: 20 Juin 2020, 13:48
de Astarus
Oui.

Re: CE XPANDER optimisé mais...

Message non luPosté: 20 Juin 2020, 13:57
de Hamza.S
Que renvoie ton programme CEXPAND2 ?
Juste après la ligne prgmCEXPAND2, pourquoi ne pas récupérer directement ton résultat et le stocker sur la bonne variable ?

Re: CE XPANDER optimisé mais...

Message non luPosté: 20 Juin 2020, 14:05
de Astarus
CEXPAND2 stocke la réponse sous forme de chaîne de caractères dans Chn0, c'est donc CEXPAND2 qui se charge de l'affichage de cette chaîne. La valeur de Rep (on veut donc en déterminer la valeur exacte) ne change pas et est affichée à la fin par CEXP, mais c'est surtout esthétique.

Re: CE XPANDER optimisé mais...

Message non luPosté: 20 Juin 2020, 14:13
de Astarus
J'ai supprimé les lignes Output et Disp pour y voir plus clair. Le résultat est le même. J'ai "Presser une touche pour abandonner... 0%" puis le programme est en pause, je fais entrer et je reviens à TEST... J'ai dit une bêtise la valeur de Rep est bien modifiée. En l'occurence, Rep vaut 93 une fois que j'ai quitté le programme... Si seulement critor passait par là ! :whistle:

Re: CE XPANDER optimisé mais...

Message non luPosté: 20 Juin 2020, 14:14
de Ti64CLi++
Donc quand tu lances CEXPAND2 avec la valeur arrondie dans Rep, CEXPAND2 te stocké la valeur exacte dans Chn0 et s'occupe lui même de l'afficher ?
Mais du coup quel est le problème exact ? CEXPAND2 n'affiche pas la valeur exacte ?
À mon avis c'est que il stocke la valeur exact dans Chn0, puis la retourne comme Rep.
Tente de faire Disp Chn0 avant ton Disp Rep, juste après l'appel au programme CEXPAND2 ;)

Re: CE XPANDER optimisé mais...

Message non luPosté: 20 Juin 2020, 14:26
de Hamza.S
Si CEXPAND2 n'a pas de commande d'affichage, rien ne s'affichera.
Quelle est la dernière ligne du programme CEXPAND2 ?