• Aucun résultat trouvé

Les sous programmes

N/A
N/A
Protected

Academic year: 2022

Partager "Les sous programmes"

Copied!
9
0
0

Texte intégral

(1)

Les sous programmes

1. Généralités.

2. Avantages des sous programmes.

3. Structure d'un programme . 4. Procédure et fonction .

5. Déclaration de procédure simple.

6.Procédure simple avec des variables locales.

7.Procédure paramétrée.

8. Communication entre procédures.

9. Mode de passage de Paramètres.

10. Les fonctions.

****************************************************

1°) GENERALITES.

Lors de la conception d’un programme résolvant un problème général, il est nécessaire de décomposer le problème en différent sous-problèmes moins complexe à résoudre : Démarche ascendante.

Ces différents sous-problèmes peuvent être résolus grâce à des sous-programmes particuliers : Procédures et fonctions.

Exemple : Écrire un programme qui affiche en ordre croissant les notes d'une promotion suivies de la note la plus faible, de la note la plus élevée et de la moyenne

Revient à résoudre les problèmes suivants :

- Remplir un tableau de réels avec des notes saisies par l'utilisateur - Trouver le plus petit réel d'un tableau

- Trouver le plus grand réel d'un tableau - Calculer la moyenne d'un tableau de réels.

Donc écrire un programme qui résout un problème revient toujours à écrire des sous-programmes qui résolvent des sous parties du problème initial

Un sous-programme est obligatoirement caractérisé par un nom (un identifiant) unique

Lorsqu'un sous programme a été explicité (on a donné l'algorithme), son nom devient une nouvelle instruction, qui peut être utilisé dans d'autres (sous-)programmes

Le (sous-)programme qui utilise un sous-programme est appelé (sous-)programme appelant.

2°) Avantages des sous programmes.

(2)

Les sous programmes permettent de ne pas répéter plusieurs fois une même séquence d’instructions au sein du programme.

La mise au point du programme est plus rapide en utilisant des sous programmes. En effet, elle peut être réalisée en dehors du contexte du programme.

Un sous programmes peut être intégré à un autre programme, ou elle pourra être rangée dans une bibliothèque d’outils ou il pourra être utilisé par n’importe quel programme.

Exemple de problème

Écrire un algorithme qui calcule et affiche la moyenne des valeurs absolues de trois nombres A,B,C, sachant qu'on n'a pas la fonction ABS.

Algorithme MoyValAbsolu ; Déclaration

A,B,C,A1,B1,C1 : entier ; moy : réel ;

Début

· valeur absolue a été effectué 3 fois de la même

· manière pour A, pour B et pour C.

· il serait préférable de prévoir un module ou sous

· programme consacré au calcul ou traitement de la

· valeur absolue isolée.

· Aussi on peut écrire un sous programme pour le Fin

Dans cet algorithme le calcul de la valeur absolue a été effectué 3 fois de la même manière è Il est préférable d’écrire un sous programme consacré au calcul de la valeur absolue.

è On peut aussi écrire un sous programme pour le calcul de la moyenne de 3 nombres.

Algorithme MoyValAbsoluVers2 déclaration

A,B,C:entier ; M : réel

fonction Absolu(X :entier) :entier Début

Si X < 0 alors Absolu← -X Sinon Absolu ← X Fin si Fin

fonction Moyenne(X :entier ; Y :entier ; Z :entier):réel ; Début

Moyenne ← (X+Y+Z)/3 Fin

Début Lire(A,B,C)

M ← Moyenne(Absolu(A),Absolu(B),Absolu(C)) Écrire(M)

Fin .

3°)Structure d'un programme :

Un programme doit suivre la structure suivante : Programme nom du programme

Définition des constantes Définition des types

Déclaration des variables globales Définition des sous-programmes début

instructions du programme principal

(3)

fin

4°) Procédure et fonction :

On perçoit un programme comme un programme principal et un ensemble de procédure/fonctions. Ce découpage est à la base de la programmation structurée.

Procédures : Une procédure est un sous-programme exécutant une suite d'actions. Elle ne retourne aucun résultat, elle peut être perçue comme une boîte noire exécutant une tâche donnée.

