Vous êtes sur la page 1sur 33

Prsentation Il arrive frquemment d'avoir utiliser des calculs ou des traitements plusieurs fois dans un programme des endroits

ts diffrents, ou avec des informations variables. A chaque fois on est alors oblig de rpter la squence d'instructions qui se rapportent ces calculs ou traitements, en ne faisant varier que le paramtrage des informations traiter. De la mme faon si une application vient tre dveloppe au sein dun projet par une quipe danalyste/programmeur, il faut que chacun puisse travailler sur la partie qui lui a t assign, avec la possibilit de pouvoir vrifier la progression de son dveloppement. L'application finale sera la runion de chaque partie dont le dveloppement aura t indpendant. Ceci peut aussi tre le cas de traitements identiques dans plusieurs applications. Pour permettre de rsoudre ce type de problme, on doit adopter un mode de programmation modulaire, en fonction du langage ceci va se traduire la fois par une programmation structure (Pas de GOTO) mais aussi par un dcoupage adapt, rsultat dun travail danalyse du problme concevoir. Lensemble va se traduire techniquement par :

voyons quelques exemples : des fonctions et procdures en PASCAL des fonctions en C des paragraphes en COBOL (rcemment fonctions norme ANS2002) des sous programmes, fonctions et procdures en BASIC ... Les concepts de ce type de programmation repose sur les thories du GENIE LOGICIEL, qui dfinit le niveau d'attention d'un individu 7 objets ( plus ou moins 2); ce qui sous-entend que l'on devrait dvelopper des procdures et des fonctions ne comprenant que 7 lignes de code (assez loin des ralits de la programmation actuelle). Illustrations Les modules Soit lexercice permettant de traiter successivement les trois points suivants : 1. On veut afficher lalphabet de faon croissante. 2. On veut afficher lalphabet de faon dcroissante. 3. On veut afficher la table des codes ASCII (n, caractre) pour les codes de 32 255. On note bien trois traitements indpendants les uns des autres. On peut donc envisager de les traiter de faon individuelle (par exemple en confiant chaque module une personne diffrente). On va obtenir un algorithme principal qui va tre le suivant (en adoptant une dmarche dcomposition fonctionnelle) : Dbut ALPHABET_CROISANT ALPHABET_DECROISSANT CODE_ASCII Fin

Avec lalgorithme des modules suivants (dcomposition fonctionnelle) : Procdure ALPHABET_CROISANT

Variable locale i (caractre) Dbut Pour i de a z faire crire (i) Fin pour i Fin Procdure ALPHABET_DECROISANT

Variable locale i (caractre) Dbut Pour i de z a (dcroissant) faire crire (i) fin pour i Fin Procdure CODE_ASCII Variable locale i (entier)

Fonction ASCII (donne ENT (entier)) rsultat (caractre)

// Fonction intrinsque qui retourne le caractre ASCII correspondant ENT Dbut Pour i de 32 255 faire crire (i, ASCII (i)) Fin pour

Fin Observation : On a la possibilit de recomposer un algorithme global en intgrant le code de chacun des modules au niveau de l'appel de celui-ci.

Visualisation de l'annexe correspondante. Les Modules sont des parties (logiques) dun programme qui sont rsolues de faon indpendantes. Un Module se traduit algorithmiquement par une procdure sans paramtre. On note quun module est comparable un programme cest dire quil comprend sa partie de code (les instructions excuter) et son environnement (les donnes qui seront manipules par le code du module dans la zone dcrite par la clause variable locale qui peut tre abrge en VL).

Les fonctions
Soit les deux exercices indpendants suivants : On veut calculer la moyenne coefficiente de trois notes pour un groupe de BTS Informatique dont les coefficients sont 1,1,2, et pour un groupe dauditeurs CNAM dont les coefficients sont 1,2,3... On note que le problme du calcul coefficient est le mme pour tous les exercices, et que seuls les coefficients changent, donc il apparat plus simple de regrouper (factoriser) les lments de ce calcul de moyenne. Pour calculer une moyenne coefficiente (le rsultat), on a besoin de connatre les notes associes leurs coefficients respectifs (donnes). Les donnes sont :

N1,N2,N3 C1,C2,C3

(rel) les trois notes (rel) les trois coefficients

Le rsultat est : MOYENNE (rel) la moyenne coefficiente

Le traitement est :

MOYENNE (N1*C1+N2*C2+N3*C3)/ (C1+C2+C3) Regroupons cette rflexion au sein dune structure algorithmique : fonction MOYENNE(donnes N1,N2,N3(rel), C1,C2,C3(rel)) rsultat(rel) dbut

fin On peut maintenant crire lalgorithme qui va traiter la moyenne du groupe des BTS informatiques Lexique variables :

i (entier) indice ditration NBETUDIANT (entier) nombre dtudiant du groupe NOM,PRENOM (chane) nom et prnom dun tudiant NOT1,NOT2 (rel) moyenne du premier et second semestre EXAM (rel)note lexamen final MOY (rel) moyenne coefficiente de ltudiant Dbut Lire (NBETUDIANT) Pour i de 1 NBETUDIANT faire Lire (NOM, PRENOM, NOT1, NOT2, EXAM) MOY MOYENNE (NOT1, NOT2, EXAM, 1, 1, 2) crire (MOY) Fin pour i Fin Et l'algorithme de l'exercice sur le groupe des auditeurs CNAM Lexique : Constantes

COEF1=1 COEF2=2 COEF3=3 Variables

coefficient du partiel coefficient du TP coefficient de lexamen

NOM, PRENOM (chane) nom et prnom de lauditeur PARTIEL (entier) note du partiel TP (entier) note du TP EXAM (rel) note lexamen final MOYEN (rel) moyenne coefficiente de lauditeur Dbut

Lire (NOM) Tant que NOM faire Lire (PRENOM, PARTIEL, TP, EXAM) MOYEN MOYENNE(PARTIEL, TP, EXAM, COEF1, COEF2, COEF3) crire (MOYEN) Lire (NOM)

Fin tant que Fin On note que lapproche de la rsolution du problme est diffrente dans les deux cas, mais que rien nempche lutilisation de la mme fonction puisse que le traitement des moyennes est similaire la diffrence des noms didentificateurs. Les fonctions sont des parties (logiques) dun programme qui sont traites de faon indpendantes. Une fonction peut avoir de 0 N donnes (en entre) et elle retourne un seul rsultat (en sortie).

