Algorithmique et Langage C
www.polytech.unice.fr/žvg/index-xidian.html
Granet Vincent - Vincent.Granet@univ-cotedazur.fr
Xi’an - Octobre 2019 - Avril 2020
Routines
69/214
Introduction
En programmation procédurale, la notion de routine
(fonction/procédure) est l’outil fondamentalde structuration des programmes
Une déclarationde routines permet d’associer un nomà unesuite d’énoncés, et d’utiliser ce nom comme abréviation chaque fois que la suite apparaît dans le programme : appel de routine
Un programme est, avant tout, un ensemble de déclarations de routines
Les langages (comme C) qui suivent cette méthodologie s’appellent deslangages procéduraux
Intérêt
1 Structuration. Les routines définissent des composants
opérationnels fermés et cohérents qui représentent des parties ou sous-parties du problème à résoudre et qui structurent ainsi logiquement le programme
2 Localisation.ce sont des unités textuelles dans lesquelles sont définies, non seulement les actions à exécuter, mais aussi des données ou objets locaux dont l’existence est limitée à celle de la procédure ou de la fonction dans laquelle ils sont définis.
3 Paramétrage.Grâce à la notion de paramètre, il sera possible d’appeler une routine pour exécuter une même suite d’énoncés sur des valeurs de données différentes
71/214
Déclaration d’une routine
routine = en-tête + corps
Rôle
associer un nom à une suite d’énoncés qui porte sur des objets formels qui prendront des valeurs effectives lors de son appel
En-tête
le nom de la routine
les noms desparamètres formelset leurs types le type du résultat (pour une fonction)
Corps
des déclarations locales les énoncés
Exemple de fonction (1)
Déclaration
{antécédent : a, b, c ∈Z}
{Rôle : renvoie minimum(minimum(a,b),c)}
f o n c t i o n min3(données a, b, c: entier): entier
v a r i a b l e min : entier s i a<b a l o r s
min ← a s i n o n
min ← b f i n s i
{ min = minumum(a,b) } s i c<min a l o r s min ← c f i n s i
{ min = minimum(min,c) = minimum(minimum(a,b),c) } r e n d r e min
f i n f o n c
73/214
Exemple de fonction (1)
Appel
x ← min3(y, 4, z)
{x = minimum(minimum(y,4),z)}
écrire(min3(2 x, 0, a b))
{le minimum(minimum(2 x,0), a b) est écrit sur SS}
Procédure
On déclare uneprocédure :
lorsqu’une routine doit renvoyer plusieurs résultats (mais aussi aucun)
Une procédure est une routine avec laquelle les résultats calculés sont obtenus par l’intermédiaire de paramètres formels résultats nommés dans son en-tête
75/214
Exemple de procédure
Déclaration
{antécédent : a>0, b>0}
{conséquent : a = b q+r, 06r<b}
p r o c é d u r e divEnt(données a, b : naturels r é s u l t a t s q, r : naturels)
q ← a d i v b
r ← a mod b {a = b q+r, 06r<b}
f i n p r o c
Appel
v a r i a b l e x, y : naturel divEnt(7,3, x, y) {7 = x 3+y = 2 3+1}
Transmission des paramètres
Paramètreformel/effectif« donnée » et « résultat »
Règles
1 le nombre de paramètres effectifs est identique à celui des paramètres formels
2 la correspondance entre les paramètres formels et effectifs se fait sur la position
3 les paramètres effectifs et formels doivent être de type compatible
4 mode transmission :par valeur /par résultat
77/214
Modes de transmission des paramètres
Données
Transmission par valeur. elle a pour effet d’affecter au paramètre formel la valeur du résultat de l’évaluation du paramètre effectif. Le paramètre effectif sert à fournir une valeur initiale au paramètre formel
Résultats
Transmission par résultat. elle a pour effet, à la fin de l’exécution de la routine, d’affecter au paramètre effectif résultat la valeur du paramètre formel. Les paramètres effectifs résultats sont nécessairement des noms de variables.
Données/Résultats Transmission par résultat.
Les routines en C (1)
Il n’y a que desfonctions! Si pas de paramètrevoid Une procédureest une fonction qui renvoievoid. Un seul mode de transmission :par valeur.
/ Rôle : renvoie la valeur absolue de x / i n t abs(i n t x) {
i f (x<0) x = −x;
/ x>=0 / r e t u r n x;
}
a = abs(y);
/ a == |y| / b = abs(3 y);
/ b == |3 y| /
79/214
Les routines en C (2)
/ Rôle : échange les valeurs de a et b / v o i d echanger(i n t a, i n t b) {
i n t aux = a;
a = b;
b = aux }
i n t x=3, y=5;
echanger(x,y);
/ x=5 et y=3 ? non ! /
Ne fonctionne pas: a et b sont des paramètres données et résul- tats, maispas de transmission par résultat en C ! On verra plus tard comment résoudre ce problème.