Forum

Catégorie : Discussions générales
Forum : Articles
Vues : 17995
Réponses : 18
Type : discussion
Etat : réponses autorisées

[TUTO] Les Fonctions de boucles

vibra le 06/05/2007 à 13:17
Un algorithme peut contenir une boucle. C´est-à-dire qu´une partie (ou totalité) de l´algorithme peut s´exécuter plusieurs fois avant de passer à la suite de l´algorithme.
Les boucles sont très utiles en programmation et permettent entre autres d´alléger les algorithmes, mais aussi sont parfois des passages obligés pour le bon fonctionnement des programmes.
Il existe deux types de boucles : les boucles non contrôlées, donc infinies (1), et les boucles contrôlées (2).

1) Les boucles non contrôlées n´ont pas beaucoup d´intérêt : la boucle va s´exécuter jusqu´à épuisement des piles, ou jusqu´à l´interruption de l´exécution du programme en appuyant sur [ON]. La boucle est créée à l´aide d´étiquettes non soumise à une condition. Pour réaliser une telle boucle, on place la commande Lbl (= étiquette) au début de la boucle et Goto (= aller à l´étiquette) en fin de boucle. De cette manière, dès que l´exécution du programme arrive à l´instruction Goto, l´exécution reprend immédiatement à l´endroit où il y a la commande Lbl. Il est également possible d´utiliser la fonction prgmPROGRAMME qui agirait exactement de la même manière qu´un Goto et un Lbl situé à la première ligne du programme.

2) Il y a 4 solutions pour créer une boucle contrôlée. Parmi ces solutions, il y en a toujours une qui convient mieux que les autres. Cela dépend du contexte.

A) If (= si):

Soit on met l´étiquette sous condition, c´est-à-dire, qu´on va faire recommencer la boucle ou pas si une condition est ou n´est pas vérifiée. Pour tester une condition, on utilise la commande If. Si la condition est vraie, alors la condition qui suit If est exécutée. En revanche, si la condition est fausse, alors la commande suivante est ignorée.
ex :
Code
Lbl 1
A+B->A
X+2->X
If X=1
Goto 1
1+1->W

Astuce : traduisez If, par « si »


B) While (= tant que):

While crée une boucle conditionnelle, dont le début est marqué par While, et la fin par End (= fin). While va tester une condition, qui, si elle est vraie, alors toutes les commandes jusqu´à End sont exécutées. Puis une fois arrivée à End, l´exécution du programme (EP) retourne à While, où la condition est analysée une nouvelle fois. Et ainsi de suite jusqu´à ce que la condition soit fausse. Dans ce cas, l´EP saut toutes les instructions situées entre While et End.
ex :
Code
While X>0,5
rand ->X
End
1+1->W

Astuce : traduisez While, par « tant que »


C) Repeat (= répète jusqu´à ce que)

Repeat s´apparente à While dans le sens où il crée également une boucle conditionnelle (dont le début est marqué par Repeat et la fin par End). La différence est que la condition est vérifiée non pas au début de la boucle, mais à la fin. De cette manière, les commandes de la boucle sont exécutées au moins une fois. Donc le programme exécute la boucle, puis une fois arrivé à End, il vérifie la condition imposée par Repeat. Si la condition est fausse, alors l´EP reprend à l´instruction Repeat, et relit les instructions de la boucle jusqu´à arriver à End, oùla condition est vérifiée une nouvelle fois (etc). En revanche si maintenant la condition est vraie, alors l´EP se poursuit.
ex :
Code
Repeat x=1
X-1+B->X
End
1+1->W

Astuce : traduisez Repeat , par « répète jusqu´à ce que »


D) For :

