Vous êtes sur la page 1sur 18

15/03/2022

Instructions
Conditionnelles
et Alternatives

4. Instructions conditionnelles et alternatives


4. 1. Notion de primitives de base structurées
Les algorithmes vus , jusqu’à présent, ont un
enchainement d’exécution des instructions séquentiel et
linéaire.

Dans de nombreuses applications, on exige une exécution


par morceau, des sauts ou des répétitions d’un même bloc
d’instructions. C’est le rôle des primitives de base
structurées

On distingue deux grandes familles d’instructions


composées:
1. Les primitives de choix
2. Les primitives d’itération

1
15/03/2022

4. Instructions conditionnelles et alternatives


4. 1. Notion de primitives de base structurées
 Les primitives de choix qui permet de choisir les
instructions à exécuter selon les valeurs courantes de
certaines variables; elle sont de deux types:
 Les instructions conditionnelles
 Les instructions alternatives.
 Les primitives d’itération qui sont utilisées lorsque l’on
souhaite exécuter plusieurs fois le même traitement (
chapitre suivant)

Remarque: Les notions de choix et d’itération sont deux


notions fondamentales de l’algorithmique.

4. Instructions conditionnelles et alternatives


4. 1 Instructions conditionnelles
4. 1. 1 l’instruction Si …Alors…. Finsi

Syntaxe:
Si (condition) alors
Instruction( ou suite d’instructions);
Finsi

Organigramme:
Oui
Condition

Instructions
Non

2
15/03/2022

4. Instructions conditionnelles et alternatives


4. 1. 1 l’instruction Si …Alors…. Finsi
 Si la condition est vraie alors le <bloc
d’instructions> est exécuté.
 Si la condition est fausse alors le <bloc
d’instructions> n’est pas exécuté. On passe
à l’instruction qui se trouve après Finsi

Exemple:
(A=1) la condition A=1 est vérifiée si la valeur contenu dans A est 1
(A=B) est vérifié si les valeurs contenu dans A et B sont les mêmes
(B <> 5) est vérifié si B contient une valeur différent de 5
(1>5) est vérifié si 1>5, donc jamais cette condition est donc fausse
et ne dépend pas des valeurs des variables.

4. Instructions conditionnelles et alternatives

Exemple 1
La valeur absolue d’un nombre réel
|x|=x si x>0
|x|=-x si x<0

3
15/03/2022

4. Instructions conditionnelles et alternatives


Organigramme
Début

Lire(x)

x<0
Oui

Non x -x

Ecrire(x)

Fin

4. Instructions conditionnelles et alternatives


Algorithme :
Algorithme valeur_absolue1;
Var
x: réel;
Début
Lire(x);
Si (x<0) alors
x -x;
Finsi
Ecrire(‘’ la valeur absolue de x est ‘’, x);
Fin

Idée: On change le signe de x s’il est inférieur à zéro,


sinon il est affiché tel qu’il est.

4
15/03/2022

4. Instructions conditionnelles et alternatives


Exemple 2
Ecrire un algorithme qui calcule le salaire d’un employé à partir
du nombre d’heures (nh) travaillées, du taux horaire (th) et du
nombre d’années de service.
Les employés ayant une ancienneté (anc) de plus de 10 ans
bénéficient d’une allocation supplémentaire de 150 Dh.
Analyse du problème
1- Données du problème Les variables d’entrées:
· nh : nombre d’heures travaillées nh, th,anc
· th : taux horaire (en Dirhams) Les variables de sorties:
· anc : ancienneté (en Année) salaire
2- Résultat recherché
· salaire : salaire net de l’employé (en Dirhams)
3- Comment faire ?
Salaire nh * th
Si (anc > 10) Alors
Salaire salaire + 150
FinSi

4. Instructions conditionnelles et alternatives


Exemple 2
Forme 1 Forme2
Algorithme calcul_salaire; Algorithme calcul_salaire;
Var nh, th, anc, salaire : Réel; Const ALL=150;
Début Var nh, th, anc, salaire : Réel;
Ecrire(”NH travaillées : ”) ; Début
Lire(nh); Ecrire(”NH , Taux horaire, Anc : ”) ;
Ecrire(”Taux horaire : ”); Lire(nh, th, anc);
Lire(th); salaire  nh * th;
Ecrire(”Ancienneté : ”); Si (anc > 10) Alors
Lire(anc); Salaire  salaire + ALL;
salaire  nh * th; FinSi
Si (anc > 10) Alors Ecrire (”Salaire de l’employé = ”, salaire);
salaire  salaire + 150; Fin.
FinSi
Ecrire (”Salaire de l’employé = ”, salaire);
Fin.

