| [TUTO] Optimisation / économiser ses octets |
| Auteur |
Message |
ratuss
Autorisation : Membre
Nb de messages : 1522
Inscrit le : Mer 01 Mar 2006, 20:41
|
Posté le : Lun 09 Avr 2007, 15:06
|
|
|
ECONOMISER SA MEMOIRE
Voici une petite page sur comment préserver la mémoire. Eh oui ! Car l´octet se fait rare chez la ti 82 : Il n´y en a que 28000, et vous verrez qu´ils seront vite utilisés, sachant qu´un symbole correspond à 1 octet.
Sachez tout de même que la taille du programme compte aussi dans la qualité de celui-ci, et j´ai donc 3 conseils à donner pour les maniaques de la mémoire (comme moi) prêt à tout sacrifier pour économiser 1 malheureux octet.
. 1) Raccourcir la commande If
La majorité d´entre vous le sait, mais je préfère quand même le rappeler :
Il n´est pas nécessaire de mettre le then et le end s´il n´y a qu´une seule instruction après la condition if :
| Code | Input "NB D'INSTRUCTIONS",A
:If A=2
:then
:Disp "2 INSTRUCTIONS"
:Disp"DONC THEN ET END"
:End
:
:If A=1
:Disp "1 INSTRUCTION","DONC PAS DE THEN","NI DE END" |
. 2) Supprimer la syntaxe en fin de phrase
Vous l´avez sans doute remarqués, il n´y a pas besoin de " ou de ) à la fin de chaque ligne ou après une flèche.
Ainsi:
| Code | :Disp "BONJOUR"
:2*(A+1)→B |
Revient à dire :
| Code | :Disp "BONJOUR
:2*(A+1→B |
...Et vous venez d´économiser deux octets !
Pour aller plus loin, si par exemple vous écrivez :
| Code | | If int(1+2(D+2)(E-1)))=6 and B=2(A+1) |
Et que vous pensez gagner un octet en mettant :
| Code | | If int(1+2(D+2)(E-1)))=6 and B=2(A+1 |
Alors vous avez tout faut, puisque vous pouvez même en grappiller 2 autres en inversant:
| Code | | If B=2(A+1) and 6=int(1+2(D+2)(E-1 |
Bon ok je chipote un peu la mais bon, c´est important mine de rien ! %)
Au fait, en parlant de signes inutiles, sachez que :
-Si vous écrivez 2*A et 2*(10+B), cela revient à mettre 2A et 2(10+B) (encore 2 octets d´empochés!!)
-0.123456 revient à mettre .123456 (c´est la notation anglaise)
-les lignes de vide que met l´utilisateur pour les repères, ça aussi ça mange de l´octet !
. 3) Des variables qui deviennent des listes
On aura tout vu ! Mais il n´empêche qu´il est effectivement possible de transformer des variables en listes, et tout ça en gagnant de l´octet.
Accrochez vous, car c´est le plus compliqué !!
Si A=3236546846
Et bien figurez-vous que sur la calculatrice, cela prendra autant de place qu´un A=6
Alors si un jour vous êtes confronté à un L6 = {1;2;2;1;3;2;1,1,2,2,1,2,1,1} qui prendra énormément de place (138 octets), utilisez une variable ! En mettant A=0.12213211221211. (18 octets)
Oui bon d´accord c´est bien beau tout ça met comment on fait ensuite pour isoler un chiffre !
Admettons, que vous vouliez isoler un chiffre x dans cette "liste".
Nous dirons que le nombre à isoler est le 3, donc que x=5
En utilisant les listes vous auriez mis : L6 ( =L6 (5)=3
Maintenant en utilisant une variable c´est un peu plus compliqué :
A=0.1221**3**211221211
>multipliez le par 10^x
=1221.**3**211221211
>utilisez fracPart
=0.**3**211221211
>multipliez le par 10
=3,211221211
>utilisez int (3,211221211)
=3
Ce qui donne au final : A(X)=int (10 fPart (AEE(X-1 (merci vibra )
Et voilà le travail !
Attention, une variable ne comporte pas plus de 14 chiffres, si vous voulez une liste plus longue que 14, il vous faudra utiliser 2 variables, mais ça risque d´être un peu plus compliqué !
Bien sur, vous pouvez aussi appliquer cela pour des matrices : vous prenez des listes à la place des matrices.
Je l´ai utilisé dans l´un de mes programmes, au final, 1000 octets de gagnés !
Alors, ça vaut qu´en même le coup, non ?
---------------------- --- LISTE DES JEUX POUR TI --- |
 |
|
| |
vibra
Autorisation : Membre
Nb de messages : 591
Inscrit le : Mer 04 Avr 2007, 13:29
|
Posté le : Ven 26 Oct 2007, 14:04
|
|
|
Par contre, ce serait bien si tu pouvais rajouter comment on fait pour mettre un nombre dans la variable-liste, c'est à dire la formule :
| Code | | A-(int (10fPart (A*10^(X-1))))*10^(-X)+N*10^(-X |
, où A est la variable utilisée comme liste, X est le rang, et où N est le nouveau nombre à intégrer.
---------------------- Vive la programmation et vive le vibraphone !!! |
 |
|
| |
vibra
Autorisation : Membre
Nb de messages : 591
Inscrit le : Mer 04 Avr 2007, 13:29
|
Posté le : Ven 26 Oct 2007, 19:29
|
|
|
Pour la lisibilité, tu ne voudrais pas aussi rajouter ça stp https://tout82.pages-perso.free.fr/forum/sujet.php?sujet=1033
---------------------- Vive la programmation et vive le vibraphone !!! |
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Ven 26 Oct 2007, 19:32
|
|
|
Je pense que ça donne :
L1(A) + N10^(-X) - 10^(-X)int( 10fpart( L1(A)10^(X-1 -> L1(A
Dans un orde plus propre à la compréhension :
1-On prend la variable au niveau souhaité ( L1(A) )
2-On lui soustrait sa valeur isolé des autres (pour ne pas affecter les autres valeurs autour)
Par exemple : .12301230456 ( L1(A) ) - .000002 (La valeur du 6ième rang sans les autres).
C'est pour cela qu'on l'a d'abord prelevé en valeur entière, puis qu'on l'a rabaissé à son rang d'origine, mais sans les autres nombres cette fois vu que l'on vient de l'isoler.
3- ON rajoute la valeur souhaité ( N ) affecté du rang décimal.
|
 |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
vibra
Autorisation : Membre
Nb de messages : 591
Inscrit le : Mer 04 Avr 2007, 13:29
|
Posté le : Ven 26 Oct 2007, 19:48
|
|
|
Ouais non mais ce que je voulais dire c'est que il éditait son poste en ajoutant le mien dedant pour que ce soit propre, et qu'on supprime mon post.
---------------------- Vive la programmation et vive le vibraphone !!! |
 |
|
| |
Rézus
Autorisation : Membre
Nb de messages : 835
Inscrit le : Sam 20 Jui 2009, 20:35
|
Posté le : Dim 12 Juil 2009, 11:06
|
|
|
Un autre truc utile aussi.
Au lieu de marquer
| Code | :0->X:0->Y
:getkey->K
:If K=24
:X-5->X
:If K=26
:X+5->X
:If K=25
:Y+1->Y
:If K=34
:Y-1->Y...
|
pour le déplacement d'un point a l'écran par exemple,ici de 5 en 5 en abscysse
et de 1 en 1 en ordonnée,mettez tout simplement
| Code | :0->X:0->Y
:Getkey->K
:X-5(K=24)+5(K=26)->X
:Y-(K=34)+(K=25)->Y
|
Gros gain d'octet et de fluidité ^^
|
 |
|
| |
Rinrynque
Autorisation : Membre
Nb de messages : 30
Inscrit le : Dim 10 Mai 2009, 15:53
|
Posté le : Lun 27 Juil 2009, 18:11
|
|
|
Pour selectionner 1 chiffre dans 0.154236987423 (ou plutôt .154236987423 comme le disent certains...), je fais:
| Code | :.154236987423*10(C-1)->¤ (C le chiffre en partant du . que je veux isoler)
:¤-Ent(¤->¤
:Ent(¤10->C
|
Et j'ai le chiffre que je voulais stocké dans C !
|
 |
|
| |
Sangohan38
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Mar 28 Juil 2009, 5:05
|
|
|
Pourquoi ne pas faire tout simplement:
[code:.154236987423->A
A10^(C)-10int(A10^(C-1->X[/code]
Sangohan38
|
 |
|
| |