Gamme TI-82


Poster un nouveau sujet Poster une réponse
[TUTO] Optimisation / économiser ses octets
Auteur Message
Ratuss



Autorisation : Membre
Nb de messages : 1572
Inscrit le : Mer 01 Mar 2006, 20:41
Posté le : Lun 09 Avr 2007, 15:06   Citer 

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 (crazy.gif=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 winkle.gif )

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 ---
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
vibra



Autorisation : Membre
Nb de messages : 595
Inscrit le : Mer 04 Avr 2007, 13:29
Posté le : Ven 26 Oct 2007, 14:04   Citer 

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 !!!
 Adresse email Haut de page Bas de page 
 
vibra



Autorisation : Membre
Nb de messages : 595
Inscrit le : Mer 04 Avr 2007, 13:29
Posté le : Ven 26 Oct 2007, 19:29   Citer 

Pour la lisibilité, tu ne voudrais pas aussi rajouter ça stp http://tout82.free.fr/forum/sujet.php?sujet=1033

----------------------
Vive la programmation et vive le vibraphone !!!
 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 892
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Ven 26 Oct 2007, 19:32   Citer 

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.

----------------------
Ne cliquez pas ici !
 Adresse email Haut de page Bas de page 
 
vibra



Autorisation : Membre
Nb de messages : 595
Inscrit le : Mer 04 Avr 2007, 13:29
Posté le : Ven 26 Oct 2007, 19:48   Citer 

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 !!!
 Adresse email Haut de page Bas de page 
 
Rézus



Autorisation : Membre
Nb de messages : 861
Inscrit le : Sam 20 Jui 2009, 20:35
Posté le : Dim 12 Juil 2009, 11:06   Citer 

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é ^^

 Adresse email Haut de page Bas de page 
 
Rinrynque



Autorisation : Membre
Nb de messages : 30
Inscrit le : Dim 10 Mai 2009, 15:53
Posté le : Lun 27 Juil 2009, 18:11   Citer 

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 laugh.gif laugh.gif laugh.gif !

 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3388
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Mar 28 Juil 2009, 5:05   Citer 

Pourquoi ne pas faire tout simplement:

[code:.154236987423->A
A10^(C)-10int(A10^(C-1->X[/code]

Sangohan38

 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2019 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink