Aller au menu - Aller au contenu

Icône Conditions et boucles conditionnelles

Avatar
Mise à jour : 13/12/2010
Difficulté : Facile Facile Creative Commons BY-NC-SA
23 410 visites depuis 7 jours, dont 1 050 sur ce chapitre classé 14/786

Une quoi ?


Une boucle conditionnelle est quelque chose de fort utile et courant en programmation.

Je vous donne un exemple : imaginez que vous souhaitez que votre application effectue une action uniquement si le nombre entré est égal à 10, ou une autre tant qu'il est égal à 10. Eh bien, c'est précisément dans ce cas de figure que les boucles conditionnelles trouvent leur utilité.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Les boucles conditionnelles

Aperçu des différentes boucles



« If », mot anglais traduisible par « si »


Retenez bien que les « mots » que le programme comprend et utilise sont anglais et ont donc une traduction qui peut vous aider à vous rappeler à quoi ils servent.

Attaquons avec la boucle la plus simple, mais non sans intérêt : If.

Une ligne commençant par If est toujours terminée par Then, ce qui signifie « Si, alors ». C'est entre ces deux mots que vous placez la condition souhaitée.

Donc, si j'écris le code If MaVariable = 10 Then, ce qui se trouve en dessous ne sera exécuté que si la valeur de « MaVariable » est égale à 10.

Code VB If MaVariable = 10 Then
Français Si « MaVariable » est égale à 10 alors


Image utilisateur


Comment cela, tout ce qui se trouve en dessous ? Tout le reste du programme ?

Eh bien oui, du moins jusqu'à ce qu'il rencontre End If, traduisible par « Fin si ». Comme pour un Sub ou un Module, une boucle est associée à sa fin correspondante.

En clair, If, Then et End If sont indissociables !

Code : VB.NET
1
2
3
If MaVariable = 10 Then
      MaVariable = 5
End If

Si vous avez bien compris, vous devriez être capables de m'expliquer l'utilité du code ci-dessus.

Secret (cliquez pour afficher)
Si « MaVariable » est égale à 10, il met « MaVariable » à 5.

Exactement !

Mais si tu mets « MaVariable » à 5 dans la boucle, le programme ne va pas en sortir puisque ce n'est plus égal à 10 ?

Bonne observation. Eh bien, non, cela ne change rien : c'est en arrivant à la ligne du If que tout se joue. Ensuite, si la variable change, le programme ne s'en préoccupe plus.

« Else », mot anglais traduisible par « sinon »


« Sinon », il faut y penser des fois pour gérer toutes les éventualités.
Le Else doit être placé dans une boucle If, donc entre le Then et le End If.

Image utilisateur


La syntaxe est la suivante :

Code : VB.NET
1
2
3
4
5
If MaVariable = 10 Then
    'Code exécuté si MaVariable = 10
Else
    'Code exécuté si MaVariable est différente de 10
End If

Code VB Else
Français Sinon


Je vais en profiter pour vous signaler que le symbole différent en VB s'écrit « <> ». Autrement dit, un signe « inférieur » et un signe « supérieur » accolés.


ElseIf



Image utilisateur


Si vous voulez un cas particulier et non le reste des autres cas de votre condition, il existe le ElseIf.

Voici un exemple :

Code : VB.NET
1
2
3
4
5
6
7
If MaVariable = 10 Then
    'Code exécuté si MaVariable = 10
ElseIf MaVariable = 5 Then
    'Code exécuté si MaVariable = 5
Else
    'Code exécuté si MaVariable est différente de 10 et de 5
End If


Code VB ElseIf
Français Sinon, si


Dernière chose : les boucles If, Then et ElseIf peuvent s'imbriquer, ce qui signifie qu'on peut en mettre plusieurs l'une dans l'autre. Contrairement à If et ElseIf, le Else ne peut être placé qu'une seule et unique fois dans une condition.

Code : VB.NET
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
If MaVariable = 10 Then
    If MaVariable2 = 1 Then
       'Code exécuté si MaVariable = 10 et MaVariable2 = 1
    Else
       'Code exécuté si MaVariable = 10 et MaVariable2 <> 1
    End If
ElseIf MaVariable = 5 Then
    If MaVariable2 = 2 Then
       'Code exécuté si MaVariable = 5 et MaVariable2 = 2
    End If
