0% ont trouvé ce document utile (0 vote)
56 vues20 pages

Algorithme Et Programmation - Sélection

Transféré par

tematique
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
56 vues20 pages

Algorithme Et Programmation - Sélection

Transféré par

tematique
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

- 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

AB 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.



Vous aimerez peut-être aussi