5
15/03/2022

4. Instructions conditionnelles et alternatives


4. 1 Instructions conditionnelles
4. 1. 1 l’instruction Si …Alors…. Finsi

Syntaxe:
Si (condition) alors
Instruction( ou suite d’instructions);
Finsi

Organigramme:
Oui
Condition

Instructions
Non

4. Instructions conditionnelles et alternatives


4. 1. 2 l’instruction Si …Alors…. Sinon…Finsi
Syntaxe
Si (condition) alors
Instruction 1;
Sinon
Instruction 2;
Finsi

Oui Non
Condition

Instruction 2
Instruction 1

Instruction 1 est exécutée si la condition est vérifiée,


sinon c’est l’Instruction 2 qui sera exécutée.

6
15/03/2022

4. Instructions conditionnelles et alternatives


Exemple 1
Algorithme saisi;
Var
a,b: entier;
Début
Ecrire(”donner deux nombres entiers a et b”);
Lire(a,b);
si (a=b) alors
Ecrire(”vous avez saisi deux fois la même valeur, à savoir”, a);
Sinon
Ecrire(”vous avez saisi deux valeurs différentes”, a, ” et” , b,);
Finsi
Fin

Instruction 1 est exécutée si la condition est vérifiée,


sinon c’est l’Instruction 2 qui sera exécutée.

4. Instructions conditionnelles et alternatives


Exemple 2 : le plus grand et le plus petit nombre entre x et y
Première forme Algorithme exemple5;
Var
x,y: réel;
Début
Ecrire(”donner deux nombres x et y”);
Lire(x,y);
si (x>y) alors
Ecrire(”le plus grand est”, x);
Sinon
Ecrire(”le plus grand est”, y);
Finsi
Fin

Instruction 1 est exécutée si la condition est vérifiée,


sinon c’est l’Instruction 2 qui sera exécutée.

7
15/03/2022

4. Instructions conditionnelles et alternatives


Deuxième forme
Exemple 2bis: le plus grand et le plus petit nombre entre x et y.
Algorithme exemple5bis;
Var
x,y: réel;
z: booléen;
Début
Ecrire(”donner deux nombres x et y”);
Lire(x,y);
z x>y;
si (z) alors
Ecrire(”le plus grand est”, x);
Sinon
Ecrire(”le plus grand est”, y);
Finsi
Fin

4. Instructions conditionnelles et alternatives


Exemple 3: La valeur absolue de la différence de deux
nombres réels: |x-y|=x-y si x>y
|x-y|=y-x si x<y
Algorithme Avec sinon

Algorithme valeur_absolue2;
Var Sans sinon
x,y,z: réels; Algorithme valeur_absolue2;
Début Var
Ecrire(‘’donner deux nombres‘’); x,y,z: réels;
Lire(x,y); Début
Si (x>y) alors Ecrire(‘’donner deux nombres‘’);
Lire(x,y);
z x-y;
z x-y;
Sinon Si (z<0) alors
z y-x; z y-x;
Finsi Finsi
Ecrire(‘’ val abs2 est ‘’, z); Ecrire(‘’ val abs2 est ‘’, z);
Fin Fin

8
15/03/2022

4. Instructions conditionnelles et alternatives


Conditions composées
Une condition composée est une condition formée de plusieurs conditions
simples reliées par des opérateurs logiques: ET, OU, OU-Exclusif (XOR),NON
EXEMPLES:
- Si x est compris entre 2 et 5:
si ((x>=2) ET (x<=5)) alors …..instructions…
- Si m est divisible par 3 ou par 2:
si((m MOD 3=0) OU(m MOD 2=0)) …..instructions…
- Si deux valeurs et deux seulement sont identiques parmi a, b et c:
si ((a=b) XOR (a=c) XOR (b=c)) …..instructions…
C1 C2 C1 XOR C2
VRAI VRAI FAUX
VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX

L’évaluation d’une condition composée se fait selon des règles présentées