Deux types de procédures : - La procédure simple - La procédure paramétrée

Fonctions : Une fonction est un sous-programe qui retourne obligatoirement une valeur.

4 .1 Exemples de procédures et fonctions standards : Procédures standard : readln ;

Fonctions standard : ord( i) ;

4.2 Sous programmes défini par l’utilisateur : 4.2.1 Déclaration de procédure simple :

Ce type de sous-programme exécute une tâche précise. Cette tâche est indépendante des autres sous programmes et donc ne permet pas de partager des informations.

Exemple :

Procédure afficher ( );

Début

Ecrire(‘ mot de passe incorrect, veuillez entrer un nouveau mot de passe’) ; Fin

Définition d'une procédure simple : procédure nom_procédure ( ) ; Déclaration

//variables locales Début

// Actions Fin

Les variables locales sont utilisées uniquement dans la procédure.

La procédure simple ne doit utiliser que les variables locales.

Appel d'une procédure simple

Pour exécuter le contenu d'une procédure simple, on écrit le nom de la procédure comme si elle était une action connue.

Une procédure peut-être appelée à partir d'un programme ou d'un autre sous- programme.

Exemple

Algorithme mot-passe ; Déclaration

mot : entier ;

Procédure afficher ( );

Début

Ecrire(‘ mot de passe incorrect’) ; Fin

début lire ( mot) ;

tant que mot < > ‘27122008’ faire afficher ( ) ;

lire (mot) ; FinTQ Fin

Principe de fonctionnement :

Prg appelant prg appelé

(4)

Afficher( ) Début -- -- -- Fin.

(mot-passe ) --

--

Afficher( ) ; --

--

4.2.2 Procédure simple avec des variables locales : Exemple :

Écrire une procédure qui "saute trois lignes" sur l'écran

Version 1

Procedure Saute3Lignes;

Begin WriteLn;

WriteLn;

WriteLn End;

Pas d’évolutivité Sans paramètres

Version 2

Procedure Saute3Lignes;

Var i : Integer;

Begin

For i:= 1 To 3 Do Begin

WriteLn End End

;

Plus évolutif car Mieux "Paramétré"

Version 2bis

Procedure Saute3Lignes;

Const N = 3;

Var i : Integer;

Begin

For i:= 1 To N Do WriteLn End;

4.2.3 Procédure paramétrée :

Déclaration de la procédure paramétrée

ProcédureNomProcédure (Paramètres Formels avec leur Types) déclaration

Déclaration des variables locales Débuts

[…]

Instructions

(5)

[…]

Fin

Outils locaux et globaux Définitions :

- La portée d’une variable est l’ensemble des sous-programmes où cette variable est connue (les instructions de ces sous-programmes peuvent utiliser cette variable)

- Une variable définie au niveau du programme principal (celui qui résouds le problème initial, le problème de plus haut niveau) est appelée variable globale

Sa portée est totale : tout sous-programme du programme principal peut utiliser cette variable - Une variable définie au sein d’un sous programme est appelée variable locale

La portée d’une variable locale est uniquement le sous-programme qui la déclare

Lorsque le nom d’une variable locale est identique à une variable globale, la variable globale est localement masquée Dans ce sous-programme la variable globale devient inaccessible

Les déclarations locales. Peuvent être : è des déclarations de constantes (blocs const) è de variables (blocs var)

è ou d'autres procédures.

CONSEIL :

Il faut éviter au maximum les variables globales (sauf les constantes) : trop d’espace mémoire

Exemple :

X de A Y de A Y de B X d'Essai Y d'essai

I : erreur , inaccessible

Les paramètres formels/effectifs :

•les paramètres formels sont des identificateurs de variables fictives utilisées pour introduire des données dans la procédure ou sortir des résultats dans la procédure

•Un paramètre effectif est une variable ou constante (numérique ou définie par le programmeur) Le paramètre formel et le paramètre effectif sont associés lors de l’appel du sous-programme Le paramètre formel et effectif doivent donc être de même type.

4.2.4 Communication entre procédures :

On entend par communication, l’échange d’informations, la communication entre procédure se fait au moyen de variables globales ou locales :

