Вы находитесь на странице: 1из 9

P ARTIE 3 L ES T ESTS

Il est assez difficile de trouver une erreur dans son code quand on la cherche. Cest encore bien plus dur quand on est convaincu que le code est juste. - Steve McConnell Il nexiste pas, et il nexistera jamais, de langage dans lequel il soit un tant soit peu difficile dcrire de mauvais programmes . - Anonyme Si le dboguage est lart denlever les bogues, alors la programmation doit tre lart de les crer. - Anonyme Je vous avais dit que lalgorithmique, cest la combinaison de quatre structures lmentaires. Nous en avons dj vu deux, voici la troisime. Autrement dit, on a quasiment fini le programme. Mais non, je rigole.

1. De quoi sagit-il ?
Reprenons le cas de notre programmation algorithmique du touriste gar . Normalement, lalgorithme ressemblera quelque chose comme : Allez tout droit jusquau prochain carrefour, puis prenez droite et ensuite la deuxime gauche, et vous y tes . Mais en cas de doute lgitime de votre part, cela pourrait devenir : Allez tout droit jusquau prochain carrefour et l regardez droite. Si la rue est autorise la circulation, alors prenez la et ensuite cest la deuxime gauche. Mais si en revanche elle est en sens interdit, alors continuez jusqu la prochaine droite, prenez celle-l, et ensuite la premire droite . Ce deuxime algorithme a ceci de suprieur au premier quil prvoit, en fonction dune situation pouvant se prsenter de deux faons diffrentes, deux faons diffrentes dagir. Cela suppose que linterlocuteur (le touriste) sache analyser la condition que nous avons fixe son comportement ( la rue est-elle en sens interdit ? ) pour effectuer la srie dactions correspondante. Eh bien, croyez-le ou non, mais les ordinateurs possdent cette aptitude, sans laquelle dailleurs nous aurions bien du mal les programmer. Nous allons donc pouvoir parler notre ordinateur comme notre touriste, et lui donner des sries dinstructions effectuer selon que la situation se prsente dune manire ou dune autre. Cette structure logique rpond au doux nom de test. Toutefois, ceux qui tiennent absolument briller en socit parleront galement de structure alternative.

2. Structure dun test

Retour Haut de Page

Il ny a que deux formes possibles pour un test ; la premire est la plus simple, la seconde la plus complexe. Si boolen Alors Instructions Finsi Si boolen Alors Instructions 1 Sinon Instructions 2 Finsi Ceci appelle quelques explications. Un boolen est une expression dont la valeur est VRAI ou FAUX. Cela peut donc tre (il ny a que deux possibilits) :

une variable (ou une expression) de type boolen une condition

Nous reviendrons dans quelques instants sur ce quest une condition en informatique. Toujours est-il que la structure dun test est relativement claire. Dans la forme la plus simple, arriv la premire ligne (Si Alors) la machine examine la valeur du boolen. Si ce boolen a pour valeur VRAI, elle excute la s rie dinstructions. Cette srie dinstructions peut tre trs brve comme trs longue, cela na aucune importance. En revanche, dans le cas o le boolen est faux, l'ordinateur saute directement aux instructions situes aprs le FinSi. Dans le cas de la structure complte, c'est peine plus compliqu. Dans le cas o le boolen est VRAI, et aprs avoir excut la srie d'instructions 1, au moment o elle arrive au mot Sinon , la machine saute directement la premire instruction situe aprs le Finsi . De mme, au cas o le boolen a comme valeur Faux , la machine saute directement la premire ligne situe aprs le Sinon et excute lensemble des instructions 2 . Dans tous les cas, les instructions situes juste aprs le FinSi seront excutes normalement. En fait, la forme simplifie correspond au cas o lune des deux branches du Si est vide. Ds lors, plutt qucrire sinon ne rien faire du tout , il est plus simple de ne rien crire. Et laisser un Si... complet, avec une des deux branches vides, est considr comme une trs grosse maladresse pour un programmeur, mme si cela ne constitue pas proprement parler une faute. Exprim sous forme de pseudo-code, la programmation de notre touriste de tout lheure donnerait donc quelque chose du genre : Allez tout droit jusquau prochain carrefour Si la rue droite est autorise la circulation Alors Tournez droite Avancez

Prenez la deuxime gauche Sinon Continuez jusqu la prochaine rue droite Prenez cette rue Prenez la premire droite Finsi

3. Quest ce quune condition ?


Une condition est une comparaison

Retour Haut de Page

Cette dfinition est essentielle ! Elle signifie quune condition est compose de trois lments :

une valeur un oprateur de comparaison une autre valeur

Les valeurs peuvent tre a priori de nimporte quel type (numriques, caractres). Mais si lon veut que la comparaison ait un sens, il faut que les deux valeurs de la comparaison soient du mme type ! Les oprateurs de comparaison sont :

gal diffrent de strictement plus petit que strictement plus grand que plus petit ou gal plus grand ou gal