Else
       'Code exécuté si MaVariable est différente de 10 et de 5
End If

Select

Nous avons vu If, ElseIf et Else.

Mais pour ce qui est, par exemple, du cas d'un menu, vous avez dix choix différents dans votre menu. Comment faire ?

Une première façon de procéder serait la suivante :

Code : VB.NET
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
If Choix = 1 Then
     Console.WriteLine("Vous avez choisi le menu n° 1")
ElseIf Choix = 2 Then
     Console.WriteLine("Vous avez choisi le menu n° 2")
ElseIf Choix = 3 Then
     Console.WriteLine("Vous avez choisi le menu n° 3")
ElseIf Choix = 4 Then
     Console.WriteLine("Vous avez choisi le menu n° 4")
ElseIf Choix = 5 Then
     Console.WriteLine("Vous avez choisi le menu n° 5")
ElseIf Choix = 6 Then
     Console.WriteLine("Vous avez choisi le menu n° 6")
ElseIf Choix = 7 Then
     Console.WriteLine("Vous avez choisi le menu n° 7")
ElseIf Choix = 8 Then
     Console.WriteLine("Vous avez choisi le menu n° 8")
ElseIf Choix = 9 Then
     Console.WriteLine("Vous avez choisi le menu n° 9")
ElseIf Choix = 10 Then
     Console.WriteLine("Vous avez choisi le menu n° 10")
Else
     Console.WriteLine("Le menu n'existe pas")
End If

Il s'agit de la méthode que je viens de vous expliquer (qui est tout à fait correcte, ne vous inquiétez pas !).

Il faut néanmoins que vous sachiez que les programmeurs sont très fainéants, et ils ont trouvé sans cesse des moyens de se simplifier la vie. C'est donc dans le cas que nous venons d'évoquer que les Select deviennent indispensables, grâce auxquels on simplifie le tout. La syntaxe se construit de la forme suivante :

Code : VB.NET
1
2
3
4
5
6
7
8
Select Case MaVariable
      Case 1
          'Si MaVariable = 1
      Case 2
          'Si MaVariable = 2
      Case Else
          'Si MaVariable <> 1 et <> 2
   End Select

Code VB Select Case MaVariable
Français Sélectionne dans quel cas « MaVariable » vaut


Dans le même cas de figure, revoici notre menu :

Code : VB.NET
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Select Case Choix
            Case 1
                Console.WriteLine("Vous avez choisi le menu n° 1")
            Case 2
                Console.WriteLine("Vous avez choisi le menu n° 2")
            Case 3
                Console.WriteLine("Vous avez choisi le menu n° 3")
            Case 4
                Console.WriteLine("Vous avez choisi le menu n° 4")
            Case 5
                Console.WriteLine("Vous avez choisi le menu n° 5")
            Case 6
                Console.WriteLine("Vous avez choisi le menu n° 6")
            Case 7
                Console.WriteLine("Vous avez choisi le menu n° 7")
            Case 8
                Console.WriteLine("Vous avez choisi le menu n° 8")
            Case 9
                Console.WriteLine("Vous avez choisi le menu n° 9")
            Case 10
                Console.WriteLine("Vous avez choisi le menu n° 10")
            Case Else
                Console.WriteLine("Le menu n'existe pas")
        End Select

Pour que vous compreniez bien, voici un petit schéma :

Image utilisateur


Ce code correspond exactement à celui qui se trouve plus haut. Le Case Else, ici aussi, prend en compte toutes les autres possibilités.

Encore une fois : attention à bien penser à la personne qui fera ce qu'il ne faut pas faire !


Petites astuces avec Select


Si je souhaite que pour les valeurs 3, 4 et 5, il se passe la même action, dois-je écrire trois Case avec la même instruction ?

Non, une petite astuce du Select est de rassembler toutes les valeurs en un Case. Par exemple, le code suivant...

Code : VB.NET
1
2
3
4
Select Case Choix
       Case 3,4,5
            'Choix 3, 4 et 5
End Select

... est identique à celui-ci :

Code : VB.NET
1
2
3
4
5
6
7
8
Select Case Choix
       Case 3
            'Choix 3, 4 et 5
       Case 4
            'Choix 3, 4 et 5
       Case 5
            'Choix 3, 4 et 5
