Cours 5 : fonctions, procédures, passage des paramètres

Page 1 sur 8Lecteur de document UniversityLib

Cours 5 : fonctions, procédures, passage des paramètres

Computer Science / Programming · notes

Voir tous les documents en programmation

Cours 5 : fonctions, proc´edures, passage des param`etres

1

Fonctions et proc´edures

Id´ee : capitaliser sur le code d´ej`a ´ecrit pour introduire des nou-

velles ”commandes” et ”op´erations”.

On souhaite donner un nom programme que nous avons d´ej`a

´ecrit, et qui effectue une op´eration int´eressante, pour pouvoir le

r´eutiliser apr`es sans le r´e´ecrire. Si ce programme retourne un r´esultat,

on parlera de ”fonction”, et ”proc´edure” sinon.

De plus, on peut souhaiter choisir les valeurs de certaines vari-

ables de la proc´edure ou fonction, et cela se fait `a travers le mecha-

nisme de passage des param`etres.

Procedures: d´eclaration et appel

Chaque proc´edure aura:

1. Une d´efinition qui dit

(a) Le type des param`etres.

(b) comment on la calcule.

2. Un ou plusieurs appels: c’est l’utilisation de la proc´edure.

Exemples (sans param`etres)

Tous les programmes affichent un message d’aide `a l’utilisation, et

cela `a plusieurs occasions

procedure

aide ()

debut aide

ecrire "Aide du programme Machin."

ecrire " l’option -o permet de definir le fichier sortie"

ecrire " l’option -h donne ce message"

fin aide

...

programme Machin

debut Machin

...

aide()

Cours 5 : fonctions, proc´edures, passage des param`etres

2

...

si (erreur=vrai) alors aide() fin si

...

fin Machin

Exemples (avec param`etres)

Tous les programmes affichent des messages d’erreur

procedure

