Vous êtes sur la page 1sur 32

Algorithmique...

Variables (locales et globales),


fonctions et procdures
Nicolas Delestre et Michel Mainguenaud
{Nicolas.Delestre,Michel.Mainguenaud}@insa-rouen.fr

Modifi pour lENSICAEN par :


Luc Brun
luc.brun@greyc.ensicaen.fr

Variables, fonctions, procedures p.1/32

Plan...
Rappels
Les sous-programmes
Variables locales et variables globales
Structure dun programme
Les fonctions
Les procdures

Variables, fonctions, procedures p.2/32

Vocabulaire...
Dans ce cours nous allons parler de programme et de sous-programme
Il faut comprendre ces mots comme programme algorithmique
indpendant de toute implantation

Variables, fonctions, procedures p.3/32

Rappels...
La mthodologie de base de linformatique est :
1. Abstraire
Retarder le plus longtemps possible linstant du codage

2. Dcomposer
"... diviser chacune des difficults que jexaminerai en autant de parties quil
se pourrait et quil serait requis pour les mieux rsoudre." Descartes

3. Combiner
Rsoudre le problme par combinaison dabstractions

Variables, fonctions, procedures p.4/32

Par exemple...
Rsoudre le problme suivant :
crire un programme qui affiche en ordre croissant les notes dune promotion
suivies de la note la plus faible, de la note la plus leve et de la moyenne

Revient rsoudre les problmes suivants :


Remplir un tableau de naturels avec des notes saisies par lutilisateur
Afficher un tableau de naturels
Trier un tableau de naturel en ordre croissant
Trouver le plus petit naturel dun tableau
Trouver le plus grand naturel dun tableau
Calculer la moyenne dun tableau de naturels

Chacun de ces sous-problmes devient un nouveau problme rsoudre


Si on considre que lon sait rsoudre ces sous-problmes, alors on sait
quasiment rsoudre le problme initial
Variables, fonctions, procedures p.5/32

Sous-programme...
Donc crire un programme qui rsout un problme revient toujours crire
des sous-programmes qui rsolvent des sous parties du problme initial
En algorithmique il existe deux types de sous-programmes :
Les fonctions,
Les procdures.

Un sous-programme est obligatoirement caractris par un nom (un


identifiant) unique
Lorsquun sous programme a t explicit (on a donn lalgorithme), son
nom devient une nouvelle instruction, qui peut tre utilis dans dautres
(sous-)programmes
Le (sous-)programme qui utilise un sous-programme est appel
(sous-)programme appelant
Variables, fonctions, procedures p.6/32

Rgle de nommage...
Nous savons maintenant que les variables, les constantes, les types dfinis par
lutilisateur (comme les numrateurs) et que les sous-programmes possdent
un nom
Ces noms doivent suivre certaines rgles :
Ils doivent tre explicites ( part quelques cas particuliers, comme par exemple les variables i et j pour les
boucles)
Ils ne peuvent contenir que des lettres et des chiffres
Ils commencent obligatoirement par une lettre
Les variables et les sous-programmes commencent toujours par une minuscule
Les types commencent toujours par une majuscule
Les constantes ne sont composes que de majuscules
Lorsquils sont composs de plusieurs mots, on utilise les majuscules (sauf pour les constantes) pour sparer
les mots (par exemple JourDeLaSemaine)

Variables, fonctions, procedures p.7/32

Les diffrents types de variable...


Dfinitions :
La porte dune variable est lensemble des sous-programmes o cette variable
est connue (les instructions de ces sous-programmes peuvent utiliser cette
variable)
Une variable dfinie au niveau du programme principal (celui qui rsout le
problme initial, le problme de plus haut niveau) est appele variable globale
Sa porte est totale : tout sous-programme du programme principal peut utiliser cette variable

Une variable dfinie au sein dun sous programme est appele variable locale
La porte dun variable locale est uniquement le sous-programme qui la dclare