Lensemble des trois lments composant la condition constitue donc, si lon veut, une affirmation, qui un moment donn est VRAIE ou FAUSSE. noter que ces oprateurs de comparaison peuvent tout fait semployer avec des caractres. Ceux-ci sont cods par la machine dans lordre alphabtique (rappelez vous le code ASCII vu dans le prambule), les majuscules tant systmatiquement places avant les minuscules. Ainsi on a : t < w VRAI Maman > Papa FAUX maman > Papa VRAI Remarque trs importante

En formulant une condition dans un algorithme, il faut se mfier comme de la

peste de certains raccourcis du langage courant, ou de certaines notations valides en mathmatiques, mais qui mnent des non-sens informatiques. Prenons par exemple la phrase Toto est compris entre 5 et 8 . On peut tre tent de la traduire par : 5 < Toto < 8 Or, une telle expression, qui a du sens en franais, comme en mathmatiques, ne veut rien dire en programmation. En effet, elle comprend deux oprateurs de comparaison, soit un de trop, et trois valeurs, soit l aussi une de trop. On va voir dans un instant comment traduire convenablement une telle condition. Exercice 3.1

4. Conditions composes

Retour Haut de Page

Certains problmes exigent parfois de formuler des conditions qui ne peuvent pas tre exprimes sous la forme simple expose 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 suprieur 5 et Toto est infrieur 8 . Il y a donc bien l deux conditions, relies par ce quon appelle un oprateur logique, le mot ET. Comme on la voqu plus haut, linformatique met notre disposition quatre oprateurs logiques : ET, OU, NON, et XOR. Le ET a le mme sens en informatique que dans le langage courant. Pour que "Condition1 ET Condition2" soit VRAI, il faut imprativement que Condition1 soit VRAI et que Condition2 soit VRAI. Dans tous les autres cas, "Condition 1 et Condition2" sera faux. Il faut se mfier 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 reste VRAIE. Le OU informatique ne veut donc pas dire ou bien Le XOR (ou OU exclusif) fonctionne de la manire suivante. Pour que "Condition1 XOR Condition2" soit VRAI, il faut que soit Condition1 soit VRAI, soit que Condition2 soit VRAI. Si toutes les deux sont fausses, ou que toutes les deux sont VRAI, alors le rsultat global est considr comme FAUX. Le XOR est donc l'quivalent du "ou bien" du langage courant. Jinsiste toutefois sur le fait que le XOR est une raret, dont il nest pas strictement indispensable de sencombrer en programmation. Enfin, le NON inverse une condition : NON(Condition1)est VRAI si Condition1 est FAUX, et il sera FAUX si Condition1 est VRAI. C'est l'quivalent pour les boolens du signe "moins" que l'on place devant les nombres. Alors, vous vous demandez peut-tre quoi sert ce NON. Aprs tout, plutt qucrire NON(Prix > 20), il serait plus simple dcrire tout bonnement

Prix=<20. Dans ce cas prcis, cest vident quon se complique inutilement la vie avec le NON. Mais si le NON n'est jamais indispensable, il y a tout de mme des situations dans lesquelles il s'avre bien utile. On reprsente frquemment tout ceci dans des tables de vrit (C1 et C2 reprsentent deux conditions, et on envisage chaque fois les quatre cas possibles) C1 et C2 C1 Vrai C1 Faux C1 ou C2 C1 Vrai C1 Faux C1 xor C2 C1 Vrai C1 Faux Non C1 C1 Vrai C1 Faux LE GAG DE Faux Vrai LA JOURNE... C2 Vrai Vrai Faux C2 Vrai Vrai Vrai C2 Vrai Faux Vrai C2 Faux Faux Faux C2 Faux Vrai Faux C2 Faux Vrai Faux

...Consiste formuler dans un test une condition qui ne pourra jamais tre vraie, ou jamais tre fausse. Si ce nest pas fait exprs, cest assez rigolo. Si cest fait exprs, cest encore plus drle, car une condition dont on sait davance quelle sera toujours fausse nest pas une condition. Dans tous les cas, cela veut dire quon a crit un test qui nen est pas un, et qui fonctionne comme sil ny en avait pas. Cela peut tre par exemple : Si Toto < 10 ET Toto > 15 Alors (il est trs difficile de trouver un nombre qui soit la fois infrieur 10 et suprieur 15 !) Bon, a, cest un motif immdiat pour payer une tourne gnrale, et je sens quon ne restera pas longtemps le gosier sec. Exercice 3.2 Exercice 3.3

5. Tests imbriqus

Retour Haut de Page

