Le 'si... alors'

    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
L'action sous condition

Qu'entends-tu par "l'action sous condition" ?

C'est très simple, et vous allez vite vous en rendre compte.

Cette logique de l'action sous condition peut etre résumée par la phrase suivante :
"Si j'ai faim, je vais dans le frigo me chercher une banane. Sinon, je mange une glace." (L'Abus de nourriture est dangereux pour la santé.)

Comment fonctionnent les actions sous condition ?


Un des piliers de la programmation, tout language confondu, est "l'action sous condition".
Cela se présente sous la forme :


Code : Autre1
2
3
4
5
6
7
8
9
SI (proposition-à-vérifier est vraie ou fausse) ALORS :
...
on fait ça
...
SINON
...
on fait ça
...
FINI




Toute la profondeur d'un programme est basée sur cette architecture.
En Autoit on a les possibilités suivantes.

If\Then\ElseIf\Else\EndIf



C'est le mode le plus connu, d'ailleurs en AutoIt, ca ressemble drôlement au Basic, vous ne trouvez pas ?
clin.png

Voila un exemple classique :

Code : Autre1
2
3
4
5
6
7
If (proposition-à-vérifier est vraie ou fausse) Then
; Actions à effectuer
ElseIf (proposition-à-vérifier-2 est vraie ou fausse) Then
; Actions à effectuer
Else ;Si n'importe quoi d'autre
; Actions à effectuer
EndIf ;on clos la condition



Ce qui pourrait donner :
Code : Autre1
2
3
4
5
6
7
8
$note_de_maths = 7.5
If $note_de_maths >= 15 Then
MsgBox(0,"Tutoriel Autoit","Très bien, continue comme ça !")
ElseIf $note_de_maths >= 8 Then
MsgBox(0,"Tutoriel Autoit","Peut mieux faire !")
Else ;Si n'importe quoi d'autre
MsgBox(0,"Tutoriel Autoit","Élève assidu qui se retourne parfois... pour regarder le tableau.")
EndIf ;on clot la condition



Les opérateurs utilisés ici (= et >=) sont expliqués ci-après.

Select\Case\EndSelect



Un autre mode de programmation, qui n'en est pas moins pratique et intéressant, est la condition par "case".
Je m'explique :

Code : Autre1
2
3
4
5
6
7
8
9
10
11
ACTIVATION DU MODE SELECTIF
Case n°1 (à activer si proposition-à-vérifier est vraie)
; Actions à effectuer

Case n°2 (à activer si proposition2-à-vérifier est vraie)
; Actions à effectuer

Case n°3 (à activer si proposition3-à-vérifier est vraie)
; Actions à effectuer
;etc.
FIN DU MODE SELECTIF



Ce qui se traduit par :

Code : Autre1
2
3
4
5
6
7
8
9
10
11
Select
Case (à activer si proposition-à-vérifier est vraie)
; Actions à effectuer

Case (à activer si proposition2-à-vérifier est vraie)
; Actions à effectuer

Case (à activer si proposition3-à-vérifier est vraie)
; Actions à effectuer
;etc.
EndSelect



Cette méthode est très utile pour simplifier la lisibilité du texte dans une boucle par exemple.

Switch\Case\EndSwitch



C'est une variante du Select. C'est quasiment la même chose, à l'exception qu'elle est généralement utilisée pour les variations de valeur d'une même variable.
Un exemple tout de suite, un peu plus approfondi pour une fois :

Code : Autre1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$var = 30

Switch $var
Case 1 To 10
MsgBox(0, "Exemple", "$var est plus grand que 1 et moins grand que 11")

Case 11 To 20
MsgBox(0, "Exemple", "$var est plus grand que 10 et moins grand que 21")

Case 21 To 30
MsgBox(0, "Exemple", "$var est plus grand que 20 et moins grand que 31")

Case 31 To 40
MsgBox(0, "Exemple", "$var est plus grand que 30 et moins grand que 41")

Case Else
MsgBox(0, "Exemple", "$var est plus grand que 40 ou inférieur ou égal à 0")

EndSwitch



Ici, on va "switcher" dans la variable $var, pour différents intervalles. En l'occurence, c'est la case 21 To 30 qui va s'activer. Ce mode permet donc de ne tester qu'une variable, mais c'est le plus lisible. On l'utilisera pratiquement toujours lors de la création de GUI que vous verrez dans la partie concernée. En effet, on devra alors verifier les actions faites par l'utilisateur, et une variable contiendra ces informations, variable qu'on testera avec un Switch.

Vous pouvez egalement retenir que certains tests sont plus rapides que d'autres. Rassurez-vous, jamais vous ne le remarquerez, mais si vous voulez programmer 'Paf le chien' par exemple, alors vous devrez commencer à vous inquieter de la rapidité de votre code, et Switch est très bon dans ce domaine.

Les opérateurs

Vous avez déjà aperçu le =, mais il existe d'autres opérateurs :


OpérateurSignification = égal > supérieur < inférieur <= inférieur ou égal >= supérieur ou égal <> différent



Ces opérateurs sont très simples à utiliser.

Exemple 1


L'utilisateur doit entrer le bon mot de passe pour lancer le programme.

Code : Autre1
2
3
4
5
6
7
8
$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


Ici, l'opérateur signifie 'différent de'. S'il est vérifié, alors on affiche "Mauvais mot de passe !".

Exemple 2


Notre programme vérifie si le nombre entré par l'utilisateur est bien positif ou nul.

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

If ($nombre >= 0) Then
MsgBox(0,"Tutoriel", "Ce nombre est positif.")
Else
MsgBox(0,"Tutoriel", "ce nombre est négatif.")
EndIf




Il est également possible de faire des propositions plus élaborées grâce aux opérateurs ET, OU qui se traduisent en Autoit par AND, OR.

Exemple 3


L'utilisateur doit entrer un bon mot de passe parmi les deux possibles.

Code : Autre1
2
3
4
5
6
7
8
9
10
11
12
$pass1 = "mot de passe"
$pass2 = "autoit fr"

$input = InputBox("Tutoriel", "Entrez le mot de passe :")

If ( ($input <> $pass1) AND ($input <> $pass2) ) Then
MsgBox(0,"Tutoriel", "Mauvais mot de passe !")
Exit
Else
MsgBox(0,"Tutoriel", "Le mot de passe est correct !")
...suite...
EndIf



Notez que If $input <> $pass AND $input <> $pass1 Then marche également (sans les parenthèses).


Exemple 4


Notre programme vérifie si le nombre entré par l'utilisateur est bien compris entre 0 et 10.

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

If (($nombre >= 0) AND ($nombre <= 10)) Then
MsgBox(0,"Tutoriel", "Ce nombre est compris entre 0 et 10.")
Else
MsgBox(0,"Tutoriel", "Ce nombre n'est pas compris entre 0 et 10.")
EndIf



Recherche des conditions


Il peut arriver qu'une proposition soit dure à trouver, essayez alors la technique suivante :

  • vous n'arrivez pas à trouver la proposition (1) à mettre pour que l'action s'effectue,
  • essayez alors de trouver la proposition (2) à mettre pour que l'action NE s'effectue PAS.
  • il suffira alors d'un peu d'astuce pour trouver la (1) à partir de la (2).


Essayons sur l'exemple 3



Dans cet exemple nous voulons afficher un message d'erreur si le mot de passe entré par l'utilisateur ne correspond à aucun des deux mots de passe enregistrés dans le programme, et continuer dans le cas contraire.
Or nous n'arrivons pas à trouver la proposition correspondante.

Cherchons donc la proposition pour que le message d'erreur ne s'affiche pas.

=> Le programme ne doit pas afficher d'erreur si le mot de passe fourni par l'utilisateur correspond à l'un des deux mots de passe enregistrés dans le programme.

On aurait donc la proposition suivante : If ( ($input = $pass1) OR ($input = $pass2) ) (2).
Cette proposition peut être plus facile à trouver.

La proposition (1) se trouve en inversant la (2), en utilisant la correspondance suivante :

211409.png



Code : Autre1
( ($input = $pass1) OR ($input = $pass2) ) (2) ==> ( ($input <> $pass) AND ($input <> $pass1) ) (1)



On retrouve bien notre proposition.

On aurait donc pu écrire notre exemple 3 de la manière suivante :
Code : Autre1
2
3
4
5
6
7
8
9
10
$pass1 = "mot de passe"
$pass2 = "autoit fr"

$input = InputBox("Tutoriel", "Entrez le mot de passe :")

If ( ($input = $pass1) OR ($input = $pass2) ) Then
MsgBox(0,"Tutoriel", "Le mot de passe est correct !")
Else
MsgBox(0,"Tutoriel", "Mauvais mot de passe !")
EndIf



Vous avez tout compris ? Alors c'est le moment de passer à la pratique.
smile.png

Mini-TP

Que pensez-vous d'un mini-TP ? C'est très simple, vous demandez à l'utilisateur le jour, et vous lui répondez en fonction de ce jour !


  1. On demande à l'utilisateur d'entrer le jour d'aujourd'hui : la fonction InputBox semble tout indiquée.
    Pour savoir comment l'utiliser, consultez l'aide comme nous vous l'avons appris (pour ceux dont la mémoire joue des tours, il faut appuyer sur F1 dans Scite4Autoit).
  2. On récupère la variable $jour, et on la traite.


Essayez d'écrire ce programme tout seul, sinon voilà une solution :

Code : Autre1
2
3
4
5
6
7
8
9
10
11
$jour = InputBox("Tutorial", "Quel jour sommes-nous ?")

If ($jour = "Vendredi") Then
msgbox(0,"Tutoriel","c'est bientôt le week-end !")
Else
If ($jour = "Lundi") Then
msgbox(0,"Tutoriel","Bon début de semaine !")
Else
msgbox(0,"Tutorial","Comment se passe la semaine ?")
EndIf
EndIf



Voilà en quelques lignes comment agit le programme.


Que se passe-t-il si nous entrons "Lundi" ?


La première condition If ($jour = "Vendredi") est fausse, on saute donc les actions présentes dans le "If" et on continue dans le "Else".
On arrive alors à un deuxième si-alors, la condition ($jour = "Lundi") est vraie ! On effectue donc les actions présentes dans le If, c'est-à-dire afficher "Bon début de semaine !", et on saute les actions présentes dans le Else.

Que se passe-t-il si nous entrons Mardi ?


La première condition If ($jour = "Vendredi") est fausse, on continue dans le Else
On arrive à la seconde condition If ($jour = "Lundi") qui est fausse également, on continue donc dans le Else, et on affiche donc "Comment se passe la semaine ?".

Que se passe-t-il si nous entrons Vendredi ?


La première condition If ($jour = "Vendredi") est vraie !
On effectue donc les actions présentes dans le If, c'est-à-dire afficher "C'est bientôt le weekend !", et on saute le Else.


Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!