Vous êtes sur la page 1sur 8

ChapitreV

4me Tech

Les Sous Programmes


Objectifs : Dcomposer un problme en modules, Prsenter les solutions sous formes de procdures et de fonctions, Ecrire des algorithmes et des programmes solutions.

I.

Introduction:

Activit1 :
Ecrire une analyse dun programme qui calcule puis affiche le factoriel dun entier N donn. N != 1*2*3*4*5**N ; on donne 0 !=1 Analyse : Nom= factorielle S L.D.E 3 Rsultat= Ecrire("La factorielle de ",n," est ",f) 2 (f)=[ f1]Pour i de 1 n faire ff*i fin pour 1 Rpter n=donne("saisir un entier :") jusqu (n>0) i=compteur 4 fin factorielle

O.U f n i

Affichage du rsultat Calcul de la factorielle Saisie dun entier N Lorsqu'un problme devient de plus en plus complexe ou/et de grande taille, on doit le dcomposer en sous problmes indpendants et de tailles rduites qu'on appelle sous-programme (module).Il existe deux types de sous programmes : Les fonctions Les procdures Pour rsoudre un problme en utilisant la notion de modules, il faut suivre les tapes suivantes : Analyse du programme principal puis son algorithme Analyse/ algorithme de chaque module part Traduction pascal complte Chaque partie sappelle un module

II.

Les fonctions:

Activit1 : Citer quelques fonctions standard en voquant les paramtres ncessaires. Rponse : ORD(c) c= "A" ORD("A") vaut 64 c= "c" ORD("c") vaut 99 Une fonction Un seul rsultat Une seule valeur 1. Dfinition : Une fonction est un sous programme qui renvoie une seule valeur reprsentant le rsultat de la fonction. Une fonction doit avoir un type et a devra tre celui du rsultat.
1

ChapitreV

4me Tech

2.Appel dune fonction : On appelle une fonction tout simplement par son nom, suivi de la liste des paramtres effectifs (Pe). Un appel de fonction figure dans un contexte d'affichage ou dans une expression sous la forme suivante : Valeur nom_de_la_fonction ( Pe1 , Pe2 , ... , Pen ) 3.Syntaxe : Il est obligatoire de prciser, ds le dbut, le type de la fonction qui est en mme temps le type du rsultat retourn par l'excution des instructions de la fonction.
Syntaxe en analyse DEF FN nom_de_la_fonction(Pf1 :type ;.. ;Pfn :type) :type du rsultat de la fonction L.D.E Rsultat= nom-fonction Rsultat . . Fin nom_fonction Syntaxe en algorithmique

S n-1

O.U

0) DEF FN nom_fonction(Pf1 :type ;.. ;Pfn :type) : type du rsultat de la fonction


1) .. 2) .. . . n-1) nom-fonction Rsultat n) Fin nom_fonction Syntaxe en Pascal Function nom_fonction(Pf1 :type ;.. ;Pfn :type) : type du rsultat de la fonction ; .. ; .. ; . . nom-fonction := Rsultat ; end ;

Activit2 : Reprenons lactivit de la factorielle et traitant l en utilisant lanalys modulaire Analyse Programme Principal :
Nom= factorielle S 3 2 1 4 L.D.E Rsultat= Ecrire("La factorielle de ",n," est ",f) f FN fact(n) Rpter n=donne("saisir un entier :") jusqu (n>0) fin factorielle Objets n fact f Tableau de dclaration des objets globaux Type/Nature Entier Fonction entier Rle Un entier fonction La factorielle de n O.U f n fact

Algorithme du programme principal :


0) Dbut factoriel 1) Rpter Ecrire("saisir un entier :"),lire(n)
2

ChapitreV

4me Tech

Jusqu(n>=0) 2) f FN fact(n) 3) Ecrire("La factorielle de ",n," est ",f) 4) Fin factoriel

Analyse de la fonction fact :


DEF FN fact(e :entier) :entier S 2 1 3 L.D.E Rsultat= factf1 [f11]Pour i de 1 e faire f1f1*i fin pour i=compteur fin fact Tableau de dclaration des objets locaux Objets Type/Nature i Entier f1 entier f1 i O.U

Rle compteur La factorielle de n

Algorithme de la fonction fact :


0) DEF FN fact(e :entier) :entier 1) [f11]Pour i de 1 e faire f1f1*i 2) fin pour 3) factf1 4) Fin fact