Lorsque le nom dune variable locale est identique une variable globale, la
variable globale est localement masque
Dans ce sous-programme la variable globale devient inaccessible
Variables, fonctions, procedures p.8/32

Structure dun programme...


Un programme doit suivre la structure suivante :
Programme nom du programme
Dfinition des constantes
Dfinition des types
Dclaration des variables globales
Dfinition des sous-programmes
dbut
instructions du programme principal
fin

Variables, fonctions, procedures p.9/32

Les paramtres...
Un paramtre dun sous-programme est une variable locale particulire qui est
associe une variable ou constante (numrique ou dfinie par le programmeur) du
(sous-)programme appelant :
Puisque quun paramtre est une variable locale, un paramtre admet un type
Lorsque le (sous-)programme appelant appelle le sous-programme il doit indiquer la variable (ou la
constante), de mme type, qui est associe au paramtre

Par exemple, si le sous-programme sqr permet de calculer la racine carre dun rel:
Ce sous-programme admet un seul paramtre de type rel positif
Le (sous-)programme qui utilise sqr doit donner le rel positif dont il veut calculer la racine carre, cela peut
tre :
une variable, par exemple a
une constante, par exemple 5.25

Variables, fonctions, procedures p.10/32

Les passage de paramtres...


Il existe trois types dassociation (que lon nomme passage de paramtre)
entre le paramtre et la variable (ou la constante) du (sous-)programme
appelant :
Le passage de paramtre en entre
Le passage de paramtre en sortie
Le passage de paramtre en entre/sortie

Variables, fonctions, procedures p.11/32

Le passage de paramtres en entre...


Les instructions du sous-programme ne peuvent pas modifier lentit
(variable ou constante) du (sous-)programme appelant
En fait cest la valeur de lentit du (sous-) programme appelant qui est copie
dans le paramtre ( part cette copie il ny a pas de relation entre le paramtre et
lentit du (sous-)programme appelant)
Cest le seul passage de paramtre qui admet lutilisation dune constante

Par exemple :
le sous-programme sqr permettant de calculer la racine carre dun nombre
admet un paramtre en entre
le sous-programme crire qui permet dafficher des informations admet n
paramtres en entre

Variables, fonctions, procedures p.12/32

Le passage de paramtres en sortie...


Les instructions du sous-programme affectent obligatoirement une valeur
ce paramtre (valeur qui est donc aussi affecte la variable associe du
(sous-)programme appelant)
Il y a donc une liaison forte entre le paramtre et lentit du (sous-)
programme appelant
Cest pour cela quon ne peut pas utiliser de constante pour ce type de paramtre

La valeur que pouvait possder la variable associe du (sous-)programme


appelant nest pas utilise par le sous-programme
Par exemple :
le sous-programme lire qui permet de mettre dans des variables des valeurs
saisies par lutilisateur admet n paramtres en sortie

Variables, fonctions, procedures p.13/32

Le passage de paramtres en entre/sortie...


Passage de paramtre qui combine les deux prcdentes
A utiliser lorsque le sous-programme doit utiliser et/ou modifier la valeur
de la variable du (sous-)programme appelant
Comme pour le passage de paramtre en sortie, on ne peut pas utiliser de
constante
Par exemple :
le sous-programme changer qui permet dchanger les valeurs de deux
variables

Variables, fonctions, procedures p.14/32