a) Communications par variables globales : Exemple :

Program afficher ; Var

(6)

N : integer ;

Procedure SauteLignes ( );

Var i : Integer;

Begin

For i:= 1 To n Do Begin

WriteLn;

End End;

Begin

Writeln(‘ entrez le nombre de lignes à sauter’) ; Readln( n) ;

Sautlignes() ; Fin.

C’est une communication implicite et bilatérale car les variables globales peuvent être modifiées par la procédure et le programme principal, c’est la seule alternative pour les procédures sans paramètres.

b) Communications par paramètres :

Le besoin de paramétrer une procédure se fait senti quand cette même procédure peut être exécutée avec valeurs différentes :

Notation : procedure nom-proc ( paramètres formels : type ) ; Exemple : Procedure SauteLignes ( x : integer );

Les paramètres formels : la déclaration des paramètres formels à l’entête de procédure décrit les données attendus par la procédure pour s’exécuter, ce sont des variables locales à la procédures.

Les paramètres effectifs : ce sont les données communiquées à la procédure au moment de son appel, les paramètres effectifs sont substitués par les paramètres formels ; et doivent correspondre en nombre , en type et en ordre aux paramètres formels.

Exemple :

Procedure ligne ( c ;char , i : integer) ; Var j: integer;

Begin

For j := 1 to I do Write ( c);

End;

Ligne ( * , 2 ) affichera : **.

Ligne ( Z, X) ou x = 5 affichera : ZZZZZ .

A l’appel d’une procédure les actions suivantes sont réalisées :

- faire correspondre à chaque paramètre formel son paramètre effectif.

- Exécuter les actions de la procédure appelée.

- Revenir à la procédure appelante et reprendre l’exécution des instructions restantes.

4.2.5 Mode de passage de Paramètres En Pascal, il y en 2 :

- passage par valeur

- passage par référence ou adresse.

a) Passage par valeur :

-Les instructions du sous-programme ne peuvent pas modifier le paramètre effectif En fait c’est la valeur du paramètre effectif qui est copiée dans le paramètre formel -C’est le seul passage de paramètre qui admet l’utilisation d’une constante

-Ce type de transmission ne permet pas de transmettre des résultats à un autre module

(procédure ou fonction) ou au programme principal par l’intermédiaire du paramètre effectif, étant donné que le contenu de celui-ci n’est pas modifié au retour de la procédure.

(7)

-La déclaration d’un paramètre par valeur s’effectue selon le format suivant : PROCEDURE NomProcedure(parametre : TypeParametre);

Exemple : Notons que, dans la procédure SautLigne de l’exemple précédent le paramètre nblignes est déclaré par valeur.

b)Passage par variable ou par adresse : Lors de l’appel :

- Le paramètre effectif doit être une variable de type compatible.

- Son adresse sera envoyée à la procédure

- La procédure travaillera donc directement sur sa valeur.

- Donc toute modification sera définitive - La procédure peut le consulter et le modifier

La déclaration d’un paramètre par variable s’effectue selon le format suivant : PROCEDURE NomProcedure(VAR parametre : TypeParametre);

On notera le recours au mot clé VAR pour introduire le ou les paramètres que l’on veut transmettre par variable.

Exemple :

PROGRAM Progperm;

VAR

val1, val2 : REAL;

PROCEDURE Permuter(X, Y : REAL); {En-tete de la procedure}

VAR

tampon : REAL;

BEGIN {Debut de la procedure}

tampon := X;

X := Y;

Y := tampon;

END; {Fin de la procedure}

BEGIN {Debut du programme principal}

Val1 := 100 ; val2 := 400 ;

Permuter(val1, val2); résultat : X= 100 , Y= 400 WRITELN('X = ', val1 : 4, 'Y = ', val2 : 4);

END. {Fin du programme principal}

Les paramètres X et Y doivent être transmis par variable, ce qui aura pour effet de rendre disponibles, à la sortie de la procédure, les nouvelles valeurs effectives de ces paramètres.

PROGRAM Progpermut;

VAR val1, val2 : REAL;

PROCEDURE Permuter(VAR X, Y : REAL); {En-tete de la procedure}

VAR