Remarques : Une fonction retourne un seul rsultat, donc on doit spcifier son type. Le type du rsultat d'une fonction ne peut tre que de type simple : entier, rel, boolen, caractre, chane de caractres. Pf1, Pf2 liste des paramtres formels. Type1, Type2 sont les types des paramtres formels. Tout nouvel objet utilis dans une fonction est appel objet local. Tout objet dclar dans le programme principal est appel objet global. Les paramtres effectifs reprsentent les valeurs communiques du programme appelant au programme appel, ils se substituent aux paramtres formels dclars dans l'entte de la fonction. Les types des paramtres effectifs et formels peuvent tre simples ou composs. Les paramtres effectifs de l'appel et les paramtres formels de l'en-tte de la dclaration de la fonction doivent s'accorder du point de vue Ordre, nombre et type. Passage des paramtres : Avant d'excuter les instructions de la fonction chaque paramtre effectif est affect au paramtre formel qui lui correspond. Pour le cas d'une fonction, l'objet d'un appel est de calculer une valeur et non pas de modifier les valeurs des paramtres effectifs. Par consquent, un seul mode de passage de paramtres est utilis: passage par valeur. Traduction Pascal :
program factorielle; uses wincrt; var n:integer; f:longint; function fact(e:integer):longint; var i:integer;

ChapitreV f1:longint; begin f1:=1; for i:=1 to e do f1:=f1*i; fact:=f1; end; begin repeat write('saisir un entier:'); readln(n); until(n>=0); f:=fact(n); writeln('la factorielle de ',n,' est ',f); end.

4me Tech

Applications : 1. Ecrire une analyse, un algorithme et sa traduction en pascal dun programme intitul som_fact qui permet de calculer et dafficher la somme des factorielles des chiffres dun nombre n avec (100<= n <=999). Exemple : Soit n= 253 Som = 2 ! + 5 ! + 3 ! 2. Ecrire une analyse, un algorithme et sa traduction en pascal dun programme qui permet de saisir les moyennes de n lves (5<n<30) dans un tableau, de trouver puis dafficher le nombre dlves qui ont russi et la plus basse moyenne.

III.

Les procdures:
Nom= ordre S
7 4

Activit : Ecrire une analyse, un algorithme et sa traduction en pascal qui permet de classer en ordre croissant trois variables donnes strictement positives V1, V2 et V3.

L.D.E
Rsultat= Rsultat = Ecrire (V1," < ",V2, " < " , V3) Si (V1 > V2) alors Int T1 V1 V2 V2 Int FinSi Si (V1 > V3) alors Int V1 V1 V3 V3 Int FinSi Si (V2 > V3) alors Int V2 V2 V3 V3 Int FinSi V1 = Rpter V1 = donne Jusqu' (V1 > 0) V2 = Rpter V2 = donne Jusqu' (V2 > 0) V3 = Rpter V3 = donne Jusqu' (V3 > 0) 4 V1 V2 V3 Int

O.U

1 2 3 8

ChapitreV Fin ordre

4me Tech

Remarques

Le mme traitement ralisant la permutation de deux nombres est utilis trois fois. On peut penser isoler ce traitement et d'en faire un module c d regrouper la squence d'instruction qui se rpte plusieurs fois dans un mme module et d'appeler ce module autant de fois que ncessaire. Rappelons qu'une fonction est un sous programme qui calcule un rsultat unique et de type simple. Le

sous programme dsir va calculer deux rsultats : Pour cela, ce sous programme ne peut plus correspondre une fonction, il sera dsign donc par une procdure. De mme pour la saisie dune donne.

1. Dfinition : Une procdure est une suite d'instructions identifie par un nom qui excute une tche dtermine et qui peut avoir plusieurs rsultats. 2. Appel dune procdure : Une instruction d'appel permet d'excuter les instructions de la
procdure. L'appel se fait par le nom de la procdure suivi par la liste des paramtres effectifs. Cet appel de procdure a la forme suivante : Nom_de_la_procdure (Pe1, Pe2,, Pen)

2. Revenons notre activit :


S 7 4 5 6 1 2 3 8

Analyse Programme Principal:


