SlideShare une entreprise Scribd logo
1
Chapitre 4
Fonctions et procédures
2
2
Plan
3
 Partie 1: Les sous-programmes
 Partie 2: Les fonctions
 Partie 3: Les procédures
 Partie 4: Portée d’une variable
 Partie 5: Paramètres formels/effectifs
 Partie 6: Transmission de paramètres
 Partie 7: De l’algorithmique au langage C
Plan
4
 Partie 1: Les sous-programmes
 Partie 2: Les fonctions
 Partie 3: Les procédures
 Partie 4: Portée d’une variable
 Partie 5: Paramètres formels/effectifs
 Partie 6: Transmission de paramètres
 Partie 7: De l’algorithmique au langage C
Sous-programmes - Décomposer pour résoudre
5
 Analyse descendante
Approche incrémentale consistant à analyser la
spécification d’un problème selon son arborescence
 Décomposition / combinaison
à chaque niveau de l’arborescence :
 Décomposer le problème en un certain nombre de sous-
problèmes qu’on supposera résolus
 Combiner les solutions des sous-problèmes pour résoudre le
problème courant
 Résoudre les sous-problèmes par la même approche
 Par exemple, pour résoudre le problème suivant :
Ecrire un programme qui affiche les nombres parfaits compris entre 0 et une valeur
n saisie par l’utilisateur.
ex: 28=1+2+4+7+14.
Cela revient à résoudre :
1. Demander à l’utilisateur de saisir un entier n
2. Savoir si un nombre donné est parfait
 2. 1. Savoir si un nombre est diviseur d’un autre nombre
 2. 2. Calculer la somme des diviseurs d’un nombre
3. Afficher les nombres parfaits entre 0 et n
Sous-programmes - Décomposer pour résoudre
6
 Chacun de ces sous-problèmes devient un nouveau problème à résoudre.
 Si on considère que l’on sait résoudre ces sous-problèmes, alors on sait
“quasiment” résoudre le problème initial.
 Donc écrire un programme qui résout un problème revient toujours à écrire des
sous-programmes qui résolvent des sous parties du problème initial.
 En algorithmique il existe deux types de sous-programmes :
 Les fonctions
 Les procédures
 Un sous-programme est obligatoirement caractérisé par un nom (identifiant) unique
 Le programme qui utilise un sous-programme est appelé le programme appelant.
Sous-programmes - Décomposer pour résoudre
7
8
Sous-programmes - Décomposer pour résoudre
Fonction
Traitement de la fonction
Données en entrée Un seul résultat
en sortie
Procédure
Traitement de la procédure
Données en entrée 0 ou plusieurs
résultats en sortie
 Une fonction rend un et un seul résultat
Une procédure rend zéro ou plusieurs résultat
Plan
9
 Partie 1: Les sous-programmes
 Partie 2: Les fonctions
 Partie 3: Les procédures
 Partie 4: Portée d’une variable
 Partie 5: Paramètres formels/effectifs
 Partie 6: Transmission de paramètres
 Partie 7: De l’algorithmique au langage C
25
Fonction NomDeLaFonction (paramètres et leurs types) : type_valeur_retour_fonction
Var variable locale 1 : type 1; . . .
début
instructions de la fonction
Retourner expression
FinFonction
Les fonctions – Déclaration d’une fonction
10
25
 type_valeur_retour_fonction est le type du résultat renvoyé par la
fonction
 liste de paramètres est la liste des paramètres formels donnés en
entrée avec leurs types de la forme p_1: type_1, . . . , p_n: type_n,
 Le corps de la fonction doit comporter une instruction de la forme :
retourner(expression);
cette instruction met fin à l’exécution de la fonction et retourne
expression comme résultat
Les fonctions – Déclaration d’une fonction
11
Les fonctions – Exemple 1
12
Fonction
Les fonctions – Exemple 2
13
Fonction
14
Les fonctions – Exemple 3
Fonction
15
 L’appel d'une fonction se fait par simple écriture de son nom dans le programme principale
suivi des paramètres entre parenthèses ( les parenthèses sont toujours présentes même lorsqu’il
n’y a pas de paramètre).
NomDeLaFonction(<iste de paramètres)
 liste de paramètres est la liste des paramètres effectifs de la forme q_1,. ., q_n, avec q_i
un paramètre de type type p_i
 L’appel de la fonction retourne une valeur calculée en fonction des paramètres effectifs
 La liste des paramètres effectifs doit être compatible avec la liste des paramètres formels
de la déclaration de la fonction
 Lors de l’appel, chacun des paramètres formels est remplacé par le paramètre effectif
Les fonctions – Appel d’une fonction
 L‘appel d'une fonction se fait par simple écriture de son nom dans le programme
principale. Le résultat étant une valeur, devra être affecté ou être utilisé dans une
expression
Exemple:
Fonction Pair (n : entier ) : booléen
Debut
retourner (n%2=0)
FinFonction
Algorithme AppelFonction
Var: c : réel, b : booléen
Début
b ← Pair(3)
…..
Fin
 Lors de l'appel Pair(3), le paramètre formel n est remplacé par le paramètre effectif 3
Les fonctions – Appel d’une fonction
16
17
Les fonctions – Appel d’une fonction
Fonction
Fonction
Plan
18
 Partie 1: Les sous-programmes
 Partie 2: Les fonctions
 Partie 3: Les procédures
 Partie 4: Portée d’une variable
 Partie 5: Paramètres formels/effectifs
 Partie 6: Transmission de paramètres
 Partie 7: De l’algorithmique au langage C
 Une procédure est un sous-programme semblable à une fonction mais qui ne
retourne rien.
 Une procédure s'écrit en dehors du programme principal sous la forme :
 Remarque : une procédure peut ne pas avoir de paramètres.
Les procédures – Déclaration
19
Procédure NomDeLaProcédure (paramètres et leurs types)
Var variable locale 1 : type 1; . . .
début
instructions de la procédure
FinProcédure
 L'appel d'une procédure, se fait dans le programme principal ou dans une
autre procédure par une instruction indiquant le nom de la procédure :
Procédure exemple_proc (…)
…
FinProcédure
Algorithme exempleAppelProcédure
Début
exemple_proc (…)
…
Fin
 Remarque : contrairement à l'appel d'une fonction, on ne peut pas affecter la
procédure appelée ou l'utiliser dans une expression.
Les procédures – Appel
20
Plan
21
 Partie 1: Les sous-programmes
 Partie 2: Les fonctions
 Partie 3: Les procédures
 Partie 4: Portée d’une variable
 Partie 5: Paramètres formels/effectifs
 Partie 6: Transmission de paramètres
 Partie 7: De l’algorithmique au langage C
 La portée d'une variable: l'ensemble des sous-programmes où cette variable
est connue (les instructions de ces sous-programmes peuvent utiliser cette variable)
 Une variable définie au niveau du programme principal (celui qui résout le problème
initial) est appelée variable globale
 Sa portée est totale : tout sous-programme du programme principal peut utiliser
cette variable
 Une variable définie au sein d'un sous programme est appelée variable locale
 La portée d’une variable locale est uniquement le sous-programme qui la déclare.
Lorsque le nom d'une variable locale est identique à une variable globale, la variable
globale est localement masquée : Dans ce sous-programme la variable globale devient
inaccessible
Portée d’une variable
22
Plan
23
 Partie 1: Les sous-programmes
 Partie 2: Les fonctions
 Partie 3: Les procédures
 Partie 4: Portée d’une variable
 Partie 5: Paramètres formels/effectifs
 Partie 6: Transmission de paramètres
 Partie 7: De l’algorithmique au langage C
 Les paramètres servent à échanger des données entre le programme principale
