24
Section VII Programmation modulaire Algorithmes et résolution de problèmes 18279 FGE

Section VII Programmation modulaire Algorithmes et résolution de problèmes 18279 FGE

Embed Size (px)

Citation preview

Section VII

Programmation modulaire

Algorithmes et résolution de problèmes18279 FGE

Contenu

• Introduction

• Modules– Simples

• Exemples

• Exercice

• Devoir #6

Introduction

• Un algorithme solutionnant un problème complexe est, conséquemment, complexe lui aussi

• Exemple– Devoir #5 : calcul de la moyenne pondérée

cumulative– Le pseudo-code est long et présente une

indentation prononcée• À cause des structures imbriquées

– L'organigramme se propage sur plusieurs pages

Introduction (suite)• Solution (pseudo-code)

\\ Lire le nombre de cours à traiterÉCRIRE "Combien de cours?"LIRE NombreCours

\\ InitialisationTotalHeures = 0TotalNotes = 0

\\ Traiter chaque coursPOUR NoCours = 1 JUSQU'À NombreCours FAIRE \\ Lire les données du cours ÉCRIRE "Note du cours #", NoCours LIRE Note

ÉCRIRE "Nombre d'heures du cours #", NoCours LIRE Heures

\\ Convertir la note alphabétique en valeur \\ numérique correspondante SI Note = "A+" OU Note = "a+" ALORS Valeur = 4 SINON SI Note = "A" OU Note = "a" ALORS Valeur = 4 SINON SI Note = "A-" OU Note = "a-" ALORS Valeur = 3.7 SINON SI Note = "B+" OU Note = "b+" ALORS Valeur = 3.3 SINON SI Note = "B" OU Note = "b" ALORS Valeur = 3

SINON SI Note = "B-" OU Note = "b-" ALORS Valeur = 2.7 SINON SI Note = "C+" OU Note = "c+" ALORS Valeur = 2.3 SINON SI Note = "C" OU Note = "c" ALORS Valeur = 2 SINON SI Note = "C-" OU Note = "c-" ALORS Valeur = 1.7 SINON SI Note = "D+" OU Note = "d+" ALORS Valeur = 1.3 SINON SI Note = "D" OU Note = "d" ALORS Valeur = 1 SINON SI Note = "D-" OU Note = "d-" ALORS Valeur = 1 SINON SI Note = "EC" OU Note = "ec" ALORS Valeur = 0 SINON ÉCRIRE "ERREUR: note invalide" Valeur = -1 FINSI

\\ Si la note fut convertie, mettre à jour les \\ sommations SI Valeur >= 0 ALORS TotalNotes = TotalNotes + Valeur * Heures TotalHeures = TotalHeures + Heures FINSIFINPOUR

\\ Calculer et afficher la MPCMoyenne = TotalNotes / TotalHeuresÉCRIRE "Moyenne pondérée cumulative = ", Moyenne

Introduction (suite)

• Cette complexité apparente peut être atténuée à l'aide d'une technique appelée la modularité– Consiste à diviser le problème en sous-

problèmes– Solutionner chaque sous-problème

individuellement• Un algorithme pour chaque sous-problème

– Faire appel à ces algorithmes pour solutionner le problème original

Introduction (suite)

• Définition de module– Algorithme solutionnant

une partie du problème original

• Exemple– Algorithme convertissant

une note alphabétique (avec ou sans signe) en valeur numérique

\\ Module ConvertirNoteLIRE NoteSI Note = "A+" OU Note = "a+" ALORS Valeur = 4SINON SI Note = "A" OU Note = "a" ALORS Valeur = 4SINON SI Note = "A-" OU Note = "a-" ALORS Valeur = 3.7SINON SI Note = "B+" OU Note = "b+" ALORS Valeur = 3.3SINON SI Note = "B" OU Note = "b" ALORS Valeur = 3SINON SI Note = "B-" OU Note = "b-" ALORS Valeur = 2.7SINON SI Note = "C+" OU Note = "c+" ALORS Valeur = 2.3SINON SI Note = "C" OU Note = "c" ALORS Valeur = 2SINON SI Note = "C-" OU Note = "c-" ALORS Valeur = 1.7SINON SI Note = "D+" OU Note = "d+" ALORS Valeur = 1.3SINON SI Note = "D" OU Note = "d" ALORS Valeur = 1SINON SI Note = "D-" OU Note = "d-" ALORS Valeur = 1SINON SI Note = "EC" OU Note = "ec" ALORS Valeur = 0SINON ÉCRIRE "ERREUR: note invalide" Valeur = -1FINSIÉCRIRE Valeur

