Upload
agace-toussaint
View
109
Download
1
Embed Size (px)
Citation preview
Section IV
Structures conditionnelles
Algorithmes et résolution de problèmes18279 FGE
Contenu
• Introduction• Structure SI-ALORS-SINON-FINSI
– Dans l’organigramme– Le pseudo-code
• Variante SI-ALORS-FINSI• Conditions complexes• Exemples & exercice
– Dont un exercice à remettre à l’enseignant
• Devoir #2
Introduction
• Les algorithmes présentés auparavant sont élémentaires– Séquence simple d’opérations
• Souvent, les opérations à accomplir peuvent varier dans un algorithme– L’algorithme doit décider des opérations à
accomplir selon les données fournies ou diverses situations
• L’ordinateur est apte à appliquer la prise de décision
Exemple #1
• Rapport hebdomadaire de ventes (suite)– Suite de l’exemple vu la semaine dernière
(Section III)• Commission de 6% sur les ventes à prix régulier• Commission de 3% sur les ventes à prix réduit• Montant de base de 200$ garantie
– On ajoute un bonus à la paie du vendeur• Le vendeur reçoit en plus 1% du total de ses ventes
si les ventes atteignent ou dépassent 5000$
– Modifier l’algorithme en conséquence
Exemple #1 (suite)
• Il faut ajouter à la solution précédente (sans bonus)– Une séquence d’opérations
calculant le bonus
– Une opération conditionnelle déterminant quand ajouter le bonus au total
• Il faut donc un symbole pour représenter la condition dans l’organigramme
Lire VentesReg, VentesSpec
RegComm = VentesReg * 0.06
Début
Fin
SpecComm = VentesSpec * 0.03
TotalComm = RegComm + SpecComm + 200
Écrire TotalComm
Structure SI-ALORS-SINON-FINSI
• Pour représenter une séquence conditionnelle d’opérations dans l’organigramme– On utilise le
losange : c’est lesymbole conditionnel
• Pour représenter la convergence des flux d’exécution– On utilise le cercle :
c’est le symbole de convergence
La condition estsatisfaite?
OuiNon
SISI
SINONSINON
FINSIFINSI
ALORSALORS
Structure SI-ALORS-SINON-FINSI
• Notes sur la structure conditionnelle– La conditioncondition doit être clairement
stipulée dans le symboleconditionnel
– Les flux sortant sontidentifiésidentifiés selon lerésultat de la condition
– Les deux flux sortantdoivent éventuellementconvergerconverger
Heures >40
OuiNon
Exemple #1 (suite)
• Pour ajouter le bonus conditionnel de 1% à l’algorithme, nous définissons deux nouvelles variables intermédiaires TotVentes :
Total des ventes Bonus :
Bonus de 1% si les ventes
atteignent ou excèdent 5000$
TotVentes 5000? OuiNon
Bonus = 0 Bonus = TotVentes * 0.01
TotVentes = VentesReg + VentesSpec
Exemple #1 (suite)
• Algorithme révisé– Insérer le calcul conditionnel
du bonus
(TotVentes et Bonus)
– Réviser le calcul de la commission totale
(TotalComm)
Lire VentesReg, VentesSpec
RegComm = VentesReg * 0.06
Début
Fin
SpecComm = VentesSpec * 0.03
TotalComm = RegComm + SpecComm + Bonus + 200
Écrire TotalComm
TotVentes 5000? OuiNon
Bonus = 0 Bonus = TotVentes * 0.01
TotVentes = VentesReg + VentesSpec
Pseudo-code
• L’organigramme représente graphiquement l’algorithme– C’est visuel (un dessin vaut mille mots!), mais
ça exige plus de travail de mise en page et plus d’espace sur papier
• Le pseudo-code représente textuellement l’algorithme– Moins visuel, mais plus facile à mettre sur
papier et requiert moins d’espace
Pseudo-code (suite)
• L’algorithme est décrit sous forme de mots et phrases– Semblable aux langages de programmation
(Visual Basic, Pascal, C, …)– Cependant, on utilise une syntaxe moins rigide
• Le pseudo-code est généralement préféré à l’organigramme– Plus rapide à écrire et plus facile à traduire en
un langage de programmation
Exemple #1 (suite)
• Pseudo-code de l’algorithme– Les mots-clés opérationnels sont écris en
majuscules•LIRE, ÉCRIRE,SI, ALORS, SINON, FINSI
– L’indentation dans la structureSI… rehausse la lisibilité
LIRE VentesReg, VentesSpec
RegComm = VentesReg * 0.06
SpecComm = VentesSpec * 0.03
TotVentes = VentesReg + VentesSpec
SI TotVentes 5000 ALORS
Bonus = TotVentes * 0.01
SINON
Bonus = 0
FINSI
TotalComm = RegComm + SpecComm + Bonus + 200
ÉCRIRE TotalComm
Exemple #1 (suite)
• La structure conditionnelle a une forme standardisée
SI condition ALORS séquence d’opérationsSINON séquence d’opérationsFINSI
• Par souci de lisibilité,cette forme doit toujours être respectée
LIRE VentesReg, VentesSpec
RegComm = VentesReg * 0.06
SpecComm = VentesSpec * 0.03
TotVentes = VentesReg + VentesSpec
SI TotVentes 5000 ALORS
Bonus = TotVentes * 0.01
SINON
Bonus = 0
FINSI
TotalComm = RegComm + SpecComm + Bonus + 200
ÉCRIRE TotalComm
Structure SI-ALORS-FINSI
• Une variante de la structure conditionnelle est employée lorsqu’il n’y a aucune séquence d’opérations à exécuter si la condition est fausse
SI condition ALORS
séquence d’opérations
FINSI
La condition estsatisfaite?
Oui
Non
Exemple #2
• Rapport de temps supplémentaire– Le superviseur doit produire un rapport listant
tous les employés ayant travaillé en temps supplémentaire durant la semaine
– Pour chaque employé ayant travaillé plus de 40 heures, le rapport doit afficher son nom, son numéro d’employé et le nombre d’heures excédentaires
– Si l’employé n’a pas excédé 40 heures de travail, le rapport ne doit pas contenir son nom
Exemple #2 (suite)
• Nous devons écrire l’algorithme produisant une ligne du rapport (i.e. pour un employé)
• Données à lire– Nom de l’employé, son numéro et le nombre
d’heures travaillées
• Résultats à produire– Si l’employé a travailler plus de 40 heures,
afficher son nom, son numéro d’employé et les heures supplémentaires travaillées
Exemple #2 (suite)
• Définition des variables– Nom nom de l’employé– Numero numéro de l’employé– TotHeures nombre total d’heures
travailléesdurant la semaine
• Variables intermédiaires – HeuresSup Nombre d’heures
supplémentaires travaillées
Exemple #2 (suite)
• Pseudo-code et organigramme
LIRE Nom, Numero, TotHeures
SI TotHeures > 40 ALORS
HeuresSup = TotHeures - 40
ÉCRIRE Nom, Numero, HeuresSup
FINSI
Fin
TotHeures > 40?Oui
Non
HeuresSup = TotHeures - 40
Écrire Nom, Numero, HeuresSup
Lire Nom, Numero, TotHeures
Début
Avantage du pseudo-code
• Le pseudo-code est facilement traduisible en un langage de programmationPseudo-code PascalLIRE Nom, Numero, TotHeures
SI TotHeures > 40 ALORS
HeuresSup = TotHeures - 40
ÉCRIRE Nom, Numero, HeuresSup
FINSI
PROGRAM Exemple;
VAR
Nom: STRING;
Numero, TotHeures: INTEGER;
BEGIN
READLN(Nom, Numero, TotHeures);
IF TotHeures > 40 THEN BEGIN
HeuresSup := TotHeures – 40;
WRITELN(Nom, Numero, HeuresSup);
END
END.
Exemple #3
• Rapport de paie d’employé– Données à lire sur l’employé
• Son nom, numéro d’employé, nombre d’heures travaillées et son taux horaire
– Résultat à afficher• Le nom de l’employé, son numéro et le total de sa
paie. Cette dernière est calculée en fonction du taux horaire pour les premières 40 heures travaillées, et à une fois et demi son taux horaire pour les heures supplémentaires
Exemple #3 (suite)
• Étapes de développement de l’algorithme– Assurez-vous de bien comprendre le problème à résoudre
(posez des questions)
– Définissez les variables d’entrées et les variables de sorties
– Faites les calculs sur papier pour un exemple de données; vous saisirez mieux le processus de solution
– Commencez à produire le pseudo-code ou l’organigramme, à partir du début
– En cours de développement, définissez les variables intermédiaires au besoin
– Finalement validez l’algorithme, et corrigez-le au besoin
Exemple #3 (suite)
• Variables – Nom nom de l’employé– Numero numéro d’employé– Heures heures totales travaillées– Taux taux horaire
• Variables intermédiaires– PaieReg paie au taux régulier– PaieSup paie au taux bonifié– PaieTot paie totale
Exemple #3 (suite)
• Pseudo-code
LIRE Nom, Numero, Heures, Taux
SI Heures > 40 ALORS
PaieReg = 40 * Taux
PaieSup = (Heures – 40) * (Taux * 1.5)
PaieTot = PaieReg + PaieSup
SINON
PaieTot = Heures * Taux
FINSI
ÉCRIRE Nom, Numero, PaieTot
Exemple #3 (suite)
• OrganigrammeLire Nom, Numero, Heures, Taux
Début
Fin
Heures > 40?OuiNon
PaieTot = Heures * Taux PaieReg = 40 * Taux
Écrire Nom, Numero, PaieTot
PaieSup = (Heures – 40) * (Taux * 1.5)
PaieTot = PaieReg + PaieSup
Validation
• Pour valider un algorithme (à l’aide des diagramme de variables), il faut numéroter les opérations du pseudo-code et/ou de l’organigramme
• Pseudo-codenuméroté :
1. LIRE Nom, Numero, Heures, Taux
2. SI Heures > 40 ALORS
3. PaieReg = 40 * Taux
4. PaieSup = (Heures – 40) * (Taux * 1.5)
5. PaieTot = PaieReg + PaieSup
6. SINON
7. PaieTot = Heures * Taux
8. FINSI
9. ÉCRIRE Nom, Numero, PaieTot
1.
Validation (suite)
• Organigrammenuméroté– Les numéros sont utilisés
pour identifier les opérations dans les diagrammes de variables
3
2
4 5
6
7
8
1
9
Lire Nom, Numero, Heures, Taux
Début
Fin
Heures > 40?OuiNon
PaieTot = Heures * Taux PaieReg = 40 * Taux
Écrire Nom, Numero, PaieTot
PaieSup = (Heures – 40) * (Taux * 1.5)
PaieTot = PaieReg + PaieSup
Variable Valeur Variable Valeur
Nom PaieReg
Numero PaieSup
Heures PaieTot
Taux
Conditions complexes
• Conditions simplesa < b, a b, a > b, a b, a = b, a b
• Conditions complexes– On peut combiner des conditions simples avec et et ou(a 5) et (a 100)
(a = 10) ou (a > 20)
– La négation (non) peut inverser une conditionnon((a 5) et (a 100))
Conditions complexes (suite)
• Exemple : afficher le mot ALARME si la température quitte la zone de confort
LIRE Temperature
SI (Temperature < 18) ou (Temperature > 24) ALORS
ÉCRIRE "ALARME"
FINSI Fin
Temperature < 18Ou
Temperature > 24?
Oui
NonÉcrire "ALARME"
Lire Temperature
Début
Exercice #1
• À remettre à l’enseignant avant la fin du cours– Faire le travail à la main, sur papier
• Trouver le plus petit nombre– Afficher le plus petit nombre parmi trois nombres
fournis en entrée
• Vous devez remettre à l’enseignant– Le pseudo-code ou l’organigramme de votre algorithme
– La description des variables
Devoir #2
• Énoncé distribué sur le site Web
• Algorithme calculant la note finale d’un(e) étudiant(e) à partir de trois notes d’examen– Vous devez fournir le pseudo-code (fichier
Word) et l’organigramme (fichier Visio) de votre algorithme