Les procdures
Illustration 1 Soit l'exercice suivant : On veut afficher la table de multiplication du nombre entier N pour des multiplicateurs de 1 10 Les donnes sont :

(entier)

le nombre multiplier

Le rsultat est : Aucun, il s'agit de l'action d'afficher la table de multiplication du N Le traitement est :

Par exemple si N vaut 7 1x7=7 2 x 7 = 14 : 10 x 7 = 70 Regroupons cette rflexion au sein dune structure algorithmique : Procdure TABLE_MULTIPLICATION (donnes N (entier)) variable locale i (entier)

Dbut

pour i de 1 10 faire crire(i, x , N, = , i*N) fin pour i Fin

Cette procdure possde une donne (en entre) et ne fournit aucun rsultat, mais une action d'affichage On peut crire l'algorithme d'affichage de la table de multiplication intgrant cette procdure

Lexique

variables :

N Dbut

(entier)

le multiplicateur

lire (N) TABLE_MULTIPLICATION (N) Fin Illustration 2 Soit l'exercice suivant :

On veut retourner les valeurs du carr, et de la racine carre de la constante trigonomtrique (Pi). Les donnes sont : aucune donne ( est une constante) Les rsultats sont :

CARRE RACINE Le traitement est :

(rel) le carr de (rel) la racine carre le

CARRE = RACINE = Regroupons cette rflexion au sein dune structure algorithmique : Procdure CARRE_RACINE_PI (rsultats C, R (rel)) {Liste de fonctions intrinsques ou prdfinies} Fonction carr (donne X (rel)) rsultat (rel) Retourne le carr de X. Fonction racine_carre (donne X (rel)) rsultat (rel) Retourne la racine carre de X. Fonction PI rsultat (rel) Retourne la valeur constante de PI () Dbut C carr(PI) R racine_carre(PI) Fin donne et retourne deux rsultats

On peut crire l'algorithme utilisant la procdure de calcul Lexique variables : CARRE RACINE Dbut CARRE_RACINE_PI (CARRE,RACINE) Ecrire(PI a pour carr ,CARRE, et pour racine carre , RACINE) Fin illustration 3. soit l'exercice suivant : On veut retourner le rsultat de la division d'un nombre un autre ; dans le cas d'une division par 0 on retournera un code d'erreur. Les donnes sont : N (rel) D (rel)

(rel) (rel)

le carr de PI la racine carre de PI

le numrateur le diviseur

Les rsultats sont : R (rel) le rsultat de la division ERREUR (boolen) le rsultat est-il correct ou non Le traitement est : Si D = 0 R=N/C Regroupons cette rflexion au sein dune structure algorithmique : procdure DIVISION(donnes N,D(rel) rsultats R(rel),ERREUR(boolen)) dbut si D = 0 alors -999999,99999 {contrle de retour de tous les rsultats}

fin si Fin donnes sortie) On peut crire l'algorithme utilisant la procdure de calcul Lexique variables : NOMBR1 NOMBR2 RES ERREUR Dbut Lire(NOMBR1,NOMBR2) (rel) (rel) (rel) (boolen) le nombre diviser le diviseur le rsultat de la division gestion de l'erreur de division par 0 rsultats

DIVISION (NOMBR1,NOMBR2,RES,ERREUR) Si ERREUR Alors crire(division par zro) Sinon crire(RES) Fin si Fin Les procdures sont des parties (logiques) dun programme qui sont traites de faon indpendantes. Une procdure peut avoir de 0 N donnes (en entre) et elle retourne de 0 N rsultats (en sortie).

Algorithmie des fonctions et procdures Gnralits Dun point de vue algorithmique, il existe deux types de fonctions et procdures celles dfinies dans le structure du langage (appele intrinsques), et celles dfinies par lutilisateurs. Attention toutefois en langage C il ny a que des fonctions, alors quen PASCAL il y a les deux ; mais cette tape de programmation est indpendante de la conception algorithmique. Description Une fonction ou une procdure est constitue sur le mme modle qu'un programme. Leur rle est d'effectuer une squence de travail compose d'un bloc d'instructions, ceci partir de donnes (en entre de la fonction) et de rendre un ou des rsultats en fin d'excution (en sortie de la fonction).

Les FONCTIONS (Notation Algorithmique) Les Fonctions intrinsques. En rgle gnrale les langages bien que diffrents fournissent en standard les mmes fonctions intrinsques. Ce qui est le cas du carr et de la racine carr dun nombre.

exemple on souhaite calculer le carr et la racine carr dun nombre. Hypothse : on supposera le nombre rel et positif. Les donnes du problme. Le nombre entier Les rsultats du problme. Le carr du nombre La racine carr du nombre Algorithme variables : NOMBR,CARRE,RACINE

NOMBR(rel)

CARRE(rel) RACINE(rel)

(rel)

fonction Carr(donnes X (rel)) rsultat (rel) retourne le carr du nombre X fonction Racine_Carre(donnes X (rel)) rsultat (rel) retourne la racine carr du nombre X Dbut Lire (NOMBR) Carr(NOMBR) Racine_carre(NOMBR) Ecrire (CARRE,RACINE) fin Dans le lexique on dfinit le profil de la fonction (paramtres donnes et type du rsultat) ainsi que laction effectue. Dans lalgorithme on peut alors affecter la fonction une variable rsultat. Les Fonctions utilisateurs Prenons lexemple dune fonction qui effectue la somme de deux entiers, et dun rel. Les donnes du problme (de la fonction). Les deux nombres entiers Le nombre rel Le rsultat du problme (de la fonction). Le rsultat de laddition des 3 nombres Structure algorithmique de la fonction Fonction ADDITION (donnes A,B (entier), C (rel) ) rsultat (rel) dbut fonction ADDITION fin fonction On note que la fonction est compose de deux parties : lentte, et le corps de la fonction. Le rsultat est imprativement retourn au nom de la fonction. Voyons lalgorithme du programme utilisant la fonction ADDITION.

A, B C

(rel)

10

Algorithme variables NB_ENTIER1,NB_ENTIER2 NB_REEL,NB_RESULTAT

(entier) (rel)