Introduction (suite)

• Exemple (suite)– Le module principal

peut faire appel au module ConvertirNote pour solutionner le problème

\\ Lire le nombre de cours à traiterÉCRIRE "Combien de cours?"LIRE NombreCours

\\ InitialisationTotalHeures = 0TotalNotes = 0

\\ Traiter chaque coursPOUR NoCours = 1 JUSQU'À NombreCours FAIRE \\ Lire et convertir la note ÉCRIRE "Note du cours #", NoCours EXÉCUTER ConvertirNote

ÉCRIRE "Nombre d'heures du cours #", NoCours LIRE Heures

\\ Si la note fut convertie, mettre à jour les \\ sommations SI Valeur >= 0 ALORS TotalNotes = TotalNotes + Valeur * Heures TotalHeures = TotalHeures + Heures FINSIFINPOUR

\\ Calculer et afficher la MPCMoyenne = TotalNotes / TotalHeuresÉCRIRE "Moyenne pondérée cumulative = ", Moyenne

Modules

• Un algorithme complexe peut être divisé en modules

• Structure générale d'un algorithme modulaire– Algorithme divisé

en modules– Un module peut faire

appel à d'autres modules– Le module principal est le

chef d'orchestre

Module principal

Module A Module B Module C

Module D Module E

Modules (suite)

• Le module principal– C'est le point de départ du flux d'exécution– C'est aussi à la fin du module principal que le

flux d'exécution se termine– Dans l'organigramme,

c'est le seul module ayant les symboles Début et Fin

Début

Fin

.

.

.

Modules (suite)

• Le module principal (suite)– Pour distinguer le module principal des autres

modules dans les pseudo-codes, on ajoute aussi les étiquettes Début et Fin à ce module

\\ Module principalDÉBUT Compte = 0 TANTQUE Compte < 10 FAIRE EXÉCUTER TraiterEmployé Compte = Compte + 1 FINTANTQUEFIN

Modules (suite)

• Les modules auxiliaires– Ce sont les modules exploités directement ou

indirectement par le module principal

Module principal

Module A Module B Module C

Module D Module E

Modules auxiliaires

Modules (suite)

• Les modules auxiliaires (suite)– Pour les distinguer du module principal,

les modules auxiliaires commencent par•Entrer : indique que le

flux d'exécution entre dans le module

et se terminent par •Retourner : indique que le

flux d'exécution retourne au module de provenance duflux

Entrer

Retourner

.

.

.

\\ Module auxiliaireENTRER . . .RETOURNER

Modules (suite)

• Appel d'un module– Consiste à transférer le flux d'exécution à un

module auxiliaire– Organigramme: symbole d'appel de module

• Indique le transfert du flux d'exécution vers le module spécifié

Nom_du_module

Modules (suite)

• Appel d'un module (suite)– Pseudo-code: l'opération EXÉCUTER indique le

transfert du flux d'exécution vers le module auxiliaire spécifié

\\ pseudo-code . . . EXÉCUTER Nom_du_module . . .

Modules (suite)

• Appel d'un module (suite)– Une fois l'exécution du module auxiliaire

terminé, le flux d'exécution revient à l'opération suivant l'appel

• D'où le symbole (ou le mot-clé) RETOURNER à la fin du module auxiliaire

\\ Module Module_AENTRER ÉCRIRE "Module_A"RETOURNER

\\ Module principalDÉBUT ÉCRIRE "Allo" EXÉCUTER Module_A ÉCRIRE "Bye"FIN

12

3

45

Modules (suite)

• Retour du flux d'exécution– Dans un module auxiliaire, on n'indique pas à

quel module est retourné le flux d'exécution

– Car le flux peut provenir de divers autres modules

\\ Module Module_BENTRER ÉCRIRE "Module_B"RETOURNER Module_A

\\ Module Module_AENTRER ÉCRIRE "Module_A" EXÉCUTER Module_BRETOURNER

