Les programmes doivent être capables de prendre des décisions. Pour y parvenir, on utilise deux sortes de structures de contrôle :
Des conditions : elles permettent d'écrire dans le programme des règles du type : "Si ceci arrive, alors fais cela".
Des boucles : elles permettent de répéter plusieurs fois une série d'instructions.
Dans ce chapitre, nous allons voir comment écrire des conditions et dans quelles situations. Nous verrons les boucles dans le chapitre suivant.
Utilisez les opérateurs de comparaison
Vous vous souvenez de ces variables stockées en mémoire ? Eh bien nous allons maintenant apprendre à les analyser : "Est-ce que cette variable est supérieure à 10 ?", "Est-ce que cette variable contient bien le mot de passe secret ?", etc.
Pour effectuer ces tests, il y a des symboles à connaître par cœur :
Symbole | Signification |
---|---|
| Est égal à |
| Est supérieur à |
| Est inférieur à |
| Est supérieur ou égal à |
| Est inférieur ou égal à |
| Est différent de |
Nous allons utiliser ces symboles pour effectuer des comparaisons dans nos conditions.
Dans ce screencast, nous allons voir comment utiliser l’ensemble de ces opérateurs pour vérifier des conditions. Ainsi, vous vous familiariserez avec les opérateurs de comparaison.
Testez des variables avec la condition de base : if else
Comme je vous le disais, les conditions permettent de tester des variables. Je vous propose donc de créer un petit programme en même temps que moi, et de faire des tests pour vérifier que vous avez bien compris le principe :
#include <iostream>
using namespace std;
int main()
{
int nbAnimaux(2);
return 0;
}
Ce code-là ne fait rien pour le moment. Il se contente de déclarer une variable nbAnimaux
(qui indique donc un nombre d'animaux de compagnie), puis il s'arrête.
Ouvrez la condition avec un if
Imaginons qu'on souhaite afficher un message si la personne a des animaux de compagnie. On va ajouter une condition qui regarde si le nombre d'animaux est supérieur à 0 et qui, dans ce cas, affiche un message :
#include <iostream>
using namespace std;
int main()
{
int nbAnimaux(2);
if (nbAnimaux > 0)
{
cout << "Super ! Les animaux de compagnie ca change la vie !" << endl;
}
cout << "Fin du programme" << endl;
return 0;
}
Ce code affiche :
Super les animaux de compagnie ca change la vie ! Fin du programme
Regardez bien la ligne suivante :if (nbAnimaux > 0)
Elle effectue le test : "Si le nombre d'animaux est supérieur à 0" ("if", en anglais, veut dire "si").
Si ce test est vérifié (donc si la personne a bien des animaux de compagnie), alors l'ordinateur va lire les lignes qui se trouvent entre les accolades : il va donc afficher le message "Super ! Les animaux de compagnie ça change la vie !".
Et si la personne n'a pas d'animaux de compagnie, qu'est-ce qui se passe ?
Dans le cas où le résultat du test est négatif, l'ordinateur ne lit pas les instructions qui se trouvent entre les accolades. Il saute donc à la ligne qui suit la fermeture des accolades.
Dans notre cas, si la personne n'a aucun animal de compagnie, on verra seulement ce message apparaître :
Fin du programme
Changez la valeur de la variable nbAnimaux
, passez-la à 0 et regardez ce qui se produit.
Écrivez ce qu'il faut faire si la condition n'est pas vérifiée avec else
Vous souhaitez que votre programme fasse quelque chose de précis si la condition n'est pas vérifiée ? C'est vrai que, pour le moment, le programme est plutôt silencieux si vous n'avez pas d'animal de compagnie !
Heureusement, vous pouvez utiliser le mot-clé else
qui signifie "sinon". On va par exemple afficher un autre message si la personne n'a pas d'animaux chez elle :
#include <iostream>
using namespace std;
int main()
{
int nbAnimaux(0);
if (nbAnimaux > 0)
{
cout << "Super ! Les animaux de compagnie ca change la vie !" << endl;
}
else
{
cout << "Vous n'avez pas d'animaux de compagnie" << endl;
}
cout << "Fin du programme" << endl;
return 0;
}
Ce code affiche :
Vous n'avez pas d'animaux de compagnie Fin du programme
... car j'ai changé la valeur de la variable nbAnimaux
au début, regardez bien.
Si vous mettez une valeur supérieure à 0, le message redeviendra celui que nous avons vu avant !
Comment cela fonctionne-t-il ?
C'est très simple en fait : l'ordinateur lit d'abord la condition du if
et se rend compte que la condition est fausse. Il vérifie si la personne a au moins 1 animal de compagnie et ce n'est pas le cas.
L'ordinateur "saute" tout ce qui se trouve entre les premières accolades et tombe sur la ligne else
qui signifie "sinon". Il effectue donc les actions indiquées après else
.
Effectuez un autre test avec else if
Il est possible de faire plusieurs tests à la suite, comme :
si le nombre d'animaux est égal à 0, afficher ce message "[...]" ;
sinon, si le nombre d'animaux est égal à 1, afficher ce message "[...]" ;
sinon, si le nombre d'animaux est égal à 2, afficher ce message "[...]" ;
sinon, afficher ce message "[...]".
Pour faire tous ces tests un à un dans l'ordre, on va avoir recours à la condition else if
qui signifie "sinon si". Les tests vont être lus dans l'ordre, jusqu'à ce que l'un d'entre eux soit vérifié.
#include <iostream>
using namespace std;
int main()
{
int nbAnimaux(2);
if (nbAnimaux == 0)
{
cout << "Vous n'avez pas d'animaux de compagnie" << endl;
}
else if (nbAnimaux == 1)
{
cout << "C'est super d'avoir un fidele compagnon !" << endl;
}
else if (nbAnimaux == 2)
{
cout << "Ca doit en faire du monde a la maison !" << endl;
}
else
{
cout << "Votre budget croquettes doit etre important" << endl;
}
cout << "Fin du programme" << endl;
return 0;
}
Dans notre cas, nous avons 2 animaux de compagnie :
L'ordinateur teste d'abord si on en a 0.
Comme ce n'est pas le cas, il passe au premier
else if
: est-ce qu'on a 1 animal de compagnie ? Non plus !L'ordinateur teste donc le second
else if
: est-ce qu'on a 2 animaux ? Oui ! Donc on affiche le message "Ca doit en faire du monde a la maison !".
Si aucune des conditions n'avait été vérifiée, c'est le message du else "Votre budget croquettes doit être important" qui serait affiché.
Dans le screencast suivant, nous allons reprendre un exemple différent et voir comment tirer parti de ces 3 mots-clés if
, else if
et if
pour effectuer différentes actions en fonction de plusieurs conditions :
Rendez votre code plus lisible avec des conditions switch
Prenez par exemple le test que l'on vient de faire sur le nombre d'animaux de compagnie :
A-t-il 0 animal ?
A-t-il 1 animal?
A-t-il 2 animaux ?...
On peut faire ce genre de tests avec des if
... else if
... else
..., mais on peut faire la même chose avec une condition switch
qui, dans ce genre de cas, a tendance à rendre le code plus lisible. Voici ce que donnerait le code précédent avec switch
:
#include <iostream>
using namespace std;
int main()
{
int nbAnimaux(2);
switch (nbAnimaux)
{
case 0:
cout << "Vous n'avez pas d'animaux de compagnie" << endl;
break;
case 1:
cout << "C'est super d'avoir un fidele compagnon !" << endl;
break;
case 2:
cout << "Ca doit en faire du monde a la maison !" << endl;
break;
default:
cout << "Votre budget croquettes doit etre important" << endl;
break;
}
return 0;
}
Ce qui affiche :
Ca doit en faire du monde à la maison !
La forme est un peu différente :
On indique d'abord qu'on va analyser la variable
nbAnimaux
(ligne 9).On teste tous les cas (
case
) possibles : si la variable vaut 0, si elle vaut 1, si elle vaut 2...Les
break
sont obligatoires si on veut que l'ordinateur arrête les tests une fois que l'un d'eux a réussi. Je vous conseille d'en mettre comme moi à la fin de chaquecase
.Enfin, le
default
correspond auelse
("sinon"), et s'exécute si aucun des tests précédents n'est vérifié.
Dans la vidéo suivante, nous allons voir comment implémenter un switch case avec un exemple simple. Nous allons évaluer un entier, et proposer différents affichages en fonction des cas. Nous allons aussi voir l’importance du break.
Allons un peu plus loin avec les conditions. Nous allons découvrir deux notions plus avancées et néanmoins essentielles : les booléens et les combinaisons de conditions.
Vérifiez des valeurs true
ou false
avec des booléens
Si je vous parle du type bool
, c'est parce qu'on peut l'utiliser d'une façon un peu particulière dans les conditions. Pour commencer, regardez ce code :
bool adulte(true);
if (adulte == true)
{
cout << "Vous etes un adulte !" << endl;
}
Cette condition, qui vérifie la valeur de la variable adulte
, affiche un message si celle-ci vaut vrai ( true
).
Vous vous demandez peut-être où je veux en venir ? En fait, il est possible d'omettre la partie == true
dans la condition, cela revient au même ! Regardez ce code, qui est équivalent :
bool adulte(true);
if (adulte)
{
cout << "Vous etes un adulte !" << endl;
}
L'ordinateur comprend que vous voulez vérifier si la variable booléenne vaut true
. Il n'est pas nécessaire de rajouter == true
.
Est-ce que cela ne rend pas le code plus difficile à lire ?
Non, au contraire : le code est plus court et plus facile à lire !if (adulte)
se lit tout simplement "S'il est adulte".
Je vous invite à utiliser cette notation raccourcie quand vous testerez des variables booléennes. Cela vous aidera à clarifier votre code et à rendre certaines conditions plus faciles à lire.
Combinez des conditions
Pour les conditions les plus complexes, sachez que vous pouvez faire plusieurs tests au sein d'un seul et même if
. Pour cela, il va falloir utiliser de nouveaux mots-clés :
| ET |
| OU |
| NON |
Vous pourriez aussi utiliser les symboles hérités du langage C, car ils sont équivalents :
| ET |
| OU |
| NON |
… mais je vous incite quand même à utiliser la méthode avec les mots-clés.
Testez "ET" avec and
Disons qu'on veuille tester si la personne est adulte et si elle a au moins 1 enfant. On va donc écrire :
if (adulte and nbEnfants >= 1)
Le mot-clé and
signifie "ET". Notre condition se dirait en français : « Si la personne est adulte ET si le nombre d'enfants est supérieur ou égal à 1 ».
Testez "OU" avec or
Pour faire un "OU", on utilise le mot-clé or
.
On peut par exemple tester si le nombre d'enfants est égal à 1 OU 2 :
if (nbEnfants == 1 or nbEnfants == 2)
Testez "NON" avec not
Il faut maintenant que je vous présente un dernier mot-clé : not
.
Vous devez mettre ce mot-clé avant votre condition pour pouvoir dire "Si cela n'est pas vrai" :
if (not adulte)
Cela pourrait se traduire par "Si la personne n'est pas adulte".
En résumé
Les conditions permettent de tester la valeur des variables et de modifier le comportement du programme en conséquence.
La condition de type
if
(si) ...else if
(sinon si) ...else
(sinon) est la plus courante.La condition
switch
, plus spécifique, permet de tester les différentes valeurs possibles d'une seule variable.
Dans le chapitre suivant, nous allons partir à la découverte du dernier gros bloc de base de la programmation en C++ : les boucles !