dbut Lire(NB_ENTIER1,NB_ENTIER2,NB_REEL) Ecrire (NB_RESULTAT) Fin Lentte dune fonction compose du mot cl du nom donn par lutilisateur la fonction de la liste des donnes en entre de la fonction du mot cl du type du rsultat Fonction ADDITION (donnes A,B(entier),C(rel)) rsultat (rel)

Remarque : Il est possible que la fonction nait aucune donnes en entre. Le corps de la fonction compos dune zone de dclaration des variables locales la fonction (absente ici) de la liste des squences de travail utile la fonction ADDITION toujours retourner le rsultat au nom de la fonction Les PROCEDURES (Notation Algorithmique) Les procdures intrinsques. Au mme titre que les fonctions les langages de programmation fournissent en standard des procdures intrinsques. exemple on souhaite afficher le numro du lecteur, et le chemin daccs au rpertoire o lon se trouve dans larborescence dun disque. Les donnes du problme. aucune Les rsultats du problme. Le numro du lecteur La nom du chemin Algorithme variables LECTEUR CHEMIN

LECTEUR(entier) CHEMIN(chane)

(entier) (chane)

procdure RETOURNE_CHEMIN(rsultat LECTEUR(entier),CHEMIN(chane)) disque

11

dbut RETOURNE_CHEMIN(LECTEUR,CHEMIN) Ecrire (LECTEUR,CHEMIN) Fin Les procdures utilisateurs Illustrations 1 : Prenons lexemple de laffichage dun message une position dtermine (abscisses, ordonnes) lcran. Les donnes du problme (de la procdure). Les deux coordonnes entires Le message afficher Le rsultat du problme (de la procdure). Le rsultat est une action Structure algorithmique de la procdure Procdure AFFICH_MESSAG (donnes X,Y (entier),MESSAGE(chane)) dbut procdure positionner_cruseur(X,Y) crire(MESSAGE) fin procdure Procdure positionner_cruseur(COLONNE,LIGNE(entier)) On note que la procdure est compose de la mme faon quune fonction de deux parties : lentte, et le corps de la procdure. Voyons lalgorithme du programme utilisant la procdure AFFICH_MESSAG. Algorithme variables ABSCISSES,ORDONNEE CHAINE_A_AFFICHER dbut {exemple 1} AFFICH_MESSAG (1,24,Le BTS Informatique cest super !) {exemple 2} Lire(CHAINE_A_AFFICHER) AFFICH_MESSAG (1,24, CHAINE_A_AFFICHER) {exemple 3} Lire(ABSCISSE,ORDONNEE,CHAINE_A_AFFICHER) AFFICH_MESSAG (ABSCISSE,ORDONNEE,CHAINE_A_AFFICHER) fin Illustrations 2 : crire une procdure qui inverse deux nombres. Les donnes du problme (de la fonction). (entier) (chane)

X, Y MESSAGE

(vide)

12

Le premier nombre le second nombre Les rsultats du problme (de la fonction). Le premier nombre invers le second nombre invers

N1 N2

N1 N2

remarque : on note quil y a deux rsultats (variables identiques en entre, et en sortie) Les traitements du problme (de la fonction). On prendra soin de ne pas craser lune des valeurs en la stockant temporairement dans une variable intermdiaire.

Algorithme de la procdure Procdure INVERSE (Donnes N1,N2(rel)), rsultats N1,N2(rel)) dclaration des variables de la fonction INTER (rel) variable de stockage intermdiaire locale dbut procdure INTER N1 N2 N2 INTER fin procdure Remarque : autre notation de l'entte ou profil de la procdure, a priori plus simple que comprendre en prvision de la programmation. Procdure INVERSE (Donnes/rsultats N1,N2(rel)) Algorithme du programme utilisant la procdure Algorithme variables X,Y dbut Lire(X,Y) INVERSE(X,Y) Ecrire(X,Y) fin Lentte dune procdure compose du mot cl du nom donn par lutilisateur la procdure de la liste des donnes en entre de la procdure de la liste des rsultats en sortie de la procdure Procdure INVERSE (donnes N1,N2 (rel), rsultat N1,N2 (rel))

(rel)

13

Remarque : La liste des donnes peut tre vide ainsi que celle des rsultats Le corps de la procdure compos dune zone de dclaration des variables locales la procdure INTER (rel) de la liste des squences de travail utile la procdure linversion des 2 nombres

CONCLUSION Les fonctions ont pour rle de rendre un rsultat dun type informatique standard partir dun traitement pouvant provenir de zro, un ou plusieurs paramtres. Structure : Fonction NOMFONCTION (donnes liste des paramtres) rsultat (type_rsultat) liste des variables locales dbut fonction liste des instructions de la fonction rsultat fin fonction Attention : ne pas oublier de retourner le rsultat au nom de la fonction. ont pour rle dappliquer une action sur des donnes en entres (si elles existent), et de fournir des rsultats en sorties (si ils existent). Il existe plusieurs formes de procdures : Les procdures : ni donne en entre, ni rsultat en sortie) un traitement) standard (module).

donnes en entres le traitement) dpend des donnes en entres. rsultats en sorties le traitement) fournit des rsultats en sorties. donnes en entres/ rsultats en sorties fusion des prcdentes descriptions. Structure : Procdure NOMPROCEDURE (donnes liste des entres,rsultats liste des sorties) liste des variables locales dbut procdure liste des instructions de la procdure fin procdure

14

Toute fonction ou procdure doit tre dcrite dans lalgorithme dans le lexique sil sagit dune fonction ou procdure intrinsque (entte, dfinition) en clair sil sagit dune fonction ou procdure utilisateur (entte, et corps)

