Accueil Forum A Propos
Boucle de l'amos
Bonjour, attacher vos ceintures, nous allons parler des boucles pour notre Amos cherie. Vous êtes prêts ? Non ?
Une boucle dans un programme informatique, permet de boucler. Oui vous allez me dire. C'est logique. Mais c'est quoi boucler un programme ? Hum hum ba de revenir au début et de pouvoir répéter des actions donc de nous simplifier la tache. Nous allons passer en revus les boucles qui sont disponibles sur le Basic de l'amos.

GOTO:
Rigolez pas svp. C'est un enclencheur de boucle, donc je l'indique. Goto permet de dire au programme va ici maintenant. Donc faite cette programmation pour voir.

ICI:
Inc X
Print X
GOTO ICI

Lancez ce petit programme. ET vous allez voir, la machine va compter et afficher la valeur de X. Ceci dit GOTO est bien sur les plus vielles machines avec le Basic qui ne posséde que ça, mais nous entrons vite fait dans le chantier avec du code dit spaghetti. Pour sortir de cette boucle, il faut ajouter une condition et un autre Goto pour se brancher sur une autre partie du programme par exemple. Bon vous avez vu le topo.

Do Loop:

Ah on entre dans un autre domaine. J'avoue que j'aime beaucoup utiliser le DO Loop. Surtout dans ma boucle principale.
En gros c'est simple, quand le programme arrive à Loop, ba il repart au dernier Do r'encontrer.

Do
Inc X
Print X
Loop

Votre Amiga va de nouveau compter. Pour sortir de la boucle ? C'est simple c'est la commande : Exit.
genre : If X=100 then Exit

Do
Inc X
Print X
If X=100 then Exit
Loop

A 100 c'est la fin ! Bon c'est quand même un peu comme GOTO, faut quand même r'ajouter une ligne si on veux sortir de cette boucle.
Ou mieux il existe une fonction pour ça.

Do
Inc X
Print X
Exit if X=100
Loop

For / Next:

Alors celui la, beaucoup de monde l'aime. Il permet de boucler le morceau du programme un nombre de fois prédifinie. Voici l'exemple pour compter jusque 100

For X = 0 to 100
print X
Next

Quand le programme rencontre Next, le compteur incrémente X de un. Ce qui fait qu'a la sortie de de la boucle, dans cette exemple X ne vaut pas 100 mais 101 !!!
Ah, autre truc à savoir quand le programme commence à lire For X=0 to 100, si x vaut une autre valeur que 0, il est réinitalisé à 0 (ou une autre valeur de départ)
Donc il ne faut pas utiliser la boucle For/next directement pour des testes.
Bon on peux on ajoutant Step 2 sur la première ligne par exemple, arrivé à Next, le X va être acrémenté de 2. Cela peut être utile.

For X = 0 to 100 Step 2
print X
Next

A oui autre chose, sur les manuels en basic, le next de la fin doit s'écrire Next X ou X est bien sur le nom de la variable.
Mais vous pouvez l'oublier et marquer seulement Next.
(Le Saviez vous ? Sur Amstrad CPC, c'était un gain de temps machine en inscrivant directement Next que de faire Next X ? Peut être aussi sur amiga nous ferrons des tests de rapidité plus tard)

Bref, j'aime cette boucle pour poser des Tiles par exemple sur la zone de jeu, initier des tableaux , enfin plein de chose. Et bien sur on peu embriqué des boucles les une dans les autres.

For Y=0 to 4
For X=0 to 4
Paste Icon X*16,Y*16,1
Next X
Next Y
Routine qui permet d'afficher 5 tiles sur 5 de 16px de longueur et de hauteur avec la boucle For/Next
J'ai bien écrit Next X et Next Y pour bien voir qu'il faut respecter les Next par apport au For ! Attention à cela quand votre code commence à être gros dans des boucles !


While / Wend:
Permet de jouer la boucle tant que la condition est vrais. Une fois la condition fause la boucle n'est plus joué tout simplement.

While X<100
Inc X
Print X
Wend

Le programme va bien compter jusque 100. Mais une fois sorti du programme, la valeur de X est de 100, la condition n'est plus respecté, la boucle n'est pas jouée.

Repeat/Until

Repeat
Inc X
Print X
Until X>99

Attention cette fois si la boucle fonction jusque à la condition soit exacte. Dans cette exemple on rejoue la boucle tant que X ne soit pas supérieur à 99. Donc la boucle va se jouer une fois de plus à 99 pour nous donner 100 et la la conditin est vrais, Fin on passe à la suite du programme.

Voila donc les 4 boucles utilisés.

Do/Loop
For/Next
While/Wend
Repeat/Until

Sans oublier le GOTO qui peut quand servir de temps en temps non ? Ok non alors !


Test de boucle :
Nous allons tester deux trois truc pour voir un peu la rapidité des boucle. Nous allons tester un "comptage" à l'aveugle du proco et de l'amos dans des boucles.
Nous allons travailler avec un grand chiffre pour bien voir la différence. 100000
Biensur c'est que théorique !
J'ai testé sur Amos Pro 2.0
Avec WinUAE est un procésseur en 68020
Amiga 1200 Kickstart 3.1 (40,68)
2 Chip Ram et 8 Z2 Fast900
Sur un Pc Windows Seven, 64 bits, 16 Go de ram et un procésseur I7 6700 cadancé à 3,40 GHz et une Gforce 9600 GTX


Nous allons débuter avec for/next

TD=Timer
For X=0 to 100000
Next
TF=Timer
Print TF-TD
Wait key

Ce premier exemple nous donne entre 45 et 46

Do
Inc X
Exit If X=100000
Loop

Oula, 311
Et si je réunis sur la même ligne
Inc : Exit If X=100000
Cela nous fait 320,321
L'amos n'aime pas les multies fonctions sur la même ligne !
Et si je fais une condition : If X=100000 then Exit
on passe à 342 ! Donc pour sortir d'une boucle Do loop, un beau Exit If est plus rapide.

Et si on remplace seulement Inc X par X=X+1 ? Ba on tombe à 483.
Aller j'ai envie de voir avec Goto

DEB:
Inc X
if X = 100000 then goto FIN
Goto DEB
FIN:

379 !

Avec les While

While X<100000
inc X
Wend

Le résulta nous donne 286 donc plus rapide qu'un do / loop
Et le derniers

Repeat
inc X
until X>100000

280 (même avec X>99999)

For Next à vide semble rapide mais attention chaque ligne entre un début et une fin de boucle fait perdre énomément de temps même à vide !!! Et même sur un goto !!!

Classement :

For/Next à 45
Repeat/Until et While/Wend sont à 280
Do Loop à 311
Goto à 379

Bien sur tout ça est relatif !
Off-Soft est un site dédié au Rétro Making Amateur , publié par Offgame