\\ Module Module_CENTRER ÉCRIRE "Module_C" EXÉCUTER Module_BRETOURNER

Modules (suite)

• Un module auxiliaire peut avoir les caractéristiques suivantes– Il peut recevoir des valeurs en provenance du

module appelant• Ce sont des paramètres

– Il peut retourner un résultat au module appelant• C'est une valeur de retour

– Les modules sans paramètres ni valeur de retour sont dits modules simples

Modules simples

• Module dans sa plus simple expression– Débute par DÉBUT (pour le module principal) ou ENTRER (pour les modules auxiliaires)

– Terminé par FIN (pour le module principal) ou RETOURNER (pour les modules auxiliaires)

• Pour les modules auxiliaires– Appelés à l'aide du symbole (pour

l'organigramme) ou de l'opération EXÉCUTER (pour le pseudo-code)

– Accompagnés d'un commentaire pour identifier le nom du module auxiliaire

Modules simples (suite)• Exemple

Heures > 40?OuiNon

Paie = Heures * Taux

SupPaie = Taux * (Heures - 40)

Paie = RegPaie + SupPaie

Entrer

Écrire Nom,Numéro, Paie

Retourner

RegPaie = Taux * 40

Lire Nom,Numéro, Heures,Taux

ModuleTraiterEmployé

Compte 10?

Oui

Non

TraiterEmployé

Compte = Compte + 1

Début

Fin

Compte = 1

Modules simples (suite)

• Exemple (suite)

\\ Module principalDÉBUT Compte = 1 TANTQUE Compte 10 FAIRE EXÉCUTER TraiterEmployé Compte = Compte + 1 FINTANTQUEFIN

\\ Module TraiterEmployéENTRER LIRE Nom, Numéro, Heures Taux SI Heure > 40 ALORS RegPaie = Taux * 40 SupPaie = Taux * (Heures-40) Paie = RegPaie + SupPaie SINON Paie = Heures * Taux FINSI ÉCRIRE Nom, Numéro, PaieRETOURNER

Exercice

• Étant données les équations de conversion de températures suivantes :

C = (F – 32) * 5/9F = C 9/5 + 32

• Écrivez un algorithme, composé de trois modules, pouvant convertir une température d'une échelle à l'autre, au choix de l'utilisateur – Un module auxiliaire affiche en C une température lue en F– Un module auxiliaire affiche en F une température lue en C– Un module principal affiche un menu demandant quelle type de

conversion à effectuer, et appelle le module auxiliaire correspondant

Exercice (suite)• Modules auxiliaires

\\ Module CelÀFahrENTRER ÉCRIRE "En Celsius?" LIRE Celsius TempFahr = (Celsius * 9/5) + 32 ÉCRIRE TempFahr, "Fahrenheit"RETOURNER

Module CelÀFahrEntrer

Retourner

Écrire TempFahr

TempFahr = (Celsius * 9/5) + 32

Écrire Celsius

\\ Module FahrÀCelENTRER ÉCRIRE "En Fahrenheit?" LIRE Fahr TempCel = (Fahr - 32) * 5/9 ÉCRIRE TempCel, "Celsius"RETOURNER

Module FahrÀCel Entrer

Retourner

Écrire TempCel

TempCel = (Fahr – 32) * 5/9

Écrire Fahr

Exercice (suite)

• Module principal

\\ Module principalDÉBUT ÉCRIRE "1 – Celsius à Fahrenheit" ÉCRIRE "2 – Fahrenheit à Celsius" LIRE Code SI Code = 1 ALORS EXÉCUTER CelÀFahr SINON SI Code = 2 ALORS EXÉCUTER FahrÀCel FINSIFIN

Oui

Non

Début

Lire Code

Fin

CelÀFahr

Écrire "1 – Celsius à Fahrenheit

Code = 1?

Écrire "2 – Fahrenheit à Celsius

Oui

NonCelÀFahr

Code = 2?

Devoir #6

• Énoncé du devoir disponible sur mon site WEB (~jlemoe)

• Calcul de taxe sur véhicule• Vous devez soumettre

– Un fichier LARP (la solution)– Un fichier Visio (l'organigramme)– Un fichier Word (page titre)

• À remettre avant le prochain cours (voir détails dans le devoir)