Remarques de notations algorithmiques Les procdures Il arrive assez frquemment davoir dans une procdure des donnes qui sont aussi les rsultats, lobjectif de la procdure tant la modification de ces donnes, comme sur lexemple : Procdure INVERSE (Donnes N1,N2(rel)), rsultats N1,N2(rel)) On trouve pour des raisons de commodits de traduction une autre criture des en-ttes de procdures dans ce cas. Procdure INVERSE (Donnes/Rsultats N1,N2(rel))) ou encore Procdure INVERSE (Donnes modifies N1,N2(rel))) On pourra trouver d'autres notations o les donnes ( l'exemple de la programmation ! ?) sont considres implicites (donc non notifies), on indiquera uniquement les rsultats. Exemple : Procdure PROC (X (rel),N(entier)), rsultats Y(rel),A(entier)) Les fonctions On a vu que dans la syntaxe de lcriture dune fonction on imposait daffecter au nom de la fonction le rsultat de celle ci, comme sur lexemple. Fonction ADDITION (donnes A,B (entier), C (rel) ) rsultat (rel) dbut fonction ADDITION fin fonction On trouve aussi le formalisme suivant Fonction ADDITION (donnes A,B (entier), C (rel) ) rsultat (rel) dbut fonction retourner (A + B + C) fin fonction on indique par la clause retourner() que ce qui se trouve entre les parenthses sera le rsultat de la fonction. l'instar des procdures on pourra rencontrer des notations qui ne spcifient pas les donnes et qui utilisent une flche pour symboliser le retour du rsultat. Exemple : Fonction ADDITION (A,B (entier), C (rel) ) dbut fonction ADDITION fin fonction (rel)

15

ou Fonction ADDITION (A,B (entier), C (rel) ) dbut fonction retourner (A + B + C) fin fonction Vocabulaire. Dans ce support on a prsent une fonction ou une procdure comme une unit fonctionnelle (regroupement dune suite de traitements ayant un objectif logique commun) pouvant tre utilis une ou plusieurs fois dans un ou des programmes appelants ; do la notion de modularit, et de rutilisation de code. On a dcrit la fonction ou la procdure comme : Une En-tte qui sert de protocole de communication en les utilisateurs et les dveloppeurs. Cette comporte les donnes en entres, et les rsultats en sorties. On parle aussi de profil ou de prototype de la fonction ou procdure. Un corps qui est compos de lensemble des traitements qui sont assurs par cette fonction ou procdure. Le corps est compos dun ensemble dinstruction tout fait comparable celui dun programme principal, et peut donc contenir ses propres variables (dites locales), et ses propres fonctions et procdures (dites imbriques). (rel)

CAS PRATIQUES Etudions au travers de cas pratiques le rle de l'utilisation de fonction, de procdure et de modules. Rutilisation de code. Soit la srie d'exercices suivants 1) Un diplme dinformatique est compos de deux tests et dun examen. On veut calculer la moyenne gnrale dun tudiant, sachant que la note de lexamen est affecte du coefficient 2. On affichera le nom, le prnom, les trois notes, et la moyenne obtenue. 2) Un diplme de comptabilit est compos de trois partiels affects respectivement des coefficients 1, 2, et 4. On veut connatre la moyenne dun tudiant. 3) Lvaluation dun module de cours du soir seffectue partir dune note de partiel en Janvier, dune note dexamen en juin, et dune note de projet en mai. Les notes sont affectes de coefficients (1 pour le partiel, 2 pour le projet, et 3 pour lexamen. On veut calculer la moyenne obtenu par un auditeur de ce module. On affichera son matricule, nom, prnom, et moyenne finale. de trois notes coefficientes d'algorithme : fonction MOYENNE(donnes N1,N2,N3(rel), C1,C2,C3(rel)) rsultat(rel) dbut fin -dessus) que l'on placera dans une bibliothque ce qui permettra sa rutilisation comme fonction intrinsque (prdfinie) dans les diffrents algorithmes

16

Ce qui va permettre d'crire les trois algorithmes suivants : Enonc 1 Un diplme dinformatique est compos de deux tests et dun examen. On veut calculer la moyenne gnrale dun tudiant, sachant que la note de lexamen est affecte du coefficient 2. On affichera le nom, le prnom, les trois notes, et la moyenne obtenue. Algorithme (complet) Lexique variables TEST1 TEST2 EXAM MOY NOM PRENOM Type (reel) (reel) (reel) (reel) (chane) (chane) Dfinition Note du premier test Note du second test Note de l'examen Moyenne gnrale de ltudiant Nom de l'tudiant Prnom de l'tudiant

fonction MOYENNE(donnes N1,N2,N3(rel), C1,C2,C3(rel)) rsultat(rel)

Dbut Lire(NOM,PRENOM,TEST1,TEST2,EXAM) Ecrire(NOM,PRENOM,TEST1,TEST2,EXAM,MOY) Fin Enonc 2 Un diplme de comptabilit est compos de trois partiels affects respectivement des coefficients 1, 2, et 4. On veut connatre la moyenne dun tudiant. Algorithme (complet) Lexique constantes COEF1 = 1 COEF2 = 2 COEF3 = 4 variables PARTIEL1 PARTIEL2 PARTIEL3 MOYEN

Type (reel) (reel) (reel) (reel)

Dfinition Note du premier partiel Note du second partiel Note du troisime partiel Moyenne de ltudiant

fonction MOYENNE(donnes N1,N2,N3(rel), C1,C2,C3(rel)) rsultat(rel)

Dbut Lire(PARTIEL1,PARTIEL2,PARTIEL3) Ecrire(MOYEN) Fin

17

Enonc 3 Lvaluation dun module de cours du soir seffectue partir dune note de partiel en Janvier, dune note dexamen en juin, et dune note de projet en mai. Les notes sont affectes de coefficients (1 pour le partiel, 2 pour le projet, et 3 pour lexamen. On veut calculer la moyenne obtenu par un auditeur de ce module. On affichera son matricule, nom, prnom, et moyenne finale. Algorithme (complet) Lexique constantes C1 = 1 C2 = 2 C3 = 3 variables PARTIEL PROJET EXAMEN MOYFIN MAT NOM PRENOM

Type (reel) (reel) (reel) (reel) (chane) (chane) (chane)

Coefficient du partiel Coefficients de projet Coefficients de l'examen Dfinition Note du partiel Note du projet Note de l'examen Moyenne finale de l'auditeur Matricule d'auditeur Nom de l'auditeur Prnom de l'auditeur

fonction MOYENNE(donnes N1,N2,N3(rel), C1,C2,C3(rel)) rsultat(rel)

Dbut Lire(MAT,NOM,PRENOM,PARTIEL,PROJET,EXAMEN) Ecrire(MAT,NOM,PRENOM,MOYFIN) Fin Schma de rutilisation du code de la fonction.

CAS PRATIQUES Modularisation simple de traitement. nonc Un centre de vacances dcide dorganiser pour les enfants (on ne connat pas lavance le nombre des enfants) un aprs-midi grands jeux sportifs. Il sagit de 5 catgories dpreuves (code 1 pour adresse, 2 pour dbrouillardise, 3 pour rsistance, 4

18

pour vitesse, 5 pour endurance), chacune de ces 5 catgories est constitue de 3 preuves obligatoires (A pour facile, B pour moyen, C pour difficile). Tout enfant qui a russi lune des preuves de chaque catgorie se voit attribuer : 5 points pour la premire preuve. 10 points pour la seconde preuve. 20 points pour la troisime preuve. On dsire connatre pour chaque enfant le nom et le prnom, le nombre de points par catgorie, ainsi que le nombre total des points obtenus. On veut aussi dterminer le nombre de points total ayant t obtenu par lenfant (ou les enfants) vainqueur(s), ainsi que la moyenne gnrale de lensemble des enfants aux grands jeux sportifs. Schma organisationnel. Schmatisons l'enchanement des traitements mettre en oeuvres qui seront dfinies par une srie de module algorithmique.

Dveloppement modulaire (simple). Cette premire dmarche va consister tre modulaire en dveloppant les modules simples et en dlocalisant chaque sous problme dans un autre module comme dfini par le schma organisationnel prcdent. La rsolution du problme pos Algorithme (principal) Lexique constantes NBCATEG = 5 NBEPREUV = 3 PA = 5 PB = 10 PC = 20

Nombres de catgories d'preuves Nombres d'preuves dans une catgorie Nombres de points obtenus pour avoir russi l'preuve A Nombres de points obtenus pour avoir russi l'preuve B Nombres de points obtenus pour avoir russi l'preuve C

19

variables NBENFANT TOTPOINT MAX_POINT MOYPOINT REP

Type (entier) (entier) (entier) (rel) (caractre)

Dfinition Nombre total d'enfants ayant particip calcul dans le module UN_ENFANT Cumul des points obtenus par tous les enfants calcul dans le module UN_ENFANT Nombre de points obtenus par le vainqueur calcul dans le module UN_ENFANT Moyenne gnrale des points obtenus Permet de grer la saisie

Fonction MAJUSCULE (donnes CARAC(caractre)) rsultat (caractre)

Dbut

Lire(REP) Tant que majuscule(REP) = O faire UN_ENFANT {dlocalisation du traitement d'un enfant} Lire (REP) Fin de tant que Si NBENFANT > 0 Alors TOTPOINT / NBENFANT {rsultats demands : le nombre de points obtenus par le vainqueur et la moyenne gnrale} Ecrire (MAX_POINT, MOYPOINT) Sinon crire(aucun enfant n'a particip) Fin si Fin Module UN_ENFANT {ce module doit permettre de dterminer le nombre de points maximum obtenus (par l'enfant vainqueur) MAX_POINT, le nombre total d'enfants NBENFANT, et le cumul des points obtenus par chaque enfant TOTPOINT}.

lexique ajouter au lexique principal variables NOM PRENOM ENFANT_POINT Type (chane) (chane) (entier) Dfinition Nom de l'enfant courant Prnom de l'enfant courant Total des points obtenus par un enfant calcul dans le module LES_CATEGORIES

Dbut Lire (NOM,PRENOM) LES_CATEGORIES Ecrire (ENFANT_POINT) {rsultat demand : le total des points de l'enfant} {recherche du maximum des points obtenus par un enfant} Si ENFANT_POINT > MAX_POINT Alors ENFANT_POINT

20

Fin si {comptage du nombre d'enfants et du cumul des points} ENFANT_POINT Fin Module LES_CATEGORIES {ce module doit permettre de dterminer le nombre total de points obtenus (par un enfant) l'ensemble des catgories ENFANT_POINT }.

lexique ajouter au lexique principal variables CATEGORIE POINT_CATEG Type (entier) (entier) Dfinition Indice ditration comptant les catgories Total des points obtenus par un enfant dans une catgorie calcul dans le module LES_EPREUVES

Dbut ENFANT_POINT {initialisation du total des points obtenus par l'enfant} Pour CATEGORIE de 1 NBCATEG faire LES_EPREUVES Ecrire(POINT_CATEG) {rsultat demand : le total des points de la catgorie} {on calcule le nombre de point total de l'enfant} POINT_CATEG Fin pour CATEGORIE Fin Module LES_EPREUVES {ce module doit permettre de dterminer le nombre de points obtenus (par un enfant) aux diffrentes preuves d'une catgorie POINT_CATEG }.

lexique ajouter au lexique principal variables EPREUVE REUSSI Dbut {initialisation du total des points de la catgorie} Pour EPREUVE de 1 NBEPREUV faire Lire (REUSSI) Si majuscule(REUSSI) = O {si l'enfant a russi l'preuve} Alors en fonction de EPREUVE valant 1 : POINT_CATEG {5 points} 2 {10 points} 3 {20 points} fin en fonction de Fin si Fin pour EPREUVE Fin Type (entier) (Caractre) Dfinition Indice ditration comptant les preuves A O indique que l'enfant a russi l'preuve

21

Remarques sur la modularisations de traitement. La dposition fonctionnelle d'un problme en sous problme (module) permet de diminuer la complexit des traitements mettre en uvre, rsoudre la problmatique d'un module est plus facile que de s'attaquer problme de faon globale. Toutefois on peut noter que ce type de dveloppement ncessite une bonne exprience et une matrise des outils algorithmiques de la programmation structure. Au remarquera toutefois que la dfinition de chaque variable utilise par algorithme est prvue pour tre globale ce qui est un rel inconvnient posant problme lors d'un dveloppement en quipe, car il faudra imposer mthodologiquement un lexique global commun (mis jour immdiatement aprs chaque cration de variables) pour tous les dveloppeurs. On peut se rendre compte aussi de l'importance fondamentale des commentaires dj au niveau de l'algorithme, qui sera essentiel lors d'une maintenance corrective (corrig des erreurs dtectes en phase de tests) ou adaptative (volution du contexte de l'application). Observation : On a la possibilit de recomposer un algorithme global en intgrant le code de chacun des modules au niveau de l'appel de celui-ci. Visualisation de l'annexe correspondante.

Autre solution : on peut remplacer chacun des modules en programmation par une procdure sans passage de paramtres (dfinition d'un module), ce qui doit permettre de segmenter les traitements (avantage), mais de garder un lexique de variables globales (inconvnient). CAS PRATIQUES Modularisation fonctionnelle de traitement. Schma organisationnel. partir de la mme rflexion (nonc du problme prcdent) adoptons une dmarche nous permettant de dvelopper des fonctions ou procdures algorithmiques adaptes aux besoins du traitement de notre problme et communiquant les unes avec les autres par des flux de donnes et de rsultats.

22

Dveloppement modulaire(fonctions et procdures). Algorithme (principal) Lexique constantes NBCATEG = 5 NBEPREUV = 3 PA = 5 PB = 10 PC = 20 variables NBENFANT TOTPOINT MAX_POINT MOYPOINT REP

Type (entier) (entier) (entier) (rel) (caractre)

Nombres de catgories d'preuves Nombres d'preuves dans une catgorie Nombres de points obtenus pour avoir russi l'preuve A Nombres de points obtenus pour avoir russi l'preuve B Nombres de points obtenus pour avoir russi l'preuve C Dfinition Nombre total d'enfants ayant particip calcul dans la procdure UN_ENFANT Cumul des points obtenus par tous les enfants calcul dans la procdure UN_ENFANT Nombre de points obtenus par le vainqueur calcul dans la procdure UN_ENFANT Moyenne gnrale des points obtenus Permet de grer la saisie

Fonction MAJUSCULE (donnes CARAC(caractre)) rsultat (caractre) re CARAC Dbut

23

Lire(REP) Tant que majuscule(REP) = O faire {dlocalisation du traitement d'un enfant dans la procdure UN_ENFANT} UN_ENFANT(NBENFANT, TOTPOINT, MAX_POINT) Lire (REP) Fin de tant que Si NBENFANT > 0 Alors TOTPOINT / NBENFANT {rsultats demands : le nombre de points obtenus par le vainqueur et la moyenne gnrale} Ecrire (MAX_POINT, MOYPOINT) Sinon crire(aucun enfant n'a particip) Fin si Fin Procdure UN_ENFANT(donne/rsultat NBENFANT, TOTPOINT, MAX_POINT(entier)) {cette procdure doit permettre de dterminer (donc rsultat) le nombre de points maximum obtenus (par l'enfant vainqueur) MAX_POINT, le nombre total d'enfants NBENFANT, et le cumul des points obtenus par chaque enfant TOTPOINT, partir de l'initialisation de ces mmes variables dans le programme principal appelant (donc donne). On procdera l'affichage du total des points obtenus par l'enfant ENFANT_POINT comme demand dans l'nonc}.

lexique local la procdure Variables locales NOM PRENOM ENFANT_POINT Type (chane) (chane) (entier) Dfinition Nom de l'enfant courant Prnom de l'enfant courant Total des points obtenus par un enfant calcul par la fonction LES_CATEGORIES

Dbut Lire (NOM,PRENOM) ENFANT_POINT LES_CATEGORIES Ecrire (ENFANT_POINT) {rsultat demand : le total des points de l'enfant} {recherche du maximum des points obtenus par un enfant} Si ENFANT_POINT > MAX_POINT Alors MAX_POINT ENFANT_POINT Fin si {comptage du nombre d'enfants et du cumul des points} NBENFANT NBENFANT + 1 TOTPOINT TOTPOINT + ENFANT_POINT Fin Fonction LES_CATEGORIES rsultat (entier)

24

{cette fonction doit permettre de dterminer le nombre total de points obtenus (par un enfant) l'ensemble des catgories On procdera l'affichage du nombre de points obtenus par l'enfant dans chaque catgorie POINT_CATEG comme demand dans l'nonc}

lexique local la fonction variables locales CATEGORIE POINT_CATEG compte_POINT Type (entier) (entier) (entier) Dfinition Indice ditration comptant les catgories Total des points obtenus par un enfant dans une catgorie calcul par la fonction LES_EPREUVES Variable du cumul des points d'un enfant pour l'ensemble des catgories

Dbut {initialisation du total des points obtenus par l'enfant} Pour CATEGORIE de 1 NBCATEG faire POINT_CATEG LES_EPREUVES Ecrire(POINT_CATEG) {rsultat demand : le total des points de la catgorie} {on calcule le nombre de point total de l'enfant} POINT_CATEG Fin pour CATEGORIE LES_CATEGORIES {retour du rsultat de la fonction} Fin Fonction LES_EPREUVES rsultat (entier) {cette fonction doit permettre de dterminer le nombre de points obtenus (par un enfant) aux diffrentes preuves d'une catgorie }.

lexique local la fonction Variables locales EPREUVE REUSSI compte_CATEG Type (entier) (Caractre) (entier) Dfinition Indice ditration comptant les preuves A O indique que l'enfant a russi l'preuve Variable de cumul des points d'un enfant pour une catgorie d'preuves

Dbut compte_CATEG {initialisation du total des points de la catgorie} Pour EPREUVE de 1 NBEPREUV faire Lire (REUSSI) Si majuscule(REUSSI) = O {si l'enfant a russi l'preuve} Alors POINT (EPREUVE) Fin si Fin pour EPREUVE LES_EPREUVES {retour du rsultat de la fonction} Fin Fonction POINT (donne CODE (entier)) rsultat (entier)

25

{cette fonction doit permettre de retourner le nombre de points obtenus (par un enfant) a l'preuve de catgorie CODE }.

Dbut en fonction de CODE valant 1: PA {5 points} 2: PB {10 points} 3: PC {20 points} fin en fonction de Fin Remarques sur lutilisation des fonctions et procdures Observations : On a la possibilit de recomposer lalgorithme utilisant l'encapsulation des fonctions et procdures respectant ainsi la logique de cration. L'encapsulation offre l'avantage de masquer l'organisation gnral du dveloppement, mais interdit toutefois d'envisager la rutilisation de fonctions ou procdures internes. Visualisation de l'algorithme (fonctions et procdures encapsules). Ou On peut recomposer l'algorithme en numrant successivement au mme niveau les fonctions et procdures, ce qui pourrait permettre une utilisation de chacune dans les autres ou le programme principal (ce qui n'entre pas directement dans le cadre de la structure de l'exercice, mais qui permet d'illustrer la possibilit d'une utilisation multiple d'une mme fonction ou procdure. Visualisation de l'algorithme (fonctions et procdures au mme niveau).

ANNEXES Les modules Algorithme complet de l'exercice : Procdure ALPHABET_CROISANT variable locale i (caractre) dbut pour i de a z faire crire(i) fin pour i fin Procdure ALPHABET_DECROISANT variable locale i (caractre) dbut pour i de z a (dcroissant) faire crire(i) fin pour i fin Procdure CODE_ASCII variable locale i (entier) fonction ASCII(donne ENT(entier)) rsultat (caractre) dbut

26

pour i de 32 255 faire crire(i,ASCII(i)) fin pour i fin Dbut {algorithme principal} ALPHABET_CROISANT ALPHABET_DECROISSANT CODE_ASCII Fin {algorithme principal} ce qui donne l'agencement suivant :

Algorithme standard recompos Recomposition d'un algorithme standard partir de la dmarche modulaire de l'nonc suivant :

Un centre de vacances dcide dorganiser pour les enfants (on ne connat pas lavance le nombre des enfants) un aprs-midi grands jeux sportifs. Il sagit de 5 catgories dpreuves (code 1 pour adresse, 2 pour dbrouillardise, 3 pour rsistance, 4 pour vitesse, 5 pour endurance), chacune de ces 5 catgories est constitue de 3 preuves obligatoires (A pour facile, B pour moyen, C pour difficile). Tout enfant qui a russi lune des preuves de chaque catgorie se voit attribuer : 5 points pour la premire preuve. 10 points pour la seconde preuve. 20 points pour la troisime preuve. On dsire connatre pour chaque enfant le nom et le prnom, le nombre de points par catgorie, ainsi que le nombre total des points obtenus. On veut aussi dterminer le nombre de points total ayant t obtenu par lenfant (ou les enfants) vainqueur(s), ainsi que la moyenne gnrale de lensemble des enfants aux grands jeux sportifs.

Algorithme (global) Lexique gnral constantes NBCATEG = 5 NBEPREUV = 3 PA = 5 PB = 10 PC = 20 variables

Type

Nombres de catgories d'preuves Nombres d'preuves dans une catgorie Nombres de points obtenus pour avoir russi l'preuve A Nombres de points obtenus pour avoir russi l'preuve B Nombres de points obtenus pour avoir russi l'preuve C Dfinition

27

NBENFANT TOTPOINT MAX_POINT MOYPOINT REP NOM PRENOM ENFANT_POINT CATEGORIE POINT_CATEG EPREUVE REUSSI

(entier) (entier) (entier) (rel) (caractre) (chane) (chane) (entier) (entier) (entier) (entier) (Caractre)

Nombre total d'enfants ayant particip Cumul des points obtenus par tous les enfants Nombre de points obtenus par le vainqueur Moyenne gnrale des points obtenus Permet de grer la saisie Nom de l'enfant courant Prnom de l'enfant courant Total des points obtenus par un enfant Indice ditration comptant les catgories Total des points obtenus par un enfant dans une catgorie Indice ditration comptant les preuves A O indique que l'enfant a russi l'preuve

Fonction MAJUSCULE (donnes CARAC(caractre)) rsultat (caractre) ne la majuscule du caractre CARAC Dbut

Lire(REP) Tant que majuscule(REP) = O faire {dbut UN_ENFANT } lire (NOM,PRENOM) {dbut LES_CATEGORIES } {initialisation du total des points obtenus par l'enfant} Pour CATEGORIE de 1 NBCATEG faire {dbut LES_EPREUVES } {initialisation du total des points de la catgorie} Pour EPREUVE de 1 NBEPREUV faire Lire (REUSSI) Si majuscule(REUSSI) = O {si l'enfant a russi l'preuve} Alors en fonction de EPREUVE valant 1 {5 points} 2 {10 points} 3 {20 points} fin en fonction de Fin si Fin pour EPREUVE {fin LES_EPREUVES } Ecrire(POINT_CATEG) {rsultat demand : le total des points de la catgorie} {on calcule le nombre de point total de l'enfant} POINT_CATEG Fin pour CATEGORIE { fin LES_CATEGORIES } Ecrire (ENFANT_POINT) {rsultat demand : le total des points de l'enfant} {recherche du maximum des points obtenus par un enfant} Si ENFANT_POINT > MAX_POINT Alors ENFANT_POINT Fin si {comptage du nombre d'enfants et du cumul des points} ENFANT_POINT { fin UN_ENFANT } Lire (REP) Fin de tant que Si NBENFANT > 0 Alors TOTPOINT / NBENFANT {rsultats demands : le nombre de points obtenus par le vainqueur et la moyenne gnrale}

28

Ecrire (MAX_POINT, MOYPOINT) Sinon crire(aucun enfant n'a particip) Fin si Fin fonctions et procdures encapsules Algorithme (gnral) Lexique constantes NBCATEG = 5 NBEPREUV = 3 PA = 5 PB = 10 PC = 20 variables NBENFANT TOTPOINT MAX_POINT MOYPOINT REP

Type (entier) (entier) (entier) (rel) (caractre)

Nombres de catgories d'preuves Nombres d'preuves dans une catgorie Nombres de points obtenus pour avoir russi l'preuve A Nombres de points obtenus pour avoir russi l'preuve B Nombres de points obtenus pour avoir russi l'preuve C Dfinition Nombre total d'enfants ayant particip calcul dans la procdure UN_ENFANT Cumul des points obtenus par tous les enfants calcul dans la procdure UN_ENFANT Nombre de points obtenus par le vainqueur calcul dans la procdure UN_ENFANT Moyenne gnrale des points obtenus Permet de grer la saisie

{dfinition des fonctions intrinsques (prdfinies)} Fonction MAJUSCULE (donnes CARAC(caractre)) rsultat (caractre)

{dfinition des fonctions et procdures utilisateur} Procdure UN_ENFANT(donne/rsultat NBENFANT, TOTPOINT, MAX_POINT(entier)) Variables locales NOM PRENOM ENFANT_POINT Type (chane) (chane) (entier) Dfinition Nom de l'enfant courant Prnom de l'enfant courant Total des points obtenus par un enfant calcul par la fonction LES_CATEGORIES

Fonction LES_CATEGORIES rsultat (entier) variables locales CATEGORIE POINT_CATEG Type (entier) (entier) Dfinition Indice ditration comptant les catgories Total des points obtenus par un enfant dans une catgorie calcul par la fonction LES_EPREUVES Variable du cumul des points d'un enfant pour l'ensemble des catgories

compte_POINT

(entier)

Fonction LES_EPREUVES rsultat (entier) Variables locales EPREUVE REUSSI Type (entier) (Caractre) Dfinition Indice ditration comptant les preuves A O indique que l'enfant a russi l'preuve

29

compte_CATEG

(entier)

Variable de cumul des points d'un enfant pour une catgorie d'preuves

Fonction POINT (donne CODE (entier)) rsultat (entier) Dbut en fonction de CODE valant 1: PA {5 points} 2: PB {10 points} 3: PC {20 points} fin en fonction de Fin Dbut compte_CATEG Pour EPREUVE de 1 NBEPREUV faire Lire (REUSSI) Si majuscule(REUSSI) = O {si l'enfant a russi l'preuve} Alors compte_CATEG POINT (EPREUVE) Fin si Fin pour EPREUVE LES_EPREUVES Fin Dbut

Pour CATEGORIE de 1 NBCATEG faire LES_EPREUVES Ecrire(POINT_CATEG)

Fin pour CATEGORIE LES_CATEGORIES Fin Dbut Lire (NOM,PRENOM) LES_CATEGORIES Ecrire (ENFANT_POINT) Si ENFANT_POINT > MAX_POINT Alors MAX_POINT Fin si {comptage du nombre d'enfants et du cumul des points} NBENFANT NBENFANT + 1 TOTPOINT TOTPOINT + ENFANT_POINT Fin

30

Dbut {algorithme principal}

0 Lire(REP) Tant que majuscule(REP) = O faire {dlocalisation du traitement d'un enfant dans la procdure UN_ENFANT} UN_ENFANT(NBENFANT, TOTPOINT, MAX_POINT) Lire (REP) Fin de tant que Si NBENFANT > 0 Alors ENFANT Ecrire (MAX_POINT, MOYPOINT) Sinon crire(aucun enfant n'a particip) Fin si Fin {algorithme principal} Fonctions et procdures de mme niveau Algorithme (gnral) Lexique constantes NBCATEG = 5 NBEPREUV = 3 PA = 5 PB = 10 PC = 20 variables NBENFANT TOTPOINT MAX_POINT MOYPOINT REP

Type (entier) (entier) (entier) (rel) (caractre)

Nombres de catgories d'preuves Nombres d'preuves dans une catgorie Nombres de points obtenus pour avoir russi l'preuve A Nombres de points obtenus pour avoir russi l'preuve B Nombres de points obtenus pour avoir russi l'preuve C Dfinition Nombre total d'enfants ayant particip calcul dans la procdure UN_ENFANT Cumul des points obtenus par tous les enfants calcul dans la procdure UN_ENFANT Nombre de points obtenus par le vainqueur calcul dans la procdure UN_ENFANT Moyenne gnrale des points obtenus Permet de grer la saisie

{dfinition des fonctions intrinsques (prdfinies)} Fonction MAJUSCULE (donnes CARAC(caractre)) rsultat (caractre)

{dfinition des fonctions et procdures utilisateur} Procdure UN_ENFANT(donne/rsultat NBENFANT, TOTPOINT, MAX_POINT(entier)) Variables locales NOM PRENOM ENFANT_POINT Type (chane) (chane) (entier) Dfinition Nom de l'enfant courant Prnom de l'enfant courant Total des points obtenus par un enfant calcul par la fonction LES_CATEGORIES

31

Dbut Lire (NOM,PRENOM) ENFANT_POINT LES_CATEGORIES Ecrire (ENFANT_POINT) {rsultat demand : le total des points de l'enfant} {recherche du maximum des points obtenus par un enfant} Si ENFANT_POINT > MAX_POINT Alors MAX_POINT ENFANT_POINT Fin si {comptage du nombre d'enfants et du cumul des points} NBENFANT NBENFANT + 1 TOTPOINT TOTPOINT + ENFANT_POINT Fin Fonction LES_CATEGORIES rsultat (entier) variables locales CATEGORIE POINT_CATEG compte_POINT Type (entier) (entier) (entier) Dfinition Indice ditration comptant les catgories Total des points obtenus par un enfant dans une catgorie calcul par la fonction LES_EPREUVES Variable du cumul des points d'un enfant pour l'ensemble des catgories

Dbut {initialisation du total des points obtenus par l'enfant} Pour CATEGORIE de 1 NBCATEG faire POINT_CATEG LES_EPREUVES Ecrire(POINT_CATEG) {rsultat demand : le total des points de la catgorie} {on calcule le nombre de point total de l'enfant} POINT_CATEG Fin pour CATEGORIE LES_CATEGORIES Fin Fonction LES_EPREUVES rsultat (entier) Variables locales EPREUVE REUSSI compte_CATEG Type (entier) (Caractre) (entier) Dfinition Indice ditration comptant les preuves A O indique que l'enfant a russi l'preuve Variable de cumul des points d'un enfant pour une catgorie d'preuves

{retour du rsultat de la fonction}

Dbut {initialisation du total des points de la catgorie} Pour EPREUVE de 1 NBEPREUV faire Lire (REUSSI) Si majuscule(REUSSI) = O {si l'enfant a russi l'preuve} Alors compte_CAT POINT (EPREUVE) Fin si

32

Fin pour EPREUVE LES_EPREUVES Fin

{retour du rsultat de la fonction}

Fonction POINT (donne CODE (entier)) rsultat (entier) Dbut en fonction de CODE valant 1: PA {5 points} 2: PB {10 points} 3: PC {20 points} fin en fonction de Fin Dbut {algorithme principal}

Lire(REP) Tant que majuscule(REP) = O faire {dlocalisation du traitement d'un enfant dans la procdure UN_ENFANT} UN_ENFANT(NBENFANT, TOTPOINT, MAX_POINT) Lire (REP) Fin de tant que Si NBENFANT > 0 Alors TOTPOINT / NBENFANT {rsultats demands : le nombre de points obtenus par le vainqueur et la moyenne gnrale} Ecrire (MAX_POINT, MOYPOINT) Sinon crire(aucun enfant n'a particip) Fin si Fin {algorithme principal}

Source : http://www.labo-info.co.cc http://www.algofree.co.cc

33

Vous aimerez peut-être aussi