généralement dans ce qu’on appelle table de vérité.

4. Instructions conditionnelles et alternatives


4. 1 Instructions conditionnelles
4. 1. 1 l’instruction Si …Alors…. Finsi

Syntaxe:
Si (condition) alors
Instruction( ou suite d’instructions);
Finsi

Organigramme:
Oui
Condition

Instructions
Non

9
15/03/2022

4. Instructions conditionnelles et alternatives


4. 1. 2 l’instruction Si …Alors…. Sinon…Finsi
Syntaxe
Si (condition) alors
Instruction 1;
Sinon
Instruction 2;
Finsi

Oui Non
Condition

Instruction 2
Instruction 1

Instruction 1 est exécutée si la condition est vérifiée,


sinon c’est l’Instruction 2 qui sera exécutée.

Instructions conditionnelles et alternatives


Exemple 4:
Ecrire un algorithme qui demande deux nombres à l’utilisateur et
l’informe ensuite si leur produit est négatif ou positif (on laisse de
côté le cas où le produit est nul). Attention toutefois : on ne doit pas
calculer le produit des deux nombres
Algorithme signe_produit;
Var
n,m: réel;
Début
Ecrire(”donner deux nombres n et m”);
Lire(n,m);
Si ((n>0 ET m>0) OU (n<0 ET m<0)) Alors
Ecrire(” le produit des deux nombres est positif ”);
Sinon
Ecrire(” le produit des deux nombres est négatif ”);
Finsi
Fin

10
15/03/2022

Instructions conditionnelles et alternatives


Exemple 4bis
Ecrire un algorithme qui demande un nombre entier puis teste et
affiche s’il est divisible par 3 ou non.
Algorithme divisible_par3;
Var
n: entier;
Début
Ecrire(‘’entrez un entier‘’);
Lire(n);
Si (n MOD 3=0) alors
Ecrire(n, ‘’ est divisible par 3 ‘’);
Sinon
Ecrire(n, ‘’ n’est pas divisible par 3 ‘’);
Finsi
Fin

Instructions conditionnelles et alternatives


l’instruction Si …Alors…. Sinon Si…alors …Finsi
syntaxe
Si (condition1) alors
Instruction 1;
Sinon Si (condition2) alors
Instruction 2;
Sinon
Instruction3;
Finsi
Finsi

Si la condition1 est vraie, alors le <bloc d’instructions1> est


exécuté. Sinon, si elle est fausse (condition1), alors on teste la
condition2, si elle est vraie, on exécute le <bloc d’instructions2>,
sinon on exécute le <bloc d’instruction3>

11
15/03/2022

4. Instructions conditionnelles et alternatives


Exemple 5a: algorithme qui permet d’afficher le signe d’un nombre saisie par
l’utilisateur( nombre positif, nombre négatif ou nul)
Algorithme exemple5a; Algorithme exemple5a_bis;
Var Var
n: réel; n: réel;
Début Début
Ecrire(”entrez un nombre”); Ecrire(”entrez un nombre”);
Lire(n); Lire(n);
si (n<0) alors si (n<0) alors
Ecrire(n, ” est négatif”); Ecrire(n, ” est négatif”);
sinon finsi
si (n=0) alors si (n=0) alors
Ecrire(n, ” est nul ”); Ecrire(n, ” est nul ”);
sinon finsi
Ecrire(n, ”est positif”); si (n>0) alors
finsi Ecrire(n, ”est positif”);
finsi finsi
Fin Fin
Dans l’exemple5a_bis, on fait trois tests systématiquement alors que dans
l’exemple5a, si le nombre est négatif on ne fait qu’un seul test.

Instructions conditionnelles et alternatives


Imbrication de Si
Dans de nombreuse applications, on veut avoir plusieurs cas
d’exécution selon différentes conditions. Il faut exprimer plusieurs ‘’
Si ‘’ les uns à la suite des autres pour englober tous les cas.
Si (a < 0) alors
Si (b < 0) alors
Ecrire( "a et b sont négatifs " );
sinon
Ecrire("a est négatif, b est positif ou b est nul ");
finsi
sinon
Si (b < 0) alors
Ecrire( "b est négatif, a est positif ou a est nul");
sinon
Ecrire( "a positif ou a est nul, b positif ou b est nul " );
finsi
finsi
Remarques: Si par exemple a et b sont tous les deux positifs, alors aucun des
deux tests ne sera vraie, et c'est donc le sinon du sinon qui sera exécuté, et
l’algorithme affichera le message " a positif ou a est nul, b positif ou b est nul "