End Select

Astuce également valable pour de grands intervalles : le code suivant...

Code : VB.NET
1
2
3
4
Select Case Choix
       Case 5 to 10
            'Choix 5 à 10
End Select

... correspond à ceci :

Code : VB.NET
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Select Case Choix
       Case 5
            'Choix 5 à 10
       Case 6
            'Choix 5 à 10
       Case 7
            'Choix 5 à 10
       Case 8
            'Choix 5 à 10
       Case 9
            'Choix 5 à 10
       Case 10
            'Choix 5 à 10
End Select

Voilà, j'espère que ces différentes formes vous seront utiles. :p

While

À présent, nous allons réellement aborder le terme de « boucle ».

Tu veux dire qu'on ne les utilisait pas encore ?

Non, ce ne sont pas à proprement parler des boucles ; en programmation, on appelle boucle un espace dans lequel le programme reste pendant un temps choisi, c'est-à-dire qu'il tourne en rond.

On va tout de suite étudier le cas de While.

« While », mot anglais traduisible par « tant que »


Vu la traduction du mot « while », vous devriez vous attendre à ce que va faire notre boucle.
Elle va effectivement « tourner » tant que la condition est vraie.

Retenez bien ce « vrai ». Vous souvenez-vous du concept des booléens que nous avons étudié dans le chapitre sur les variables ? Eh bien voilà, dans ce cas-ci, le While va vérifier que le booléen est vrai.

La syntaxe est similaire à celle du If de tout à l'heure. Voyons cela !

Code : VB.NET
1
2
3
While MaVariable = 10
    'Exécuté tant que MaVariable = 10
End While

Code VB While MaVariable = 10
Français Tant que « MaVariable » est égale à 10


Voici donc un schéma pour vous aider à comprendre.

Image utilisateur

En clair, le programme arrive au niveau de l'instruction While, vérifie que la condition est vraie et, si c'est le cas, entre dans le While puis exécute les lignes qui se trouvent à l'intérieur ; il arrive ensuite au End While et retourne au While. Cela tant que la condition est vraie.

Tu parlais de booléens...

Eh oui, lorsque vous écrivez MaVariable = 10, le programme va faire un petit calcul dans son coin afin de vérifier que la valeur de « MaVariable » est bien égale à 10 ; si c'est le cas, il transforme cela en un booléen de type Vrai.
Il s'agit du même principe que pour les autres boucles conditionnelles (If, Else, etc.).