(ou le sous-programme appelant) et le sous-programme appelé.
 Les paramètres placés dans la déclaration d'un sous-programme sont appelés
paramètres formels. Ces paramètres peuvent prendre toutes les valeurs
possibles mais ils sont abstraits (n'existent pas réellement)
 Les paramètres placés dans l'appel d’un sous-programme sont appelés
paramètres effectifs. ils contiennent les valeurs pour effectuer le traitement
 Le nombre de paramètres effectifs doit être égal au nombre de paramètres
formels. L'ordre et le type des paramètres doivent correspondre.
Paramètres formels/effectifs
24
Plan
25
 Partie 1: Les sous-programmes
 Partie 2: Les fonctions
 Partie 3: Les procédures
 Partie 4: Portée d’une variable
 Partie 5: Paramètres formels/effectifs
 Partie 6: Transmission de paramètres
 Partie 7: De l’algorithmique au langage C
 Il existe deux modes de transmission de paramètres dans les langages de
programmation :
La transmission par valeur : les valeurs des paramètres effectifs sont affectées
aux paramètres formels correspondants au moment de l'appel de la procédure. Dans
ce mode le paramètre effectif ne subit aucune modification
La transmission par adresse (ou par référence) : les adresses des paramètres
effectifs sont transmises à la procédure appelante. Dans ce mode, le paramètre
effectif subit les mêmes modifications que le paramètre formel lors de l'exécution de
la procédure
Remarque : le paramètre effectif doit être une variable (et non une valeur) lorsqu'il s'agit
d'une transmission par adresse
Transmission de paramètres
26
Passage des paramètres par valeur (en Entrée)
 Les paramètres formels sont initialisés par une copie des valeurs des
paramètres effectifs
 Modifier la valeur des paramètres formels dans le corps de la fonction
ne change pas la valeur des paramètres effectifs
Passage d’arguments dans une fonction
27
28
Passage d’arguments dans une fonction
Algorithme exemple1
Var a,b : Entier
Fonction abs (unEntier : Entier) : Entier
Var ValeurAbsolue: Entier
Debut
Si(unEntier>=0) alors
ValeurAbsolue unEntier
Sinon
ValeurAbsolue - unEntier
Finsi
Retourner (ValeurAbsolue)
FinFonction
début
écrire("Entrez un entier:")
lire(a)
Babs(a)
écrire("la valeur absolue de",a," est ",b)
Fin
28
 Les procédures sont des sous-programmes qui ne retournent aucun résultat.
 Par contre elle admettent des paramètres avec des passages:
En entrée, préfixés par Entrée (ou E)
En sortie préfixés par Sortie (ou S)
En entrée/sortie, préfixés par Entrée/Sortie (ou E/S)
 Les paramètres en Entrée sont considérés aussi comme paramètres passés par
valeur.
 Les paramètre en sortie ou en Entrée/ sortie sont considéré aussi comme
paramètres passés par adresse ou par référence.
Passage d’arguments dans une procédure
29
 On déclare une procédure de la façon suivante :
Procédure NomDeLaProcédure ( E paramètre(s) en entrée; S paramètre(s)
en sortie; E/S paramètre(s) en entrée/sortie )
Var variable(s) locale(s)
début
instructions de la procédure
FinProcédure
 Et on appelle une procédure comme une fonction, en indiquant son nom suivi
des paramètres entre parenthèses
Déclaration d’une procédure
30
Algorithme exemple
Var entier1,entier2,entier3,min,max : Entier
Fonction minimum2 (a,b : Entier) : Entier
. . .
Fonction minimum3 (a,b,c : Entier) : Entier
. . .
Procédure calculerMinMax3 ( E a,b,c : Entier ; S min3,max3 : Entier )
Début
min3 minimum3(a,b,c)
max3 maximum3(a,b,c)
Fin
début
é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
Procédures – Exemple 1
31
Procédures – Exemple 2
32
Algorithme exemple2
Var a,b : entier
Procédure echanger (E/S val1: entier , E/S val2: entier )
Var temp: entier
Début
temp val1
val1 val2
val2 temp
FinProcédure
début
écrire("Entrez deux entiers :")
lire(a,b)
echanger(a,b)
écrire(« a= ",a," et b= ",b)
Fin
Plan
33
 Partie 1: Les sous-programmes
 Partie 2: Les fonctions
 Partie 3: Les procédures
 Partie 4: Portée d’une variable
 Partie 5: Paramètres formels/effectifs
 Partie 6: Transmission de paramètres
 Partie 7: De l’algorithmique au langage C
Structure d’un programme en C
34
 La décomposition d’un programme en sous programmes permet d’avoir des
programmes plus lisibles, plus faciles à mettre à jour et plus simples à développer
puisqu’on ne s’intéresse qu’à une seule tâche à la fois.
 Un programme en C est une collection de fonctions. L’une des fonctions doit
s’appeler main. L’exécution d’un programme C correspond à l’exécution de la fonction
main. Les autres fonctions sont exécutées si elles sont appelées dans la fonction
main.
 Il n’y a pas de procédure en C. Pour traduire une procédure, on crée une fonction
qui ne retourne pas de valeur, on utilise alors le type void comme type de retour.
35
Déclaration d’une fonction
 typeRetour NomFonction (type1 arg1, type2 arg2 …typeN argN)
// paramètres formels arg1, arg2, …,argN
{
// variables locales
instructions ;
return val;
}
 . L’entête de la fonction comprend :
1. typeRetour : le type du résultat retourné, une fonction qui ne retourne rien est de
type void.
2. Le nom de la fonction.
3. La liste de ses paramètres : arguments de la fonction. Cette liste peut être vide.
 Le corps : contient des déclarations de variables, des instructions C (conditions,
boucles ...). L’instruction return permet de retourner le résultat de la fonction au
programme qui l’a appelée
36
Déclaration d’une fonction
37
Appel des fonctions
Appel d’une fonction : Variable = Nom_fonction(arg1, arg2, …, argN);
Appel d’une procédure : Nom_procedure(arg1, arg2, …, argN);
Si la fonction est écrite après la fonction main, il faut donner son prototype (en-tête)
avant cette dernière :
38
Appel des fonctions
39
Appel des fonctions
40
Que se passe t-il en mémoire?
Déclaration:
int fact(int n)
{
int i, f ;
for(i=1 , f=1 ; i<n ; i ++)
f=f* i ;
return (f );
}
Appel de cette fonction :
void main( )
{
int x = Fact(4) ;
int y = Fact(3) + Fact(2) ;
printf(“%d”, Fact(5)) ;
}
Fonctions – Factorielle d’un entier
41
int max(int x, int y)
{
int m ;
if (x > y)
m = x ;
else
m = y ;
return (m) ;
}
int max(int x, int y)
{
if (x > y)
return (x) ;
else
return (y) ;
}
//sans aucune variable intermédiaire
void main( )
{
int a ;
a = Max(4, 5) ;
printf(“%d”, a); // a = 5
a = Max(a, 10) ;
printf(“%d”, a); // a = 10
a = Max(a, Max(a, 5)) ;
printf(“%d”, a); // a = 10
} 42
Fonctions – Maximum de deux entiers
main() fact()
int x = Fact(4) ; n = 4
f= 24
return(24)
Lors de l’appel, il y a copie des valeurs des paramètres effectifs dans
les paramètres formels.  Passage des paramètres par valeur.
fact(4)  Paramètre effectif (appel de la fonction)
int fact(int n)  Paramètre formel (Déclaration de la fonction)
Exécution
Retour
Appel
x = 24
43
Fonctions – Passage de paramètres par valeur
Définition :
 Un pointeur est une variable qui permet de stocker une adresse
 Lorsque , l’on déclare une variable, par exemple un entier i, l’ordinateur réserve un
espace mémoire pour y stocker la valeur de i
 L’emplacement de cet espace dans la mémoire est nommé adresse
Par exemple si on déclare une variable de type entier (initialisée a 10) et que l’on
déclare un pointeur p dans lequel on range l’adresse de i (on dit que p pointe sur i)
, on a le schéma suivant :
Passage de paramètres par adresse: Les
pointeurs
44
10 124
Mémoire
124 226
i p
On déclare une variable de type pointeur en préfixant le nom de la variable par le
caractère * .
Type *p;
p: p est un pointeur sur une variable de type Type. C’est une adresse
*p: permet d’accéder à la valeur de la variable pointée.
Exemple 1:
On veut déclarer un pointeur p qui va contenir l’adresse d’un entier
int *p ; // cette déclaration signifie que p va contenir l’adresse d’un entier
int A = 20 ;
p = &A ; p contient l’adresse mémoire de la variable A.
*p : le contenu de la case mémoire pointée par p (contenu de la variable A).
donc *p est égal à A
Les pointeurs
45
Exemple 2 :
int *p ;
int x = 5 ;
int y ;
p = &x ;
y = *p + 1 ; //  y = x + 1  y = 6
*p = *p + 10 ; //  x = x + 10  x = 15
*p +=2 //  x = x + 2  x = 17
(*p)++ ; //  x++  x = 18
Si on a :
int *p ;
int A =&p ;
Alors p contient l’adresse mémoire de l’entier A ;
*p est un entier  *p = A
Les pointeurs
46
Les pointeurs
47
Exemple 3 :
i n t i =3;
i n t ∗p ;
p = &i;
Variable Adresse Valeur
i 4830000 3
p 4830004 4830000
*p 4830000 3
La taille d’un entier en octets: 4
Exercice :
Considérons les variables suivantes :
int A = 1 ;
int B = 2 ;
int C = 3 ;
int *p1 ;
int *p2 ;
Le tableau suivant contient l’effet de chaque commande sur les variables.
Les pointeurs
48
A B C p1 p2
p1 = &A ; 1 2 3 &A -
p2 = &C ; 1 2 3 &A &C
*p1 = (*p2)++ ; 4 2 3 &A &C
p1 = p2 ; 4 2 3 &C &C
p2 = &B ; 4 2 3 &C &B
*p1 -= *p2 ≅ (*p1=*p1-*p2); 4 2 1 &C &B
*p2++ ; 4 3 1 &C &B
*p1 *= *p2 ≅ (*p1=*p1 * *p2); 4 3 3 &C &B
p1 = &A ; 16 3 3 &A &B
Les pointeurs
49
Arithmétique des pointeurs
50
 La valeur d'un pointeur est un entier.
 On peut appliquer à un pointeur quelques opérations arithmétiques :
 Addition d'un entier a un pointeur.
 Soustraction d'un entier a pointeur.
 Différence entre deux pointeurs (de même type).
 Soit i un entier et p un pointeur sur un élément de type Type ,
L'expression p'=p+i (resp. p= p − i) désigne un pointeur sur un
élément de type Type ,
la valeur de p est égale a la valeur de p incrémenté (resp.
décrémenté) de i ∗ sizeof(Type).
Arithmétique des pointeurs
51
Variable Adresse Valeur
i 4830000 5
p1 4830004 4830008
p2 4830008 4830000
main()
{
int i=5;
int * p1;
int * p2;
p1=&i+2;
p2=p1-2;
}
Initialisation des pointeurs
52
 Par défaut, lorsque l’on declare un pointeur, on ne sait pas sur quoi il
pointe.
 Comme toute variable, il faut l’initialiser. On peut dire qu’un pointeur
ne pointe sur rien en lui affectant la valeur NULL.
Exemple :
Int i;
Int *p1, *p2;
p1 = &i;
p2 = NULL;
53
Initialisation des pointeurs
 Deux initialisations possibles pour les pointeurs:
 l’affectation de l’adresse d’une autre variable.
Par exemple
int x;
int * p;
p=&x;
 l’allocation dynamique d’un espace mémoire.
54
Initialisation des pointeurs :
Allocation dynamique
 L’allocation dynamique est l’opération qui consiste à réserver un
espace mémoire d’une taille définie.
 L’allocation dynamique en C se fait à traver l’intermédiare (entre
autre) de la fonction de la librairie standard stdlib :
void *malloc(size_t size);
Cette foncion retourne un pointeur de type void * pointant vers espace
mémoire de taille size.
Il faut utiliser l’opérateur de cast afin de modifier et d’adapter le type du
pointeur selon le besoin
Exemple :
Int *t ;
T= (int*) malloc (10* sizeof(int));
55
Les pointeurs: Libération de l’espace
mémoire
 C’est l’opération qui consiste à la libération de l’espace mémoire
alloué
 En C, la libération de l’espace mémoire se fait par l’intermédiaire de la
fonction de la librairie standard stdlib.h
void free(nom_pointeur);
Tout espace mémoire alloué par la fonction malloc (ou équivalent) doit
être libéré par la fonction free.
Exemple:
int x;
x=(int*)malloc (sizeof(int));
…..
free(x);
56
Passage de paramètre en entrée
void permut_v(int a, int b)
{
int x=a ;
a=b ;
b=x ;
}
void main()
{
int i=5,j=3 ;
permut_v(i,j) ;
printf(“i=%d, j=%d”, i,j) ;
}
main permut_v
i=5, j=3
i=5, j=3
les valeurs des variables i et j de la
fct main ont été copiées dans les
paramètres a et b de la fonction
permut_v, la modification de a et b
n’altère en aucun cas les valeurs de
i et j
a=5, b=3
a=3, b=5
en mémoire a et b sont distinctes de
i et j, les paramètres formels ont
simplement reçu une copie des
valeurs des variables i et j
Appel
Retour
Exécution
57
Passage de paramètres en entrée/sortie ou
sortie
void permut_a(int *a, int *b)
{
int x =*a ;
*a = *b ;
*b =x ;
}
void main()
{
int i=5,j=3 ;
permut_a(&i,&j) ;
printf(“i=%d, j=%d”, i,j) ;
}
main permut_v
i=5, j=3
i=3, j=5
La permutation a bien eu lieu car la
fonction main a transmis à la fonction
permut_a les adresses des variables i
et j aux pointeurs a et b.
a=&i, b=&j,*a=5,*b=3
*a=3, *b=5 i=3,j=5
a contient l’adresse de i et b contient
l’adresse de jla modification de *a et
*b modifie systématiquement les
variables i et j de la fonction main.
Appel
Retour
Exécution
58
Passage de paramètres en entrée/sortie ou
sortie
Exemple illustratif
59
#include<stdio.h>
void permutation( int * a, int* b)
{
int aux;
aux = *a;
*a = *b;
*b = aux;
}
int main( )
{
/*1*/int entier1, entier 2;
/*2*/ printf(“Saisir les deux entiersn”) ;
/*3*/ scanf(“%d%d”,&entier1,& entier2) ;
/*4*/ permutation(& entier1,& entier2);
/*5*/ printf(“Apres permutation : a =%d b =%d”,a,b) ;
/*6*/ printf(“%d*%d=%dn”,a,b,produit(a,b)) ;
}
Mémoire
entier1
entier2
@12 @15 a
b
@30
@42
5 2
int produit( int x, int y){
return(x*y);
}
Instruction
1
2
4
3
5
6
Affichage
Saisir les deux entiers
5 2
@12
@15
a= @12 *a=5
b= @15 *b=2
Apres permutation a=2 b=5
//permutation(@12,@15)
produit(2,5)
x=2 y=5
2*5= 10
60
Passage de paramètres en entrée/sortie ou
sortie

Contenu connexe

Tendances

Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)
Sana Aroussi
 
Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en c
benouini rachid
 
Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
Sana Aroussi
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Chapitre 01 - Notions de base
Chapitre 01 - Notions de baseChapitre 01 - Notions de base
Chapitre 01 - Notions de base
L’Université Hassan 1er Settat
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
ECAM Brussels Engineering School
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
Aziz Darouichi
 
Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++
Amina HAMEURLAINE
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage C
Mohamed Lahby
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siNarûtö Bàl'Sèm
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage C
Abdoulaye Dieng
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
coursuniv
 
02 correction-td smi-s3-algo2
02 correction-td smi-s3-algo202 correction-td smi-s3-algo2
02 correction-td smi-s3-algo2
L’Université Hassan 1er Settat
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
Sana Aroussi
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
Aziz Darouichi
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
FadouaBouafifSamoud
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerSana Aroussi
 
Correction de td poo n2
Correction de td poo n2Correction de td poo n2
Correction de td poo n2yassine kchiri
 
Bac info 2000-2015 (Tunisie)
Bac info 2000-2015 (Tunisie)Bac info 2000-2015 (Tunisie)
Bac info 2000-2015 (Tunisie)
salah fenni
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitives
InforMatica34
 

Tendances (20)

Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)
 
Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en c
 
Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Chapitre 01 - Notions de base
Chapitre 01 - Notions de baseChapitre 01 - Notions de base
Chapitre 01 - Notions de base
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage C
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 si
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage C
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
02 correction-td smi-s3-algo2
02 correction-td smi-s3-algo202 correction-td smi-s3-algo2
02 correction-td smi-s3-algo2
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régner
 