L´instruction For crée une boucle incrémentielle, c´est-à-dire qu´elle va augmenter une variable (d´une valeur initiale, jusqu´à dépasser une valeur finale), à chaque fois que l´EP va exécuter la boucle. Si la valeur initiale est inférieure ou égale à la valeur finale (en cas d´incrément positif), alors la boucle est exécutée jusqu´à End (qui marque la fin de la boucle). De là, l´EP reprend à l´instruction For, où la variable est incrémentée, puis la position de la valeur initiale par rapport à la valeur finale est analysée (etc). Maintenant si la variable est supérieure (en cas d´incrément positif) la valeur finale, alors l´EP saute toutes les instructions jusqu´à End.
En cas d´incrément négatif, il faut transformer inférieur en supérieur vice-versa.
ex :
Code
For (V,1,7,2
A+B->C                     (+++la boucle sera exécutée 4 fois+++)
B+1->B
End
1+1->W


Remarque : il est possible que des boucles soient imbriquées les unes des autres.
Stupid le 27/05/2007 à 19:16
à noter que c'est la technique du lbl et goto qui plantent le moins
Akmdad le 29/07/2010 à 00:18
ca dépent
Sangohan38 le 29/07/2010 à 05:14
Bon, puisque ça t'amuse de remonter des sujets vieux de deux ans pour répondre, tu va nous développer ta réponse...
Sinon, je pense qu'en mettant que c'est la moins "buggée" il sous-entendait que c'était sans doute la plus facile à utiliser par rapport aux autres puisque lorsque tu met un lbl/goto puis la lettre, la calto reconnait directement tandis que si tu as un code de la forme
Code
For(
If
End

Le End se rapporte au If et non au for alors que la syntaxe est correcte.

Sangohan38
Akmdad le 29/07/2010 à 13:14
la syntaxe est fausse:
Code

for
if
end
end
Sangohan38 le 29/07/2010 à 15:18
Oui, c'est ce que je disais ...
Le End se rapporte au If et non au For alors que lorsqu'il n'y a pas de boucle, un If ne nécessite pas de End.

Sangohan38
Akmdad le 29/07/2010 à 15:29
en meme temps
Code

lbl1
1+A->A
if A=/=5
goto 1

remplace un for
Sangohan38 le 30/07/2010 à 13:26
Oui, mais ce code nécessite plus de caractères donc sera plus lent.
Si tu veux optimiser une boucle, tu a la fonction IS et DS.

Sangohan38
Wirekey le 30/07/2010 à 19:53
Un exemple pls ?
Akmdad le 30/07/2010 à 20:03
IS(A = A+1->A
je crois
Sangohan38 le 30/07/2010 à 20:59
Voila se que donne le manuel:

Citation
IS>(variable,valeur)
commandeA
commandes

Incrémente la variable de 1; omet l'execution de commandeA si varaiable>valeur.


Sangohan38
linkakro le 30/07/2010 à 21:05
idem pour DS( avec décrément
Akmdad le 31/07/2010 à 12:00
logique
snap le 13/03/2011 à 11:21
Salut. moi je n'utilise jamais for( mais j'aimerai bien savoir comment sa marche^^). j'ai lu le 1er message mais j'ai pas compris ils correspondent à quoi le V et les 3 chiffres aprés for :p si quelqu'un pouvait m'aider svp crazy.gif
Sangohan38 le 13/03/2011 à 18:58
La boucle for s'utilise comme un compteur.
Tout d'abord, tu indique la variable qui va varier (ici V), ensuite tu met le nombre de départ, puis le nombre d'arrivé.
Enfin, si le pas est de 1, tu ne met pas de dernier argument, sinon, tu indique le pas.
Afin de boucler la boucle, tu met un end à la fin.

J'espère que ça t'aidera.

Sangohan38
snap le 17/03/2011 à 18:46
Merci ça va mieux maintenant mais le pas se fait en combien de temps? je veux dire si on met for(Z,1,20) ça se fera en combien de temps?
harven le 17/03/2011 à 18:51
Bonjour

Snap, j'aimerait te repondre mais je ne comprend pas bien ta question, pourait tu develloper d'avantage ?

Harven
Sangohan38 le 18/03/2011 à 12:19
Le temps n'a pas cours sur la calto.
Tu peut essayer de t'en rapprocher en maximum en faisant des tests mais selon les fonctions utilisées, la taille du programme, la mémoire disponible etc... ça varie énormément.

Sangohan38
snap le 18/03/2011 à 15:59
Merci^^ Je pourrai enfin mettre des for dans mes programmes laugh.gif bigmouth.gif