section vii programmation modulaire algorithmes et résolution de problèmes 18279 fge

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

Upload: clement-gobert

Post on 03-Apr-2015

135 views

Category:

Documents


0 download

TRANSCRIPT

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)