Correction de td poo n2
Correction de td poo n2Correction de td poo n2
Correction de td poo n2
 
Bac info 2000-2015 (Tunisie)
Bac info 2000-2015 (Tunisie)Bac info 2000-2015 (Tunisie)
Bac info 2000-2015 (Tunisie)
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitives
 

Similaire à Chapitre 4 Fonctions et procédures.pdf

03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf
Ahmed12314
 
les sous programmes.pptx
les sous programmes.pptxles sous programmes.pptx
les sous programmes.pptx
ZouidAmineMedGhaith
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
ABDESSELAM ARROU
 
Les fonctions.pptx
Les fonctions.pptxLes fonctions.pptx
Les fonctions.pptx
souadsadki2
 
0015- Sous-programmes (Partie 4 - Divers Bonnes Pratiques).ppt
0015- Sous-programmes (Partie 4 - Divers  Bonnes Pratiques).ppt0015- Sous-programmes (Partie 4 - Divers  Bonnes Pratiques).ppt
0015- Sous-programmes (Partie 4 - Divers Bonnes Pratiques).ppt
OlyvierNzighou1
 
ch6 les sous programmes.pdf
ch6 les sous programmes.pdfch6 les sous programmes.pdf
ch6 les sous programmes.pdf
FadouaBouafifSamoud
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
Mariem ZAOUALI
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
Aziz Darouichi
 