12
15/03/2022

Instructions conditionnelles et alternatives


Imbrication de Si.
Dans de nombreuse applications, on veut avoir plusieurs cas
d’exécution selon différentes conditions. Il faut exprimer
plusieurs ‘’ Si ‘’ les uns à la suite des autres pour englober tous
les cas.

Exemple 1:
Ecrire un algorithme permettant de résoudre une équation du
premier degré ax+b=0.

Exemple 2:
Ecrire un algorithme permettant de résoudre une équation du
seconde degré ax 2+bx+c=0 dans R (Voir TD N°2).

4. Instructions conditionnelles et alternatives


Algorithme equationPremierDgr; Solution
Var a,b, x: réels;
Début
Ecrire( ‘’Donner deux nombres a et b’’);
Lire (a,b);
Si (a=0) alors
Si (b=0) alors
Ecrire( ‘’Tous réel est solution de l’équation’’);
Sinon
Ecrire( ‘’ Impossible ’’);
Finsi
Sinon
x -b/a;
Ecrire (” La solution de l’équation est x=”, x);
Finsi
Fin

13
15/03/2022

4. Instructions conditionnelles et alternatives


Algorithme equationSecondDgr; Solution
Var a,b,c x,x1,x2,delta: réels;
Début
Ecrire( ‘’saisir les valeurs des nombres a,b et c’’);
Lire (a,b,c);
Si (a=0) ET (b=0) ET (c=0) alors
Ecrire( ‘’Tous réel est solution de l’équation’’);
Sinon Si (a=0) ET (b=0) alors
Ecrire( ‘’ Impossible ’’);
Sinon Si (a=0) alors
Ecrire (” résolution de l’équation de premier
degré bx+c=0”);
x  -c/b;
Ecrire (” x=”, x);
Sinon
delta  b*b-4*a*c;

4. Instructions conditionnelles et alternatives


si (delta<0) alors
Ecrire (” pas de solution dans R”);
Sinon si (delta=0) alors
Ecrire (” l’équation à une solution réel unique dans R”);
x  -b/(2*a);
Ecrire (” x=”, x);
Sinon
x1  (-b+racine(delta)/(2*a));
x2  ( -b-racine(delta)/(2*a));
Ecrire (” les deux solutions dans R sont”);
Ecrire (” x1=”, x1, ”et x2=”,x2);
finsi
finsi
finsi
Finsi
finsi
Fin

14
15/03/2022

4. Instructions conditionnelles et alternatives


4. 2 Instructions alternative: la primitive Selon
Syntaxe
selon <variable> faire
liste de valeur1: <séquence d’instruction1>;
liste de valeur2: <séquence d’instruction2>;
liste de valeur3: <séquence d’instruction3>;
……
liste de valeurN: <séquence d’instructionN>;
Sinon <instruction_par_défaut>;
Finselon
Organigramme
variable
Valeur 1 Valeur 2 Valeur N Sinon
Instruction Instruction Instruction Instruction
1 2 N par défaut

4. Instructions conditionnelles et alternatives


Remarques importantes
• L’instruction qui sera exécutée est celle qui correspondra à la
valeur courante de la variable testée.
• Lorsque cette exécution est achevée, on va ignorer toutes les
séquences des instructions suivantes.
• Si deux valeurs différentes peuvent entrainer un même
traitement. Nous pouvons alors les regrouper séparées par des
virgules avant de décrire le traitement.

• Si la variable n’est égale a aucune des valeurs testées, c’est


l’instruction par défaut qui sera exécutée.

• la variable de sélection doit être déclarée, et ne doit avoir qu’un


type discret ( entier ou caractère mais pas un réel).

15
15/03/2022

4. Instructions conditionnelles et alternatives


4. 2 Instructions alternative: la primitive Selon
Exemple: Ecrire un algorithme qui permet de lire un
numéro compris entre 1 et 12 et d’afficher le nom du mois
correspondant. Si le numéro entré est en dehors de cet
intervalle, un message d’erreur doit être affiché.