Nom= ordre L.D.E Rsultat= Ecrire (V1," < ", V2, " < ", V3) Si (V1 > V2) alors PROC Permut(V1,V2) FinSi Si (V1 > V3) alors PROC Permut (V1, V3) FinSi Si (V2 > V3)alors PROC Permut (V2, V3) FinSi V1 = PROC saisie(V1) V2 = PROC saisie(V2) V3 = PROC saisie(V3) Fin ordre 5 O.U V1 V2 V3 Permut Saisie

ChapitreV

4me Tech

Tableau de dclaration des objets globaux


Objets V1 V2 V3 PERMUT Saisie Type/Nature Rel Rel Rel Procdure Procdure Rle Premier rel Deuxime rel Troisime rel Permet de permuter deux rels donns Permet la saisie des donnes

2. Syntaxe :
S n-1 Syntaxe en analyse DEF PROC nom_de_la_procedure(Pf1 :type ;.. ;Pfn :type) L.D.E Rsultat= . . Fin nom_procedure Syntaxe en algorithmique O.U

3) DEF PROC nom_procedure(Pf1 :type ;.. ;Pfn :type)


4) .. 5) .. . n-1) n) Fin nom_procedure Syntaxe en Pascal procedure nom_procedure(Pf1 :type ;.. ;Pfn :type) ; .. ; .. ; . end ;

Remarques: Le nombre, l'ordre et les types de paramtres effectifs doivent correspondre au nombre, ordre et types de paramtres formels. Les types des paramtres effectifs et formels peuvent tre simple (scalaire) ou composs.

Activit (suite) : Algorithme du programme principal :


0) DEBUT ORDRE 1) PROC saisie(V1) 2) PROC saisie(V2) 3) PROC saisie(V3) 4) Si (V1 > V2) alors PROC Permut(V1,V2) FinSi 5) Si (V1 > V3) alors PROC Permut (V1,V3) FinSi 6) Si (V2 > V3) alors PROC Permut (V2, V3) FinSi 7) Ecrire (V1," < ", V2, " < ", V3) 8) Fin ordre

Analyse procdure saisie :


DEF PROC Saisie(var a :entier) S L.D.E
6

O.U

ChapitreV

4me Tech

1 2

Rsultat= Rpter Ecrire("saisir un entier :"),lire(a) Jusqu(a>0) fin saisie

Algorithme procdure saisie : 0) DEF PROC saisie(var a :entier) 1) Repter Ecrire("saisir un entier :"), lire(a) Jusqu (a>0) 2) Fin saisie Analyse procdure permut :
DEF PROC permut(var x,y :entier) S 1 2 3 4 Rsultat= aux x xy y aux fin permut L.D.E O.U

Algorithme procdure permut:


0) DEF PROC Permut (VAR X, Y:Entier) 1) aux x xy y aux 2) Fin PERMUT
Tableau de dclaration des objets locaux Objets aux Types/Nature entier Rle Variable auxiliaire

Traduction Pascal : Program ordre; uses wincrt; var v1,v2,v3 : integer; procedure saisie(var a:integer); begin repeat write('saisir un entier'); readln(a); until(a>0); end; procedure permut(var x,y : integer); var aux:integer; begin 4. Passage des paramtres :

aux:= x; x:= y; y:= aux; end; begin saisie(v1); saisie(v2); saisie(v3); if(v1>v2) then permut(v1,v2); if(v1>v3) then permut(v1,v3); if(v2>v3) then permut (v2,v3); writeln (v1,' < ', v2, ' < ' , v3) ; end.

Deux modes de passages sont utilises : 4-1 Passage de paramtre par valeur
7

ChapitreV

4me Tech

Au retour de sous-programme appel chaque paramtre effectif garde sa valeur initiale de l'appel. C'est le mode de communication le plus simple qui ne permet le passage de valeurs que dans un seul sens : Programme appelant Programme appel 4-2 Passage de paramtres par variable Dans ce mode de passage les paramtres formels sont prcds du mot cl VAR dans leur dclaration. Toute modification de la valeur du paramtre formel entrane automatiquement la modification du paramtre effectif qui lui correspond. Il y a communication de valeurs dans les deux sens: Programme appelant Programme appel

Application Ecrire une analyse, un algorithme et sa traduction Pascal dun programme qui permet de saisir un entier naturel non nul n (2<n<50) suivi de n rels mettre dans un tableau T. Puis les affiches en commenant par le dernier. (Dcomposer le problme en modules)

Vous aimerez peut-être aussi