- Algorithme et programmation -
- La programmation structurée - les sélections -
PRÉSENTATION
DÉFINITIONS
STRUCTURE D’UNE INSTRUCTION CONDITIONNELLE
FORME d’une DEFINITION CONDITIONNELLE
Le SELECTEUR de CAS
STRUCTURE de l’INSTRUCTION
FORME de l’UTILISATION du SELECTEUR de CAS
ATTENTION
REGLES de CONSTRUCTION
Un PEU d’ALGEBRE de BOOLE
INFORMATIONS
LES TABLES DE VÉRITÉS DE BASE
ILLUSTRATION
ILLUSTRATION 1
ILLUSTRATION 2
PRÉSENTATION
La sélection appelée aussi alternative est le second élément de base de la
programmation structurée ; elle va nous permettre de traduire par des instructions
conditionnelles (communément appelées conditionnelles) les situations
présentant un ou des choix, ou encore une ou plusieurs alternatives.
DÉFINITIONS
La condition (ou expression conditionnelle simple) est la comparaison entre deux
éléments (variables, constantes, valeurs) de types comparables à partir d’un
opérateur de comparaison.
Le résultat d’une condition est de type booléen (vrai ou faux).
La structure de la condition sera toujours de la forme :
Elément 1 Opérateur de comparaison
Elément 2
exemple A 12.45
B 15
AB résultat VRAI
NOMBRE -6.5
NOMBRE > 1.75 résultat FAUX
Le type booléen est un type logique obtenu à partir des travaux de BOOLE
(mathématicien britannique). Une variable de type booléen prend obligatoirement
une valeur dans l’ensemble {vrai, faux}
Les opérateurs de comparaisons et leur opposé
Opérateurs Opposés Mathématiquement
= égal ou <> différent A = B non (A B)
< inférieur ou >= supérieur ou A < B non (A B)
égal
> supérieur ou <= inférieur ou égal A > B non (A B)
La condition multiple, complexe, ou composée est un ensemble de conditions, ou
d’expressions conditionnelles simples reliées entre elles par des opérations logiques.
Le résultat obtenu sera bien sur de type booléen.
exemple A 12.45
B 8
A = 12 ou B > 7 résultat VRAI
Non (A > 12) résultat FAUX
Les opérateurs logiques
non xor ou exclusif et tous ceux prévus par
et nand non et l’algèbre de BOOLE
ou nor non ou
STRUCTURE D’UNE INSTRUCTION CONDITIONNELLE
Une instruction conditionnelle est défini par les mots clés suivants
SI ALORS SINON FinSI
Exemple de conditionnelles
Si Conditions
Alors Action_Condition
Sinon Action_NON_Condition
FinSi
ou encore
Si Non Conditions
Alors Action_NON_Condition
Sinon Action_Condition
FinSi
avec Conditions une condition simple ou multiple
Action_Condition zéro, une instruction, ou un bloc
d’instructions
Action_NON_Condition zéro, une instruction, ou un bloc
d’instructions
Cas particulier de conditionnelles
Si Conditions
Alors Action_Condition
FinSi
ou encore
Si Conditions
Alors Action_Condition
Sinon VIDE (aucune Action)
FinSi
FORME d’une DEFINITION CONDITIONNELLE
Soit un problème (conditionnel) PB, donc défini par :
une suite de conditions
C1 ... Cn
et une suite d’actions (traitements) relatives aux différentes
conditions A1 ... An
PB = Si C1
alors A1
sinon Si C2
alors A2
sinon Si ..
alors
:
Si Cn
alors An
FinSi
FinSi
FinSi
FinSi
Ou encore
dans le cas où Cn couvre toutes les conditions non couvertes par C1 ...
Cn-1.
PB = Si C1
alors A1
sinon Si C2
alors A2
sinon Si ..
alors
:
Si Cn-1
alors An-1
sinon An
FinSi
FinSi
FinSi
FinSi
Le SELECTEUR de CAS
STRUCTURE de l’INSTRUCTION
Il existe une seconde forme d'alternative (instruction conditionnelle) qui permet de
traiter l'énumération de conditions en fonction des valeurs prises par une variable
que l'on souhaite tester.
On trouve un certain nombre d’éléments syntaxiques caractérisant cette instruction
comme : selon cas, suivant cas, selon, suivant, cas ou encore sélecteur de cas
… Nous utiliserons l’expression en fonction de <sélecteur> valant de façon à
permettre au concepteur de l’algorithme de définir sous forme d’une « pseudo
phrase » la résolution de son problème conditionnelle.
En fonction de VARIABLE valant
Valeur1 : TraitementA
Valeur2,Valeur3,Valeur4 : TraitementB
Valeur5 à Valeur6 : TraitementC
Sinon : TraitementD
Fin de en fonction de
Avec
Le premier cas correspond à la condition : VARIABLE = Valeur1
Le second cas correspond à la condition :
VARIABLE = Valeur2 ou VARIABLE = Valeur3 ou VARIABLE = Valeur4
Le troisième cas correspond à la condition :
VARIABLE dans l’intervalle [Valeur5.. Valeur6]
Sinon représente tous les cas non précédemment énoncés
FORME de l’UTILISATION du SELECTEUR de CAS
Soit un problème (conditionnel) PB défini par :
une suite de conditions sur un identificateur de type scalaire (sélecteur);
l’identificateur pouvant prendre les valeurs suivantes, V1 ... Vn
et une suite d’actions (traitements) relatives aux différentes
conditions A1 ... An
PB = En fonction de <Sélecteur> valant
V1 : A1
V2 : A2
Vn : An
Fin de en fonction de
Ou encore
PB = En fonction de <Sélecteur> valant
V1 : A1
V2 : A2
Vn-1 : An-1
sinon An
Fin de en fonction de
dans le cas où Vn couvre toutes les valeurs non couvertes par V1 ... Vn-1.
ATTENTION
L’ instruction conditionnelle sélecteur de cas a été conçue pour gérer un sélecteur
(variable) de type scalaire.
Un élément de type scalaire est un élément faisant partie d’un ensemble fini et
ordonné ; c’est à dire que la description d’un type scalaire spécifie dans l’ordre les
éléments de l’ensemble.
L’évolution de l’informatique technique permet à certains langages de s’affranchir de
sélecteur (variable) de type scalaire comme Visual Basic, mais ce n’est pas le cas
par exemple du langage Pascal de DELPHI.
REGLES de CONSTRUCTION
La résolution d’un problème doit couvrir tous les cas possibles.
Il faut éviter que le résultat du problème soit obtenu par la vérification simultanée
de plusieurs conditions.
Si lors de l’élaboration d’un algorithme plusieurs traitements différents sont
obtenus par une même condition, on fusionnera ces traitements au sein d’une
même action.
Un PEU d’ALGEBRE de BOOLE.
INFORMATIONS
L’algèbre de BOOLE correspond à une étude des Mathématiques, c’est toutefois un
élément important dans la démarche de conception des applications informatiques.
LES TABLES DE VÉRITÉS DE BASE
NON OU ET
A Non(A) A ou B faux vrai A et B faux vrai
faux vrai faux faux vrai faux faux faux
vrai faux vrai vrai vrai vrai faux vrai
En utilisant la notation binaire 0 pour faux et 1 pour vrai
NON OU ET
A Non(A A B A ou B A B A et B
)
0 1 0 0 0 0 0 0
1 0 0 1 1 0 1 0
1 0 1 1 0 0
1 1 1 1 1 1
Exercice : démontrer à l’aide des tables de vérités les lois de DE MORGAN.
Soit : non(A) et non (B) non(A ou B)
Et : non(A) ou non (B) non(A et B)
ILLUSTRATION
ILLUSTRATION 1
Phase 0 : spécifications (énoncé du problème)
On souhaite déterminer si un nombre est plus grand qu’un autre.
Phase 1 : conception abstraite (étape de réflexion)
Données
Le premier nombre
NOMBR1
Le second nombre
NOMBR2
Résultats
L’affichage d’un message (action) sur l’état de comparaison du premier
nombre par rapport au second.
Traitements
Ce qui nous vient immédiatement à l’esprit est de comparer les deux nombres
pour obtenir le traitement suivant :
Si NOMBR1 > NOMBR2
alors le premier nombre est le plus grand
sinon le second nombre est le plus grand
Phase 2 : conception concrète (algorithme)
Lexique
NOMBR1,NOMBR2 (réel)
début
lire (NOMBR1)
lire (NOMBR2)
Si NOMBR1 > NOMBR2
alors écrire (‘le premier nombre est le plus grand’)
sinon écrire (‘le second nombre est le plus grand’)
FinSi
fin
Phase 4 : Tests (utilisation de jeux d’essai pour valider l'application)
Avant même de passer à la phase 3 de codification dans un langage de
programmation, on peut (on doit) s’appuyer sur la démarche de génie Logiciel du
cycle de vie en V de l’application.
NOMBR1 NOMBR2 NOMBR1 > NOMBR2 Résultat
1,75 -0,15 Vrai le premier nombre est le plus grand
6 9,12 Faux le second nombre est le plus grand
4,45 4,45 Faux le second nombre est le plus grand
Remarques
nos jeux d’essai couvrent bien tous les cas possibles de ce problème,
Ä on note une erreur de résultat dans le tests n° 3 (les nombres sont
égaux)
Ä Conclusion : Nos traitements ne couvrent pas l’ensemble des cas
Correction des traitements
Traitement
Si NOMBR1 > NOMBR2
alors le premier nombre est le plus grand
sinon Si NOMBR1 < NOMBR2
alors le second nombre est le plus grand
sinon Si NOMBR1 = NOMBR2
alors les deux nombres sont égaux
Ou encore
NOMBR1 > NOMBR2
prend en compte l’ensemble des résultats de la partie droite du schéma
NOMBR1 < NOMBR2
prend en compte l’ensemble des résultats de la partie gauche du schéma
NOMBR1 = NOMBR2
prend en compte l’ensemble de tous les autres cas de résultats du problème
on peut donc écrire le traitement optimisé suivant (seulement deux conditions):
Si NOMBR1 > NOMBR2
alors le premier nombre est le plus grand
sinon Si NOMBR1 < NOMBR2
alors le second nombre est le plus grand
sinon les deux nombres sont égaux
On obtient l’algorithme corrigé suivant :
Lexique
NOMBR1,NOMBR2 (réel)
début
lire (NOMBR1)
lire (NOMBR2)
Si NOMBR1 > NOMBR2
alors écrire (‘le premier nombre est le plus grand’)
sinon Si NOMBR1 < NOMBR2
alors écrire (‘le second nombre est le plus grand’)
sinon écrire (‘les deux nombres sont égaux’)
FinSi
FinSi
fin
que l’on doit valider par les jeux d’essai correspondant
NOMBR1 NOMBR2 NOMBR1 > NOMBR2 Résultat
1,75 -0,15 Vrai le premier nombre est le plus grand
6 9,12 Faux le second nombre est le plus grand
4,45 4,45 Faux les deux nombres sont égaux
ILLUSTRATION
ILLUSTRATION 2
Phase 0 : spécifications (énoncé du problème)
On veut simuler une calculette simple d’opération (+,-,*,/).
Phase 1 : conception abstraite (étape de réflexion)
Données
Le premier nombre
NOMBR1
Le second nombre
NOMBR2
L’opérateur (+,-,*,/)
OPER
Résultats
Le résultat de l’opération entre le premier nombre et le second
RESUL
Traitements
L’opération a effectuer va dépendre de l’opérateur saisie par l’utilisateur.
RESUL si OPER = ‘+’ alors NOMBR1 + NOMBR2
si OPER = ‘-‘ alors NOMBR1 - NOMBR2
si OPER = ‘*’ alors NOMBR1 * NOMBR2
si OPER = ‘/’ alors NOMBR1 / NOMBR2
Phase 2 : conception concrète (algorithme)
Lexique
NOMBR1,NOMBR2,RESUL (réel)
OPER (caractère)
début
lire (NOMBR1)
lire (OPER)
lire (NOMBR2)
En Fonction De OPER valant
‘+’ : RESUL NOMBR1 + NOMBR2
‘-’ : RESUL NOMBR1 - NOMBR2
‘*’ : RESUL NOMBR1 * NOMBR2
‘/’ : RESUL NOMBR1 / NOMBR2
fin EFD
écrire (RESUL)
fin
Phase 4 : Tests (utilisation de jeux d’essai pour valider l'application)
Avant même de passer à la phase 3 de codification dans un langage de
programmation, on peut (on doit) s’appuyer sur la démarche de génie Logiciel du
cycle de vie en V de l’application.
Nombr1 Nombr2 Oper Resul Nombr1 Nombr2 Oper Resul
1,2 0,5 + 1,7 1,125 1 / 1,125
1,2 2 - -0,8 0,25 0 / Erreur
3 1,5 * 4,5 1,5 3 x Erreur
Remarques
nos jeux d’essai couvrent bien les cas possibles de ce problème,
on note une erreur de résultat dans 2 tests (division par zéro, et
opérateur inconnu)
Conclusion : Nos traitement ne couvrent pas l’ensemble des cas
Il faut réétudier la démarche d'élaboration des traitements pour gérer les cas
d’erreurs
Correction des traitements
RESUL si OPER = ‘+’ alors NOMBR1 + NOMBR2
si OPER = ‘-‘ alors NOMBR1 - NOMBR2
si OPER = ‘*’ alors NOMBR1 * NOMBR2
si OPER = ‘/’ alors si NOMBR2 0
alors NOMBR1 / NOMBR2
sinon ERREUR
dans tous les autres cas ERREUR
Le résultat RESUL devient alors conditionné au fait qu’il n’y ait aucune erreur.
On obtient l’algorithme corrigé suivant :
Lexique
NOMBR1,NOMBR2,RESUL (réel)
OPER (caractère)
ERREUR (booléen)
début
lire (NOMBR1,OPER,NOMBR2)
ERREUR faux {avant de commencer les traitements il n’y a pas d’erreur}
En Fonction De OPER valant
‘+’ : RESUL NOMBR1 + NOMBR2
‘-’ : RESUL NOMBR1 - NOMBR2
‘*’ : RESUL NOMBR1 * NOMBR2
‘/’ : si NOMBR2 0 alors RESUL ç NOMBR1 / NOMBR2
sinon ERREUR vrai {division par zéro}
fin si
sinon ERREUR vrai {opérateur inconnu}
fin EFD
si non ERREUR alors écrire (RESUL)
sinon écrire (‘il y a une erreur’)
fin si
fin
Il faut valider l’application par une nouvelle phase de tests.