POO en C++: Les fonctions
POO en C++: Les fonctionsPOO en C++: Les fonctions
POO en C++: Les fonctions
Amina HAMEURLAINE
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
L’Université Hassan 1er Settat
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
AyoubElmrabet6
 
Langage C
Langage CLangage C
Langage C
mohamednacim
 
PHP : les fondamentaux (2ème partie)
PHP : les fondamentaux (2ème partie)PHP : les fondamentaux (2ème partie)
PHP : les fondamentaux (2ème partie)
CodeFormation
 
Algorithmique iv
Algorithmique ivAlgorithmique iv
Algorithmique iv
Rachid Lajouad
 
syntax-matlab.pdf
syntax-matlab.pdfsyntax-matlab.pdf
syntax-matlab.pdf
YasmineChihab
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
rezgui mohamed
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)ISIG
 

Similaire à Chapitre 4 Fonctions et procédures.pdf (20)

03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf
 
les sous programmes.pptx
les sous programmes.pptxles sous programmes.pptx
les sous programmes.pptx
 
Theme 7
Theme 7Theme 7
Theme 7
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Les fonctions.pptx
Les fonctions.pptxLes fonctions.pptx
Les fonctions.pptx
 
0015- Sous-programmes (Partie 4 - Divers Bonnes Pratiques).ppt
0015- Sous-programmes (Partie 4 - Divers  Bonnes Pratiques).ppt0015- Sous-programmes (Partie 4 - Divers  Bonnes Pratiques).ppt
0015- Sous-programmes (Partie 4 - Divers Bonnes Pratiques).ppt
 
ch6 les sous programmes.pdf
ch6 les sous programmes.pdfch6 les sous programmes.pdf
ch6 les sous programmes.pdf
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
POO en C++: Les fonctions
POO en C++: Les fonctionsPOO en C++: Les fonctions
POO en C++: Les fonctions
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
Python chapitre 4.pdf
Python chapitre 4.pdfPython chapitre 4.pdf
Python chapitre 4.pdf
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
Langage C
Langage CLangage C
Langage C
 
PHP : les fondamentaux (2ème partie)
PHP : les fondamentaux (2ème partie)PHP : les fondamentaux (2ème partie)
PHP : les fondamentaux (2ème partie)
 
Theme 6
Theme 6Theme 6
Theme 6
 
Algorithmique iv
Algorithmique ivAlgorithmique iv
Algorithmique iv
 
syntax-matlab.pdf
syntax-matlab.pdfsyntax-matlab.pdf
syntax-matlab.pdf
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)
 

Dernier

05-La génétique, un levier majeur pour les enjeux à venir
05-La génétique, un levier majeur pour les enjeux à venir05-La génétique, un levier majeur pour les enjeux à venir
05-La génétique, un levier majeur pour les enjeux à venir
Institut de l'Elevage - Idele
 
Presentation ing 1 pour le soutnance .pptx
Presentation ing 1 pour le soutnance .pptxPresentation ing 1 pour le soutnance .pptx
Presentation ing 1 pour le soutnance .pptx
mohamedbnkh22
 
2024 03 27 JTC actualités C Perrot (idele).pdf
2024 03 27 JTC actualités C Perrot (idele).pdf2024 03 27 JTC actualités C Perrot (idele).pdf
2024 03 27 JTC actualités C Perrot (idele).pdf
idelewebmestre
 
JTC 2024 - Atelier APaChe-Pâturage des arbres par les chèvres
JTC 2024 - Atelier APaChe-Pâturage des arbres par les chèvresJTC 2024 - Atelier APaChe-Pâturage des arbres par les chèvres
JTC 2024 - Atelier APaChe-Pâturage des arbres par les chèvres
Institut de l'Elevage - Idele
 
