Des boucles qui tournent

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Superman

V
Ancien staff
Dec 2, 2009
2,489
0
596
For... Next

Qu'est-ce qu'une boucle ?


Les boucles permettent de répéter une même action plusieurs fois, en n'écrivant qu'une seule fois la procédure.
Trois types de boucles s'offrent à vous, plusieurs critères permettent de choisir la plus adaptée à votre cas.

Boucle de type "Pour" (For - Next)



Cette boucle s'utilise lorsque le nombre de fois que nous devons parcourir la boucle est DÉTERMINÉ.
Que ce soit une constante, ou une valeur contenue dans une variable, si ce nombre est accessible par le programme alors cette boucle est la plus adaptée.

Fonctionnement



Cette boucle fonctionne à l'aide d'un compteur qui utilise une variable généralement appelée $i.
Code : Autre1
2
3
4
5
For $i = <valeur de départ> To <valeur d'arrivée> Step <pas>

; Actions à effectuer

Next



Exemple 1



Code:
Code : Autre1
2
3
4
5
For $i = 0 To 10

msgbox(0,"Tutoriel", $i)

Next



Ceci nous affichera successivement : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.

Et si je ne veux afficher que 0, 2, 4, 6, 8, 10, je fais comment ?

Il suffit d'ajouter un "Step" à la fin de la ligne For, comme ceci :
Code : Autre1
2
3
4
5
For $i = 0 To 10 Step 2

msgbox(0,"Tutoriel", $i)

Next


0n a maintenant : 0, 2, 4, 6, 8, 10.

Exemple 2


Compte à rebours.

Je voudrais que vous fassiez un mini-mini-TP (ne prenez pas peur
clin.png
).
Très simple, il faut demander à l'utilisateur d'entrer un nombre, puis le programme va afficher une message box avec ce nombre et quand l'utilisateur cliquera dessus, le nombre du dessous apparaîtra... Magique ? Non ! (Oh, Oh, Oh, It's Magic, you know...
magicien.png
)

Vous devrez utiliser la fonction InputBox, alors n'hésitez pas à aller voir dans l'aide comment elle fonctionne, quels sont ses paramètres. Vous verrez qu'elle n'est pas très différente de MsgBox que nous avons vue précédemment.

Fini ? Ça devrait ressembler à quelque chose comme ça :

Code : Autre1
2
3
4
5
6
$depart = InputBox("Tutoriel", "Entrez un nombre :")

For $i = $depart To 1 Step -1
MsgBox(0,"Tutoriel", $i)
Next
MsgBox(0,"Tutoriel", "ZÉRO !")



Vous n'avez pas fait la même chose ? Ce n'est pas grave, je vous donne une chance de vous rattraper plus bas !
clin.png

While... WEnd

Mais quand j'attends que l'utilisateur fasse quelque chose, je ne sais pas combien de boucles je dois effectuer, comment faire ?

Nous allons alors utiliser une boucle plus adaptée, la boucle "Tant que".

Boucle de type "Tant que" (While - WEnd)



Cette boucle s'utilise quand le nombre de fois que l'action doit être effectuée est inconnu. Si la proposition est fausse dès le départ, la boucle ne se lance pas.
Cette boucle n'a pas besoin de compteur pour fonctionner, la boucle est simplement effectuée tant que la condition reste vraie.

Fonctionnement



Code : Autre1
2
3
4
5
Tant que (condition est vraie)

On effectue ces actions

Fin



Ce qui se traduit en Autoit par :

Code : Autre1
2
3
4
5
While [signifie littéralement tant que] (proposition est vraie)

;Actions à effectuer

WEnd



Exemple



Les boucles sont très utilisées pour attendre une action de l'utilisateur. En effet, il est impossible de savoir exactement quand l'utilisateur va enfin se décider à faire quelque chose. Alors c'est au programme de l'attendre (l'utilisateur est beaucoup plus long, si si je vous assure
rire.gif
).

Cesse tes bavardages inutiles, et continue ton tutoriel !

OK les amis, restons calmes !
siffle.png


Imaginons que la variable $quitter prenne la valeur 1 quand l'utilisateur décide de quitter le programme.
On a donc :

Code : Autre1
2
3
4
5
While ( $quitter <> 1 )

;Actions du programme

WEnd




Très souvent on va utiliser une boucle sans fin, c'est-à-dire que théoriquement elle ne s'arrêtera jamais.
Pour faire une boucle sans fin, on peut déclarer une boucle "tant que" de la manière suivante :

Code : Autre1
2
3
4
5
While 1

;action à répéter sans fin

WEnd



Cette boucle est ce que l'on peut appeler la partie principale du programme. Celui-ci va se balader dans la boucle en permanence, et s'il rencontre des If valables (cf. actions sous conditions), il va faire différentes actions.

