percevan80 le 23/05/2013 à 08:43
Voici un petit code qui vous prendra 20 seconde a recopier
Code
Lbl 1
1->A
entAleat(1,16)->B
entAleat(1,16)->C
Lbl 2
EffEcr
If A=9
Then
Goto 1
Else
Output(A,B,"I
Output(A,B,"I
69!
A+1->A
Goto 2
J'aimerai savoir pourquoi un programme si simple commence a lagger au bout de trés peu de temps parce que sa m'énerve!!!

m@thieu41 le 23/05/2013 à 13:41
Bonjours,
C'est un truc tout bête:
Tu as mis:
Code
If A=9
Then
Goto 1
Else
A ne jamais faire
En effet un
Aurait suffit, puisque si A!=9, l'opération Goto 1 n'est pas exécutée, et la calto reprend après cette instruction.
Je vais essayer de répondre à ta question, quand au pourquoi ça lague:
Lorsque tu faisais:
La calto "retiens" qu'elle doit s'attendre à rencontrer un "End", qui doit lui indiquer qu'elle n'est plus dans le bloc "if".
Or, juste après le Then et le Else, tu met des Goto 1/Goto 2.
Ceci ne fait pas sortir la calto de le bloc "if"
Ensuite, elle réexécute un nouveau bloc "if", alors qu'elle n'est pas sorti de l’ancien -> Les "if" s'accumulent, et à chaque fois, tu en rajoutes un à la "pile".
Ceci fait ralentir la calto...
Ce qu'il faut retenir:
Lorsque tu utilise l'instruction "if Then Else" (c'est pareil pour les boucles (Repeat / While / For et autres...), la calto "retient" qu'elle risque de rencontrer un "End".
Un "Goto" ne fait pas sortir la calto des blocs de condition/boucles.
Ainsi, la calto retient à chaque fois qu'elle doit s'attendre à un "End", ce qui finit par ralentir sa performance.
Il ne faut donc jamais utiliser de "If Then" / "While"... sans mettre de "End" (de sorte à ce que la calto le lise avant de retourner dans le même bloc.
Avec juste "If" par contre, seule l'instruction suivante est concernée, il n'y a pas besoin de "End", tu peux donc mettre un "Goto" dans ce cas.
En fait, il s'agit d'un problème qu'on peut exploiter afin de créer des "routines", je sais que quelqu'un (Linkakro il me semble) avait posté une explication peut-être plus claire sur le sujet, je te donne le lien si je le trouve.
Si tu as des questions, n'hésite pas

linkakro le 23/05/2013 à 16:52
HéHé c'est bien moi l'auteur de l'article que mentionne m@thieu41.
http://tout82.free.fr/forum/sujet.php?sujet=2757
L'explication de m@thieu41 me semble bien.
Mon article ne développe pas en détail le comportement des routines utilisant ce bug, contrairement au tuto de mdr1 du Site-Du-Zéro, qui m'a inspiré et que j'indique.