[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Non-Officiels
> Programmation
> Autres langages
> [Pascal] Cours pour débutants sur le Pascal > Il était une fois... Le pascal ! > Avec des « si », notre programme serait mieux !
> Lecture du tutoriel
Avec des « si », notre programme serait mieux !
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Nous voici dans la 2e partie : on va aborder un premier chapitre sur ce qui concerne les conditions, un principe qu'on retrouve dans bien d'autres langages. Soyez sûrs que, sans conditions, les programmes feraient presque toujours la même chose, ce qui deviendrait vite lassant.
Les conditions servent à
tester les variables. On peut par exemple dire : « si telle variable est égale à telle chose, fait cela... ». Mais on peut ne pas tester que l'égalité... On peut aussi vérifier si la variable est supérieure, inférieure, inférieure ou égale, supérieure ou égale, ...
On pourra aussi tester les booléens, mais on verra ça plus tard, dans la prochaine sous-partie.
Avant de pouvoir traiter des conditions, il va vous falloir connaître quelques symboles.
Quelques symboles à connaître
Voici les symboles et leurs significations à connaître
par coeur.
= est égal à
< est plus petit que
<= est plus petit ou égal à
> est plus grand que
>= est plus grand ou égal à
<> est plus petit ou plus grand que (n'est pas égal à).
Commençons par « if... then... »
Attaquons maintenant sans plus tarder !
Nous allons faire un test simple, qui va dire à l'ordinateur :
Si la variable vaut ceci
Alors fais ceci
En anglais, le mot « if » se traduit par « si » et « then » par « alors ». C'est ça qu'on utilise en pascal. Écrivez donc «
if », ensuite, vous devrez écrire vos conditions.
Ensuite, il faut marquer "
then" (pour
ALORS) : une fois cela fait, on va marquer '
begin' puis '
end' (
sans point après). Tout ce qui se trouve entre '
begin' et '
end' sera exécuté
uniquement si la condition est vérifiée.
Ce que nous devrons écrire sera donc :
Code : Pascal1
2
3
4
5
6 | if { Les conditions }
then
begin
{ Ici, vos instructions à exécuter SI LES CONDITIONS SONT REMPLIES }
end
|
A la place de mon commentaire "Les conditions", on va écrire une condition pour tester une variable.
Par exemple, on pourrait tester une variable "point" qui contient les points d'un QCM. Tenez : pour s'entraîner, on va vérifier si vous avez réussi les QCM, c'est-à-dire
si vos points sont supérieurs ou égaux à 15 :
Code : Pascal1
2
3
4
5
6 | if points >= 15
then
begin
writeln('Vous avez réussi le QCM ! Bravo !');
end
|
Le symbole
>= signifie "
supérieur ou égal", comme on l'a vu tout à l'heure.
Pour un code plus propre...
La façon dont vous écrivez '
begin' et '
end' n'est pas importante, votre programme fonctionnera aussi bien si vous écrivez tout sur une même ligne. Par exemple :
Code : Pascal1 | if points >= 15 then begin writeln('Vous avez réussi le QCM ! Bravo !'); end
|
Ça marche. Mais
je vous le déconseille fortement !
En effet, tout écrire sur une même ligne rend votre code difficilement lisible. Si vous ne prenez pas dès maintenant l'habitude d'aérer votre code, plus tard, quand vous écrirez de plus gros programmes, vous ne vous y retrouverez plus !
Essayez donc de présenter votre code source de la même façon que moi :
if et vos instructions sur une ligne,
then à la ligne suivante, puis
begin sur une autre ligne, décalé vers la droite, vos instructions sur la ligne suivante, à la même hauteur que '
begin', et, toujours à la même hauteur, mais à la ligne suivante, '
end'.
'else' pour 'sinon'
Maintenant que nous savons faire un test simple, allons un peu plus loin : si le test n'est pas réussi (il est faux), on va dire à l'ordinateur d'exécuter d'autres instructions.
En français, nous allons donc écrire quelque chose qui ressemble à cela :
Si la variable vaut ça
Alors fais ceci
Sinon fais cela
Il suffit de rajouter le mot
else après le '
end'.
Petit exemple :
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11 | if points >= 15
then
begin
writeln('Vous avez réussi le QCM ! Bravo !');
end
else
begin
writeln('Dommage, vous avez raté le QCM');
end;
|
Erreur fréquente chez les débutants : ce qu'il faut mettre après le 'end'. Sachez que le 'end' d'un 'if' ne précède rien, celui d'un 'else', est suivi d'un point-virgule. Logique, car il sépare le 'if... then... else...' de l'instruction suivante.
Que fait-on ?
Si la variable
points est supérieure ou égale à 15, on affiche le message "
Vous avez réussi le QCM ! Bravo !", sinon on affiche "
Dommage, vous avez raté le QCM" (c'est vrai que c'est assez sévère pour la notation

).
Insérer un bloc 'if' dans un 'else'
Revenons à notre exemple : pour l'instant, s'il avait plus que 15, il avait réussi, SINON, il a raté. Mais maintenant, imaginons que le gars a moins de 2, il l'a complètement loupé. Ce qui donne :
S'IL a plus que 15, il a réussi.
SINON, SI il a plus que 2, il a moyennement raté.
SINON, il a complètement raté.
On devrait pouvoir faire ça, dans nos programmes.
Mais ne vous inquiétez pas, le Pascal a tout prévu !
On peut imbriquer des '
if... then... else... ' dans un '
else... ' !
Mais, comme un dessin vaut toujours mieux qu'un long discours :
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | if points >= 15
then
begin
writeln('Vous avez réussi le QCM ! Bravo !');
end
else
if points > 2
then
begin
writeln('Dommage, vous avez raté le QCM');
end
else
begin
writeln('Vous n''êtes vraiment pas doué !');
end;
|
L'ordinateur fait les tests dans l'ordre.
D'abord il teste le premier
if : si la condition est vraie, alors il exécute ce qui se trouve entre '
begin ... end'.
Sinon, il va au "si" et fait à nouveau un test : si ce test est vrai, alors il exécute les instructions correspondantes entre '
begin ... end'.
Enfin, si aucun des tests précédents n'a abouti, il exécute les instructions du "sinon".
Le "
else" et le "
else if" ne sont pas obligatoires. Pour faire une condition, il faut juste au moins un "
if".
Notez qu'on peut imbriquer autant de '
if ... then ... else ... ' dans des '
else ... '. On peut donc écrire :
SI la variable vaut ça
ALORS fais ceci
SINON SI la variable vaut ça ALORS fais ça
SINON SI la variable vaut ça ALORS fais ça
.
.
.
SINON fais cela.
On va commencer tout de suite par tester un petit programme :
Code : Pascal 1
2
3
4
5
6
7
8
9
10 | if true
begin
write('vrai');
end
else
begin
write('faux');
end;
|
Allez-y, testez !
Voilà ce que ça donne :
Code : Console
Ouais, mais notre programme il est incomplet, on n'a pas mis de valeur à la variable 'true' (Quel nom, pour une variable !). Alors comment veux-tu que ça marche, et puis, même, ça n'a pas de sens, on ne met pas de conditions !
Bien sûr que si ! Ça a du sens !
Faites un autre test maintenant0 en remplaçant le '
true' par '
false' :
Code : Pascal 1
2
3
4
5
6
7
8
9
10 | if false
begin
write('vrai');
end
else
begin
write('faux');
end;
|
Résultat :
Code : Console
Notons nos observations :
Si on mets 'true', le test est considéré comme vrai. Sinon, avec un 'false', le test est considéré comme faux.
Quelques explications
En fait, à chaque fois que vous faites un test dans un
if, ce test renvoie la valeur
true s'il est vrai, et
false s'il est faux.
Par exemple :
Code : Pascal
Ici, le test que vous faites est "
points>=15".
Supposons que
points vaille 18. Alors le test est vrai, et l'ordinateur "remplace" en quelque sorte "
points>=15" par
true.
Ensuite, l'ordinateur obtient (dans sa tête) un "
if true". Quand c'est '
true', comme on l'a vu, l'ordinateur dit que la condition est vraie, donc il affiche "
vrai" !
De même, si la condition est fausse, il remplace "
points>=15" par '
false', et du coup la condition est fausse : l'ordinateur va lire les instructions du "
else".
Testons une variable
Testez maintenant un autre truc : envoyez le résultat de votre condition dans une variable, comme si c'était une opération, mais attention, ce n'est pas une opération : c'est une fonction toute faite, qui renverra soit
TRUE si la condition est vraie, et
FALSE, si elle fausse.
Code : Pascal1
2
3
4
5
6
7
8
9 | program testvar(output);
var score:integer ; reussi:boolean ;
begin
score:=18;
reussi:=score>=15;
writeln(reussi);
readln;
end.
|
Comme vous le voyez, la condition
score>=15 a renvoyé '
TRUE' car elle est vraie. Du coup, notre variable
reussi vaut '
TRUE' ; on vérifie d'ailleurs ça en faisant un
writeln qui montre bien qu'elle a changé de valeur.
Faites le même test en mettant
score:=10, par exemple. Cette fois,
reussi vaudra '
FALSE'.
Les booléens dans nos conditions
On testera souvent des booléens, dans nos conditions, retenez bien ça !
Ce qui peut donner :
Code : Pascal1
2
3
4
5
6
7
8
9 | if reussi
then
begin
writeln('Vous avez réussi !');
end
else
begin
writeln('Dommage...');
end;
|
Les points importants de cette partie, sûrement la plus importante de ce chapitre
On va résumer ça dans une mini-condition :
Code : Pascal1
2
3
4
5 | if expression qui retourne un booleen
then
begin
blablabla
end
|
Donc là, le
blablabla ne sera exécuté SI ET SEULEMENT SI l'
expression qui retourne un booleen retourne
TRUE ; si elle renvoie
FALSE, le programme passera au
else.
En résumé, sachez donc que
les booléens servent à exprimer si quelque chose est vrai ou faux.
La condition "
if... then... else" que l'on vient de voir est le type de condition le plus souvent utilisé.
En fait, il n'y a pas 36 façons de faire une condition en Pascal. Le "
if... then... else" permet de gérer tous les cas.
Toutefois, cette condition peut s'avérer quelque peu... répétitive. Prenons cet exemple :
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | if score==0
then
begin
writeln('T''es nul !');
end
else if score==1
then
begin
writeln('Seulement 1 !?');
end
else if score<=10
then
begin
writeln('Tu n''as pas assez travaillé !');
end
else if score<=15
then
begin
writeln('Continue, tu passeras peut-être la barre des 15 !');
end
else
begin
writeln('Bravo !');
end;
|
(Aïe ! Mes doigts !)
"Case... of... end"
Les informaticiens détestent faire des choses répétitives, on a eu l'occasion de le vérifier plus tôt.
Alors, pour éviter d'avoir à faire des répétitions comme ça quand on teste la valeur d'une seule et même variable, ils ont inventé une autre structure que le "
if... then... else".
Cette structure particulière s'appelle "
case... of... end". En voici un, basé sur l'exemple qu'on vient de voir :
Code : Pascal1
2
3
4
5
6
7 | Case score of
0 : writeln('T''es nul !');
1 : writeln('Seulement 1 !?');
2..10 : writeln('Tu n''as pas assez travaillé !');
11..15 : writeln('Continue, tu passeras peut-être la barre des 15 !');
else writeln('Bravo !');
end;
|
On voit tout de suite la différence, c'est moins de la moitié !
Alors, souvenez-vous de mon exemple.
Il faut en fait marquer
Case nom_de_la_variable of puis, marquer la condition, et là il y a plusieurs manières :
On ne marque qu'un nombre.
Dans ce cas, la condition est :
SI la variable testée
= le nombre en question, on fait la condition.
SINON, on passe à la suite.
On marque un nombre, 2 points et un autre nombre.
Dans ce cas, la condition est :
SI la variable testée
>= au 1er nombre
ET <= au 2e nombre, on fait la condition.
SINON, on passe à la suite.
Pour finir, le 'ELSE'.
Si jamais aucune des conditions n'a été remplie, l'ordinateur exécutera celle-là.
Un menu
Le "
case ... of ... end" est souvent utilisé pour faire des menus.
Oh ! Une idée est parvenue à mon cerveau ! Un exercice, pour s'entraîner ! Vous allez faire ... un menu en "
case ... of ... end".
Au travail
En console, pour faire un menu, on fait des
write(ln) qui affichent les différentes options possibles. Chaque option est numérotée, et l'utilisateur doit rentrer le numéro du menu qui l'intéresse.
Voici par exemple ce que la console devra afficher :
Code : Console | === Armurerie ===
1. Maverick
2. Ak47
3. Glock
4. Couteau
Que voulez-vous ?_ |
(Vous pouvez bien entendu mettre les choix que vous voulez : si vous n'êtes pas un féru des jeux vidéos, faites, par exemple, des titres de livres, de musiques, ...)
Reproduisez maintenant ce menu à l'aide de
write(ln), ajoutez un
read(ln) pour enregistrer le choix de l'utilisateur dans une variable
choix_arme, et enfin faites un
case... of... end pour dire à l'utilisateur : "vous avez choisi le couteau", par exemple.
Allez, au boulot.
Correction
Voilà la correction, mais j'espère que vous avez tous trouvé !
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | program armurerie(output)
var choix_arme:integer;
begin
writeln('=== Armurerie ===');
writeln;
writeln('1. Maverick');
writeln('2. Ak47');
writeln('3. Glock');
writeln('4. Couteau');
writeln;
writeln('Que voulez-vous ?');
readln(choix_arme);
writeln;
case choix_arme of
1 : writeln('Vous avez pris une Maverick, mettez le silencieux ;)');
2 : writeln('Vous avez pris une AK47, mon arme préférée (ce tuto vous aura au moins appris ça)');
3 : writeln('Vous avez pris un Glock, et vous croyez vous en sortir ?');
4 : writeln('Vous avez pris un couteau !?');
else writeln('Vous n''avez pas rentré un bon nombre, vous combatterez à main nues !');
end;
readln;
end.
|
Et voilà !
J'espère que vous n'avez pas oublié le "
else" à la fin du "
case ... of ... end" !
En effet, quand vous programmez, vous devez toujours penser à tous les cas. Vous avez beau dire de taper un nombre entre 1 et 4, vous trouverez toujours un imbécile qui ira taper "10" ou encore "Salut", alors que ce n'est pas ce que vous attendez.
Bref, soyez toujours vigilants de ce côté-ci : ne faites pas confiance à l'utilisateur, il peut parfois rentrer n'importe quoi. Prévoyez toujours un cas "
else".
Voilà, on en a fini pour les conditions ; mais, dans le prochain chapitre, on abordera un sujet qui ressemble assez à celui-ci : les boucles. Mais, je ne gâche pas le suspense, je ne vous en dit pas plus

!
Vous pouvez dorénavant vous entraîner en faisant une calculette !
Affichez d'abord un menu qui demande l'opération (addition, soustraction, ... ). Une fois que l'utilisateur a fait son choix, demandez-lui les valeurs et... affichez le résultat !