![]() |
||||||||||||||||||||||||||||||||||||
Préambule : le Codage
3. Les Tests
4. Encore de la Logique |
« C’est assez difficile
de trouver une erreur dans son code quand on la cherche. C’est encore bien
plus dur quand on est convaincu que le code est juste. »
Reprenons le cas
de notre « programmation algorithmique du touriste égaré ». Normalement,
l’algorithme ressemblera à quelque chose comme : « Allez tout droit jusqu’au
prochain carrefour, puis prenez à droite et ensuite la deuxième à gauche, et
vous y êtes ».
Il n’y a que deux formes possibles pour un test ; la forme de gauche est la forme complète, celle de droite la forme simple.
Si
booléen Alors Si booléen Alors
Ceci appelle
quelques explications. · une variable de type booléen · une condition
Nous reviendrons
dans quelques instants sur ce qu’est une
condition en informatique.
Allez tout
droit jusqu’au prochain carrefour
3. Qu’est ce qu’une condition ? Une condition est une comparaison Cette définition est essentielle ! Elle signifie qu’une condition est composée de trois éléments : · une valeur · un opérateur de comparaison · une autre valeur
Les valeurs
peuvent être a priori de n’importe quel type (numériques, caractères…). Mais
si l’on veut que la comparaison ait un sens, il faut que les deux valeurs de
la comparaison soient du même type ! · = égal à… · <> différent de… · < strictement plus petit que… · > strictement plus grand que… · =< plus petit ou égal à… · >= plus grand ou égal à…
L’ensemble des
trois éléments constituant la condition constitue donc, si l’on veut, une
affirmation, qui a un moment donné est VRAIE ou FAUSSE.
“t” < “w”
VRAI
Certains
problèmes exigent parfois de formuler des conditions qui ne peuvent pas être
exprimées sous la forme simple exposée ci-dessus. Reprenons le cas « Toto
est inclus entre 5 et 8 ». En fait cette phrase cache non une, mais
deux conditions. Car elle revient à dire
que « Toto est supérieur à 5 et Toto est inférieur à 8 ». Il y a donc bien
là deux conditions, reliées par ce qu’on appelle un
opérateur logique, le mot ET. · Le ET a le même sens en informatique que dans le langage courant. Pour que : Condition1 ET Condition2 soit VRAI, il faut impérativement que Condition1 soit VRAI et que Condition2 soit VRAI. · Il faut se méfier un peu plus du OU. Pour que : Condition1 OU Condition2 soit VRAI, il suffit que Condition1 soit VRAIE ou que Condition2 soit VRAIE. Le point important est que si Condition1 est VRAIE et que Condition2 est VRAIE aussi, Condition1 OU Condition2 est VRAIE. Le OU informatique ne veut donc pas dire « ou bien » (sauf dans certaines formes rares, dénommées OU exclusif et notées XOR). · Le XOR (ou OU exclusif) fonctionne de la manière suivante. Pour que Condition1 XOR Condition2 soit VRAI, il faut que Condition1 soit VRAI, ou bien que Condition2 soit VRAI. Mais si toutes les deux sont fausses, ou que toutes les deux sont VRAI, alors le résultat global est considéré comme FAUX. J’insiste sur le fait que le XOR est une rareté, dont il n’est pas strictement indispensable de s’encombrer en programmation. · Enfin, le NON inverse une condition : NON(Condition1) est VRAI si Condition1 est FAUX, et il sera FAUX si Condition1 est VRAI. Vous vous demandez peut-être à quoi sert ce NON. Après tout, plutôt qu’écrire NON(Prix > 20), il serait plus simple d’écrire tout bonnement Prix=<20. Dans ce cas, c’est évident qu’on se complique inutilement la vie avec le NON. Mais on rencontrera plus loin des situations dans lesquelles il rend de précieux services.
On représente
fréquemment tout ceci dans des tables de vérité (C1
et C2 représentent deux conditions, et on envisage à chaque fois les quatre
cas possibles) :
Graphiquement, on
peut très facilement représenter un SI comme un aiguillage de chemin de fer
(ou un aiguillage de train électrique, c’est moins lourd à porter). Un SI
ouvre donc deux voies, correspondant à deux traitements différents. Mais il
y a des tas de situations où deux voies ne suffisent pas. Par exemple, un
programme devant donner l’état de l’eau selon sa température doit pouvoir
choisir entre trois réponses possibles (solide, liquide ou gazeuse).
Variable
Temp en Entier Vous constaterez que c’est un peu laborieux. Les conditions se ressemblent plus ou moins, et surtout on oblige la machine à examiner trois tests successifs alors que tous portent sur une même chose, la température (la valeur de la variable Temp). Il serait ainsi bien plus rationnel d’imbriquer les tests de cette manière :
Variable
Temp en Entier
Nous
avons fait des économies : au lieu de devoir taper trois conditions, dont
une composée, nous n’avons plus que deux conditions simples. Mais aussi, et
surtout, nous avons fait des économies sur le temps d’exécution de
l’ordinateur. Si la température est inférieure à zéro, celui-ci écrit
dorénavant « C’est de la glace » et passe
directement à la fin, sans être ralenti par l’examen d’autres
possibilités (qui sont forcément fausses).
6. De l’aiguillage à la gare de tri
« J'ai l'âme
ferroviaire : je regarde passer les vaches » (Léo Ferré)
Mais dans
certains cas, ce ne sont pas deux voies qu’il nous faut, mais trois, ou même
plus. Dans le cas de l’état de l’eau, il nous faut trois voies pour notre
« train », puisque l’eau peut être solide, liquide ou gazeuse. Alors, nous
n’avons pas eu le choix : pour deux voies, il nous fallait un aiguillage,
pour trois voies il nous en faut deux, imbriqués l’un dans l’autre.
Soyons bien
clairs : cette structure est la seule possible du point de vue logique
(même si on peut toujours mettre le bas en haut et le haut en bas). Mais
du point de vue de l’écriture, le pseudo-code algorithmique admet une
simplification supplémentaire. Ainsi, il est possible (mais non obligatoire,
que l’algorithme initial :
Variable
Temp en Entier devienne :
Variable
Temp en Entier
Si
Temp =< 0 Alors Dans le cas de tests imbriqués, le Sinon et le Si peuvent être fusionnés en un SinonSi. On considère alors qu’il s’agit d’un seul bloc de test, conclu par un seul FinSi
Le SinonSi permet
en quelque sorte de créer (en réalité, de simuler) des aiguillages à plus de
deux branches. On peut ainsi enchaîner les SinonSi les uns derrière les
autres pour simuler un aiguillage à autant de branches que l’on souhaite.
Jusqu’ici, nous
avons utilisé uniquement des conditions
pour faire des tests. Mais vous vous rappelez qu’il existe un type de
variables (les booléennes) susceptibles de stocker les valeurs VRAI ou FAUX.
En fait, on peut donc entrer des conditions dans ces variables, et tester
ensuite la valeur de ces variables.
Variable
Temp en Entier A priori, cette technique ne présente guère d’intérêt : on a alourdi plutôt qu’allégé l’algorithme de départ, en ayant recours à deux variables supplémentaires. Mais : · souvenons-nous : une variable booléenne n’a besoin que d’un seul bit pour être stockée. De ce point de vue, l’alourdissement n’est donc pas considérable. · dans certains cas, notamment celui de conditions composées très lourdes (avec plein de ET et de OU tout partout) cette technique peut faciliter le travail du programmeur, en améliorant nettement la lisibilité de l’algorithme. Les variables booléennes peuvent également s’avérer très utiles pour servir de flag, technique dont on reparlera plus loin (rassurez-vous, rien à voir avec le flagrant délit des policiers).
|