Gamme TI-82
Partager sur Facebook Fil RSS Imprimer la page
Cacher les résultats

Résultat de la recherche



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
Avatar

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
Avatar

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 : 887
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
Avatar

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 
 
Google_AdSense



Publicité    



 
Rézus
Avatar

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 : 3391
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 - 2016 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink
 

Site hébergé par Free Page sous licence creative commons Page validée par le W3C (XHTML 1.0 Transitional) Feuille de style validée par le W3C Flux RSS 2.0 valide Page étiquetée par l'ICRA Page testée par Ocawa