Module : LCI4
Elément : Informatique 2
SMP4
Pr. M.Machkour
Université Ibn Zohr 2013/2014
Faculté des Sciences Agadir
www.al3abkari-pro.com
Introduction à la programmation modulaire
Utilisation des fonctions
www.al3abkari-pro.com
Notion de fonction
En Maths, les fonctions sont nommées par f(x), g(x)…
Par exemple, si on prend la fonction f(x)=x2.
On peut aussi nommée cette fonction f par carre, on écrit
carre(x)=x2
Ici, la fonction carre prend la valeur de la variable x(réelle) , calcule et retourne la valeur x*x (réelle).
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 3 Notion de fonction (suite)
En langage C, on peut définir cette fonction carre, de la manière suivante
float carre(float x) {
return x*x;
}
Le type de la variable x Le type de
la valeur calculée et retournée de la
fonction carre
La valeur de retour de la fonction
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 4 Un exemple de fonction
Définir en C une fonction qui retourne le successeur d’un entier
int successeur(int n) {
return n+1;
}
Le type de la variable n Le type de
la valeur calculée et retournée de la
fonction carre
La valeur de retour de la fonction
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 5 Un autre exemple de fonction
Définir en C une fonction qui retourne le prédécesseur d’un entier
int predecesseur(int n) {
return n-1;
}
Le type de la variable n Le type de
la valeur calculée et retournée de la
fonction carre
La valeur de retour de la fonction
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 6 Description de la syntaxe de définition d’une fonction
La syntaxe de la définition d’une fonction comprend un entête et un corps.
float carre(float x) {
return x*x;
}
Début du corps Le type de
la valeur calculée et retournée de la
fonction carre
La valeur de retour de la fonction
Argument ou paramètre de la fonction (x)
Fin de la fonction
Nom de la fonction (carre)
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 7 Description de la syntaxe de définition d’une fonction(suite)
L'entête de la fonction est constitué de - type de retour de la fonction;
- nom de la fonction;
- paramètres de la fonction.
Exemple
float carre(float x)
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 8 Description de la syntaxe de définition d’une fonction(suite)
Le corps de la fonction est la partie limitée par le début et la fin de la fonction.
float carre(float x) {
return x*x;
}
Début de la fonction Le corps de
la fonction
Fin de la fonction
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 9 Les éléments du corps de la fonction
1. Des instructions simples 2. Des if ou switch
3. Des for, while…
4. Déclaration des variables.
Rq: les variables doivent être déclarées au début de la fonction(comme pour la fonction main).
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 10 Exercice
Donner les noms des éléments spécifiés par les chiffres
int pred(int x) {
return x-1;
}
3 6
4
2
5
1
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 11 Règles pour définir une fonction
1. Le nom de la fonction;
2. Les arguments et leurs types (type qlq du langage C);
3. Le type de retour de la fonction;
4. Le corps de la fonction ou la tâche de la fonction ou encore les instructions nécessaires pour
réaliser la tâche de la fonction.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 12 Remarque
Le type de retour et le type de l’argument ne sont pas liés.
Exemple
E(x) : partie entière de x.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 13 Fonction avec plusieurs arguments ou paramètres (variables)
En maths f(x,y), g(x,y,z)…
En langage C, on peut définir…
Exemple
On va définir une fonction qui calcule et reourne la somme de deux entiers :
somme(x,y).
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 14 Fonction avec plusieurs arguments(suite) int somme(int x, int y)
{
return x+y;
}
Rqs : les arguments de fonction sont séparés par des virgules.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 15 Exemple
Chercher une fonction qui retourne le minimum de deux entiers.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 16 Réponse 1
int min(int x, int y) { int m;
if (x<y )
m=x;
else
m=y;
return m;
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 17 Réponse 2
int min(int x, int y) {
int m;
m=x;
if (m>y) m=y;
return m;
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 18 Exemple
Chercher une fonction qui retourne le minimum de deux réels.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 19 Réponse
double min(double x, double y) { double m;
if (x<y )
m=x;
else
m=y;
return m;
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 20 Fonction avec des arguments de différents types
Une fonction peut avoir des arguments de différents types.
Exemple
La fonction puissance XN.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 21 Fonction avec des arguments de différents types(suite)
double puissance(int n, double x) { double p=1;
int i;
for(i=1; i<=n; i++) p*=x;
return p;
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 22 Utilisation d’une fonction
Quand on définit une fonction, on peut l’utiliser dans une expression ou comme argument d’une autre fonction.
On dit qu’on fait appel à la fonction.
Cet appel doit respecter :
- Le nombre d’arguments (paramètres) et leurs types
- Le type de retour de la fonction.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 23 Exemple d'appel de fonction int min(int x, int y)
{ int m;
if (x<y )
m=x;
else
m=y;
return m; } void main ()
{ int x=11, y=12, z;
z=min(x,y); //appel de la fonction min
… }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 24 Exemple d'appel de fonction int min(int x, int y)
{ int m;
if (x<y )
m=x;
else
m=y;
return m; } void main ()
{ int z;
z=min(11,12); //appel de la fonction min
… }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 25 Exemple d'appel de fonction int min(int x, int y)
{ int m;
if (x<y )
m=x;
else
m=y;
return m; } void main ()
{ int x=11, y=12, z;
z=min(x,12); //appel de la fonction min
… }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 26 Les paramètres de fonctions
-Paramètres formels : spécifier lors de la
définition de la fonction. Ils sont des variables.
-Paramètres effectifs : spécifier lors de l'appel de la fonction. Ils sont des variables, des
constantes symboliques, littérales, appels de fonctions ou expressions qlqs compatibles avec les paramètres formels.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 27 Exemple d'appel
double inverse(double x) {
if (x!=0 ) return 1/x;
}
double somme_inverse(double x, double y) { double z;
z=inverse(x)+inverse(y);
return z;
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 28 Exemple d'appel
double carre(double x) {
return x*x;
}
double somme(double x, double y) { double z;
z=x+y;
return z;
}
double module(double x, double y) { double z;
z=somme(carre(x),carre(y));
return sqrt(z);
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 29 L’instruction return
Cette instruction indique la valeur de retour
de la fonction et assure la sortie immédiate de la fonction.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 30 Exemple
int min (int x, int y) { if (x<y)
return x;
else
return y;
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 31 Exemple
int min (int x, int y) { if (x<y)
return x;
else
return y;
printf(…); // ne sera jamais atteinte }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 32 La fonction main
Un programme C peut contenir plusieurs fonctions chacune réalisant une tâche bien déterminée.
L’ensemble de ces tâches représente la tâche globale du programme.
Une de ces fonctions est la fonction main qui
représente la fonction principale. Elle représente le point d’entrée dans le programme.
Toutes les fonctions vont servir de manière directe ou indirecte la fonction main.
Cette fonction peut être utilisée sans valeur de retour et sans instruction return.
Cette fonction peut être utilisée sans argument.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 33 Exemple
int min (int x, int y) { if (x<y)
return x;
else
return y;
}
main()
{ int x, y,z;
…
z=min(x,y);
printf("%d",z);
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 34 Les fonctions prédéfinies double sqrt(double x),
double pow(double x , double y).
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 35 Exercice
Construire une fonction som_carre(int n)
qui calcule et retourne la somme des carrés des nombres de 1 à n. n étant argument de la fonction.
faire un appel à cette fonction dans la fonction main
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 36 Réponse 1
#include<stdio.h>
int som_carre(int n) //définition de la fonction {
return (n*(n+1)*(2*n+1))/6;
}
void main() //main avec void {
printf("la somme des carrés est:%d",som_carre(3));
//Appel de la fonction }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 37 Règle 1
Cette réponse à l’exercice montre
l’emplacement des définitions des fonctions dans un programme C. Elles sont placées
avant la fonction main.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 38 Réponse 2
#include<stdio.h>
int som_carre(int n); //entête de la fonction void main()
{
printf("la somme des carrés est:%d",som_carre(3));
//Appel de la fonction }
int som_carre(int n) //définition de la fonction {
return (n*(n+1)*(2*n+1))/6;
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 39 Règle 2
Cette deuxième réponse montre une autre
façon pour placer les définitions des fonctions dans un programme C. Elles sont placées
après la fonction main. L’entête de la fonction doit être placé avant main.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 40 Réponse 3
#include<stdio.h>
#include "util.h"
void main() {
printf("la somme des carrés est:%d",som_carre(3));
//Appel de la fonction }
util.h est un fichier entête qui contient la définition de la fonction som_carre.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 41 Règle 3
Les fonctions utilisées dans un programme peuvent être définies dans un fichier appelé fichier entête(extension .h).
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 42 Les fonctions - procédures
Les fonctions- procédures ou procédures:
des fonctions sans valeur de retour.
La valeur de retour est void ou bien n'est pas spécifiée.
Une procédure réalise une tâche au
programme principal sans rendre une valeur.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 43 Exemple
Rendre la fonction som_carre une procédure.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 44 Réponse 1
#include<stdio.h>
void som_carre(int n) //définition de la procédure {
int s;
s=(n*(n+1)*(2*n+1))/6;
printf("la somme des carrés est:%d", s);
}
main() {
som_carre(3); //Appel de la procédure }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 45 Réponse 2
#include<stdio.h>
som_carre(int n) //définition de la procédure {
int s;
s=(n*(n+1)*(2*n+1))/6;
printf("la somme des carrés est:%d", s);
}
main() {
som_carre(3); //Appel de la procédure }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 46 Réponse 3
#include<stdio.h>
som_carre(int n) //définition de la procédure {
int s;
s=(n*(n+1)*(2*n+1))/6;
printf("la somme des carrés est:%d", s);
return /*une valeur */;
}
main() {
som_carre(3); //Appel de la procédure }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 47 Appel d'une procédure
On n'a pas à mettre l'appel d'une procédure dans une expression comme dans le cas de celui d'une fonction.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 48 Exemples d'appel
#include<stdio.h>
som_carre(int n) //définition de la procédure {
int s;
s=(n*(n+1)*(2*n+1))/6;
printf("la somme des carrés est:%d", s);
}
main() { int n=4;
som_carre(n);
som_carre(3);
//Appel de la procédure }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 49 Exemples de procédure
– printf – scanf
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 50 Les paramètres de fonctions (rappel)
-Paramètres formels : spécifier lors de la
définition de la fonction. Ils sont des variables.
-Paramètres effectifs : spécifier lors de l'appel de la fonction. Ils sont des variables, des
constantes symboliques, littérales appels de fonctions ou expressions qlqs compatibles avec les paramètres formels.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 51 Exemple de paramètres formels et effectifs
#include<stdio.h>
som_carre(int n) //paramètres formels {
int s;
s=(n*(n+1)*(2*n+1))/6;
printf("la somme des carrés est:%d", s);
}
main() { int n=4;
som_carre(n); //paramètre effectif som_carre(3);
som_carre(1+2);
//Appel de la procédure }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 52 Transmission des paramètres
L'appel d'une procédure se fait en remplaçant les paramètres formels par les paramètres
effectifs.
Ce processus s'appelle transmission des
paramètres. Il y a une transmission par valeurs et une transmission par adresse(à voir plus
loin).
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 53 Transmission par valeurs
Dans cette transmission, on utilise la valeur du paramètre ou bien une copie du paramètre. La case mémoire associée au paramètre reste
inchangée.
Remarque
Tous les appels précédents se font par transmissions par valeurs.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 54 Exemple de transmission par valeur
#include<stdio.h>
int successeur(int n) {
return ++n;
}
main() { int n=4;
printf("%d",successeur(n));
printf("%d",successeur(n));
printf("%d",successeur(n));
//Appel de la procédure }
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 55 Procédure ou fonctions sans paramètres
Une procédure peut être sans paramètres.
On l'exprime par - ()
- (void)
après le nom de la procédure.
Exemple
main() ou main(void)
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 56 Exemple
Écrire une procédure
void table_5() qui affiche la table de multiplication de 5.
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 57 Réponse
void table_5() { int i;
for(i=1;i<=10; i++)
printf("5*%d=%d\n",i,5*i);
}
main(void) {
table_5();
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 58 Exercices
Construire et tester les fonctions suivantes
– int max(int a, int b) retourne le maximum de a et b;
– int somn(int n) retourne la somme : 1+2…n.
– int somExp(int n, int m) retourne la somme 1m+2m…nm
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 59 Récursivité
Exemple introductif
Construisons une fonction qui calcule la somme s(n)=1+2+…n
on a pour n+1
s(n)= (1+2+…+n-1)+n on peut en déduire
s(n)= s(n-1)+n
s(n-1)=s(n-2)+n-1
…
s(2)=s(1)+2 s(1)=1
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 60 Exemple introductif(suite)
soit la fonction som(n) qui calcule s(n) int som(int n)
{
if (n==1)
return 1;
else
return som(n-1)+n;
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 61 Exemple introductif(suite)
soit la fonction som(n) qui calcule s(n) int som(int n)
{
if (n==1)
return 1;
else
return som(n-1)+n;
}
Appel récursif
Arrêt de la récursivité
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 62 Exemple
Construire la fonction
int factoriel(int n) qui retourne le factoriel de n.
int factoriel(int n) {
if (n==0)
return 1;
else
return factoriel(n-1)*n;
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 63 Exercice
Construire la fonction
double som_inverse(int n) qui retourne la somme
s(n)=1+1/2+ 1/3…1/n .
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 64 Réponse
Construire la fonction
double som_inverse(int n) qui retourne la somme s(n)=1+1/2+ 1/3…1/n
double som_inverse(int n) {
if (n==1)
return 1;
else
return som_inverse(n-1)+1/n;
}
Pr. M. Machkour
www.al3abkari-pro.com
SMP4 65 Exercice
Construire la fonction
int pair(int n) qui retourne 1 si n est pair et 0 si n est impair
int pair(int n) { n=abs(n);
if (n==0)
return 1;
else
if (n<0)
return 0;
else
return pair(n-1);
}
Pr. M. Machkour