Les fonctions...
Les fonctions sont des sous-programmes admettant des paramtres et
retournant un seul rsultat(comme les fonctions mathmatiques
y=f(x,y,. . . )
les paramtres sont en nombre fixe ( 0)
une fonction possde un seul type, qui est le type de la valeur retourne
le passage de paramtre est uniquement en entre: cest pour cela quil
nest pas prcis
lors de lappel, on peut donc utiliser comme paramtre des variables, des
constantes mais aussi des rsultats de fonction

la valeur de retour est spcifie par linstruction retourner

Gnralement le nom dune fonction est soit un nom (par exemple


minimum), soit une question (par exemple estVide)
Variables, fonctions, procedures p.15/32

Les fonctions...
On dclare une fonction de la faon suivante :
fonction nom de la fonction (paramtre(s) de la fonction) : type de la valeur
retourne
Dclaration variable locale 1 : type 1; . . .
dbut
instructions de la fonction avec au moins une fois linstruction retourner
fin

On utilise une fonction en prcisant son nom suivi des paramtres entre
parenthses
Les parenthses sont toujours prsentes mme lorsquil ny a pas de
paramtre

Variables, fonctions, procedures p.16/32

Exemple de dclaration de fonction...


fonction abs (unEntier : Entier) : Entier
dbut
si unEntier 0 alors
retourner unEntier
finsi
retourner -unEntier
fin
Remarque : Cette fonction est quivalente :
fonction abs (unEntier : Entier) : Entier
Dclaration tmp: Entier
dbut
si unEntier 0 alors
tmp unEntier
sinon
tmp -unEntier
finsi
retourner tmp

Variables, fonctions, procedures p.17/32

Exemple de programme...
Programme exemple1
Dclaration a : Entier, b : Naturel
fonction abs (unEntier : Entier) : Naturel
Dclaration valeurAbsolue : Naturel
dbut
si unEntier 0 alors
valeurAbsolue unEntier
sinon
valeurAbsolue -unEntier
finsi
retourner valeurAbsolue
fin
dbut
crire("Entrez un entier :")
lire(a)
b abs(a)
crire("la valeur absolue de ",a," est ",b)
fin

Lors de lexcution de la fonction


abs, la variable a et le paramtre
unEntier sont associs par un passage de paramtre en entre : La
valeur de a est copie dans unEntier

Variables, fonctions, procedures p.18/32

Un autre exemple...
fonction minimum2 (a,b : Entier) : Entier
dbut
si a b alors
retourner b
finsi
retourner a
fin
fonction minimum3 (a,b,c : Entier) : Entier
dbut
retourner minimum2(a,minimum2(b,c))
fin

Variables, fonctions, procedures p.19/32

Les procdures...
Les procdures sont des sous-programmes qui ne retournent
aucun rsultat
Par contre elles admettent des paramtres avec des passages :
en entre, prfixs par Entre (ou E)
en sortie, prfixs par Sortie (ou S)
en entre/sortie, prfixs par Entre/Sortie (ou E/S)
Gnralement le nom dune procdure est un verbe

Variables, fonctions, procedures p.20/32

Les procdures...
On dclare une procdure de la faon suivante :
procdure nom de la procdure ( E paramtre(s) en entre; S paramtre(s)
en sortie; E/S paramtre(s) en entre/sortie )
Dclaration variable(s) locale(s)
dbut
instructions de la procdure
fin

Et on appelle une procdure comme une fonction, en indiquant


son nom suivi des paramtres entre parenthses

Variables, fonctions, procedures p.21/32

Exemple de dclaration de procdure...


procdure calculerMinMax3 ( E a,b,c : Entier ; S m,M : Entier )
dbut
m minimum3(a,b,c)
M maximum3(a,b,c)
fin

Variables, fonctions, procedures p.22/32

Exemple de programme...
Programme exemple2
Dclaration a : Entier, b : Naturel
procdure echanger ( E/S val1 Entier; E/S val2 Entier;)
Dclaration temp : Entier
dbut
temp val1
val1 val2
val2 temp
Lors de lexcution de la procdure
fin
dbut
echanger, la variable a et le paramtre
crire("Entrez deux entiers :")
val1 sont associs par un passage de
lire(a,b)
echanger(a,b)
paramtre en entre/sortie : Toute modcrire("a=",a," et b = ",b)
ification sur val1 est effectue sur a (de
fin

mme pour b et val2)

Variables, fonctions, procedures p.23/32

Autre exemple de programme...


Programme exemple3
Dclaration entier1,entier2,entier3,min,max : Entier
fonction minimum2 (a,b : Entier) : Entier
...
fonction minimum3 (a,b,c : Entier) : Entier
...
procdure calculerMinMax3 ( E a,b,c : Entier ; S min3,max3 : Entier )
dbut
min3 minimum3(a,b,c)
max3 maximum3(a,b,c)
fin
dbut
crire("Entrez trois entiers :")
lire(entier1) ;
lire(entier2) ;
lire(entier3)
calculerMinMax3(entier1,entier2,entier3,min,max)
crire("la valeur la plus petite est ",min," et la plus grande est ",max)
fin
Variables, fonctions, procedures p.24/32

Fonctions/procdures rcursives
Une fonction ou une procdure rcursive est une fonction
qui sappelle elle mme.
Exemple :
fonction factorielle (n: Naturel) : Naturel
dbut
si n = 0 alors
retourner 1
finsi
retourner n*factorielle(n-1)
fin

Variables, fonctions, procedures p.25/32

Liste des appels


factorielle(4)

4*factorielle(3) = 4*3*2*1

factorielle(3)

3*factorielle(2) =

3*2*1

factorielle(2)

2*factorielle(1) =

2*1

factorielle(1)
1*factorielle(0) =

factorielle(0)
1

1*1

Variables, fonctions, procedures p.26/32

Rcursivit : Caractrisation
On peut caractriser un algorithme rcursif par plusieurs proprits:
Le mode dappel : direct/indirect
Le nombre de paramtres sur lesquels porte la rcursion : arit
Le nombre dappels rcursifs : ordre de rcursion
Le genre de retour : terminal/non terminal.

Variables, fonctions, procedures p.27/32

Rcursivit : mode dappel


Une fonction rcursive sappellant elle mme a un mode dappel direct(ex:
factorielle). Si la rcursivit est effectue travers plusieurs appels de fonctions
diffrentes le mode dappel est indirect.
fonction pair (n: Naturel) : Boolen
dbut
si n = 0 alors
retourner vrai
finsi
retourner imPair(n-1)
fin

fonction imPair (n:


Boolen
dbut
si n = 0 alors
retourner faux
finsi
retourner pair(n-1)
fin

Naturel) :

Variables, fonctions, procedures p.28/32

Rcursivit : Arit/bien fond


Larit dun algorithme est le nombre de paramtres dentre.
Rcursivit bien fond :
Une rcursivit dans laquelle les paramtres de la fonction appele sont plus simple que ceux de la fonction appelante. Par exemple factorielle(n) appelle
factorielle(n-1).
Exemple de rcursivit mal fonde:
GNU: Gnu is not Unix

Variables, fonctions, procedures p.29/32

Rcursivit : Ordre de rcursion


Lordre de rcursion dune fonction est le nombre dappels rcursifs lancs
chaque appel de fonction. Par exemple, factorielle(n) ne ncessite quun
seul appel la fonction factorielle avec comme paramtre n 1. Cest
donc une fonction rcursive dordre 1.
Par exemple, la fonction suivante base sur la formule
p1
p
, est dordre 2.
+ Cn1
Cnp = Cn1
fonction comb (Entier p, n) : Entier
dbut
si p = 0 ou n = p alors
retourner 1
sinon
retourner comb(p, n - 1) + comb(p - 1, n - 1)
finsi
fin
Variables, fonctions, procedures p.30/32

Rcursicit : genre de retour


Le genre dun algorithme rcursif est dtermin par le traitement effectu sur la
valeur de retour.
Si la valeur de retour est retroune sans tre modifi lalgorithme est dit
terminal(Par exemple pair/imPair est terminal)
Sinon lalgorithme est dit non terminal(ex factorielle qui multiplie la
valeur de retour par n).

Variables, fonctions, procedures p.31/32

Remarques sur la rcursivit


La rcursivit peut simplifier considrablement certains problmes.
Un appel de fonction/procdure un cot non ngligeable. Les
programmes rcursifs sont souvent plus coteux que leurs homologues non
rcursifs.

Variables, fonctions, procedures p.32/32