[Astuce] Test de condition
Posté le 21/08/2011 16:24
Vous savez qu'il est plus rapide d'utilisez les if que les => niveau rapidité. Vous savez aussi qu'il est des fois plus léger de prendre =>.
Il faut savoir que => fait office de And si vous faites un test de condition sans if.
Déjà il faut savoir que les And et Or (logic) font 2 octets, et pourtant pour les programme Base, ils ne font que 1 octet. C'est une possibilité, changer de ANd à and, et Or à or, surout que base possède les xor. Mais il n'est pas vraiment possible de mettre un caractère de base dans un programme run sans modifier le fichier calculatrice. Je veux bien aider ceux qui veule faire, je sais le faire, mais j'attendrai de faire quelque chose de plus beau avant de le proposer.
Mais bon, j'ai parlé de tout ça, mais c'était pas vraiment ça que je voulais dire.
If A=2
then "Salut"
ça vous dis quelque chose ?
Bien, il faut préciser qu'il n'y a pas besoin de Ifend en fin de programme.
Ce que je viens d'écrire juste avant marche très bien dans un programme seul, avec rien à la suite.
If A=3
Then "Bien"
Else "le Else"
Ne pas oubliier le Else qui est bien utile, il permet de gagner en vitesse selon les cas.
La calto lit "bien", mais pas "le Else".
En effet la calto saute, c'est à dire que vous pourriez très bien faire:
If 1
then "Mon code"
Else Alors je mets quelque coms sans apostrophe parce que ça me saoule, mais je voudrais préciser quelque chose sur "mon code", c'est court mais c'est bien
Étant donné que c'est impossible d'aller à Else, la calculatrice ne lira jamais, mais ça permet de mettre des commentaires en plusieurs lignes, précisez quelque petits trucs ... bref ce que vous voulez.
Quelque chose que j'ai vu de plutôt as mal, mais que je sais pas si quelqu'un l'avait déjà fait, c'est la méthode de la personne qui a fait tekkent pour le concours, il utilise des Return dans ces programmes.
Non non, je ne dis pas que vous ne connaissez pas les return, je dis juste qu'il pousse encore plus loin le: je lis ça, mais pas ça.
En effet, vous pouvez très facilement augmenté le nombre de else:
If A
then K
Else If G
then L
Else If T
.....
bien sûr dans un programme simple tel que celui là, pas besoin de IfEnd vu qu'il n'y a que des test de conditions et rien d'autre.
Dans Tekken, des return sont utilisés:
If A
then K
Return
Else If G
then L
Return
Else If T
.....
C'est spéicifique à ce genre de programme qui test de nombreuses conditions, mais cela augmente l'idée, "je lis ça, j'ai finis ? -> bon bah je perds pas de temps, je m'en vais d'ici".
ça évite de lire tour le programme afin de savoir s'il y a une suite.
Je n'ai pas fait de test de rapidité, mais je pense que les return sont facultatifs.
Ce que vous pouvez faire aussi quand vous avez des programmes comme ça qui test de nombreuses conditions, c'est de séparer encore les conditions en catégories.
(ce genre de programme qui test de nombreuses condition est en faite un pseudo switch en basic)
Exemple:
Si on test A pour savoir si il est égale à 0 ou 1 ou 2 ou 3, ...
je vais simplement coupé en 2 partie, de 0 à 5 et de 6 à 10. J'aurai pu faire autrement, mais c'est pour un exemple.
If A<6
then If A=1
then
Else If A =2
....
IfEnd
Else If A =6
then
Else
....
ça permet d'aller un peu plus vite.
Pour aller plus loin, et essayer de gagner encore + en rapidité, c'est si vous pouvez saoir quel sont les probabilité de sorti d'un nombre.
J'explique, s'il est for possible que A soit égale à 4, faite en sorte que 4 soit la ou l'une des première condition.
Si c'est en + des test de condition qui tourne à fon en boucle, autant que ça aille le plus vite possible.
Bon parlons de la partie la plus moche.
La compression de condition:
ça parait bizarre, mais tout d'abord il est possible de changer les And et les Or en les substituant par des multiplications et additions. Ce n'est pas tout le temps trop pratique mais:
If A And B
ceci ce compresse très facilement:
If AB
En effet, si A=0 (c'est à dire si If A échoue), AB fera forcement 0, donc le test de condition enverra directement au else, ou au IfEnd.
J'avoue qu'avec les Or ce n'est pas forcement très compressable, mais si on a le même exemple que juste au dessus, on gagne tout de même 1 octet.
If (A And B) Or (B And C)
If AB+BC
If B(A+C
Et si on test des égalité ou des inégalité, etc ... ?
Bon bah y a pas vraiment de règle, mais faut réussir à faire qqchose de clair et lisible pour la calto:
If (A>2) And (B<4)
Bon bah là, on peut rien faire à pars retirer le And
(A>2)(B<4)
Si on retire les parenthèses on se retrouve avec un calcul erroné/
A>2B<4
Si A>2B et <4 => erreur
If (A=2) And (B=6) And (C=9)
If 2=1(6=B(9=C
On lit les parenthèses en premier, Si 9=B, si 0, toute la ligne vaut zéro.
Si 6=Bx1, etc ...
Il ne faut donc pas remplacer par exemple 6 par zéro.
car si 9=C est faux
If 0=Bx0 est vrai. Or toute la ligne devrai être fausse. Donc là tout est faux.
Avec les inégalité, faut faire attention, de même pour les supérieurs et inférieurs.
Pensez bien avant de laisser telquel. Faites de nombreux test histoire de voir si c'est bien ce que vous voulez.
Cette histoire permettra de gagner quelque octets, mais c'est sûr qu'elle vous fera pas gagner une fortune