Section IV Structures conditionnelles Algorithmes et résolution de problèmes 18279 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) Lire VentesReg, VentesSpec RegComm = VentesReg * 0.06 Début Fin SpecComm = VentesSpec * 0.03 TotalComm = RegComm + SpecComm + 200 Écrire TotalComm 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
Structure SI-ALORS-SINON-FINSI Pour représenter une séquence conditionnelle d’opérations dans l’organigramme On utilise le losange : c’est le symbole conditionnel Pour représenter la convergence des flux d’exécution On utilise le cercle : c’est le symbole de convergence SI La condition est satisfaite? Oui Non SINON ALORS FINSI
Structure SI-ALORS-SINON-FINSI Notes sur la structure conditionnelle La condition doit être clairement stipulée dans le symbole conditionnel Les flux sortant sont identifiés selon le résultat de la condition Les deux flux sortant doivent éventuellement converger Heures > 40 Oui Non
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? Oui Non Bonus = 0 Bonus = TotVentes * 0.01 TotVentes = VentesReg + VentesSpec
Exemple #1 (suite) Algorithme révisé Lire VentesReg, VentesSpec RegComm = VentesReg * 0.06 Début Fin SpecComm = VentesSpec * 0.03 TotalComm = RegComm + SpecComm + Bonus + 200 Écrire TotalComm TotVentes 5000? Oui Non 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)
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 structure SI… 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érations SINON FINSI 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 est satisfaite? 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 Variables intermédiaires Nom nom de l’employé Numero numéro de l’employé TotHeures nombre total d’heures travaillées durant la semaine Variables intermédiaires HeuresSup Nombre d’heures supplémentaires travaillées
Exemple #2 (suite) Pseudo-code et organigramme Fin TotHeures > 40? Oui Non HeuresSup = TotHeures - 40 Écrire Nom, Numero, HeuresSup Lire Nom, Numero, TotHeures Début Pseudo-code et organigramme LIRE Nom, Numero, TotHeures SI TotHeures > 40 ALORS HeuresSup = TotHeures - 40 ÉCRIRE Nom, Numero, HeuresSup FINSI
Avantage du pseudo-code Le pseudo-code est facilement traduisible en un langage de programmation Pseudo-code Pascal LIRE 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 Variables intermédiaires 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) Organigramme Lire Nom, Numero, Heures, Taux Début Fin Heures > 40? Oui Non PaieTot = Heures * Taux PaieReg = 40 * Taux Écrire Nom, Numero, PaieTot PaieSup = (Heures – 40) * (Taux * 1.5) PaieTot = PaieReg + PaieSup Organigramme
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-code numé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
Validation (suite) Organigramme numéroté 3 2 4 5 6 7 8 1 9 Lire Nom, Numero, Heures, Taux Début Fin Heures > 40? Oui Non PaieTot = Heures * Taux PaieReg = 40 * Taux Écrire Nom, Numero, PaieTot PaieSup = (Heures – 40) * (Taux * 1.5) PaieTot = PaieReg + PaieSup Organigramme numéroté Les numéros sont utilisés pour identifier les opérations dans les diagrammes de variables 1. Variable Valeur Nom PaieReg Numero PaieSup Heures PaieTot Taux
Conditions complexes Conditions simples Conditions complexes a < 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 condition non((a 5) et (a 100))
Conditions complexes (suite) Exemple : afficher le mot ALARME si la température quitte la zone de confort Fin Temperature < 18 Ou Temperature > 24? Oui Non Écrire "ALARME" Lire Temperature Début LIRE Temperature SI (Temperature < 18) ou (Temperature > 24) ALORS ÉCRIRE "ALARME" FINSI
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