Les structures conditionnelles

Imaginez que vous jouez à un jeu de société "Monoploy" et vous avez tiré une carte de chance, la suite de votre partie sera donc tributaire de l'énoncé de cette carte. Par exemple : aller à la case départ, allez en prison, payez vos impôts, etc. Ainsi, structurellement, votre partie de jeu a été tributaire de la carte saisie.

C'est dans cette philosophie que nous réalisons parfois un ou plusieurs test pour choisir le bon chemin à suivre; par exemple soit le chemin A. Si une ou plusieurs conditions ne sont pas valide (soit l'équivalent de la valeur faux) nous suivons notre algotithme avec le chemin B.

Ce mécanisme on l'appelle structure conditionnelle. C'est l'ensemble des instructions qui nous permettent de tester si une condition est vraie ou fausse. Nous la modélisons dans le langage algorithmique par la fameuse phrase Si ... Alors ...

L'organigrame ci-dessous vous explique ce mécanisme :

Organigramme Si ... Alors ... Sinon

Ce bloc de test, appelé structure conditionnelle, nous permet d'emprunter une branche particulière dans notre algorithme en fonction du résultat obtenu dans la condition "Si". Lors de l'exécution de notre programme, ce bloc appelé condition "Si" va donc nous aiguiller en fonction du résultat du test obtenu pour nous envoyer à la prochaine instruction choisie. 

Si ... Alors ... (If ... Then ...)

Dans le cas le plus simple des tests conditionnels, nous aurons parfois besoin d'exécuter une action uniquement si le résultat du test est vrai. Par exemple; s'il faut froid, j'allume le chauffage ou s'il fait nuit j'allume la lumière. Dans ce même contexte, pour un petit robot, nous pouvons le coder de manière à ce qu'il s'arrête d'avancer s'il perçoit un obstacle devant lui, et les cas sont plusieurs.

La structure générale de cette structure est la suivante :

   

if (condition):

alors bloc d’instructions;

 

Dans un premire temps, lisons ensmeble le code ci-dessous écrit en visual basic:

' Demander à l'utilisateur de saisir un nombre
Console.Write("Veuillez saisir un nombre : ")
Dim valeur As integer = Console.ReadLine()

 ' Tenter si le nombre introduit est positif (≥ 0)
If (valeur >= 0) Then
    Console.WriteLine("Le nombre est positif.")
End If

Si nous souhaitons indiquer à la sortie de notre programme un résultat pour les nombres négatifs, avec cette structure conditionnelle, nous devons dupliqer le bloc de test Si ... Alors .... pour tester les nombres négatifs. Notre code premier code modifié devient comme le suivant :

' Demander à l'utilisateur de saisir un nombre
Console.Write("Veuillez saisir un nombre : ")
Dim valeur As integer = Console.ReadLine()

 ' Tenter si le nombre introduit est positif (≥ 0)
If (valeur >= 0) Then
    Console.WriteLine("Le nombre est positif.")
End If
 ' Tenter si le nombre introduit est strictement négatif (< 0)
If (valeur < 0) Then
    Console.WriteLine("Le nombre est négatif.")
End If

Ce programme écrit en VB.Net, va donc exécuter les instructions les unes après les autres dans l’ordre où elles sont écrites, sauf qu'il n'est pas optimal, puisque l'unité logique (plus simplement notre microcontrôleur, notre processeur, etc) sera amenée à réaliser deux tests IF successifs. Pour optimiser cela et réduire le temps de traitement de notre code, la solution est de rajouter un deuxième bloc de code appelé Sinon à notre structure conditionnelle Si ... Alors ... pour être exécuté si le premier bloc aura un le résultat faux lors de la validation de la condition, soit donc le résultat vrai pour notre deuxième bloc (représentée par le deuxième test IF (valeur < 0) dans notre code ci-dessus, et vice versa (on peut dire que les deux tests sont conditionnellement liés).

Si ... Alors ... Sinon (If ... Then ... Else ...)

Comme nous l'avons évoqué dans la section précédente, dans certains cas, nous aurons besoin d'exécuter dans notre programme un ensemble de lignes de code en fonction du résultat de la condition IF; dans les deux cas Vrai ou Faux. Pour cela, nous aurons besoin de rajouter le Sinon (Else) qui sera exécuter en cas d'un résultat Faux après le premier bloc d'instruction. La structure générale de cette structure sera donc comme décrit ci-dessous :

   

if (condition):

alors bloc 1 d’instructions;

Sinon bloc 2 d’instructions;

 

Supposons maintenant que nous souhaitons écrire un programme en langage C++ pour réaliser la division euclidienne de deux nombres entiers. Le code sera comme suit si nous ne faisons pas attention à exclure la division par 0, qui est impossible mathématiquement:

int x, y;

// Saisir le premier entier
printf("Entrez la valeur de x (dividende) : ");
scanf("%d", &a);

printf("Entrez la valeur de y (diviseur) : ");
scanf("%d", &b);

//Calculer les deux valeurs : le quotien et le reste

int quotient = a / b;
int reste = a % b;

// Affichage des résultats
printf("Résultat de la division euclidienne:\n");
printf("Quotient : %d\n", quotient);
printf("Reste : %d\n", reste);

Si nous exécutons ce code et que nous saisissions la valeur 0 comme diviseur, notre code sera interrompu et un message d'erreur sera afficher à l'écran. Pour résoudre cela, nous devons donc réaliser un test par rapport la valeur saisie pour y. Si y est égale à 0, nous devons stopper la suite et afficher un message d'erreur à l'utilisateur comme suit:

Si (y = 0) alors
   afficher "division euclidienne est impossible"
Sinon
   afficher les résultats de la division.

Ains nous modifions notre code comme suit en rajoutant la condition du diviseur doit être différent de 0:

int x, y;

// Saisir le premier entier
printf("Entrez la valeur de x (dividende) : ");
scanf("%d", &a);

printf("Entrez la valeur de y (diviseur) : ");
scanf("%d", &b);

//Calculer les deux valeurs : le quotien et le reste
if ( b <> 0)
{
     int quotient = a / b;
     int reste = a % b;

     // Affichage des résultats
     printf("Résultat de la division euclidienne:\n");
     printf("Quotient : %d\n", quotient);
     printf("Reste : %d\n", reste);
}
else
{
     printf("La division euclidienne est impossible:\n");
}

Autres structures possibles

D'un langage de programmation à un autre, certains éditeurs nous proposent d'autre format de structure conditionnelles telle que les structure avec l'instruction : elseif

La structure générale de cette structure est la suivante :

   

if (condition):

alors bloc d’instructions;

sinon Si (condition)

alors bloc 2 d’instructions;

...

sinon bloc n d'instructions;

 

Nous retrouvons cette instruction par exemple en PHP avec elseif qui est l'équivalent d'else if. En VBA, PowerShell, ... aussi. Cette instruction assez particulière nous permet d'optimiser notre code source mais aussi de gagner en termes de temps de traitement au niveau de notre processeur.