Graphiquement, on peut trs facilement reprsenter un SI comme un aiguillage de chemin de fer (ou un aiguillage de train lectrique, cest moins lourd porter). Un SI ouvre donc deux voies, correspondant deux traitements diffrents. Mais il y a des tas de situations o deux voies ne suffisent pas. Par exemple, un programme devant donner ltat de leau selon sa temprature doit pouvoir choisir entre trois rponses possibles (solide, liquide ou gazeuse). Une premire solution serait la suivante : Variable Temp en Entier Dbut Ecrire "Entrez la temprature de leau :" Lire Temp Si Temp =< 0 Alors Ecrire "Cest de la glace" FinSi Si Temp > 0 Et Temp < 100 Alors Ecrire "Cest du liquide" Finsi Si Temp > 100 Alors Ecrire "Cest de la vapeur" Finsi Fin Vous constaterez que cest 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 mme chose, la temprature de l'eau (la valeur de la variable Temp). Il serait ainsi bien plus rationnel d imbriquer les tests de cette manire : Variable Temp en Entier Dbut Ecrire "Entrez la temprature de leau :" Lire Temp Si Temp =< 0 Alors Ecrire "Cest de la glace" Sinon Si Temp < 100 Alors Ecrire "Cest du liquide" Sinon Ecrire "Cest de la vapeur" Finsi Finsi Fin Nous avons fait des conomies : au lieu de devoir taper trois conditions, dont une compose, nous navons plus que deux conditions simples. Mais aussi, et surtout, nous avons fait des conomies sur le temps dexcution de lordinateur. Si

la temprature est infrieure zro, celui-ci crit dornavant Cest de la glace et passe directement la fin, sans tre ralenti par lexamen dautres possibilits (qui sont forcment fausses). Cette deuxime version nest donc pas seulement plus simple crire et plus lisible, elle est galement plus performante lexcution. Les structures de tests imbriqus sont donc un outil indispensable la simplification et loptimisation des algorithmes. Exercice 3.4 Exercice 3.5 Exercice 3.6

6. De laiguillage la gare de tri

Retour Haut de Page

J'ai l'me ferroviaire : je regarde passer les vaches (Lo Ferr) Cette citation napporte peut-tre pas grand chose cet expos, mais je laime bien, alors ctait le moment ou jamais. En effet, dans un programme, une structure SI peut tre facilement compare un aiguillage de train. La voie principale se spare en deux, le train devant rouler ou sur lune, ou sur lautre, et les deux voies se rejoignant tt ou tard pour ne plus en former quune seule, lors du FinSi. On peut schmatiser cela ainsi :

Mais dans certains cas, ce ne sont pas deux voies quil nous faut, mais trois, ou mme plus. Dans le cas de ltat de leau, il nous faut trois voies pour notre train , puisque leau peut tre solide, liquide ou gazeuse. Alors, nous navons pas eu le choix : pour deux voies, il nous fallait un aiguillage, pour trois voies il nous en faut deux, imbriqus lun dans lautre. Cette structure (telle que nous lavons programme la page prcdente) devrait tre schmatise comme suit :

Soyons bien clairs : cette structure est la seule possible du point de vue logique (mme si on peut toujours mettre le bas en haut et le haut en bas). Mais du point de vue de lcriture, le pseudo-code algorithmique admet une simplification supplmentaire. Ainsi, il est possible (mais non obligatoire, que lalgorithme initial : Variable Temp en Entier Dbut Ecrire "Entrez la temprature de leau :" Lire Temp Si Temp =< 0 Alors Ecrire "C'est de la glace" Sinon Si Temp < 100 Alors Ecrire "Cest du liquide" Sinon Ecrire "Cest de la vapeur" Finsi Finsi Fin devienne : Variable Temp en Entier Dbut Ecrire "Entrez la temprature de leau :" Lire Temp Si Temp =< 0 Alors Ecrire "Cest de la glace" SinonSi Temp < 100 Alors Ecrire "Cest du liquide" Sinon Ecrire "Cest de la vapeur" Finsi Fin Dans le cas de tests imbriqus, le Sinon et le Si peuvent tre fusionns en un SinonSi. On considre alors quil sagit dun seul bloc de test, conclu par un seul FinSi Le SinonSi permet en quelque sorte de crer (en ralit, de simuler) des aiguillages plus de deux branches. On peut ainsi enchaner les SinonSi les uns derrire les autres pour simuler un aiguillage autant de branches que lon souhaite.

Retour Haut de Page

7. Variables Boolennes
Jusquici, pour crire nos tests, nous avons utilis uniquement des conditions. Mais vous vous rappelez quil existe un type de variables (les boolennes) 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. Reprenons lexemple de leau. On pourrait le rcrire ainsi : Variable Temp en Entier Variables A, B en Boolen Dbut Ecrire "Entrez la temprature de leau :" Lire Temp A Temp =< 0 B Temp < 100 Si A Alors Ecrire "Cest de la glace" SinonSi B Alors Ecrire "Cest du liquide" Sinon Ecrire "Cest de la vapeur" Finsi Fin A priori, cette technique ne prsente gure dintrt : on a alourdi plutt quallg lalgorithme de dpart, en ayant recours deux variables supplmentaires. Mais souvenons-nous : une variable boolenne na besoin que dun seul bit pour tre stocke. De ce point de vue, lalourdissement nest donc pas considrable. dans certains cas, notamment celui de conditions composes trs lourdes (avec plein de ET et de OU tout partout) cette technique peut faciliter le travail du programmeur, en amliorant nettement la lisibilit de lalgorithme. Les variables boolennes peuvent galement savrer trs utiles pour servir de flag, technique dont on reparlera plus loin (rassurezvous, rien voir avec le flagrant dlit des policiers).

Retour Haut de Page

Вам также может понравиться