tampon : REAL;

BEGIN {Debut de la procedure}

tampon := X;

X := Y; a résultat : X= 400 , Y= 100 Y := tampon;

END; {Fin de la procedure}

BEGIN {Debut du programme principal}

val1 := 100 ; val2 := 400;

Permuter(val1, val2);

WRITELN('VAL1 = ', val1 : 4, 'VAL2 = ', val2 : 4);

END. {Fin du programme principal}

Mentionnons enfin qu’une procédure peut elle-même appeler d’autres procédures : c’est ce qu’on appelle l’imbrication de procédures.

(8)

Program essai ;

Procedure Incrementer (X : integer ; Var Y : integer) ;

Var K : integer ;

{1}

Begin

K := 2 ; X := X + K ; Y := Y + K ;

writeln ('X=',X,' & Y=',Y, '&K=', K); {2}

End ;

Var A, B, K : integer ;

Begin A := 3 ; B := 2 ; K := 3 ; Incrementer (A, B) ;

writeln ('A=',A,' & B=',B, ' & K=', K) End.

4.2.3. Les fonctions :

- Une fonction est un sous-programe qui retourne obligatoirement une valeur.

- Lors d'un appel, une fonction est considérée comme une expression du type de la valeur retournée (exemple : si la fonction retourne un entier, on considère la fonction comme une expression entière).

a)Généralités

On distingue deux catégories de fonctions : les fonctions standards et les fonctions non standards.

- Par fonction standard, on entend toute fonction connue du langage. C’est le cas, entre autres, des fonctions ABS, TRUNC, ROUND, SQR, SQRT, PRED, SUCC que nous avons déjà vues.

- Par fonction non standard, on entend toute fonction non connue du langage et qui, par conséquent, nécessite une définition préalable à son utilisation.

b)Les fonctions paramétrées

Une fonction avec paramètres a pour format :

fonction nom de la fonction (paramètre(s) de la fonction) : type de la valeur retournée Déclaration variable locale 1 : type 1; . . .

début

instructions de la fonction fin

fonction abs (unEntier : Entier) : Entier début

si unEntier >0 alors abs← unEntier sinon

abs← -unEntier finsi

fin

En pascal : FUNCTION NomFonction(ListeDeParametres) : TypeFonction;

où ListeDeParametres désigne la liste (non vide) déclarée des paramètres formels de la fonction, et TypeFonction le type de la fonction, c’est-à-dire celui du résultat calculé ou généré par cette fonction.

Exemple :

Program addition ; Var X, Y,Moy :real ;

FUNCTION Somme(nombre1, nombre2 : REAL); Real; {En-tete de la fonction}

BEGIN {Debut de la fonction}

Somme := nombre1 + nombre2;

END;{Fin de la fonction}

Begin

Readln ( X ,Y ) ;

(9)

Moy := somme ( X, Y) / 2 ; Writeln( ‘ la moyenne : ‘ ,moy) ; End.

- le passage de paramètre est uniquement par valeur

Références

Documents relatifs

Montrer que F est de classe C ∞ sur R et vérie une équation diérentielle linéaire du second ordre..

Dans ce cas on « transforme » une des deux variables à l’aide d’une fonction pour obtenir un nouveau nuage qui aura la forme d’une droite. Exemple 12.5 (D’après

Écrivez une fonction sociabilite(texte) renvoyant un dictionnaire dont les clés sont les lettres du texte et dont les valeurs sont leur degré de sociabilité, c’est-à-dire le nombre

A l'aide d'un test que l'on précisera, au seuil de risque de 5%, déterminer la valeur minimale de n qui permet au chercheur de conclure que les résultats avec le nouveau traitement

3- A l’aide de vos connaissances et des documents, développer un argumentaire pour convaincre l’agriculteur producteur de pommes de terre de fertiliser différemment

Montrer que f est solution d'une équation diérentielle linéaire sur D

Université Paris-Dauphine Licence de Mathématiques Appliqués. Intégrale de Lebesgue et Probabilités

D’une part, nous construisons un mod`ele semi-param´etrique g´en´erique pour d´ecrire la statistique du logarithme des coefficients dominants de processus multifractals, construits