erreur (valeur s: cha^ıne de caract`eres)

debut erreur

ecrire "Programme Machin: on a renconter l’erreur" s

fin erreur

...

programme Machin

debut Machin

...

erreur("Entier trop grand")

Publicité

...

erreur("Pas assez de memoire")

...

fin Machin

Fonctions: d´eclaration et appel

Chaque fonction aura:

1. Une d´efinition qui dit

(a) Le type des param`etres.

(b) Le type de la valeur rendue.

(c) comment on la calcule.

2. Un ou plusieurs appels: c’est l’utilisation de la fonction.

3. Zero, un ou plusieurs param`etres: ce sont les arguments de la

fonction.

4. Un type et une valeur.

Cours 5 : fonctions, proc´edures, passage des param`etres

3

Exemples (sans param`etres)

fonction pi(): reel

debut pi

retourner 3.1415926535897931

fin pi

Exemple avec param`etres

La fonction suivante rend le maximum de deux valeurs de type

r´e´el.

fonction fmax(valeur a: reel, valeur b: reel) : reel

variables m : un reel

debut fmax

si (a > b)

alors

m <- a

sinon

m <- b

fin si

retourner m

fin fmax

de sorte que l’expression fmax(pi()*pi(),10.0) vaut 10.

Param`etres

En g´en´eral, une fonction ou proc´edure n’est utile que si elle a des

param`etres, comme dans le cas de fmax.

Une fonction ou proc´edure d´efinie avec des param`etres doit ˆetre

appel´ee avec des arguments (en nombre ´egal, et du mˆeme type!).

d´efinition de fonction appel de fonction

param`etre

argument

Cours 5 : fonctions, proc´edures, passage des param`etres

4

fonction fmax(valeur a: reel, valeur b: reel) : reel

...

programme essai

variables x: un reel

i,j: deux caracteres

Publicité

debut essai

lire x

ecrire fmax(x,x*x)

/ ecrire fmax(i,j) serait incorrect! /

fin essai

Nature des param`etres:

d´eclaration

Dans la declaration

fonction fmax(valeur a: reel, valeur b: reel) : reel

...

• a et b sont les param`etres de la fonction

• ils sont d´eclar´es avec leur type

• dans le corps de la fonction, on peut utiliser a et b comme des

variables,

qui existent exclusivement dans le corps de la fonction

• le mot cl´e valeur indique une modalit´e de passage des param`etres

Nature des param`etres: passage

par valeur

Apr`es la d´eclaration

fonction fmax(valeur a: reel, valeur b: reel) : reel

...

on peut effectuer un appel de la fonction comme

ecrire 3*fmax(x,y)

l’expression fmax(x,y) est ´evalu´ee de la fa¸con suivante:

• les valeurs de x et y sont calcul´ees

Cours 5 : fonctions, proc´edures, passage des param`etres

5

• les param`etres a et b de fmax sont initialis´es en utilisant ces

valuers

• le corps de la fonction fmax est execut´e, (cela utilise les param`etres

a et b comme des variables)

• le r´esultat de la fonction est enfin retourn´e et utilis´e pour con-

tinuer le calcul de l’expression (ici, on le multiplie par 3 et on

l’imprime)

Peu importe les op´erations effectu´ees sur a et b dans le corps de

fmax, les valeurs des param`etres actuels x et y restent inchang´es.

Limite du passage par valeur

On a souvent besoin d’´ecrire des proc´edure ou fonctions que, au con-

traire, modifient la valeur de certains param`etres, par exemple, on

voudrait ´ecrire une procedure echange t.q. echange(x,y) ´echange

les valeurs des variables x et y.

Mais la proc´edure

proc´edure echange (valeur a: entier, valeur b: entier)

variable t: un entier

debut echange

t <- a

a <- y

b <- t

fin echange

n’´echange pas les valeurs de ses arguments!

(relisez la description du passage d’arguments par valeur plus

Publicité

haut)

Comment faire?

Passage par r´ef´erence

Si on ´ecrit

proc´edure echange (reference a: entier, reference b: entier)

variable t: un entier

debut echange

t <- a

a <- y

b <- t

fin echange

Cours 5 : fonctions, proc´edures, passage des param`etres

6

le passage des param`etres se fait autrement: au moment de

l’appel

echange(i,j)

• on ne fait pas une copie des valeurs de i et j dans a et b!

• au contraire, on transforme a et b en ”alias” de i et j, en le

faisant pointer sur les memes cases m´emoire de i et j

• donc, toute op´eration effectu´ee sur les param`etres a et b dans

le corps de la proc´edure ou fonction et aussi effectu´e sur les

arguments i et j

N.B.: on doit passer comme argument d’un param`etre par r´ef´erence

seulement des expressions qui se comportent comme des variables

(par exemple, une variable, mais aussi une case d’un tableau etc.)

R´esum´e

• On d´eclare ”valeur” un param`etre si on ne veut pas que l’appel

modifie les arguments

• On d´eclare ”reference” un param`etre si on veut que l’appel

modifie les arguments

Bien sˆur, on peut melanger param`etres par valeur et par r´ef´erence.

ATTENTION:

• les tableaux sont toujours pass´e par r´ef´erence, et jamais copi´es,

mˆeme si on d´eclare le param`etres correspondant ”valeur”.

(Vous comprendrez les raisons de cela plus avant dans le cursus

informatique).

Un exemple complet: le tri par s´el´ection

Voyons comme ´ecrire un programme de tri par s´el´ection beaucoup

plus lisible avec les fonctions et les proc´edures.

Cours 5 : fonctions, proc´edures, passage des param`etres

7

Fonction de recherche du minimum `a partir d’un indice

fonction mintab(valeur i: un entier, reference a: tableau): entier

variable k: un entier

debut mintab

pour k <- i+1 a

N faire

si (a[k] < a[i]) alors

i <- k

fin si

fin pour

Publicité

retourner i

fin mintab

Programme de tri par s´el´ection

constante N=10

type tab = tableau de N entiers

procedure echange(reference a, reference b) ...

fonction mintab(valeur i: un entier, reference a: tableau): entier ...

programme triselection

variables a: tab

debut triselection

lire a

pour i <- 1 a N-1 faire

echange(a[i],a[mintab(i,a)])

fin pour

ecrire a

fin triselection

Cours 5 : fonctions, proc´edures, passage des param`etres

8

Et en C++?

#include <iostream.h>

const int N=10;

typedef int tab[N];

void echange (int &a, int &b)

{ int t;

t=a; a=b; b=t;

}

int mintab(int i, tab &a)

{ int k;

for(k=i+1;k<N;k++){if (a[k] < a[i]) {i =k;};};

return(i);

}

void lire(tab &a)

{ int k;

for (k=0;k<N;k++){cout<<"a["<<k<<"] ? "<<endl; cin>>a[k];};

}

void ecrire(tab &a)

{ int k;

for (k=0;k<N;k++){cout<<"a["<<k<<"] = "<<a[k]<<endl;};

}

void main(){

tab a;

int i;

lire(a);

for (i=0;i<N-1;i++){echange(a[i],a[mintab(i,a)]);};

ecrire(a);

}