1

Bonjour j'aimerais savoir si mon programme peut être optimiser car ma flèche ne s'affiche pas rapidement (vous allez comprendre) :
EffDessin
AxesNAff
Texte(0,40,"COMPTA
Texte(15,10,"VIENNOISERIE
Texte(25,10,"BARRE
Texte(35,10,"BOISSON
Texte(45,10,"BONBON
Texte(55,10,"RESET
Texte(55,45,"FIN
Lbl Θ
Texte(15,70,A
Texte(25,70,F
Texte(35,70,C
Texte(45,70,D
Texte(15,0,"→")
15→E
0→B
Repeat G=45
Repeat G
codeTouch→G
End
Texte(E,B," "
If G=34 et E=55 et B=35 ou G=24 et E=55 ou G=25 et B=35 et E=55
0→B
If G=25
E-10→E
If G=34
E+10→E
If G=34 et E=65
15→E
If G=25 et E=5
55→E
If G=26 et E=55
35→B
If G=25 et B=35 et E=55
45→E
If G=105 et E=15
1+A→A
If G=105 et E=25
1+F→F
If G=105 et E=35
1+C→C
If G=105 et E=45
1+D→D
If G=85 et E=15
A-1→A
If G=85 et E=25
F-1→F
If G=85 et E=35
C-1→C
If G=85 et E=45
D-1→D
If (E=15 ou E=25 ou E=35 ou E=45) et (G=85 ou G=105)
Goto Θ
Texte(E,B,"→"
End
If E=55 et B=0
Then
0→A:0→C:0→D:0→F
Texte(55,0," "
Goto Θ
End
If E=55 et B=35
EffDessin
Texte(10,8,"TOTAL:"
0.60*A+0.50*F+0.80*C+0.40*D→X
Texte(10,40,X
Pause
EffDessin
EffEcr
AxesAff
ReturnEnd

2

je fait un petit up .. car c'est important

3

J'ai mis en forme ton code, mais sinon le principe c'est assez simple : Il faut que t'es une valeur à chaque option et des coordonnées initiales X et Y que tu vas incrémenter ou décrémenter en fonction du getKey (CodeTouche ou j'sais pas quoi en français).

4

Un humain comme moi, ça comprend que du langage humain. Je peux comprendre un code si je sais le traduire en langage humain. Ici le travail nécessaire pour la traduction est trop important, et inutile, puisque il suffit de te demander la réponse. Donc pour communiquer aux autres ce que veut dire ton code, tu devrais au moins dire 2 choses :

- Ce que le prog fait. Les actions qui se passent à l'écran, on peut les voir. Celles qui sont invisibles, par exemple les calculs, il faut une description de l'action, et de sa place dans le code (par quels liens cette action s'inscrit dans l'unité du prog). Ca c'est la description globale du prog.

- Comment il le fait. Pour toutes les lignes qui peuvent être comprises en regardant uniquement celles-ci, pas besoin de commentaires, par exemple Text(0,0,"ABC"). Pour le reste, et en particulier pour les boucles et les conditions, il faut dire ce que ça signifie, ce qui se passe. Il ne faut pas oublier de donner la signification des variables utilisées. Ca c'est la description locale du code.

Ici j'ai proposé des descriptions globales et locales, mais on peut bien entendu aussi découper son code en morceaux, et faire une description globale de chaque morceau.

Si tu veux que quelqu'un optimise ton code, ça veut dire que tu veux que les techniques utilisées dans ton code soient modifiées, en conservant ce que fait ton programme. Donc le plus important n'est pas la donnée du code, mais sa signification.

En parlant de signification, j'ai l'impression que certains oublient que les choses ont un sens ! Si un langage a été inventé, c'est pour exprimer des choses réelles ! Donc pour créer un code, on se base sur des choses matérielles : un papier, un crayon, et on écrit en langage humain ce qu'on veut que le programme dise. Si tu avais fait ça, tu aurais remarqué que dans ta liste de conditions, il y a plein de trucs qui se répètent ! Tu aurais donc logiquement dû prendre certaines phrases et les assembler, puis créer des paragraphes, etc.

Optimiser un code, c'est tout remélanger, et réorganiser pour que ça soit mieux. Ca paraît évident, mais bon pour créer un code, il y a une méthode à appliquer. On prend le magma de tout ce qu'on veut que le programme fasse, puis on le découpe en actions de plus en plus élémentaires. C'est seulement quand les actions isolées sont assez élémentaires qu'on peut les traduire en TI-Basic.

Voilà désolé d'avoir un peu trop abusé de ce topic, mais je pense que c'est nécessaire. Pour ceux qui aimeraient discuter de ça avec moi, je suis toujours là !

5

Non, rien à redire à ce que tu as dit.
Faut décomposer le problème en sous problème, et recommencer avec les sous problèmes, etc jusqu'à arriver à des actions élémentaires que sais faire le langage utilisé. C'est la première chose que on apprend en Informatique en après bac (pour ceux qui font de l'informatique) ; donc je peut aussi concevoir que on fasse de gros truc bourrins quand on connait pas ça (je suis passé par là, mais je conçoit).

Mais là, tu poste un prog sans dire ce que il fait, juste en nous demandant d'optimiser.
Ben forcément, vu que il est long (en plus) ça décourage, du fait que on doit comprendre par nous même ce que il fait => Fait nous un commentaire globale
D'où aussi le commentaire local, pour que on puisse comprendre plus facilement des passages précis...

Alors, s'il te plait, commente ton prgm !
avatar
loclamor
Mondo Photo
Le voyage en photo et en 1 clic

6

d'accord je vous donnerez l'expliquation total demain soir.

7

Loclamor - Posté : 29-11-2008


Non, rien à redire à ce que tu as dit.
Faut décomposer le problème en sous problème, et recommencer avec les sous problèmes, etc jusqu'à arriver à des actions élémentaires que sais faire le langage utilisé. C'est la première chose que on apprend en Informatique en après bac (pour ceux qui font de l'informatique) ; donc je peut aussi concevoir que on fasse de gros truc bourrins quand on connait pas ça (je suis passé par là, mais je conçoit).

Mais là, tu poste un prog sans dire ce que il fait, juste en nous demandant d'optimiser.
Ben forcément, vu que il est long (en plus) ça décourage, du fait que on doit comprendre par nous même ce que il fait => Fait nous un commentaire globale
D'où aussi le commentaire local, pour que on puisse comprendre plus facilement des passages précis...

Alors, s'il te plait, commente ton prgm !



En regardant t'es autre post sur le forum et spécialement sur la rubrique optimisation. Tu n'as pas expliquez ton dernier code.
Je ne veut pas fait le barbant mais ....

8

Enfait je ne comprends pas pourquoi tu ne refais pas toi-même la structure globale de ton prog. Pour ça il suffit de regrouper les cas.

9

pasque j'ai essayer de remarqué les différentes coïncidence entre mes condition pour en supprimer un maximum afin que ma flèche s'affiche plus vite

10

jerem512 (./7) :
Tu n'as pas expliqué ton dernier code.


...
C'est vrai...
Mais on pouvait voir au premier coup d'oeuil que on avait 4 fois la même chose, avec de petites différences. Et je n'ai pas posté mon code en entier, j'en ai juste mis une séquence.
C'est vrai que j'aurais put mettre en commentaire :
"Défini si la cellule suivante de la matrice est occupée par un rocher, si c'est le cas, le pousse sur la cellule encore après, mais si on a un autre rocher on ne peut pas pousser et on ne bouge pas, si c'est un trou, on le rempli, et on avance, si c'est un mur on ne bouge rien ; si la position aaprès le joueur est un mur ou un trou, on n'avance pas ; sinon on avance."
Mais c'était juste après le concours, et je pense que baruch a du comprendre ce que c'était (il est pas si bête que ça, hein ?...).
C'est pas comme si j'avai posté mon prog en entier (en plus y a surement d'autres truc optimisables, mais...
Enfin, bon, on va pas en faire un fromage, hein ?

On va quand même essayer de t'aider grin
Mais juste une question :
Qu'est censé faire ton prog ?
avatar
loclamor
Mondo Photo
Le voyage en photo et en 1 clic

11

Bon, à ce que j'ai comrpis, ton prog est une sorte de magasin... Bon :
* déjà un premier truc : ce qui fait ramer c'est le goto dans la boucle -> A éviter à tout prix !
* While est plus rapide que Repeat.
* Si la flèche s'afiche mal, c'est à cause de la quantité de calcul entre l'effacement de celle ci et sont affichage.

Je te propose ça (peut être notre ami Baruch optimisera mieux que moi, mais...) :
EffDessin
AxesNAff
Texte(0,40,"COMPTA
Texte(15,10,"VIENNOISERIE
Texte(25,10,"BARRE
Texte(35,10,"BOISSON
Texte(45,10,"BONBON
Texte(55,10,"RESET
Texte(55,45,"FIN
15→E
0→B
0→K
Text(E,B,"→"
While K/=45 or (K=105 and B=35)
0→K
Texte(15,70,A
Texte(25,70,F
Texte(35,70,C
Texte(45,70,D
While not(K)
GetKey→K
End
Text(E,B," "
If B=0:E+10(K=34)-10(K=25)→E
If E>55:15→E
If E<15:55&#8594;E
If K=26:Then
55&#8594;E
35&#8594;B
End
If K=24:Then
15&#8594;E
0&#8594;B
End
Text(E,B,"&#8594;"
If K=105 or K=85:Then
If E=15
(K=105)-(K=85)+A&#8594;A
If E=25
(K=105)-(K=85)+F&#8594;F
If E=35
(K=105)-(K=85)+C&#8594;C
If E=45
(K=105)-(K=85)+D&#8594;D
If E=55 and B=0:Then
0&#8594;A:0&#8594;C:0&#8594;D:0&#8594;F
End:End:End
EffDessin
Texte(10,8,"TOTAL:"
0.60*A+0.50*F+0.80*C+0.40*D&#8594;X
Texte(10,40,X
Pause
EffDessin
EffEcr
AxesAff
avatar
loclamor
Mondo Photo
Le voyage en photo et en 1 clic

12

Moi j'écrirais plutôt ça (à partir du code de Loclamor):

EffDessin 
AxesNAff 
Texte(0,40,"COMPTA 
Texte(15,10,"VIENNOISERIE 
Texte(25,10,"BARRE 
Texte(35,10,"BOISSON 
Texte(45,10,"BONBON 
Texte(55,10,"RESET 
Texte(55,45,"FIN 
15&#8594;E 
0&#8594;B 
While (Ans=45) or (Ans=105 and B=35
Texte(15,70,A 
Texte(25,70,F 
Texte(35,70,C 
Texte(45,70,D 
Text(E,B," " 
Text(E,B,"&#8594;" 
While not(Ans 
GetKey&#8594;K 
End 
If not(B
E+10((Ans=34)-(Ans=25&#8594;E 
If Ans>55:15&#8594;E 
If Ans<15:55&#8594;E 
If K=26:Then 
55&#8594;E 
35&#8594;B 
End 
If K=24:Then 
15&#8594;E 
0&#8594;B 
End 
(K=105)-(K=85
If not(Ans       // Fin de boucle conditionnelle
End 
If E=15 
Ans+A&#8594;A 
If E=25 
Ans+F&#8594;F 
If E=35 
Ans+C&#8594;C 
If E=45 
Ans+D&#8594;D 
If E=55 and not(B
Then 
0&#8594;A:0&#8594;C:0&#8594;D:0&#8594;F 
End
0
End 
EffDessin 
Texte(10,8,"TOTAL:
.6A+.5*F+.8C+.4D&#8594;X 
Texte(10,40,Ans 
Pause 
EffDessin 
EffEcr 
AxesAff

Sinon, pour optimiser en vitesse, tu peux créer une liste de taille 45 à la place des 4 variables A, C, D et F.
Comme ça tu peux faire:

L1(E)+(K=105)-(K=85&#8594;L1(E
---
Si E=55 or not(B
Fill(L1,0

Et puis mettre Text() deux fois d'affilée, pour effacer et écrire au même endroit, je suis pas sûr que ce soit utile...

13

ha,oui, j'ai fait une erreur : en fait, il faut effacer juste avant la modification des variables de position, et raficher juste après.
Ce qui donne :
EffDessin 
AxesNAff 
Texte(0,40,"COMPTA 
Texte(15,10,"VIENNOISERIE 
Texte(25,10,"BARRE 
Texte(35,10,"BOISSON 
Texte(45,10,"BONBON 
Texte(55,10,"RESET 
Texte(55,45,"FIN 
15&#8594;E 
0&#8594;B 
0&#8594;K 
Text(E,B,"&#8594;"
While K/=45 or (K=105 and B=35) 
0&#8594;K 
Texte(15,70,A 
Texte(25,70,F 
Texte(35,70,C 
Texte(45,70,D 
While not(K) 
GetKey&#8594;K 
End 
Text(E,B," " 
If B=0:E+10(K=34)-10(K=25)&#8594;E 
If E>55:15&#8594;E 
If E<15:55&#8594;E 
If K=26:Then 
55&#8594;E 
35&#8594;B 
End 
If K=24:Then 
15&#8594;E 
0&#8594;B 
End 
Text(E,B,"&#8594;"
If K=105 or K=85:Then 
If E=15 
(K=105)-(K=85)+A&#8594;A 
If E=25 
(K=105)-(K=85)+F&#8594;F 
If E=35 
(K=105)-(K=85)+C&#8594;C 
If E=45 
(K=105)-(K=85)+D&#8594;D 
If E=55 and B=0:Then 
0&#8594;A:0&#8594;C:0&#8594;D:0&#8594;F 
End:End:End 
EffDessin 
Texte(10,8,"TOTAL:" 
0.60*A+0.50*F+0.80*C+0.40*D&#8594;X 
Texte(10,40,X 
Pause 
EffDessin 
EffEcr 
AxesAff
avatar
loclamor
Mondo Photo
Le voyage en photo et en 1 clic

14

je ne connait pas sa
If E=15
(K=105)-(K=85)+A→A


Vous pouvez m'expliquez?

15

A=B renvoie la valeur 1 si c'est vrai, et 0 si c'est faux.

Donc pour la ligne (K=105)-(K=85)+A→A :

si K=105 :

1-0+A→A

si K=85 :

0-1+A→A

si K vaut autre chose :

0-0+A→A

C'est donc une technique pratique qui permet de condenser plusieurs If.

16

Ahhh d'accord sa arange beaucoup sa ... Je savais pas merci

17

franchement merci du fond du coeur la flèche s'affiche beaucoup plus vite. Je vous remerci