Présentation_Soirée-Information_ St-Eugène.pptx
Présentation_Soirée-Information_ St-Eugène.pptxPrésentation_Soirée-Information_ St-Eugène.pptx
Présentation_Soirée-Information_ St-Eugène.pptx
Ville de Châteauguay
 
RAPPORT DE STAGE sur CHANTIER BTP (by BR Engineering ) (1) (1).pdf
RAPPORT DE STAGE  sur CHANTIER  BTP (by BR Engineering ) (1) (1).pdfRAPPORT DE STAGE  sur CHANTIER  BTP (by BR Engineering ) (1) (1).pdf
RAPPORT DE STAGE sur CHANTIER BTP (by BR Engineering ) (1) (1).pdf
fatima413951
 
JTC 2024 - Pour une traite de qualité, mieux comprendre l’interface trayon-ma...
JTC 2024 - Pour une traite de qualité, mieux comprendre l’interface trayon-ma...JTC 2024 - Pour une traite de qualité, mieux comprendre l’interface trayon-ma...
JTC 2024 - Pour une traite de qualité, mieux comprendre l’interface trayon-ma...
Institut de l'Elevage - Idele
 
Provinlait 2024-Leviers fourrages - Madrid Aurélie Frayssinhes, Sandra (Cha...
Provinlait 2024-Leviers fourrages - Madrid  Aurélie  Frayssinhes, Sandra (Cha...Provinlait 2024-Leviers fourrages - Madrid  Aurélie  Frayssinhes, Sandra (Cha...
Provinlait 2024-Leviers fourrages - Madrid Aurélie Frayssinhes, Sandra (Cha...
idelewebmestre
 
JTC_2024_TC Bâtiment et bien-être estival.pdf
JTC_2024_TC Bâtiment et bien-être estival.pdfJTC_2024_TC Bâtiment et bien-être estival.pdf
JTC_2024_TC Bâtiment et bien-être estival.pdf
idelewebmestre
 
JTC 2024 - Approche collective de la santé
JTC 2024 - Approche collective de la santéJTC 2024 - Approche collective de la santé
JTC 2024 - Approche collective de la santé
Institut de l'Elevage - Idele
 
memoire_soutenance_KOISONN_MANES_MANA_AL.pdf
memoire_soutenance_KOISONN_MANES_MANA_AL.pdfmemoire_soutenance_KOISONN_MANES_MANA_AL.pdf
memoire_soutenance_KOISONN_MANES_MANA_AL.pdf
boukardanzha
 
01-La génétique s’adapte à la demande de la filière ovine
01-La génétique s’adapte à la demande de la filière ovine01-La génétique s’adapte à la demande de la filière ovine
01-La génétique s’adapte à la demande de la filière ovine
Institut de l'Elevage - Idele
 
BeeBOP diaporama webinaire : Et si l’IA permettait de compléter l’observatio...
BeeBOP diaporama webinaire : Et si l’IA permettait de compléter l’observatio...BeeBOP diaporama webinaire : Et si l’IA permettait de compléter l’observatio...
BeeBOP diaporama webinaire : Et si l’IA permettait de compléter l’observatio...
Institut de l'Elevage - Idele
 
JTC 2024 - Actualités sur le bien-être animal
JTC 2024 - Actualités sur le bien-être animalJTC 2024 - Actualités sur le bien-être animal
JTC 2024 - Actualités sur le bien-être animal
Institut de l'Elevage - Idele
 

Dernier (14)

05-La génétique, un levier majeur pour les enjeux à venir
05-La génétique, un levier majeur pour les enjeux à venir05-La génétique, un levier majeur pour les enjeux à venir
05-La génétique, un levier majeur pour les enjeux à venir
 
Presentation ing 1 pour le soutnance .pptx
Presentation ing 1 pour le soutnance .pptxPresentation ing 1 pour le soutnance .pptx
Presentation ing 1 pour le soutnance .pptx
 
2024 03 27 JTC actualités C Perrot (idele).pdf
2024 03 27 JTC actualités C Perrot (idele).pdf2024 03 27 JTC actualités C Perrot (idele).pdf
2024 03 27 JTC actualités C Perrot (idele).pdf
 
JTC 2024 - Atelier APaChe-Pâturage des arbres par les chèvres
JTC 2024 - Atelier APaChe-Pâturage des arbres par les chèvresJTC 2024 - Atelier APaChe-Pâturage des arbres par les chèvres
JTC 2024 - Atelier APaChe-Pâturage des arbres par les chèvres
 
Présentation_Soirée-Information_ St-Eugène.pptx
Présentation_Soirée-Information_ St-Eugène.pptxPrésentation_Soirée-Information_ St-Eugène.pptx
Présentation_Soirée-Information_ St-Eugène.pptx
 
RAPPORT DE STAGE sur CHANTIER BTP (by BR Engineering ) (1) (1).pdf
RAPPORT DE STAGE  sur CHANTIER  BTP (by BR Engineering ) (1) (1).pdfRAPPORT DE STAGE  sur CHANTIER  BTP (by BR Engineering ) (1) (1).pdf
RAPPORT DE STAGE sur CHANTIER BTP (by BR Engineering ) (1) (1).pdf
 
JTC 2024 - Pour une traite de qualité, mieux comprendre l’interface trayon-ma...
JTC 2024 - Pour une traite de qualité, mieux comprendre l’interface trayon-ma...JTC 2024 - Pour une traite de qualité, mieux comprendre l’interface trayon-ma...
JTC 2024 - Pour une traite de qualité, mieux comprendre l’interface trayon-ma...
 
Provinlait 2024-Leviers fourrages - Madrid Aurélie Frayssinhes, Sandra (Cha...
Provinlait 2024-Leviers fourrages - Madrid  Aurélie  Frayssinhes, Sandra (Cha...Provinlait 2024-Leviers fourrages - Madrid  Aurélie  Frayssinhes, Sandra (Cha...
Provinlait 2024-Leviers fourrages - Madrid Aurélie Frayssinhes, Sandra (Cha...
 
JTC_2024_TC Bâtiment et bien-être estival.pdf
JTC_2024_TC Bâtiment et bien-être estival.pdfJTC_2024_TC Bâtiment et bien-être estival.pdf
JTC_2024_TC Bâtiment et bien-être estival.pdf
 
JTC 2024 - Approche collective de la santé
JTC 2024 - Approche collective de la santéJTC 2024 - Approche collective de la santé
JTC 2024 - Approche collective de la santé
 
memoire_soutenance_KOISONN_MANES_MANA_AL.pdf
memoire_soutenance_KOISONN_MANES_MANA_AL.pdfmemoire_soutenance_KOISONN_MANES_MANA_AL.pdf
memoire_soutenance_KOISONN_MANES_MANA_AL.pdf
 
01-La génétique s’adapte à la demande de la filière ovine
01-La génétique s’adapte à la demande de la filière ovine01-La génétique s’adapte à la demande de la filière ovine
01-La génétique s’adapte à la demande de la filière ovine
 
BeeBOP diaporama webinaire : Et si l’IA permettait de compléter l’observatio...
BeeBOP diaporama webinaire : Et si l’IA permettait de compléter l’observatio...BeeBOP diaporama webinaire : Et si l’IA permettait de compléter l’observatio...
BeeBOP diaporama webinaire : Et si l’IA permettait de compléter l’observatio...
 
JTC 2024 - Actualités sur le bien-être animal
JTC 2024 - Actualités sur le bien-être animalJTC 2024 - Actualités sur le bien-être animal
JTC 2024 - Actualités sur le bien-être animal
 

Chapitre 4 Fonctions et procédures.pdf

  • 1. 1
  • 2. Chapitre 4 Fonctions et procédures 2 2
  • 3. Plan 3  Partie 1: Les sous-programmes  Partie 2: Les fonctions  Partie 3: Les procédures  Partie 4: Portée d’une variable  Partie 5: Paramètres formels/effectifs  Partie 6: Transmission de paramètres  Partie 7: De l’algorithmique au langage C
  • 4. Plan 4  Partie 1: Les sous-programmes  Partie 2: Les fonctions  Partie 3: Les procédures  Partie 4: Portée d’une variable  Partie 5: Paramètres formels/effectifs  Partie 6: Transmission de paramètres  Partie 7: De l’algorithmique au langage C
  • 5. Sous-programmes - Décomposer pour résoudre 5  Analyse descendante Approche incrémentale consistant à analyser la spécification d’un problème selon son arborescence  Décomposition / combinaison à chaque niveau de l’arborescence :  Décomposer le problème en un certain nombre de sous- problèmes qu’on supposera résolus  Combiner les solutions des sous-problèmes pour résoudre le problème courant  Résoudre les sous-problèmes par la même approche
  • 6.  Par exemple, pour résoudre le problème suivant : Ecrire un programme qui affiche les nombres parfaits compris entre 0 et une valeur n saisie par l’utilisateur. ex: 28=1+2+4+7+14. Cela revient à résoudre : 1. Demander à l’utilisateur de saisir un entier n 2. Savoir si un nombre donné est parfait  2. 1. Savoir si un nombre est diviseur d’un autre nombre  2. 2. Calculer la somme des diviseurs d’un nombre 3. Afficher les nombres parfaits entre 0 et n Sous-programmes - Décomposer pour résoudre 6
  • 7.  Chacun de ces sous-problèmes devient un nouveau problème à résoudre.  Si on considère que l’on sait résoudre ces sous-problèmes, alors on sait “quasiment” résoudre le problème initial.  Donc écrire un programme qui résout un problème revient toujours à écrire des sous-programmes qui résolvent des sous parties du problème initial.  En algorithmique il existe deux types de sous-programmes :  Les fonctions  Les procédures  Un sous-programme est obligatoirement caractérisé par un nom (identifiant) unique  Le programme qui utilise un sous-programme est appelé le programme appelant. Sous-programmes - Décomposer pour résoudre 7
  • 8. 8 Sous-programmes - Décomposer pour résoudre Fonction Traitement de la fonction Données en entrée Un seul résultat en sortie Procédure Traitement de la procédure Données en entrée 0 ou plusieurs résultats en sortie  Une fonction rend un et un seul résultat Une procédure rend zéro ou plusieurs résultat
  • 9. Plan 9  Partie 1: Les sous-programmes  Partie 2: Les fonctions  Partie 3: Les procédures  Partie 4: Portée d’une variable  Partie 5: Paramètres formels/effectifs  Partie 6: Transmission de paramètres  Partie 7: De l’algorithmique au langage C
  • 10. 25 Fonction NomDeLaFonction (paramètres et leurs types) : type_valeur_retour_fonction Var variable locale 1 : type 1; . . . début instructions de la fonction Retourner expression FinFonction Les fonctions – Déclaration d’une fonction 10
  • 11. 25  type_valeur_retour_fonction est le type du résultat renvoyé par la fonction  liste de paramètres est la liste des paramètres formels donnés en entrée avec leurs types de la forme p_1: type_1, . . . , p_n: type_n,  Le corps de la fonction doit comporter une instruction de la forme : retourner(expression); cette instruction met fin à l’exécution de la fonction et retourne expression comme résultat Les fonctions – Déclaration d’une fonction 11
  • 12. Les fonctions – Exemple 1 12 Fonction
  • 13. Les fonctions – Exemple 2 13 Fonction
  • 14. 14 Les fonctions – Exemple 3 Fonction
  • 15. 15  L’appel d'une fonction se fait par simple écriture de son nom dans le programme principale suivi des paramètres entre parenthèses ( les parenthèses sont toujours présentes même lorsqu’il n’y a pas de paramètre). NomDeLaFonction(<iste de paramètres)  liste de paramètres est la liste des paramètres effectifs de la forme q_1,. ., q_n, avec q_i un paramètre de type type p_i  L’appel de la fonction retourne une valeur calculée en fonction des paramètres effectifs  La liste des paramètres effectifs doit être compatible avec la liste des paramètres formels de la déclaration de la fonction  Lors de l’appel, chacun des paramètres formels est remplacé par le paramètre effectif Les fonctions – Appel d’une fonction
  • 16.  L‘appel d'une fonction se fait par simple écriture de son nom dans le programme principale. Le résultat étant une valeur, devra être affecté ou être utilisé dans une expression Exemple: Fonction Pair (n : entier ) : booléen Debut retourner (n%2=0) FinFonction Algorithme AppelFonction Var: c : réel, b : booléen Début b ← Pair(3) ….. Fin  Lors de l'appel Pair(3), le paramètre formel n est remplacé par le paramètre effectif 3 Les fonctions – Appel d’une fonction 16
  • 17. 17 Les fonctions – Appel d’une fonction Fonction Fonction
  • 18. Plan 18  Partie 1: Les sous-programmes  Partie 2: Les fonctions  Partie 3: Les procédures  Partie 4: Portée d’une variable  Partie 5: Paramètres formels/effectifs  Partie 6: Transmission de paramètres  Partie 7: De l’algorithmique au langage C
  • 19.  Une procédure est un sous-programme semblable à une fonction mais qui ne retourne rien.  Une procédure s'écrit en dehors du programme principal sous la forme :  Remarque : une procédure peut ne pas avoir de paramètres. Les procédures – Déclaration 19 Procédure NomDeLaProcédure (paramètres et leurs types) Var variable locale 1 : type 1; . . . début instructions de la procédure FinProcédure
  • 20.  L'appel d'une procédure, se fait dans le programme principal ou dans une autre procédure par une instruction indiquant le nom de la procédure : Procédure exemple_proc (…) … FinProcédure Algorithme exempleAppelProcédure Début exemple_proc (…) … Fin  Remarque : contrairement à l'appel d'une fonction, on ne peut pas affecter la procédure appelée ou l'utiliser dans une expression. Les procédures – Appel 20
  • 21. Plan 21  Partie 1: Les sous-programmes  Partie 2: Les fonctions  Partie 3: Les procédures  Partie 4: Portée d’une variable  Partie 5: Paramètres formels/effectifs  Partie 6: Transmission de paramètres  Partie 7: De l’algorithmique au langage C
  • 22.  La portée d'une variable: l'ensemble des sous-programmes où cette variable est connue (les instructions de ces sous-programmes peuvent utiliser cette variable)  Une variable définie au niveau du programme principal (celui qui résout le problème initial) est appelée variable globale  Sa portée est totale : tout sous-programme du programme principal peut utiliser cette variable  Une variable définie au sein d'un sous programme est appelée variable locale  La portée d’une variable locale est uniquement le sous-programme qui la déclare. Lorsque le nom d'une variable locale est identique à une variable globale, la variable globale est localement masquée : Dans ce sous-programme la variable globale devient inaccessible Portée d’une variable 22
  • 23. Plan 23  Partie 1: Les sous-programmes  Partie 2: Les fonctions  Partie 3: Les procédures  Partie 4: Portée d’une variable  Partie 5: Paramètres formels/effectifs  Partie 6: Transmission de paramètres  Partie 7: De l’algorithmique au langage C
  • 24.  Les paramètres servent à échanger des données entre le programme principale (ou le sous-programme appelant) et le sous-programme appelé.  Les paramètres placés dans la déclaration d'un sous-programme sont appelés paramètres formels. Ces paramètres peuvent prendre toutes les valeurs possibles mais ils sont abstraits (n'existent pas réellement)  Les paramètres placés dans l'appel d’un sous-programme sont appelés paramètres effectifs. ils contiennent les valeurs pour effectuer le traitement  Le nombre de paramètres effectifs doit être égal au nombre de paramètres formels. L'ordre et le type des paramètres doivent correspondre. Paramètres formels/effectifs 24
  • 25. Plan 25  Partie 1: Les sous-programmes  Partie 2: Les fonctions  Partie 3: Les procédures  Partie 4: Portée d’une variable  Partie 5: Paramètres formels/effectifs  Partie 6: Transmission de paramètres  Partie 7: De l’algorithmique au langage C
  • 26.  Il existe deux modes de transmission de paramètres dans les langages de programmation : La transmission par valeur : les valeurs des paramètres effectifs sont affectées aux paramètres formels correspondants au moment de l'appel de la procédure. Dans ce mode le paramètre effectif ne subit aucune modification La transmission par adresse (ou par référence) : les adresses des paramètres effectifs sont transmises à la procédure appelante. Dans ce mode, le paramètre effectif subit les mêmes modifications que le paramètre formel lors de l'exécution de la procédure Remarque : le paramètre effectif doit être une variable (et non une valeur) lorsqu'il s'agit d'une transmission par adresse Transmission de paramètres 26
  • 27. Passage des paramètres par valeur (en Entrée)  Les paramètres formels sont initialisés par une copie des valeurs des paramètres effectifs  Modifier la valeur des paramètres formels dans le corps de la fonction ne change pas la valeur des paramètres effectifs Passage d’arguments dans une fonction 27
  • 28. 28 Passage d’arguments dans une fonction Algorithme exemple1 Var a,b : Entier Fonction abs (unEntier : Entier) : Entier Var ValeurAbsolue: Entier Debut Si(unEntier>=0) alors ValeurAbsolue unEntier Sinon ValeurAbsolue - unEntier Finsi Retourner (ValeurAbsolue) FinFonction début écrire("Entrez un entier:") lire(a) Babs(a) écrire("la valeur absolue de",a," est ",b) Fin 28
  • 29.  Les procédures sont des sous-programmes qui ne retournent aucun résultat.  Par contre elle admettent des paramètres avec des passages: En entrée, préfixés par Entrée (ou E) En sortie préfixés par Sortie (ou S) En entrée/sortie, préfixés par Entrée/Sortie (ou E/S)  Les paramètres en Entrée sont considérés aussi comme paramètres passés par valeur.  Les paramètre en sortie ou en Entrée/ sortie sont considéré aussi comme paramètres passés par adresse ou par référence. Passage d’arguments dans une procédure 29
  • 30.  On déclare une procédure de la façon suivante : Procédure NomDeLaProcédure ( E paramètre(s) en entrée; S paramètre(s) en sortie; E/S paramètre(s) en entrée/sortie ) Var variable(s) locale(s) début instructions de la procédure FinProcédure  Et on appelle une procédure comme une fonction, en indiquant son nom suivi des paramètres entre parenthèses Déclaration d’une procédure 30
  • 31. Algorithme exemple Var entier1,entier2,entier3,min,max : Entier Fonction minimum2 (a,b : Entier) : Entier . . . Fonction minimum3 (a,b,c : Entier) : Entier . . . Procédure calculerMinMax3 ( E a,b,c : Entier ; S min3,max3 : Entier ) Début min3 minimum3(a,b,c) max3 maximum3(a,b,c) Fin début é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 Procédures – Exemple 1 31
  • 32. Procédures – Exemple 2 32 Algorithme exemple2 Var a,b : entier Procédure echanger (E/S val1: entier , E/S val2: entier ) Var temp: entier Début temp val1 val1 val2 val2 temp FinProcédure début écrire("Entrez deux entiers :") lire(a,b) echanger(a,b) écrire(« a= ",a," et b= ",b) Fin
  • 33. Plan 33  Partie 1: Les sous-programmes  Partie 2: Les fonctions  Partie 3: Les procédures  Partie 4: Portée d’une variable  Partie 5: Paramètres formels/effectifs  Partie 6: Transmission de paramètres  Partie 7: De l’algorithmique au langage C
  • 34. Structure d’un programme en C 34  La décomposition d’un programme en sous programmes permet d’avoir des programmes plus lisibles, plus faciles à mettre à jour et plus simples à développer puisqu’on ne s’intéresse qu’à une seule tâche à la fois.  Un programme en C est une collection de fonctions. L’une des fonctions doit s’appeler main. L’exécution d’un programme C correspond à l’exécution de la fonction main. Les autres fonctions sont exécutées si elles sont appelées dans la fonction main.  Il n’y a pas de procédure en C. Pour traduire une procédure, on crée une fonction qui ne retourne pas de valeur, on utilise alors le type void comme type de retour.
  • 35. 35 Déclaration d’une fonction  typeRetour NomFonction (type1 arg1, type2 arg2 …typeN argN) // paramètres formels arg1, arg2, …,argN { // variables locales instructions ; return val; }  . L’entête de la fonction comprend : 1. typeRetour : le type du résultat retourné, une fonction qui ne retourne rien est de type void. 2. Le nom de la fonction. 3. La liste de ses paramètres : arguments de la fonction. Cette liste peut être vide.  Le corps : contient des déclarations de variables, des instructions C (conditions, boucles ...). L’instruction return permet de retourner le résultat de la fonction au programme qui l’a appelée
  • 37. 37 Appel des fonctions Appel d’une fonction : Variable = Nom_fonction(arg1, arg2, …, argN); Appel d’une procédure : Nom_procedure(arg1, arg2, …, argN);
  • 38. Si la fonction est écrite après la fonction main, il faut donner son prototype (en-tête) avant cette dernière : 38 Appel des fonctions
  • 40. 40 Que se passe t-il en mémoire?
  • 41. Déclaration: int fact(int n) { int i, f ; for(i=1 , f=1 ; i<n ; i ++) f=f* i ; return (f ); } Appel de cette fonction : void main( ) { int x = Fact(4) ; int y = Fact(3) + Fact(2) ; printf(“%d”, Fact(5)) ; } Fonctions – Factorielle d’un entier 41
  • 42. int max(int x, int y) { int m ; if (x > y) m = x ; else m = y ; return (m) ; } int max(int x, int y) { if (x > y) return (x) ; else return (y) ; } //sans aucune variable intermédiaire void main( ) { int a ; a = Max(4, 5) ; printf(“%d”, a); // a = 5 a = Max(a, 10) ; printf(“%d”, a); // a = 10 a = Max(a, Max(a, 5)) ; printf(“%d”, a); // a = 10 } 42 Fonctions – Maximum de deux entiers
  • 43. main() fact() int x = Fact(4) ; n = 4 f= 24 return(24) Lors de l’appel, il y a copie des valeurs des paramètres effectifs dans les paramètres formels.  Passage des paramètres par valeur. fact(4)  Paramètre effectif (appel de la fonction) int fact(int n)  Paramètre formel (Déclaration de la fonction) Exécution Retour Appel x = 24 43 Fonctions – Passage de paramètres par valeur
  • 44. Définition :  Un pointeur est une variable qui permet de stocker une adresse  Lorsque , l’on déclare une variable, par exemple un entier i, l’ordinateur réserve un espace mémoire pour y stocker la valeur de i  L’emplacement de cet espace dans la mémoire est nommé adresse Par exemple si on déclare une variable de type entier (initialisée a 10) et que l’on déclare un pointeur p dans lequel on range l’adresse de i (on dit que p pointe sur i) , on a le schéma suivant : Passage de paramètres par adresse: Les pointeurs 44 10 124 Mémoire 124 226 i p
  • 45. On déclare une variable de type pointeur en préfixant le nom de la variable par le caractère * . Type *p; p: p est un pointeur sur une variable de type Type. C’est une adresse *p: permet d’accéder à la valeur de la variable pointée. Exemple 1: On veut déclarer un pointeur p qui va contenir l’adresse d’un entier int *p ; // cette déclaration signifie que p va contenir l’adresse d’un entier int A = 20 ; p = &A ; p contient l’adresse mémoire de la variable A. *p : le contenu de la case mémoire pointée par p (contenu de la variable A). donc *p est égal à A Les pointeurs 45
  • 46. Exemple 2 : int *p ; int x = 5 ; int y ; p = &x ; y = *p + 1 ; //  y = x + 1  y = 6 *p = *p + 10 ; //  x = x + 10  x = 15 *p +=2 //  x = x + 2  x = 17 (*p)++ ; //  x++  x = 18 Si on a : int *p ; int A =&p ; Alors p contient l’adresse mémoire de l’entier A ; *p est un entier  *p = A Les pointeurs 46
  • 47. Les pointeurs 47 Exemple 3 : i n t i =3; i n t ∗p ; p = &i; Variable Adresse Valeur i 4830000 3 p 4830004 4830000 *p 4830000 3 La taille d’un entier en octets: 4
  • 48. Exercice : Considérons les variables suivantes : int A = 1 ; int B = 2 ; int C = 3 ; int *p1 ; int *p2 ; Le tableau suivant contient l’effet de chaque commande sur les variables. Les pointeurs 48
  • 49. A B C p1 p2 p1 = &A ; 1 2 3 &A - p2 = &C ; 1 2 3 &A &C *p1 = (*p2)++ ; 4 2 3 &A &C p1 = p2 ; 4 2 3 &C &C p2 = &B ; 4 2 3 &C &B *p1 -= *p2 ≅ (*p1=*p1-*p2); 4 2 1 &C &B *p2++ ; 4 3 1 &C &B *p1 *= *p2 ≅ (*p1=*p1 * *p2); 4 3 3 &C &B p1 = &A ; 16 3 3 &A &B Les pointeurs 49
  • 50. Arithmétique des pointeurs 50  La valeur d'un pointeur est un entier.  On peut appliquer à un pointeur quelques opérations arithmétiques :  Addition d'un entier a un pointeur.  Soustraction d'un entier a pointeur.  Différence entre deux pointeurs (de même type).  Soit i un entier et p un pointeur sur un élément de type Type , L'expression p'=p+i (resp. p= p − i) désigne un pointeur sur un élément de type Type , la valeur de p est égale a la valeur de p incrémenté (resp. décrémenté) de i ∗ sizeof(Type).
  • 51. Arithmétique des pointeurs 51 Variable Adresse Valeur i 4830000 5 p1 4830004 4830008 p2 4830008 4830000 main() { int i=5; int * p1; int * p2; p1=&i+2; p2=p1-2; }
  • 52. Initialisation des pointeurs 52  Par défaut, lorsque l’on declare un pointeur, on ne sait pas sur quoi il pointe.  Comme toute variable, il faut l’initialiser. On peut dire qu’un pointeur ne pointe sur rien en lui affectant la valeur NULL. Exemple : Int i; Int *p1, *p2; p1 = &i; p2 = NULL;
  • 53. 53 Initialisation des pointeurs  Deux initialisations possibles pour les pointeurs:  l’affectation de l’adresse d’une autre variable. Par exemple int x; int * p; p=&x;  l’allocation dynamique d’un espace mémoire.
  • 54. 54 Initialisation des pointeurs : Allocation dynamique  L’allocation dynamique est l’opération qui consiste à réserver un espace mémoire d’une taille définie.  L’allocation dynamique en C se fait à traver l’intermédiare (entre autre) de la fonction de la librairie standard stdlib : void *malloc(size_t size); Cette foncion retourne un pointeur de type void * pointant vers espace mémoire de taille size. Il faut utiliser l’opérateur de cast afin de modifier et d’adapter le type du pointeur selon le besoin Exemple : Int *t ; T= (int*) malloc (10* sizeof(int));
  • 55. 55 Les pointeurs: Libération de l’espace mémoire  C’est l’opération qui consiste à la libération de l’espace mémoire alloué  En C, la libération de l’espace mémoire se fait par l’intermédiaire de la fonction de la librairie standard stdlib.h void free(nom_pointeur); Tout espace mémoire alloué par la fonction malloc (ou équivalent) doit être libéré par la fonction free. Exemple: int x; x=(int*)malloc (sizeof(int)); ….. free(x);
  • 57. void permut_v(int a, int b) { int x=a ; a=b ; b=x ; } void main() { int i=5,j=3 ; permut_v(i,j) ; printf(“i=%d, j=%d”, i,j) ; } main permut_v i=5, j=3 i=5, j=3 les valeurs des variables i et j de la fct main ont été copiées dans les paramètres a et b de la fonction permut_v, la modification de a et b n’altère en aucun cas les valeurs de i et j a=5, b=3 a=3, b=5 en mémoire a et b sont distinctes de i et j, les paramètres formels ont simplement reçu une copie des valeurs des variables i et j Appel Retour Exécution 57 Passage de paramètres en entrée/sortie ou sortie
  • 58. void permut_a(int *a, int *b) { int x =*a ; *a = *b ; *b =x ; } void main() { int i=5,j=3 ; permut_a(&i,&j) ; printf(“i=%d, j=%d”, i,j) ; } main permut_v i=5, j=3 i=3, j=5 La permutation a bien eu lieu car la fonction main a transmis à la fonction permut_a les adresses des variables i et j aux pointeurs a et b. a=&i, b=&j,*a=5,*b=3 *a=3, *b=5 i=3,j=5 a contient l’adresse de i et b contient l’adresse de jla modification de *a et *b modifie systématiquement les variables i et j de la fonction main. Appel Retour Exécution 58 Passage de paramètres en entrée/sortie ou sortie
  • 59. Exemple illustratif 59 #include<stdio.h> void permutation( int * a, int* b) { int aux; aux = *a; *a = *b; *b = aux; } int main( ) { /*1*/int entier1, entier 2; /*2*/ printf(“Saisir les deux entiersn”) ; /*3*/ scanf(“%d%d”,&entier1,& entier2) ; /*4*/ permutation(& entier1,& entier2); /*5*/ printf(“Apres permutation : a =%d b =%d”,a,b) ; /*6*/ printf(“%d*%d=%dn”,a,b,produit(a,b)) ; } Mémoire entier1 entier2 @12 @15 a b @30 @42 5 2 int produit( int x, int y){ return(x*y); } Instruction 1 2 4 3 5 6 Affichage Saisir les deux entiers 5 2 @12 @15 a= @12 *a=5 b= @15 *b=2 Apres permutation a=2 b=5 //permutation(@12,@15) produit(2,5) x=2 y=5 2*5= 10
  • 60. 60 Passage de paramètres en entrée/sortie ou sortie