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
).
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...
)
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 !
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
).
Cesse tes bavardages inutiles, et continue ton tutoriel !
OK les amis, restons calmes !
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
) 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.
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
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...
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 !
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
Cesse tes bavardages inutiles, et continue ton tutoriel !
OK les amis, restons calmes !
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
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.