Fonctions Et Procedure PDF
Fonctions Et Procedure PDF
Fonctions Et Procedure PDF
Laporte
Chap 5
EN-TETE
CORPS
Cette procdure permet d'afficher une ligne de 10 toiles puis passe la ligne.
1
S. Laporte
Chap 5
S. Laporte
Chap 5
Dans notre exemple, on ne pourrait pas saisir ou afficher cpt dans le programme principal, car cpt est une
variable de la procdure, utilisable seulement dans celle-ci. Le programme principal n'a pas le droit de
l'utiliser.
Une question qui se pose alors est de savoir comment procdures et programmes vont pouvoir
communiquer des donnes. Par exemple, on pourrait vouloir que le programme principal communique le
procdure combien d'toiles afficher par ligne. Cela est possible grce aux paramtres.
Un paramtre est une variable particulire qui sert la communication entre programme appelant et
sous-programme.
Exemple :
Dans notre exemple, nous allons mettre le nombre d'toiles par lignes en paramtre.
Pour cela, nous indiquons entre parenthses la dclaration du paramtre (qui est une variable de la
procdure !), prcd du mot cl donne pour indiquer que le paramtre constitue une donne du traitement
ralis par la procdure. La valeur de cette donne est communique l'appel, par le programme appelant.
Procdure ligneEtoile(donne nombre : entier )
//sous-programme
Var
paramtre formel
cpt : entier
Dbut
Pour cpt de 1 jusqu' nombre Faire
Afficher '*'
FinPour
Afficher '\n'
FinProc
Programme RectangleEtoile
//programme appelant
Var
nlignes, netoiles: entier //nombre de lignes et nombre d'toiles par ligne
i : entier
Dbut
Afficher "Ce programme dessine un rectangle d'toiles."
Afficher "Combien voulez-vous d'toiles par ligne?"
Saisir netoiles
Afficher "Combien voulez-vous de lignes?"
Saisir nlignes
Pour i de 1 jusqu' nlignes Faire
ligneEtoile(netoiles)
FinPour
paramtre effectif
Fin
S. Laporte
Chap 5
Programme RectangleEtoile
copie
Procdure ligneEtoile
paramtre
donne
netoiles
nombre
nlignes
cpt
LES FONCTIONS
Les fonctions sont des sous-programmes qui retournent un et un seul rsultat au programme appelant. De ce
fait, les fonctions sont appeles pour rcuprer une valeur, alors que les procdures ne renvoient aucune
valeur au programme appelant.
L'appel des fonctions est diffrent de l'appel des procdures :
L'appel d'une fonction doit obligatoirement se trouver l'intrieur d'une instruction (affichage,
affectation,) qui utilise sa valeur.
Le rsultat d'une fonction doit obligatoirement tre retourn au programme appelant par l'instruction
Retourne.
Syntaxe gnrale
Fonction nom(dclaration des paramtres) : type de la valeur retourne
Var
//variables locales
! instruction obligatoire
Dbut
//traitement
Retourne valeur retourner
FinFonction
S. Laporte
Chap 5
Exemple :
dclaration du paramtre formel
Fonction factorielle(n: entier) : entier
type de la valeur retourne
/*Cette fonction retourne la factorielle
du nombre n pass en paramtre*/
Var
commentaires de spcifications
i : entier
fact : entier
Dbut
fact % 1
Si n 0 Alors
Pour i de 1jusqu' n faire
fact % fact * n
FinPour
FinSi
Retourne fact
instruction de retour
FinFonction
DEFINITION
de la fonction
factorielle
S. Laporte
Chap 5
Programme appelant
Procdure
l'appel
la fin de la procdure
donne
rsultat
l'appel
donne-rsultat
la fin de la procdure
copie de valeur
Nous avons dj tudi le fonctionnement des paramtres donnes dans la premire partie de ce cours; nous
allons voir ci-dessous le fonctionnement des deux autres.
S. Laporte
Chap 5
Voil une autre procdure qui trouve le minimum et le maximum dans un tableau de 30 rels. Le tableau est
une donne, le minimum et le maximum sont des rsultats.
Programme notes
Var
tabnotes: tableau [1..30] de rels
notemin, notemax: rels
Dbut
Afficher "Veuillez saisir les 30 notes"
Saisietab(tabnotes)
minmax(tabnotes, notemin, notemax)
Afficher " La note la plus haute est ", notemax, "et la note la plus basse est ", notemin
Fin
Programme notes
appel
notemin
au retour d'appel
Procdure Saisietab
notemax
i
S. Laporte
Chap 5
Programme notes
l'appel
Procdure minmax
notemin
au retour d'appel
mini
maxi
notemax
i
" Remarques :
#$ On peut passer tout un tableau en paramtre. C'est une exception la rgle de manipulation des
tableaux : normalement, on ne peut pas les manipuler globalement, mais par exception, on peut les
utiliser globalement lorsqu'on les passe en paramtre.
#$ Les deux procdures utilisent toutes les deux une variable appele i. Mais i correspond deux
variables diffrentes. Le i de la premire procdure ne correspond pas la mme variable que le i
de la deuxime procdure : chaque sous-programme a son espace mmoire propre.
Paramtres donne-rsultat
Les paramtres donnes-rsultats correspondent des donnes qui doivent tre modifies par une
procdure.
A l'appel, la valeur du paramtre effectif est copi dans le paramtre formel de la procdure. La procdure
se sert de cette valeur pour la modifier. A la fin de la procdure, la nouvelle valeur du paramtre formel est
recopie dans le paramtre effectif du programme appelant.
Exemple :
Voil une procdure qui prend pour paramtre un tableau de 10 entiers non tri et qui le renvoie tri en
ordre croissant. Le tableau est la fois une donne et un rsultat de la procdure.
S. Laporte
Chap 5
i%i+1
FinTantque
fin % fin 1
Jusqu' non change
/* la sortie de la boucle, il n'y a plus d'changes possibles donc le tableau est tri */
FinProc
Programme tri
Var
montablo: tableau[1..10] d'entiers
i :entier
Dbut
Afficher "Tapez 10 valeurs entires"
Pour i de 1 jusqu' 10 Faire
Saisir montab[i]
FinPour
Appel de la procdure
Le paramtre est un tableau
! Attention : on ne met pas les crochets l'appel!
tabtri(montab) $
Afficher "Voil les valeurs tries dans l'ordre"
Pour i de 1 jusqu' 10 Faire
Afficher montab[i]
FinPour
Fin
Rsum des diffrents statuts pour les paramtres
paramtre donne (appelant & sous-programme)
la valeur du paramtre effectif est utilise dans la procdure et elle reste inchange.
paramtre rsultat (sous-programme& appelant)
la valeur initiale du paramtre effectif est ignore par la procdure. La valeur final du paramtre formel
rsultat est copie dans le paramtre effectif correspondant (qui doit obligatoirement tre une variable de
mme type)
paramtre donne-rsultat ( appelant %& sous-programme)
La valeur initiale paramtre effectif est utilise par la procdure qui modifie cette valeur. Au retour d'appel,
la nouvelle valeur est recopie dans le paramtre effectif correspondant (qui est obligatoirement une
variable)
S. Laporte
Chap 5
10