Tests et logique booléenne
Les tests et conditions
1. Principe
Dans le précédent chapitre vous avez pu vous familiariser avec les expressions mettant en place des opérateurs, qu’ils soient de calcul, de comparaison (l’égalité par exemple) ou booléens. Ces opérateurs et expressions trouvent tout leur sens une fois utilisés dans des conditions (qu’on appelle aussi des branchements conditionnels). Une expression évaluée est vraie (le résultat est différent de zéro) ou fausse. Suivant ce résultat, l’algorithme va effectuer une action, ou une autre. C’est le principe de la condition.
Grâce aux opérateurs booléens, l’expression peut être composée : plusieurs expressions sont liées entre elles à l’aide d’un opérateur booléen, éventuellement regroupées avec des parenthèses pour en modifier la priorité.
(a=1 OU (b*3=6)) ET c>10
est une expression tout à fait valable. Celle-ci sera vraie si chacun de ses composants respecte les conditions imposées. Cette expression est vraie si a vaut 1 et c est supérieur à 10 ou si b vaut 2 (2*3=6) et c est supérieur à 10.
Reprenez l’algorithme du précédent chapitre qui calcule les deux résultats possibles d’une équation du second degré. L’énoncé simplifié disait que pour des raisons pratiques, seul le cas où l’équation a deux solutions fonctionne. Autrement dit, l’algorithme n’est pas faux dans ce cas de figure, mais il est incomplet. Il manque des conditions pour tester la valeur du déterminant : celui-ci est-il positif, négatif ou nul ? Et dans ces cas, que faire et comment le faire ?
Imaginez un second algorithme permettant de se rendre d’un point A à un point B. Vous n’allez pas le faire ici réellement, car c’est quelque chose de très complexe sur un réseau routier important. De nombreux sites Internet vous proposent d’établir un trajet avec des indications. C’est le résultat qui est intéressant. Les indications sont simples : allez tout droit, tournez à droite au prochain carrefour, faites trois kilomètres et au rond-point prenez la troisième sortie direction...
L’algèbre booléen
1. L’origine des tests
Les tests effectués tant en algorithmique qu’en programmation sont des tests logiques, ou plutôt faisant appel à la logique. Le chapitre Les variables et opérateurs a déjà brièvement abordé ce point lorsqu’il a été question des opérateurs booléens. Les opérateurs dits logiques ET, OU et NON sont des représentations de la logique. De quelle logique parle-t-on ?
Fondamentalement, la logique est la même pour tout le monde, bien que évidemment l’interprétation des résultats puisse varier d’un individu à l’autre (en statistique par exemple). La logique est universelle. Monsieur Spock, s’il avait existé n’aurait pas dit mieux. Mais jusqu’à peu (dans l’échelle de l’humanité) il n’y avait aucun moyen de se la représenter réellement, sous forme de symboles, d’assertions, etc. Il n’y avait aucune représentation formelle de la logique.
Or un ordinateur est logique (même si on peut lui demander des choses illogiques, c’est vous qui le programmez après tout). La logique est même la base de nombreuses applications mathématiques, électroniques, d’intelligence artificielle. En informatique, le matériel est électronique et dépend de la logique, et les programmes dépendent tant de tests et de calculs faisant appel à la logique, et devant fonctionner sur des circuits électroniques. Sans logique, pas d’électronique, ni d’ordinateurs, ni de programmes.
C’est ce qui fait que les opérateurs, conditions et tests ne doivent pas être posés n’importe comment. Il n’y a rien de plus logique qu’un ordinateur, mais aussi rien de plus stupide : il va bêtement (et encore la notion de bêtise lui est inconnue) exécuter exactement ce que vous lui demandez, même si le résultat entraîne une erreur. Cela lui importe peu du moment que la syntaxe est correcte. Ainsi :
PROGRAMME STUPIDE
VAR
froid, nu, sortir en Booléen
DEBUT
Froid←VRAI
Nu←VRAI
Si Froid=VRAI ET nu=VRAI Alors
Sortir←VRAI
FinSi
FIN
Cet algorithme...
Exercices
Exercice 1
Écrire, avec des comparaisons, un algorithme qui affiche l’état de l’eau (glace, liquide, vapeur) en fonction de sa température.
Exercice 2
Écrire le même algorithme, mais en utilisant deux variables booléennes pour vérifier l’état de l’eau, sans comparaisons dans les SI.
Exercice 3
Écrire un algorithme qui détermine la catégorie sportive d’un utilisateur en fonction de son âge :
-
6 à 7 ans : poussin
-
8 à 9 ans : pupille
-
10 à 11 ans : minime
-
12 ans et plus : cadet
Écrire le programme C# associé.
Exercice 4
Écrire un algorithme qui permet de savoir quel est le jour de la semaine, en utilisant la méthode suivante, puis convertissez-le en C# :
-
On garde les deux derniers chiffres de l’année.
-
On ajoute 1/4 de ce chiffre en ignorant les restes : division entière.
-
On ajoute la journée du mois.
-
Selon le mois, on ajoute la valeur indiquée :
-
Janvier = 1
-
Février = 4
-
Mars = 4
-
Avril = 0
-
Mai = 2
-
Juin = 5
-
Juillet = 0
-
Août = 3
-
Septembre = 6
-
Octobre = 1
-
Novembre = 4
-
Décembre = 6
-
Si l’année est bissextile et le mois est janvier ou février, on soustrait 1.
-
Selon le siècle, on ajoute la valeur indiquée :
-
Années 1600 = 6
-
Années 1700 = 4
-
Années 1800 = 2
-
Années 1900...