Les concepts informatiques introduits jusqu'à maintenant permettent d'écrire des programmes qui s'exécutent strictement ligne par ligne. Les programmes ne sont pas capables de réagir différemment en fonction de l'entrée de l'utilisateur. On dit que ces programmes ont une structure séquentielle car ils permettent l'évaluation ordonnée d'une suite d'expressions.
Cependant, il est parfois souhaitable de pouvoir choisir entre une ou plusieurs possibilités selon un critère bien déterminé. Par exemple, on aimerait afficher la mention d'une note scolaire. Dans ce cas, l'affichage doit être « suffisant » si la note se trouve entre 30 et 60 (30 et 60 inclus) et « insuffisant » si la note se trouve entre 1 et 29 (1 et 29 inclus).
La structure alternative permet de distinguer, sur base d'un test logique (qui peut comporter une ou plusieurs conditions et opérateurs logiques), dans quelle direction le programme doit évoluer. Le programme peut ainsi distinguer deux ou plusieurs voies et exécuter en fonction de cela différentes instructions.
Afin d'utiliser une structure alternative, il faut pouvoir formuler une phrase respectant la structure « si ... alors ... sinon ». Prenons de nouveau l'exemple de la mention d'une moyenne scolaire et formulons une telle phrase : si la moyenne est supérieure ou égal à 30, alors la mention est suffisante, sinon la mention est insuffisante.
Une telle formulation peut ensuite être traduite en une instruction informatique, qui a la forme suivante :
if <condition> then <instruction1> else <instruction2>;
Une telle instruction comporte trois parties :
-
La condition est un test logique sur base d'opérateurs de comparaison et d'opérateurs logiques qui doit être évaluable dans deux états de vérité : true ou false. En effet, le résultat d'un tel test logique est du type booléen (comme le type de variable)
-
Si le résultat du test logique est true, alors l'instruction « instruction1 » est exécutée (l'instruction « instruction2 » est ignorée)
-
Si le résultat du test logique est false, alors l'instruction « instruction2 » est exécutée (l'instruction « instruction1 » est ignorée)
Notre exemple de départ peut donc être traduit dans le code source suivant:
Affichage de la mention d'une note scolaire
program mention;
{
Le programme suivant affiche si la mention est suffisante
ou insuffisante selon la note introduite par l'utilisateur.
L'utilisateur veille à entrer un nombre entier dans
l'intervalle [1, 60].
}
var
note : integer;
mention : string;
begin
write('Veuillez entrer la note :');
readln(note);
{ vérification si la note est supérieure ou égale à 30 }
if (note >= 30) then
mention := 'suffisant'
else
mention := 'insuffisant';
writeln('Votre note correspond à la mention: ', mention);
end.
Comme une instruction IF est reconnue comme une seule instruction seulement, elle se termine par un seul point-virgule tout à la fin.
Les blocs d'instructions
L'instruction IF permet seulement de définir une instruction pour le cas où la condition est vraie et une instruction pour le cas où la condition est fausse. Comme ceci est très limitant, Delphi permet de regrouper plusieurs instructions dans un bloc d'instructions. Ce bloc est considéré comme un seule instruction.
Un bloc d'instruction est donc un ensemble d'instructions et il commence avec le mot-clé « begin » et se termine avec le mot-clé « end ». Toutes les instructions d'un programme se trouvent déjà dans un bloc d'instructions particulier, que l'on appelle le bloc principal.
Affichage de la mention d'une note scolaire
program mention;
{
Le programme suivant affiche si la mention est suffisante
ou insuffisante selon la note introduite par l'utilisateur.
L'utilisateur veille à entrer un nombre entier dans
l'intervalle [1, 60].
}
var
note : integer;
mention : string;
begin
write('Veuillez entrer la note :');
readln(note);
{ vérification si la note est supérieure ou égale à 30 }
if (note >= 30) then
begin
mention := 'suffisant';
writeln('Felicitations, vous avez obtenu la mention: ', mention);
end
else
begin
mention := 'insuffisant';
writeln('Desole, vous avez obtenu la mention : ', mention);
end;
end.
Les instructions à l'intérieur d'un bloc d'instructions doivent respecter la syntaxe imposée par Delphi, c.-à-d. chaque instruction doit se terminer par un point-virgule. L'instruction IF se termine aussi par un seul point-virgule, qui se trouve donc après le deuxième bloc d'instructions.
Le bloc optionnel
En Delphi, l'instruction « instruction2 » (celle qui est exécutée lorsque la condition est fausse) est optionnelle et peut être laissée de côté. Dans ce cas, l'instruction IF a la forme suivante :
if <condition> then <instruction>;
Divisibilité par deux
program divisible;
{
Le programme suivant affiche le message « super » si l'utilisateur
entre un nombre qui est divisible par deux.
}
var
nombre : integer;
begin
write('Veuillez entrer un nombre divisible par deux :');
readln(nombre);
{ vérification de la divisibilité par deux }
if (nombre div 2 = 0) then
writeln('super');
end.
Les opérateurs de comparaison
Les opérateurs de comparaison (ou encore les opérateurs relationnels) sont utilisés pour tester une relation entre deux valeurs. La valeur de retour d'un tel opérateur de comparaison est le type booléen, qui permet seulement les deux valeurs true et false, en fonction de la validité de la relation entre les deux valeurs.
Exemple : le test logique « x = y » retourne la valeur true si la valeur de x est égale à la valeur de y et false dans tous les autres cas.
Voici un tableau de tous les opérateurs de comparaison:
Signe | Signification | Utilité |
---|---|---|
= | est égal à | vérifie l'égalité de deux valeurs |
<> | est différent de | vérifie l'inégalité de deux valeurs |
> | est supérieur à | vérifie si la valeur de gauche est supérieure à la valeur de droite |
>= | est supérieur ou égal à | vérifie si la valeur de gauche est supérieure ou égale à celle de droite |
< | est inférieur à | vérifie si la valeur de gauche est inférieure à la valeur de droite |
<= | est inférieur ou égal à | vérifie si la valeur de gauche est inférieure ou égale à celle de droite |
Les opérateurs logiques
Les opérateurs logiques (ou encore les connecteurs logiques) sont utilisés pour établir une liaison entre deux relations de manière à ce que la construction entière peut être évalué en un booléen en fonction des validités des relations respectives.
Exemple : On aimerait vérifier la validité d'une note scolaire, qui doit se situer dans l'ensemble [1, 60]. A l'aide des opérateurs de comparaison, on peut construire deux conditions, qui sont « 1 <= x » et « x <= 60 ». Cependant, notre test logique est seulement valide si et seulement si les deux conditions sont vraies. Pour cela, il faut les rejoindre par l'opérateur logique « AND » qui retourne seulement la valeur true si la condition de gauche et la condition de droite sont vraies.
Vérification de la validité d'une note scolaire
program note_valide;
{
Le programme suivant affiche le message « valide » si l'utilisateur
entre une note valide, c.-à-d un nombre réel qui se trouve dans
l'intervalle [1, 60], et « invalide » dans tous les autres cas.
}
var
note : real;
begin
write('Veuillez entrer une note scolaire :');
readln(note);
{ vérification de la validité de la note }
if (1 <= note) AND (note <= 60) then
writeln('valide')
else
writeln('invalide');
end.
Les opérateurs logiques peuvent être représentés par des tables de vérité, qui sont des tableaux qui représentent des entrées (en colonne) et des états booléens. Une sortie, également représentée sous forme de colonne, est la résultante des états d'entrée, elle-même exprimée sous forme d'état booléen.
L'opérateur AND est true si et seulement si la condition de gauche est true et la condition de droite est true.
x | y | x AND y |
---|---|---|
false | false | false |
true | false | false |
false | true | false |
true | true | true |
L'opérateur OR est true si et seulement si la condition de gauche est true ou la condition de droite est true.
x | y | x OR y |
---|---|---|
false | false | false |
true | false | true |
false | true | true |
true | true | true |
L'opérateur NOT est true si et seulement si la condition de droite est false.
x | NOT (x) |
---|---|
false | true |
true | false |
- Énumérez les différents opérateurs de comparaison et expliquez leur utilité.
- Énumérez les différents opérateurs logiques et expliquez leur utilité.
- Établissez une table de vérité pour le test logique « NOT(NOT(x) OR y) » en fonction des valeurs de « x » et de « y ».
-
Écrivez un programme qui, en fonction d'un prix total saisi au clavier, applique une réduction variable et affiche le prix final. La réduction à appliquer est la suivante :
- Un prix total inférieur à 50€ ne reçoit aucune réduction
- Un prix total entre 50€ et 120€ reçoit une réduction de 2%
- Un prix total supérieur à 120€ reçoit une réduction de 5%
- Écrivez un programme qui demande à l'utilisateur d'enter une année et qui affiche s'il s'agit d'une année bissextile.