Grosse erreur possible : LES BOUCLES INFINIES !
C'est une erreur qui se produit si la condition ne change pas : le programme tourne dans cette boucle indéfiniment. Pour y remédier, assurez-vous que la variable peut bien changer. :magicien:
Si vous êtes confronté à ce genre de programme (cela peut arriver, ne serait-ce que pour voir ce qu'est une boucle infinie), cliquez sur la croix qui ferme la console pour arrêter le programme.

Mais m'sieur ! Si je veux passer au moins une fois dans la boucle même si la condition est fausse, comment dois-je faire ?

Oh, mais quelle coïncidence, une boucle spéciale existe pour un tel cas ! (C'est beau le hasard, parfois, n'est-ce pas ? :p )

Do While


À l'instar du While, le Do While (traduisible par « faire tant que ») passe au moins une fois dans la boucle.

Image utilisateur


Code : VB.NET
1
2
3
Do
   'Instruction exécutée au moins une fois
Loop While MaVariable = 10

Autre information : il existe un autre mot qui se met à la place de While. Ce mot est Until. Il signifie : « passe tant que la condition n'est pas vraie » (le While est utilisé seulement tant que la condition est vraie).

Un code de ce type...

Code : VB.NET
1
2
3
Do

Loop Until MaVariable = 10

... revient à écrire ceci :

Code : VB.NET
1
2
3
Do 

Loop While MaVariable <> 10

J'espère ne pas avoir été trop brusque... :D

Vous êtes désormais en mesure d'utiliser les boucles While, If et Select. Une dernière pour la route ?

For

« For », mot anglais traduisible par « pour »


For est indissociable de son To, comme un If a son Then (sauf cas particuliers, tellement particuliers que vous ne les utiliserez pas dans l'immédiat :) ).

Et tel If, For To a un Next (qui correspond à peu près au End If).

Je m'explique. Si je souhaite effectuer une instruction dix fois de suite, je vais écrire ceci :

Code : VB.NET
1
2
3
4
5
6
Dim x As Integer = 0

While x <> 10
   'Instruction à exécuter 10 fois
   x = x + 1  'Augmente x de 1
End While

Je profite de cet exemple pour vous signaler que l'incrémentation d'une variable de 1 peut s'écrire x += 1. Pas besoin de « = », cette instruction seule remplace x = x + 1.
Tant que j'y suis, x -= 1 remplace x = x - 1.

La boucle sera traversée à dix reprises. Eh bien, For remplace ce code par celui-ci :

Code : VB.NET
1
2
3
4
Dim x As Integer
For x = 1 to 10
   'Instruction à exécuter 10 fois
Next

Les deux codes effectueront la même chose. Le Next correspond à « ajoute 1 à ma variable ».

Code VB For MaVariable = 1 To 10
Français Pour « MaVariable » de 1 jusqu'à 10


Petites astuces du For...

  • On peut déclarer les variables dans la ligne du For, de cette manière :

    Code : VB.NET
    1
    2
    3
    For x As Integer = 1 to 10
         'Instruction à exécuter 10 fois
    Next
    

    Cela reviendra de nouveau au même.
  • Si vous voulez ajouter 2 au Next à la place de 1 (par défaut) :

    Code : VB.NET
    1
    2
    3
    For x As Integer = 1 to 10 step 2
         'Instruction à exécuter 5 fois
    Next
    

Mieux comprendre et utiliser les boucles

Opérateurs


Vous savez maintenant vous servir des grands types de boucles. Rassurez-vous, tout au long du tutoriel, je vous apprendrai d'autres choses en temps voulu.

Je voulais vous donner de petits éclaircissements à propos des boucles. Pour valider la condition d'une boucle, il existe des opérateurs :

Symbole Fonction
= Égal
<> Différent
> Strictement supérieur
< Strictement inférieur
<= Inférieur ou égal
>= Supérieur ou égal


Grâce ces opérateurs, vous allez déjà pouvoir bien exploiter les boucles.
Comment les utiliser ? C'est très simple.

Si vous voulez exécuter un While tant que « x » est plus petit que 10 :

Code : VB.NET
1
While x < 10

Voilà !

Explication des boucles


Second élément : une boucle est considérée comme vraie si le booléen correspondant est vrai (souvenez-vous du booléen, un type qui ne peut être que vrai ou faux).

En gros, si j'écris le code suivant :

Code : VB.NET
1
2
3
Dim x As Integer = 0
If x = 10 Then
End If

... c'est comme si j'écrivais ceci :

Code : VB.NET
1
2
3
4
5
Dim x As Integer = 0
Dim b As Boolean = false
b = (x = 10)
If b Then
End If

Eh oui, quelle découverte ! Si je place un boolean dans la condition, il est inutile d'ajouter If b = true Then.

J'espère vous avoir éclairés... et non enfoncés ! :euh:

And, or, not


Nous pouvons également utiliser des mots dans les boucles !

Non, pas question !


Commençons donc par le mot clé not, dont le rôle est de préciser à la boucle d'attendre l'inverse.
Exemple : un While not = 10 correspond à un While <> 10.

Et puis ?


Un second mot permet d'ordonner à une boucle d'attendre plusieurs conditions : ce cher ami s'appelle And. Il faut que toutes les conditions, reliées par And, soient vérifiées.

Code : VB.NET
1
While MaVariable >= 0 And MaVariable <= 10

Ce code tournera tant que la variable est comprise entre 0 et 10.

Faites attention à rester logiques dans vos conditions :

Code : VB.NET
1
While MaVariable = 0 And MaVariable = 10

Le code ci-dessus est totalement impossible, votre condition ne pourra donc jamais être vraie...


Ou bien ?


Le dernier « mot » que je vais vous apprendre pour le moment est Or.
Ce mot permet de signifier « soit une condition, soit l'autre ».

Voici un exemple dans lequel Or est impliqué :

Code : VB.NET
1
While MaVariable >= 10 Or MaVariable = 0

Cette boucle sera exécutée tant que la variable est plus grande ou égale à 10, ou égale à 0.

Ensemble, mes amis !


Eh oui, ces mots peuvent s'additionner, mais attention au sens.

Code : VB.NET
1
While MaVariable > 0 And not MaVariable >= 10 Or MaVariable = 15

Ce code se comprend mieux avec des parenthèses : (MaVariable > 0 et non MaVariable >= 10) ou MaVariable = 15.
Donc, cela se traduit par « si MaVariable est comprise entre 1 et 10 ou si elle est égale à 15 ».

J'espère avoir été suffisamment compréhensible. :p

Q.C.M.

Si je veux additionner 1 + 2 + 3 + 4 ... etc jusqu'à 50 dans une variable, quelle boucle correspond le mieux ?
Est-ce que
Code : VB.NET
1
2
Do 
until not i = 5


Correspond à
Code : VB.NET
1
2
Do 
while i <> 5


?

Statistiques de réponses au QCM

Chapitre précédent Sommaire Chapitre suivant

Partager

19 commentaires pour "Conditions et boucles conditionnelles"
Note moyenne : 3.60 / 4 (543 votes)
Pseudo Commentaire
Hors ligne spycom # Posté le 27/02/2011 à 17:07:30
Avatar

J'aimerais savoir comment on fait pour lire case else quand on rentre un caractère dans le cas d'un select
Exemple:
Select Case Choix
Case 1
Console.WriteLine("Vous avez choisi le menu n° 1")
Case 2
Console.WriteLine("Vous avez choisi le menu n° 2")
Case Else
Console.WriteLine("Le menu n'existe pas")
End Select

Si l'on rentre un caractère au lieu de 1 ou 2 il y a un bug au débogage
qui nous indique: La conversion de la chaîne "." en type 'Integer' n'est pas valide.
Par contre si on entre 4,5,6 ou 7 le code fonctionne bien.
Merci.

EDIT: J'ai trouvé il fallait mettre la variable Choix en string et pas en integer.Désolé j'avais pas bien cherché mais peut être que cela aidera d'autre novice.

blog apprendre le c ensemble ===> C-deb <=== blog apprendre le c ensemble
 
Hors ligne elvan # Posté le 16/04/2011 à 04:48:52

Bonjour,

J'ai constaté une "erreur" ou plutôt inadvertance pour la partie:

While MaVariable > 0 And MaVariable =< 10
Ce code tournera tant que la variable est comprise entre 0 et 10.

Ce n'était pas plutôt While MaVariable >= 0 And MaVariable =< 10 ??

Voilà, j'espère ne pas dire de bêtise en tant que Zéro :p
Hors ligne Tyranostorm # Posté le 06/03/2012 à 15:38:07
Avatar

Avis : Très bon Groupe : Bannis

Citation : elvan
Bonjour,

J'ai constaté une "erreur" ou plutôt inadvertance pour la partie:

While MaVariable > 0 And MaVariable =< 10
Ce code tournera tant que la variable est comprise entre 0 et 10.

Ce n'était pas plutôt While MaVariable >= 0 And MaVariable =< 10 ??

Voilà, j'espère ne pas dire de bêtise en tant que Zéro :p


Merci, l'erreur va être corrigée. ;)
 
Hors ligne placebo33 # Posté le 02/04/2012 à 10:45:26
Time alone, oh! time will tell

Ville : Batna
Pays : Algérie

Salut Tyranostorm.

j'ai remarqué une ou deux erreurs dans vos explications Mavariable2

Code : Autre
1
2
3
4
5
6
7
8
9
If MaVariable2 = 2 Then
       'Code exécuté si MaVariable = 5 et MaVariable2 = 1
End If

'au lieu de :

If MaVariable2 = 2 Then
       'Code exécuté si MaVariable = 5 et MaVariable2 = 2
End If


Une autre
Code : Autre
1
While MaVariable > 0 And not MaVariable => 10 Or MaVariable = 15

"cela se traduit par « si MaVariable est comprise entre 1 et 10 ou si elle est égale à 15"
au lieu de :
"cela se traduit par « si MaVariable est comprise entre 1 et 9 ou si elle est égale à 15"

Excuse moi si je me trompe.

Très très bon tuto.
Bonne continuation.

:)
 
Hors ligne kkym # Posté le 27/04/2012 à 07:24:32

Avis : Bon

j'admire bien les explications sur cette partie!

Voir tous les commentaires