Ne copiez pas tel quel le code ci-dessus, en effet le programme va peut-être faire planter votre ordinateur car il va en permanence utiliser votre CPU car aucune action n'est inscrite dans ce code. Essayez pour voir, mais que ceux qui ont des ordinateurs de l'an 2008 (totalement dépassés
heureux.png
) ne viennent pas se plaindre !


On va donc tout simplement dire au programme de faire des pauses de temps en temps.
Je sais que ce chapitre est très difficile (d'ailleurs je vous conseille de faire une pause après), mais voilà le code que j'ai utilisé afin de savoir combien de tours faisait le programme en 1 seconde :

Code : Autre1
2
3
4
5
6
Local $t = TimerInit(),$i = 0 ; Declaration des variables

While TimerDiff($t)<=1000 ; Boucle principale. Tant que le temps est inférieur à une seconde, on additionne 1 à la variable $i
$i = $i + 1
WEnd
MsgBox(65,"Tutoriel",$i) ; On affiche $i


Ici il n'y a qu'une chose nouvelle, la gestion des Timers. Ces derniers s'utilisent de la manière suivante.
Quand on le veut, on initialise le temps. Puis on demande par une boucle le temps écoulé depuis l'initialisation. Si vous ne voulez pas tout retenir, ne retenez pas ça.
Ce qu'il faut savoir, c'est que chez moi, en 1 seconde, le programme parcourt 175 000 fois la boucle.

Maintenant, nous allons voir une nouvelle fonction.

Sleep(Time)
Time est un entier en millisecondes. Pour pouvoir vérifier, n'oubliez pas d'appuyer sur F1 dans Scite pour accéder à la documentation.

Par exemple :
Sleep(1000)


À la differences des fonctions timer[...](), Sleep() va mettre en pause le programme, ou littéralement le plonger en léthargie. Pour comprendre, ajoutez Sleep(10) dans le code précédent.

Et alors , c'est pas 10 malheureuses millisecondes qui vont changer le monde !


Oh que si, essayez !

Chez moi, le programme ne fait plus que 65 tours au lieu de 175000. Ceci va permettre de libérer de la puissance pour l'ordinateur en restant tout à fait compétitif. Ne vous inquiétez pas, l'utilisateur ne va pas s'aperçevoir du changement, mais l'ordinateur si !
Donc à partir de maintenant, vous allez me faire ce plaisir, vous ajouterez un Sleep(10) dans toutes vos boucles While.

On peut également retrouver la boucle "Pour", vue précédemment, de cette manière



Code : Autre1
2
3
4
5
6
7
$i = <valeur de départ>
While ($i <> <valeur d arrivée>)

;actions à effectuer

$i = $i + <pas>
WEnd


Do... Until

Boucle "Faire - jusqu'à"



Cette boucle répète une action jusqu'à ce que la condition à atteindre devienne vraie.
Elle est utilisée lorsque le nombre de fois que l'action doit être effectuée est inconnu, mais dans ce cas l'action doit être effectuée AU MOINS une fois.

Fonctionnement



Code : Autre1
2
3
4
5
Do

;actions à effectuer

Until (proposition)


Quand "proposition" devient VRAIE alors la boucle s'arrête.
Si la proposition est vraie dès le premier passage, l'action s'effectue quand même une fois. En effet la vérification ne se fait qu'à la fin de la boucle.

Exemple


On veut demander un mot de passe à l'utilisateur pour lancer le programme.
Tant qu'il se trompe on lui redemande le mot de passe. On ne sait donc pas combien de fois l'utilisateur va se tromper.
Une boucle while ne convient pas car l'action doit être effectuée au moins une fois.

Code :
Code : Autre1
2
3
4
5
6
7
8
9
10
11
Do
$pass = "mot de passe"
$input = InputBox("Tutoriel", "Entrez le mot de passe :")

If ($input <> $pass) Then
MsgBox(0,"Tutoriel", "Mauvais mot de passe !")
Else
MsgBox(0,"Tutoriel", "Le mot de passe est correct !")
EndIf

Until ($input = $pass)



Ce code ne devrait pas vous poser de réels problèmes, et ce sous-chapitre est déjà assez étoffé pour le remplir encore...
Passons à la suite, voulez vous ? N'hesitez pas à faire une pause pour vous éclaircir les idées.
blink.gif
 

RedBust

Membre
Oct 5, 2010
7
0
421
Tout droit pompé du site du zéro.
J'ai contribué à la rédaction de ce tutoriel, je suis bien placé pour le dire...
J'aimerais juste que tu cites tes sources.
 

HackeurD

Membre actif
Jul 22, 2010
275
0
581
/usr/src/kernels/
Ca fais quoi ? Tu sais, on t'as pas demander de le dire donc :))

Après, au lier de post des truc inutiles, va fais ta présentation, tu sera gentil =)