4. Instructions conditionnelles et alternatives


4. 2 Instructions alternative: la primitive Selon
Algorithme mois;
Variables n : Entier;
Début
Ecrire(”Entrer le numéro du mois : ”);
Lire(n);
Selon (n) Faire
1 : Ecrire(”Janvier”);
2 : Ecrire(”Février”);

12 : Ecrire(”Décembre”);
Sinon
Ecrire(”numéro de mois erroné... ”);
FinSelon
Fin

16
15/03/2022

4. Instructions conditionnelles et alternatives


4. 2 Instructions alternative: la primitive Selon
Algorithme mois; //(* version Si *)
Variables n : Entier;
Début
Ecrire(”Entrer le numéro du mois : ”);
Lire(n);
Si (n=1) alors
Ecrire(”janvier”);
Remarque :L’exercice
Sinon précédent peut être
Si(n=2) alors résolu en utilisant
Ecrire(”février”); plusieurs instructions
Sinon « Si » imbriquées,
Si(n=3) alors mais l’algorithme sera
Ecrire(”mars”); très lourd

Fin.

4. 2. 2 En utilisant l’instruction Cas (selon)


Exemple: Ecrire un algorithme qui permet de lire un numéro compris
entre 1 et 7 et d’afficher le nom du jour correspondant.
Algorithme Affiche_jour;
Var
jour: entier;
Début
Ecrire(‘’ entrer le chiffre du jour’’);
Lire(jour);
selon (jour) Faire
1: Ecrire(‘’ Lundi’’);
2: Ecrire(‘’ Mardi’’);
3: Ecrire(‘’ Mercredi’’);
4: Ecrire(‘’ Jeudi’’);
5: Ecrire(‘’ Vendredi’’);
6: Ecrire(‘’ Samedi’’);
7: Ecrire(‘’ Dimanche’’);
Sinon
Ecrire(‘’n’est pas un jour de la semaine’’);
FinSelon
Fin

17
15/03/2022

Algorithme lendemain; Exemple2 ( version 1)


Var erreur: entier; Ecrire un algorithme demandant a
jour, lendemain: chaine de caractère; l'utilisateur le jour de la semaine.
Début Afficher ensuite le jour
Ecrire(‘’ saisir un jour de la semaine’’);
correspondant au lendemain.
Lire(jour);
Erreur0;
Selon (jour) faire
‘’ Lundi’’: lendemain ‘’ Mardi’’;
‘’ Mardi’’: lendemain ‘’ Mercredi’’;
‘’ Mercredi’’: lendemain ‘’ Jeudi’’;
‘’ Jeudi’’: lendemain ‘’ Vendredi’’;
‘’ Vendredi’’: lendemain ‘’ Samedi’’;
‘’ Samedi’’: lendemain ‘’ Dimanche’’;
‘’ dimanche’’: lendemain ‘’ Lundi’’;
Sinon
Erreur1;
FinSelon
Si (erreur=1)
Ecrire ("erreur de saisie");
Sinon
Ecrire("Le lendemain du ", jour, " est ", lendemain, ".")
finsi
Fin

Algorithme lendemain; Version 2


Var erreur: booleen; On considère une variable booleen.
jour, lendemain: chaine de caracrtère;
Début
Ecrire(‘’ saisir un jour de la semaine’’);
Lire(jour);
Erreurfaux;
selon jour faire
‘’ Lundi’’: lendemain ‘’ Mardi’’;
‘’ Mardi’’: lendemain ‘’ Mercredi’’;
‘’ Mercredi’’: lendemain ‘’ Jeudi’’;
‘’ Jeudi’’: lendemain ‘’ Vendredi’’;
‘’ Vendredi’’: lendemain ‘’ Samedi’’;
‘’ Samedi’’: lendemain ‘’ Dimanche’’;
‘’ dimanche’’: lendemain ‘’ lundi’’; REMARQUE:
sinon Il y a une grande différence entre
ErreurVrai; cet algorithme et celui utilisant
FinSelon les imbrications de Si. Ce dernier
Si (erreur) semble plus claire et lisible et il
Ecrire ("erreur de saisie"); n’y a pas de risque d’erreurs
Sinon
Ecrire("Le lendemain du ", jour, " est ", lendemain, ".");
finsi
Fin

18

Vous aimerez peut-être aussi