Forum

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

Optimisation graphique d'un menu

EGUL le 02/07/2012 à 15:37
Bonjour à tous!

Dans le cadre d'un projet personnel, je souhaite intégrer un menu graphique assez performant.

C'est pourquoi je demanderais à ceux qui optimisent les programmes de me trouver des optimisations éventuelles sur ce code :

Code
EffDessin
0=>Xmin
94=>Xmax
0=>Ymin
62=>Ymax
AxesNAff
Fonct
FonctOff
5=>B
5=>E
57=>C
80=>D
Texte(10,17,"1
Texte(17,17,"2
Texte(24,17,"3
Texte(31,17,"4
Texte(38,17,"5
Texte(45,17,"6
For(A,B,D,2
Pt-On(A,E+1
Pt-On(A,C-1
End
For(A,E,C,2
Pt-On(B+1,A
Pt-On(D-1,A
End
For(A,0,2,2
Ligne(B+A,E+A,B+A,C-A
Ligne(B+A,E+A,D-A,E+A
Ligne(B+A,C-A,D-A,C-A
Ligne(D-A,E+A,D-A,C-A
End
1=>B
While A=/=105
0=>A
codeTouche=>A
Ligne(9,57-7B,14,57-7B
Ligne(9,56-7B,15,56-7B
Ligne(9,55-7B,14,55-7B
Ligne(13,58-7B,13,54-7B
If A=25 et B=/=1 ou A=34 et B=/=6
Then
For(C,9,14
For(D,55-7B,57-7B
Pt-Off(C,D
End
End
Pt-Off(13,54-7B
Pt-Off(13,58-7B
Pt-Off(15,56-7B
End
If A=34 et B=/=6:B+1=>B
If A=25 et B=/=1:B-1=>B
End
If B=1:prgm1
If B=2:prgm2
If B=3:prgm3
If B=4:prgm4
If B=5:prgm5
If B=6:prgm6


Merci d'avance!
blg_flg le 02/07/2012 à 16:22
C'est un menu ça?! A quoi ça sert? A faire joli?
EGUL le 02/07/2012 à 16:36
Oui ça sert à faire joli.
Le menu de la TI est trop sobre pour moi.
blg_flg le 02/07/2012 à 16:41
C'est vrai qu'il n'est pas très beau, mais de là à en faire un de... euh... d'ailleurs il fait combien d'octets?
EGUL le 02/07/2012 à 17:02
Il fait 568 dans mémoire
Je suppose que ce sont des octets si ce n'est pas des bits
blg_flg le 02/07/2012 à 17:04
Non, ce sont bien des octets et non des bits.



Rappels:
Un octet=8bits
Un byte est un ensemble de bits, souvent (mais pas toujours) un octet.
The K le 02/07/2012 à 17:11
L'ensemble m'a l'air assez propre.

Tu pourrais éventuellement changer

Code

If A=34 et B=/=6:B+1=>B
If A=25 et B=/=1:B-1=>B


En :

Code

B+(A=34)(B=/=6)-(A=25)(B=/=1->B


Après bon ... entre A,B,C,D,E on s'y perd un peu das le programme quand a la visualisation de la chose winkle.gif

Est-ce que tu aurais un petit gif ou un download stp ^^ ?
EGUL le 02/07/2012 à 17:18
Avant le While, B,C,D,E sont les constantes pour la taille du menu.
Le A est une variable qui varie alors dans les For
Après le Whiles B est la valeur de la zone du programme (a gauche du texte) ce qui sert à savoir quel programme est sélectionné
Le A est la variable du codeTouche.

Non je n'ait pas de lien pour le programme ni d'images

Le Grec a écrit :
Non, ce sont bien des octets et non des bits.



Rappels:
Un octet=8bits
Un byte est un ensemble de bits, souvent (mais pas toujours) un octet.


Un byte = un octet
The K le 02/07/2012 à 17:20
Oui oui ça j'avais compris winkle.gif

Je parle de visualiser la chose en fait. Histoire de voir le résultat final. Tu n'as pas de cable ?
EGUL le 02/07/2012 à 17:22
Non je l'ai paumé il y a 3 ans de là . . .
The K le 02/07/2012 à 17:24
Bon ben ... si j'ai du temps ce soir j'essaierai de te faire ça. (je garantis pas ! j'ai tendance à être tête en l'air des fois ...)
EGUL le 02/07/2012 à 17:30
Au passage, y aurait-il un émulateur sur lequel on pourrait faire du copier-coller?
Histoire que je vérifie mon programme de labyrinthe.
blg_flg le 02/07/2012 à 17:34
Je crois qu'il faut mettre tout ça dans TI Graph Link, mais je crois qu'il faudra légèrement modifier la syntaxe (pour les caractères spéciaux, etc.).

Tu ne l'a pas testé sur ta TI?



OH! Sango est connecté! loupe.gif
EGUL le 02/07/2012 à 17:38
Non j'ai pas pu tester sur ma TI, je ne l'ait pas sur moi.
Donc je retaperais dessus plus tard.
blg_flg le 02/07/2012 à 17:47
Bravo, si ça fait joli et que tu l'as fait "à l'aveugle"! bigmouth.gif

A moins que tu utilise un ému? happy.gif
EGUL le 02/07/2012 à 17:52
Non j'ai tout écrit sur Notepad++.
blg_flg le 02/07/2012 à 17:56
Comme émulateur, je te conseille https://tout82.pages-perso.fre[...].php?sujet=2961.
C'est celui que j'utilise et je trouve ça bien pratique. winkle.gif
The K le 02/07/2012 à 22:19
Woah hé je viens de recopier c'est plutôt sympa faut le dire !

Je t'optimises ça comme je peux et je mets un lien download / code demain. winkle.gif
The K le 02/07/2012 à 23:49
La chips fait donc 346 octets winkle.gif

Je post ça demain avec le lien de download winkle.gif
EGUL le 03/07/2012 à 08:30
Merci winkle.gif

Si il y en a qui veulent nous faire des beaux niveaux et bah au taf!
blg_flg le 03/07/2012 à 11:12
EGUL a écrit :
Le Grec a écrit :
Non, ce sont bien des octets et non des bits.
Rappels:
Un octet=8bits
Un byte est un ensemble de bits, souvent (mais pas toujours) un octet.


Un byte = un octet


C'est faux.
Un byte est la plus petite unité utilisable par ton ordinateur, ta calto, etc. Mais il n'est pas toujours formé de 8 bits (=1 octet). Il existe des processeurs qui utilisent des bytes de 6, 7, 9, 5, 4, etc. bits. C'est la généralisation de l'utilisation de bytes de 8 bits qui fait croire qu'un octet et un byte c'est pareil. Par exemple, pour une clé usb, 8GB=8GO, mais ça pourrait être faux, selon le nombre de bits dans le byte. crazy.gif
EGUL le 03/07/2012 à 11:51
Le Grec a écrit :
EGUL a écrit :
Le Grec a écrit :
Non, ce sont bien des octets et non des bits.
Rappels:
Un octet=8bits
Un byte est un ensemble de bits, souvent (mais pas toujours) un octet.


Un byte = un octet


C'est faux.
Un byte est la plus petite unité utilisable par ton ordinateur, ta calto, etc. Mais il n'est pas toujours formé de 8 bits (=1 octet). Il existe des processeurs qui utilisent des bytes de 6, 7, 9, 5, 4, etc. bits. C'est la généralisation de l'utilisation de bytes de 8 bits qui fait croire qu'un octet et un byte c'est pareil. Par exemple, pour une clé usb, 8GB=8GO, mais ça pourrait être faux, selon le nombre de bits dans le byte. crazy.gif


Aujourd’hui, les bytes de 8 bits se sont généralisés en informatique.
Donc nan car en l’occurrence on est sur une calto et pas en téléco
(en télécommunications ils peuvent contenir 8 ou 9 bits)
The K le 03/07/2012 à 11:57
Alors voila ce que je propose :

Code

ClrDraw
0ü ( ) Xmin
94ü ( ) Xmax
0ü ( ) Ymin
62ü ( ) Ymax
AxesOff
Func
FnOff
For(A,6,80,2
Pt-On(A,56,2
Pt-On(A,6,2
End
For(A,56,6,-2
Pt-On(6,A,2
Pt-On(80,A,2
End
For(X,10,45,7
Texte(X,17,sous-chaîne("123456",(X-3)/7,1
End
1ü ( ) B
While A=!105              //=! = différent de
EffVarVar AgetKeyü ( ) A
Ligne(9,57-7B,14,57-7B
Ligne(9,56-7B,15,56-7B
Ligne(9,55-7B,14,55-7B
Ligne(13,58-7B,13,54-7B
If (A=25)(B=!1) ou (A=34)(B=!6
Then
For(C,9,14
For(D,55-7B,57-7B
Pt-Off(C,D
End
End
Pt-Off(13,54-7B
Pt-Off(13,58-7B
Pt-Off(15,56-7B
End
B+(A=34)(B=!6)-(A=25)(B=!1ü ( ) B
End


Download pour TI-82stats / .fr / 83 / 76 : ici
Download pour TI-83+ / .fr / 84 / + / +SE / pocket.fr / pocket SE : la

Et un petit screen pour finir winkle.gif

Image manquante
blg_flg le 03/07/2012 à 12:01
Les TI (toutes je crois) ont bien des bytes de 8bits.

Mais, il n'y a pas qu'en téléco qu'on utilise pas des bytes de 8 bits. Avant, de nombreux ordis avaient des bytes autres que des octets. En théorie, des bytes peuvent être très différents. Mais tu as raison. Maintenant on utilise, à ma connaissance, que des bytes de 8 en informatique.

C'est bien ce que je disais: -les bytes ne sont pas toujours des octets (je parlais des bytes en général et pas que sur les caltos);
-il y a une généralisation de l'utilisation de bytes de 8 bits (du moins en informatique).



ps: je vois que wikipédia es ton ami winkle.gif


EDIT: joli screen bigmouth.gif
The K le 03/07/2012 à 12:11
Haha ^^

En fait Egul l'animation est désormais un peu moins jolie mais la commande Pt-On(x,y,2 prend beaucoup moins de place winkle.gif
EGUL le 03/07/2012 à 12:22
Pourquoi utilises-tu un 2 à la fin des Pt-On??
The K le 03/07/2012 à 12:31
Pour que ça fasse des petits carrés au lieu des points winkle.gif
blg_flg le 03/07/2012 à 12:46
Tu peux aussi faire des croix: Pt-On(X,Y,3.
F-BVXT le 03/07/2012 à 18:57
Pour plus de détail sur les fonctions graphiques regarde ici. Sinon le screen à l'air sympa, faudra que j'essaie happy.gif
The K le 03/07/2012 à 19:42
Et euh mis à part ça EGUL t'en penses quoi de mon optimisation ?

(et les autres d'ailleurs ...)

winkle.gif
F-BVXT le 03/07/2012 à 20:00
Ton optimisation m'a l'air bien, je vois juste qu'on peux gagner deux octets ici :
Code
0->Xmin
94->Xmax
0->Ymin
62->Ymax

En faisant ça :
Code
0->Xmin:1->PasX
0->Ymin:1->PasY

Voilà, et comme dirait Persalteas : "on en apprend tous les jours".
EGUL le 03/07/2012 à 20:09
L'optimisation est par moment économe en place malgré sur quelques endroits où ça vient ralentir le programme!
F-BVXT le 03/07/2012 à 20:10
Où est-ce que ça vient ralentir le programme ?
EGUL le 03/07/2012 à 20:33
Sur les Pt-On car l'instruction est plus longue!
F-BVXT le 03/07/2012 à 21:37
Tu es sur ? Je n'ai pas essayé mais vu qu'il y a moins de Pt( en raison du fait que ce soit des petits carré qui se dessinent et non des points simples, c'est d'après moi plus rapide. Mais de toute façon, pour connaitre la formule la plus rapide (et non la plus courte) il n'y a pas de secret, il faut essayer.
blg_flg le 03/07/2012 à 21:52
Il n'est pas nécessaire de tout tester. glasses.gif
En l’occurrence, je crois que le For ralentit, car il affichera les points les uns après les autres.

ps: je dis ça sans avoir testé, alors je peux toujours faire une erreur, mais je suis presque certain de mon affirmation.
F-BVXT le 03/07/2012 à 21:54
Ah, le For( sans tester je peux te confirmer qu'il ralentit mais le fait que les instructions Pt( soit plus longues de 2 octets, je ne suis pas sur...
blg_flg le 03/07/2012 à 21:59
Je viens de tester avec un For et je trouve ça bcp plus joli que sans. Je trouve que la différence artistique vaut bien 2 ou 3 octets supplémentaires éventuels. winkle.gif
F-BVXT le 03/07/2012 à 22:16
Oui, j'étais en train de me dire justement que c'est plus beau de dessiner au fur et à mesure, ça rajoute comme tu dis une "touche artistique". Mais les deux octets supplémentaires n'ont rien à voir, c'est le For( qui fait cet effet.
blg_flg le 03/07/2012 à 22:22
Les grands esprits se rencontrent. glasses.gif

Pardonne moi pour les octets: je ne vois pas de quoi tu parles.
F-BVXT le 03/07/2012 à 22:28
Les octets dont je parle répondent à ça :
Citation
Je trouve que la différence artistique vaut bien 2 ou 3 octets supplémentaires éventuels.
The K le 03/07/2012 à 23:55
Il est vrai qu'un For( ne sera jamais rapide sur Ti ...

Cependant c'est la rapidité ou la place winkle.gif

Bon après il est vrai que j'ai testé sur Ti-84 qui est plus rapide qu'une Ti-82 ... Mais pour un menu qui disparaîtra rapidement au profit du programme en lui-même ^^

Après tu fais ça comme tu veux ... T'as demande une optimisation tu l'as ! winkle.gif
ld le 04/07/2012 à 00:34
Tu peux remplacer:
Code
Texte(10,17,"1
Texte(17,17,"2
Texte(24,17,"3
Texte(31,17,"4
Texte(38,17,"5
Texte(45,17,"6

simplement par:
Code
For(A,1,6
Texte(3+7A,17,A
End

De plus "EffDessin" n'est pas utile ici si il est suivi de l'instruction "AxesNAff" car elle efface le dessin en même temps que les axes.

De même pour "0->A" qui n'est pas nécessaire devant "codeTouche=>A"

Aussi:
Code
:If A=34 et B=/=6:B+1=>B
:If A=25 et B=/=1:B-1=>B

Peux être remplacer par une commande plus rapide dite Booléenne soit:
Code
:B+(A=34 et B=/=6->B
:B-(A=25 et B=/=1->B

Tu peux aussi pour simplifier ton prgm utiliser des instructions comme "Ombres(" ou encore "Horizontale" et "Verticale".

Ps: J'aime ta phrase en signature sur tes msg^^
F-BVXT le 04/07/2012 à 00:43
Il me semble que :
Code
Texte(10,17,"1
Texte(17,17,"2
Texte(24,17,"3
Texte(31,17,"4
Texte(38,17,"5
Texte(45,17,"6

prend plus de place mais est plus rapide, alors que :
Code
For(A,1,6
Texte(3+7A,17,A
End

prend moins de mémoire mais est plus lent.
Après tout dépend de ce qu'on veut, rapidité ou légèreté.
Sinon, merci pour l'astuce AxesNaff, je ne connaissais pas.
EGUL le 04/07/2012 à 09:28
Bah merci, j'ai mes réponses,on peut lock le topic et stop flood :mici: