PROCEDURES ET FONCTIONS PROCEDURES ET FONCTIONS 2 Présentation Il arrive fréque
PROCEDURES ET FONCTIONS PROCEDURES ET FONCTIONS 2 Présentation Il arrive fréquemment d'avoir à utiliser des calculs ou des traitements plusieurs fois dans un programme à des endroits différents, ou avec des informations variables. A chaque fois on est alors obligé de répéter la séquence d'instructions qui se rapportent à ces calculs ou traitements, en ne faisant varier que le paramétrage des informations à traiter. De la même façon si une application vient à être développée au sein d’un projet par une équipe d’analyste/programmeur, il faut que chacun puisse travailler sur la partie qui lui a été assigné, avec la possibilité de pouvoir vérifier la progression de son développement. L'application finale sera la réunion de chaque partie dont le développement aura été indépendant. Ceci peut aussi être le cas de traitements identiques dans plusieurs applications. Pour permettre de résoudre ce type de problème, on doit adopter un mode de programmation modulaire, en fonction du langage ceci va se traduire à la fois par une programmation structurée (Pas de GOTO) mais aussi par un découpage adapté, résultat d’un travail d’analyse du problème à concevoir. L’ensemble va se traduire techniquement par : voyons quelques exemples : des fonctions et procédures en PASCAL des fonctions en C des paragraphes en COBOL (récemment fonctions norme ANS2002) des sous programmes, fonctions et procédures en BASIC ... Les concepts de ce type de programmation repose sur les théories du GENIE LOGICIEL, qui définit le niveau d'attention d'un individu à 7 objets (à plus ou moins 2); ce qui sous-entend que l'on devrait développer des procédures et des fonctions ne comprenant que 7 lignes de code (assez loin des réalités de la programmation actuelle). Illustrations Les modules Soit l’exercice permettant de traiter successivement les trois points suivants : 1. On veut afficher l’alphabet de façon croissante. 2. On veut afficher l’alphabet de façon décroissante. 3. On veut afficher la table des codes ASCII (n°, caractère) pour les codes de 32 à 255. On note bien trois traitements indépendants les uns des autres. On peut donc envisager de les traiter de façon individuelle (par exemple en confiant chaque module à une personne différente). On va obtenir un algorithme principal qui va être le suivant (en adoptant une démarche décomposition fonctionnelle) : Début ALPHABET_CROISANT ALPHABET_DECROISSANT CODE_ASCII Fin 3 Avec l’algorithme des modules suivants (décomposition fonctionnelle) : Procédure ALPHABET_CROISANT Variable locale i (caractère) Début Pour i de ‘a’ à ‘z’ faire Écrire (i) Fin pour i Fin Procédure ALPHABET_DECROISANT Variable locale i (caractère) Début Pour i de ‘z’ à ‘a’ (décroissant) faire Écrire (i) fin pour i Fin Procédure CODE_ASCII Variable locale i (entier) Fonction ASCII (donnée ENT (entier)) résultat (caractère) // Fonction intrinsèque qui retourne le caractère ASCII correspondant à ENT Début Pour i de 32 à 255 faire Écrire (i, ASCII (i)) Fin pour Fin Observation : On a la possibilité de recomposer un algorithme global en intégrant le code de chacun des modules au niveau de l'appel de celui-ci. 4 Visualisation de l'annexe correspondante. Les Modules sont des parties (logiques) d’un programme qui sont résolues de façon indépendantes. Un Module se traduit algorithmiquement par une procédure sans paramètre. On note qu’un module est comparable à un programme c’est à dire qu’il comprend sa partie de code (les instructions à exécuter) et son environnement (les données qui seront manipulées par le code du module dans la zone décrite par la clause variable locale qui peut être abrégée en VL). Les fonctions Soit les deux exercices indépendants suivants : On veut calculer la moyenne coefficientée de trois notes pour un groupe de BTS Informatique dont les coefficients sont 1,1,2, et pour un groupe d’auditeurs CNAM dont les coefficients sont 1,2,3... On note que le problème du calcul coefficienté est le même pour tous les exercices, et que seuls les coefficients changent, donc il apparaît plus simple de regrouper (factoriser) les éléments de ce calcul de moyenne. Pour calculer une moyenne coefficientée (le résultat), on a besoin de connaître les notes associées à leurs coefficients respectifs (données). Les données sont : N1,N2,N3 (réel) les trois notes C1,C2,C3 (réel) les trois coefficients Le résultat est : MOYENNE (réel) la moyenne coefficientée Le traitement est : MOYENNE (N1*C1+N2*C2+N3*C3)/ (C1+C2+C3) Regroupons cette réflexion au sein d’une structure algorithmique : fonction MOYENNE(données N1,N2,N3(réel), C1,C2,C3(réel)) résultat(réel) début MOYENNE (N1*C1+N2*C2+N3*C3)/(C1+C2+C3) fin On peut maintenant écrire l’algorithme qui va traiter la moyenne du groupe des BTS informatiques Lexique variables : 5 i (entier) indice d’itération NBETUDIANT (entier) nombre d’étudiant du groupe NOM,PRENOM (chaîne) nom et prénom d’un étudiant NOT1,NOT2 (réel) moyenne du premier et second semestre EXAM (réel)note à l’examen final MOY (réel) moyenne coefficientée de l’étudiant Début 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 coefficient du partiel COEF2=2 coefficient du TP COEF3=3 coefficient de l’examen Variables NOM, PRENOM (chaîne) nom et prénom de l’auditeur PARTIEL (entier) note du partiel TP (entier) note du TP EXAM (réel) note à l’examen final MOYEN (réel) moyenne coefficientée de l’auditeur Début Lire (NOM) Tant que NOM ‘’ faire Lire (PRENOM, PARTIEL, TP, EXAM) MOYEN MOYENNE(PARTIEL, TP, EXAM, COEF1, COEF2, COEF3) Écrire (MOYEN) Lire (NOM) 6 Fin tant que Fin On note que l’approche de la résolution du problème est différente dans les deux cas, mais que rien n’empêche l’utilisation de la même fonction puisse que le traitement des moyennes est similaire à la différence des noms d’identificateurs. Les fonctions sont des parties (logiques) d’un programme qui sont traitées de façon indépendantes. Une fonction peut avoir de 0 à N données (en entrée) et elle retourne un seul résultat (en sortie). Les procédures Illustration 1 Soit l'exercice suivant : On veut afficher la table de multiplication du nombre entier N pour des multiplicateurs de 1 à 10 Les données sont : N (entier) le nombre à multiplier Le résultat 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 1 x 7 = 7 2 x 7 = 14 : 10 x 7 = 70 Regroupons cette réflexion au sein d’une structure algorithmique : Procédure TABLE_MULTIPLICATION (données N (entier)) variable locale i (entier) Début pour i de 1 à 10 faire écrire(i,’ x ‘, N,’ = ‘, i*N) fin pour i Fin Cette procédure possède une donnée (en entrée) et ne fournit aucun résultat, mais une action d'affichage On peut écrire l'algorithme d'affichage de la table de multiplication intégrant cette procédure 7 Lexique variables : N (entier) le multiplicateur Début lire (N) TABLE_MULTIPLICATION (N) Fin Illustration 2 Soit l'exercice suivant : On veut retourner les valeurs du carré, et de la racine carrée de la constante trigonométrique ¶ (Pi). Les données sont : aucune donnée (¶ est une constante) Les résultats sont : CARRE (réel) le carré de ¶ RACINE (réel) la racine carrée le ¶ Le traitement est : CARRE = ¶² RACINE =√¶ Regroupons cette réflexion au sein d’une structure algorithmique : Procédure CARRE_RACINE_PI (résultats C, R (réel)) {Liste de fonctions intrinsèques ou prédéfinies} Fonction carré (donnée X (réel)) résultat (réel) Retourne le carré de X. Fonction racine_carrée (donnée X (réel)) résultat (réel) Retourne la racine carrée de X. Fonction PI résultat (réel) Retourne la valeur constante de PI (¶) Début C carré(PI) R racine_carrée(PI) Fin cette procédure ne possède aucune donnée et retourne deux résultats ( en sortie) 8 On peut écrire l'algorithme utilisant la procédure de calcul Lexique variables : CARRE (réel) le carré de PI RACINE (réel) la racine carrée de PI Début CARRE_RACINE_PI (CARRE,RACINE) Ecrire(‘PI a pour carré ‘,CARRE,’ et pour racine carrée ‘, RACINE) Fin illustration 3. soit l'exercice suivant : On veut retourner le résultat de la division d'un nombre à un autre ; dans le cas d'une division par 0 on retournera un code d'erreur. Les données sont : N (réel) le numérateur D (réel) le diviseur Les résultats sont : R (réel) le résultat de la division ERREUR (booléen) le résultat est-il correct ou non Le traitement est : Si D = 0 il y a erreur (ERREUR vrai) Si D 0 il n'y a pas erreur (ERREUR faux) R = N / C Regroupons cette réflexion au sein d’une structure algorithmique : procédure DIVISION(données N,D(réel) résultats R(réel),ERREUR(booléen)) début si D = 0 alors ERREUR vrai R -999999,99999 {contrôle de retour de tous les résultats} sinon ERREUR faux R N / D fin si Fin cette procédure possède deux données ( en entrée) et retourne deux résultats ( en sortie) On peut écrire l'algorithme utilisant la procédure de calcul Lexique variables : NOMBR1 (réel) le nombre à diviser NOMBR2 (réel) le diviseur RES (réel) le résultat de la division ERREUR (booléen) gestion de l'erreur de division par 0 Début Lire(NOMBR1,NOMBR2) 9 DIVISION (NOMBR1,NOMBR2,RES,ERREUR) Si ERREUR Alors écrire(‘division par zéro’) Sinon écrire(RES) Fin uploads/S4/algorithme-fonctions-et-procedures.pdf
Documents similaires










-
38
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jul 28, 2022
- Catégorie Law / Droit
- Langue French
- Taille du fichier 0.8152MB