View
110
Download
4
Category
Preview:
Citation preview
Section VIIIModularitéPartie II
Algorithmes et résolution de problèmes18279 FGE
Contenu
• Révision (modules simples)
• Modules– Avec paramètres– Avec valeur de retour
• Exemples
• Exercices– Dont un à remettre
• Devoir #7
Révision - modules
• 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
.
.
.
Révision – 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
Révision – 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
Révision – 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
Révision – modules simples
(suite)• Exemple
Heures > 40?OuiNon
Paie = Heures * Taux
Sup = Taux * 1.5 * (Heures - 40)
Paie = Reg + Sup
Entrer
Écrire Nom,Numéro, Paie
Retourner
Reg = Taux * 40
Lire Nom,Numéro, Heures,Taux
ModuleTraiterEmployé
Compte 10?
Oui
Non
TraiterEmployé
Compte = Compte + 1
Début
Fin
Compte = 1
Révision – 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 Reg = Taux * 40 Sup = Taux * 1.5 * (Heures-40) Paie = Reg + Sup SINON Paie = Heures * Taux FINSI ÉCRIRE Nom, Numéro, PaieRETOURNER
Modules avec paramètres
• Les paramètres permettent à un module auxiliaire de recevoir des valeurs directement du module appelant
• Module appelant : énumère entre parenthèses les valeurs transmises dans l'opération d'appel
où V1, V2, V3, … sont des valeurs (d'expressions et/ou variables)
Nom_du_module(V1, V2, V3, …)
\\ Appel de moduleEXÉCUTER Nom_du_module(V1, V2, V3, …)
Modules avec paramètres (suite)• Module appelé : reçoit les valeurs
transmises via des variables énumérées dans l'opération d'entrée
où V1, V2, V3, … sont des variables
Entrer V1, V2, V3, …
\\ Module appeléENTRER V1, V2, V3, …
Modules avec paramètres (suite)• Exemple
– Algorithme transformant une séquence de températures Celsius en températures Fahrenheit équivalentes
– Module principal : boucle affichant les températures de 0C à 20C converties en F
– Module auxiliaire : reçoit la température en C via un paramètre et affiche la température équivalente en F.
Modules avec paramètres (suite)• Exemple (suite)
– Module principal
\\ Module principalDÉBUT POUR TempCel = 0 JUSQU'À 20 FAIRE EXÉCUTER Fahrenheit(TempCel) FINPOURFIN
TempCel 20?
Oui
Non
Farhrenheit(TempCel)
TempCel = TempCel + 1
Début
Fin
TempCel = 0
Modules avec paramètres (suite)• Exemple (suite)
– Module auxiliaire
\\ Module auxiliaire FahrenheitENTRER Celsius TempFahr = (Celsius * 9/5) + 32 ÉCRIRE TempFahrRETOURNER
Entrer Celsius
Retourner
Écrire TempFahr
TempFahr = (Celsius * 9/5) + 32
Modules avec paramètres (suite)• Un module auxiliaire peut accepter
plusieurs paramètres– Le module appelant doit fournir le nombre
adéquat de valeurs lors de l'appel
• À se rappeler– Le module appelant fourni des valeurs au
module appelé (entre parenthèses)– Le module appelé reçoit ces valeurs dans des
variables
Modules avec paramètres (suite)• Paramètre : variable apparaissant à l'entrée
d'un module et destinée à recevoir une valeur fournie lors de l'appel
• Argument : valeur fournie lors de l'appel d'un module et destinée à être reçue dans un paramètre
• Lors de l'appel d'un module, les arguments sont copiés dans les paramètres
Modules avec paramètres (suite)• Rappel (suite)
\\ Module principalDÉBUT EXÉCUTER AfficheDonnées("Gustave", 2021234, 75)FIN
\\ Module auxiliaire AfficheDonnéesENTRER Nom, Numéro, Note ÉCRIRE Nom, Numéro, NoteRETOURNER
Arguments(valeurs)
Paramètres(variables)
Modules avec valeur de retour• Les exemples de modules auxiliaires vus à
date affichent leurs résultats à l'écran
\\ Module AfficheDonnéesENTRER Nom, Numéro, Note ÉCRIRE Nom, Numéro, NoteRETOURNER
\\ Module FahrenheitENTRER Celsius TempFahr = (Celsius * 9/5) + 32 ÉCRIRE TempFahrRETOURNER
\\ 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
Modules avec valeur de retour (suite)• Il est possible pour un module auxiliaire de
retourner un résultat au module appelant– Retourner un résultat ne signifie pas l'afficher,
mais plutôt le remettre au module appelant qui pourra en disposer comme bon lui semble
• Analogie– Lorsqu'on demande la valeur
d'une variable, cette valeur n'est pas affichée à l'écran
DÉBUT LIRE X Y = X + 1FIN
Modules avec valeur de retour (suite)• Les module auxiliaires ne retournant pas un résultat
sont communément appelés des procédures ou sous-routines
• Ces modules sont terminés par RETOURNER• Les module auxiliaires retournant un résultat sont
communément appelés des fonctions• Le résultat à retourné est indiquer à droite de
l'identificateur RETOURNER
• Le résultat retourné est appelé la valeur de retour du module
Modules avec valeur de retour (suite)• Exemple
– Module auxiliaire retournant le plus grand de trois nombres fournis en paramètres\\ Module auxiliaire MaximumDeTrois\\ Reçoit trois valeurs comme paramètres\\ Retourne la plus grande des troisENTRER Nombre1, Nombre2, Nombre3 Res = Nombre1 SI Nombre2 > Res ALORS Res = Nombre2 FINSI SI Nombre3 > Res ALORS Res = Nombre3 FINSIRETOURNER Res Valeur de retour
Modules avec valeur de retour (suite)• Le module appelant peut récupérer la valeur de
retour comme on obtient la valeur d'une variable
• Dans le pseudo-code, le mot-clé EXÉCUTER peut être omis lors de l'appel à une fonction (i.e. un module avec valeur de retour)
\\ Module principalDÉBUT LIRE X, Y, Z M = EXÉCUTER MaximumDeTrois(X, Y, Z) ÉCRIRE "Maximum =", M ÉCRIRE EXÉCUTER MaximumDeTrois(X*17, 133, Z%2)FIN
M = MaximumDeTrois(X, Y, Z)
Exercice #1
• Écrivez un algorithme (pseudo-codes) appliquant un opérateur arithmétique à deux valeurs– Un premier module doit demander à l'utilisateur
d'entrer un opérateur parmi + (addition), (soustraction), (multiplication) ou / (division)
• Le module doit valider l'entrée. Si elle est invalide, un message d'erreur doit être affiché puis la lecture refaite. Ce processus itère jusqu'à ce qu'un opérateur valide soit entré
• Le module doit retourner l'opérateur entré par l'utilisateur
Exercice #1 (suite)
• Suite du problème à résoudre– Écrivez un second module auxiliaire acceptant en
paramètre• Un opérateur arithmétique
• Deux valeurs
Le module doit appliquer l'opérateur aux valeurs et retourner le résultat
– Finalement, écrivez un module principal exploitant ces modules auxiliaires pour lire un opérateur et deux valeurs, puis afficher le résultat obtenu en appliquant l'opérateur aux deux valeurs
Exercice #1 (suite)
• Solution– Module LireOpérateur
\\ Module auxiliaire LireOpérateurENTRER RÉPÉTER ÉCRIRE "Opérateur (+,-,x ou /) ? " LIRE Op SI Op != '+' ET Op != '-' ET Op != 'x' ET Op != '/' ALORS ÉCRIRE "*** Opérateur invalide!" FINSI JUSQU'À Op = '+' OU Op = '-' OU Op = 'x' OU Op = '/' RETOURNER Op
Exercice #1 (suite)
• Solution (suite)– Module Calculer Module principal
\\ Module auxiliaire CalculerENTRER Op, V1, V2 SI Op = '+' ALORS Res = V1 + V2 SINON SI Op = '-' ALORS Res = V1 - V2 SINON SI Op = 'x' ALORS Res = V1 * V2 SINON SI Op = '/' ALORS Res = V1 / V2 FINSIRETOURNER Res
\\ Module principalDÉBUT \\ Lire données ÉCRIRE "Deux valeurs?" LIRE N1, N2 Op = LireOpérateur
\\ Afficher le résultat Res = Calculer(Op, N1, N2) ÉCRIRE "=", ResFIN
Devoir #7
• Énoncé du devoir disponible sur WebCT
• Jeu de craps modulaire (jeu de casino, avec deux dés)
• Vous devez soumettre– Un fichier LARP (le pseudo-code)– Un fichier Word (page titre)
• À remettre avant le prochain cours
Exercice #2
• Écrivez le pseudo-code du module suivant– Le nom du module est Puissance– Accepte comme paramètres deux entiers x et p– Calcule et retourne le résultat xp (i.e. x à la puissance p)
• Écrivez aussi l'organigramme d'un module principal exploitant le module Puissance afin de calculer nn+1 pour un entier n lu
• Vous devez remettre à l'enseignant vos algorithmes
Recommended