SlideShare a Scribd company logo
1 of 26
Download to read offline
Programmation en langage C
Fahad R. Golra
Faculté des Sciences et Technologies
Université de Lorraine
Séance 3 – Fonctions
2 13/10/2017
Programmation Structurée
Programmation en langage C, Université de Lorraine
• La	programme	est	écrit	dans	un	manière	structurée.
• Découper	un	programme	en	parties	isolées
• Remplacer	une	partie	qui	se	répète
• Les	fonctions	permettent	d’écrire	un	programme	de	manière	
modulaire.	
• Un	programme	C	sera	constitué	donc	de	plusieurs	modules	
(fonctions)	qui	pourront	être	appelés	autant	de	fois	que	
nécessaire	avec	un	paramétrage	souvent	différent.	
• Chaque	module	pourra	lui	aussi	être	décomposé	en	sous-module.
3 13/10/2017
Exemple de fonction
Programmation en langage C, Université de Lorraine
• On vient de définir une
fonction dont le nom est
« carre »
• qui a un paramètre x de
type int
• qui retourne un
nombre entier (carré de
x) de type int
• La valeur retourné pourra
bien entendu être affecté à
une variable.
# include <stdio.h>
int carre(int);
int main(void)
{
int n, n2, n3;
printf("Entrez un nombre ");
scanf("%d", &n);
n2 = carre(n);
printf("Carre de %d = %d", n, n2);
n3 = carre(n2);
printf("Carre de %d = %d", n2, n3);
return 0;
}
int carre (int x)
{
int res;
res = x * x;
return res;
}
4 13/10/2017
Décomposition en modules
Programmation en langage C, Université de Lorraine
# include <stdio.h>
int carre(int);
int main(void)
{
int n, n2, n3;
printf("Entrez un nombre ");
scanf("%d", &n);
n2 = carre(n);
printf("Carre de %d = %d", n, n2);
n3 = carre(n2);
printf("Carre de %d = %d", n2, n3);
return 0;
}
int carre (int x)
{
int res;
res = x * x;
return res;
}
Fonction main
Fonction carre
• Découper	un	programme	en	
parties	isolées
5 13/10/2017
Gérer la répétition
Programmation en langage C, Université de Lorraine
# include <stdio.h>
int carre(int);
int main(void)
{
int n, n2, n3;
printf("Entrez un nombre ");
scanf("%d", &n);
n2 = carre(n);
printf("Carre de %d = %d", n, n2);
n3 = carre(n2);
printf("Carre de %d = %d", n2, n3);
return 0;
}
int carre (int x)
{
int res;
res = x * x;
return res;
}
• Remplacer	une	partie	qui	se	
répète
• Le	seul	type	de	sous-
programme	qui	existe	en	C	
est	la	fonction
6 13/10/2017
Syntaxe générale
Programmation en langage C, Université de Lorraine
• Dans cette déclaration type_R
est le type de retour de la
valeur calculée par la
fonction. On dit aussi par
abus de langage qu’il s’agit du
type de la fonction.
• type1, type2 sont les types
des variables nom1 et nom2
etc. passées en paramètre de
la fonction. On dit aussi que
ce sont les arguments de la
fonction.
type nomDeFonction( liste de paramètre(s))
{
déclarations locales si nécessaire
Instructions
….
retour du résultat (avec return)
}
type_R nom_fct ( type1 nom1, type2 nom2 ….)
{
Instructions
….
return valeur;
}
7 13/10/2017
Syntaxe générale
Programmation en langage C, Université de Lorraine
• Dans cette déclaration type_R
est le type de retour de la
valeur calculée par la
fonction. On dit aussi par
abus de langage qu’il s’agit du
type de la fonction.
• type1, type2 sont les types
des variables nom1 et nom2
etc. passées en paramètre de
la fonction. On dit aussi que
ce sont les arguments de la
fonction.
type nomDeFonction( liste de paramètre(s))
{
déclarations locales si nécessaire
Instructions
….
retour du résultat (avec return)
}
type_R nom_fct ( type1 nom1, type2 nom2 ….)
{
Instructions
….
return valeur;
}
8 13/10/2017
Exemple de fonction
Programmation en langage C, Université de Lorraine
# include <stdio.h>
int carre(int);
int main(void)
{
int n, n2, n3;
printf("Entrez un nombre ");
scanf("%d", &n);
n2 = carre(n);
printf("Carre de %d = %d", n, n2);
n3 = carre(n2);
printf("Carre de %d = %d", n2, n3);
return 0;
}
int carre (int x)
{
int res;
res = x * x;
return res;
}
• Ecrire un programme en
utilisant les fonctions
• Appel à fonction
• Fournir le nom de la
fonction et les arguments
(données)
• La fonction effectue des
opérations ou des
manipulations
• La fonction renvoie les
résultats
9 13/10/2017
Exemple de fonction
Programmation en langage C, Université de Lorraine
# include <stdio.h>
int carre(int);
int main(void)
{
int n, n2, n3;
printf("Entrez un nombre ");
scanf("%d", &n);
n2 = carre(n);
printf("Carre de %d = %d", n, n2);
n3 = carre(n2);
printf("Carre de %d = %d", n2, n3);
return 0;
}
int carre (int x)
{
int res;
res = x * x;
return res;
}
Prototype de fonction
type_r nom_funct (type_p, …);
Appel à fonction
nom_funct (valeur p, …);
Fonction retourne un valeur int
Fonction prends un valeur int
en parametre
Fonction retourne la valeur
Déclaration locale
10 13/10/2017
Portée des fonctions
Programmation en langage C, Université de Lorraine
• Les	variables	locales	et	les	
copies	locales	des	paramètres	
n’existent	plus	lorsque	
l’exécution	de	la	fonction	est	
terminée
# include <stdio.h>
int carre(int);
int main(void)
{
int n, n2;
printf("Entrez un nombre ");
scanf("%d", &n);
n2 = carre(n);
printf("Carre de %d = %d", n, n2);
printf("%d", res);//res n'exist plus
return 0;
}
int carre (int x)
{
int res;
n2 = x * x;//n2 n'est pas accessible
res = x * x;
return res;
}
Erreur
Erreur
11 13/10/2017
Return
Programmation en langage C, Université de Lorraine
• L’appel de la fonction « vaut » le résultat retourné
• La valeur retournée est celle placée à droite de l’instruction
return qui est exécutée
par ex: return 0; /* retourne la valeur 0 (faux) */
• Une fonction ne peut retourner qu’une seule valeur avec return
• L’exécution du return provoque la fin de la fonction
int carre (int x)
{
int res;
res = x * x;
return res;
}
La valeur retournée
12 13/10/2017
Fonction void
Programmation en langage C, Université de Lorraine
• Ne retourne pas de valeur
• L’utilisation de return est
possible mais sans placer
de valeur. Cette instruction
va terminer l’exécution de la
fonction
• Utile lorsque l’on veut faire
un traitement qui ne produit
pas de nouvelle valeur
• ex : Affichage, trie. etc.
# include <stdio.h>
void ligne(int);
int main(void)
{
ligne(30);
printf("Premiere phrase n");
ligne(10);
printf("Deuxieme phrase n");
ligne(30);
return 0;
}
void ligne(int x)
{
int i = 0;
for (i = 0; i <= x; i++)
printf("-");
printf("n");
return;
}
13 13/10/2017
Exemple : fonction factorielle
Programmation en langage C, Université de Lorraine
• En	mathématiques,	la factorielle d'un	entier	naturel	n	est	le	
produit	des	nombres	entiers	strictement	positifs	inférieurs	ou	
égaux	à	n.
• La	fonction	factorielle	« fact »	peut	être	écrite	de	manière	
récursive,	i.e.	la	fonction	s’appelle	elle-même.
fact(n) =1 * 2 * 3 …. * (n-1) * n
fact(n) = n * (n-1) * …. 3 * 2 * 1
fact(n) = n * fact(n-1)
14 13/10/2017
Récursion
Programmation en langage C, Université de Lorraine
• Une fonction peut faire référence à elle-même et s'appeler elle-
même.
fact(4)
return 1
fact(3)4 *return
fact(2)3 *return
fact(1)2 *return
appel
résultat
15 13/10/2017
Exemple : fonction factorielle
Programmation en langage C, Université de Lorraine
• La fonction factorielle « fact »
peut être écrite de manière
itérative avec une boucle ou
de manière récursive, i.e. la
fonction s’appelle elle-même.
• Pour	ce	dernier	cas	on	utilise	
la	propriété	de	récurrence	de	
fact :
fact(n)=n*fact(n-1)
# include <stdio.h>
int facti(int);
int factr(int);
int main(void)
{
int x, f;
printf("Entrez un nombre ");
scanf("%d", &x);
f = facti(x);
printf("Fact iterative = %d", f);
f = factr(x);
printf("Fact recursive = %d", f);
return 0;
}
int facti (int n)
{
int i, res = 1;
for (i = 1; i <= n; i++)
res = res * i;
return res;
}
int factr (int n)
{
if (n <= 1)
return 1;
else return (n * factr(n - 1));
}
16 13/10/2017
Permutation
Programmation en langage C, Université de Lorraine
• Les variables x et y ne sont pas permutées. Pourquoi ?
# include <stdio.h>
void permute(int, int);
int main(void)
{
int x = 3, y = 4;
permute (x, y);
printf("x = %dn", x);
printf("y = %dn", y);
return 0;
}
void permute(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
17 13/10/2017
Permutation
Programmation en langage C, Université de Lorraine
• Les variables x et y ne sont pas permutées. Pourquoi ?
# include <stdio.h>
void permute(int, int);
int main(void)
{
int x = 3, y = 4;
permute (x, y);
printf("x = %dn", x);
printf("y = %dn", y);
return 0;
}
void permute(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
• Par défaut, seul une copie de la
valeur est passée en paramètre
• a = 3 (copie de la valeur de x)
• b = 4 (copie de la valeur de y)
• Permutation a et b, donc
• a = 4
• b = 3
• Fonction retourne aucune
valeur
• Aucun effet sur x et y
18 13/10/2017
Permutation – Passage par valeur
Programmation en langage C, Université de Lorraine
• Les variables x et y ne sont pas permutées. Pourquoi ?
# include <stdio.h>
void permute(int, int);
int main(void)
{
int x = 3, y = 4;
permute (x, y);
printf("x = %dn", x);
printf("y = %dn", y);
return 0;
}
void permute(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
a 3
b 4
Copie
x 3
y 4
19 13/10/2017
Permutation – Passage par référence
Programmation en langage C, Université de Lorraine
• Si l'on veut qu'une fonction modifie un paramètre, on ne passe
pas la variable mais l'adresse de la variable.
# include <stdio.h>
void permute(int*, int*);
int main(void)
{
int x = 3, y = 4;
permute (&x, &y);
printf("x = %dn", x);
printf("y = %dn", y);
return 0;
}
void permute(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
• On	a	passé	la	copie	de	
l'adresse	de	la	variable.	Dans	la	
fonction	on	va	chercher	la	
variable	par	son	adresse.
20 13/10/2017
Permutation – Passage par référence
Programmation en langage C, Université de Lorraine
• Si l'on veut qu'une fonction modifie un paramètre, on ne passe
pas la variable mais l'adresse de la variable.
# include <stdio.h>
void permute(int*, int*);
int main(void)
{
int x = 3, y = 4;
permute (&x, &y);
printf("x = %dn", x);
printf("y = %dn", y);
return 0;
}
void permute(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
*a &x
*b &y
x 3
y 4
3
4
x la valeur de la variable
&x l'adresse de la variable
*a la valeur de la variable qui
se trouve à l'adresse
contenue dans a
21 13/10/2017
Permutation
Programmation en langage C, Université de Lorraine
# include <stdio.h>
void permute(int*, int*);
int main(void)
{
int x = 3, y = 4;
permute (&x, &y);
printf("x = %dn", x);
printf("y = %dn", y);
return 0;
}
void permute(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
# include <stdio.h>
void permute(int, int);
int main(void)
{
int x = 3, y = 4;
permute (x, y);
printf("x = %dn", x);
printf("y = %dn", y);
return 0;
}
void permute(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
Passage par référence Passage par valeur
22 13/10/2017
Retourner plusieurs résultats
Programmation en langage C, Université de Lorraine
• De	manière	générale	une	fonction	ne	retourne	qu’une	valeur	
calculée	à	l’aide	de	l’instruction	return.	Cette	valeur	doit	avoir	
bien	entendu	le	même	type	que	celui	de	la	fonction.
• Toutefois	on	peut	contourner	cette	règle,	en	définissant	des	
paramètres	formels	de	type	pointeur	et	passage	par	référence.
void calcule ( int *a, int *b)
{
int res1, res2;
res1 = (*a) + (*a);
res2 = (*b) + (*b) + (*b);
*a = res1;
*b = res2;
}
23 13/10/2017
Passage de tableau en paramètres
Programmation en langage C, Université de Lorraine
#include <stdio.h>
float moyen(float tab[]);
int main(void)
{
float n;
float tab[] = { 23.4, 55, 22.6, 40.5};
n = moyen(tab); /* Seul le nom
de tableau est passé en paramètre*/
printf("Moyen = %.2f", n);
return 0;
}
float moyen(float tab[])
{
int i;
float res, somme = 0.0;
for (i = 0; i < 4; i++)
somme += tab[i];
res = (somme / 4);
return res;
}
• Pour passer un tableau à
une dimension en
paramètre, on passe
seulement le nom du
tableau
• Rappelez-vous: le nom d'un
tableau est un pointeur
vers le premier élément du
tableau.
• Ce programme
fonctionnera, mais la taille
du tableau n'est pas claire
pour le lecteur.
24 13/10/2017
Passage de tableau en paramètres
Programmation en langage C, Université de Lorraine
#include <stdio.h>
#define dimension 4
float moyen(float tab[]);
int main(void)
{
float n;
float tab[] = { 23.4, 55, 22.6, 40.5};
n = moyen(tab); /* Seul le nom
de tableau est passé en paramètre*/
printf("Moyen = %.2f", n);
return 0;
}
float moyen(float tab[dimension])
{
int i;
float res, somme = 0.0;
for (i = 0; i < dimension; i++)
somme += tab[i];
res = (somme / dimension);
return res;
}
• Comme le nom d'un
tableau est un pointeur
vers le premier élément du
tableau. On peut aussi
déclaré le fonction moyen :
float moyen(float *tab)
{
…
}
25 13/10/2017
Passage de tableau en paramètres
Programmation en langage C, Université de Lorraine
• On peut également passer
la taille du tableau en
paramètre.
• De cette façon, la fonction
peut être réutilisée pour
des tableaux de différentes
tailles.
#include <stdio.h>
float moyen(float tab[], int taille);
int main(void)
{
float n;
float tab[] = { 23.4, 55, 22.6, 40.5};
n = moyen(tab, 4); /* passer la taille
en parametre*/
printf("Moyen = %.2f", n);
return 0;
}
float moyen(float tab[], int taille)
{
int i;
float res, somme = 0.0;
for (i = 0; i < taille; i++)
somme += tab[i];
res = (somme / taille);
return res;
}
26 13/10/2017
Passage de tableau multidimensionnelle
Programmation en langage C, Université de Lorraine
#include <stdio.h>
#define lig 3
#define col 3
int question2 ( int t[lig][col]);
int main (void)
{
int somme;
int tab[lig][col]={{1,2,3},{4,5,6},{7,8,9}};
somme = question2(tab);
printf("Somme diagonale = %dn", somme );
return 0;
}
int question2 ( int t[lig][col])
{
int i, j, res;
for (i = 0, res = 0; i < lig; i++)
for (j = 0; j < col; j++)
if (i == j)
res += t[i][j];
return res;
}
t[][col]
aussi possible

More Related Content

What's hot

Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage CFahad Golra
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 
Presentation Csharp et winforms
Presentation Csharp et winformsPresentation Csharp et winforms
Presentation Csharp et winformsChristophe Zome
 
exercices Corrigées du merise
exercices Corrigées du  meriseexercices Corrigées du  merise
exercices Corrigées du meriseYassine Badri
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Aziz Darouichi
 
Conception d'un objet électronique - Présentation adulte
Conception d'un objet électronique - Présentation adulteConception d'un objet électronique - Présentation adulte
Conception d'un objet électronique - Présentation adultePeronnin Eric
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage PythonAziz Darouichi
 
Architecture des ordinateurs : memoires
Architecture des ordinateurs : memoiresArchitecture des ordinateurs : memoires
Architecture des ordinateurs : memoiresAbdoulaye Dieng
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données IIRiadh Bouslimi
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Aziz Darouichi
 

What's hot (20)

Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage C
 
Cours.langage c
Cours.langage cCours.langage c
Cours.langage c
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Cours c++
Cours c++Cours c++
Cours c++
 
Langage C#
Langage C#Langage C#
Langage C#
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Cours algorithmique02
Cours algorithmique02Cours algorithmique02
Cours algorithmique02
 
Presentation Csharp et winforms
Presentation Csharp et winformsPresentation Csharp et winforms
Presentation Csharp et winforms
 
exercices Corrigées du merise
exercices Corrigées du  meriseexercices Corrigées du  merise
exercices Corrigées du merise
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
Modelisation conception SI
Modelisation conception SIModelisation conception SI
Modelisation conception SI
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Cours de c
Cours de cCours de c
Cours de c
 
Conception d'un objet électronique - Présentation adulte
Conception d'un objet électronique - Présentation adulteConception d'un objet électronique - Présentation adulte
Conception d'un objet électronique - Présentation adulte
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
cours Lunix
cours Lunixcours Lunix
cours Lunix
 
Architecture des ordinateurs : memoires
Architecture des ordinateurs : memoiresArchitecture des ordinateurs : memoires
Architecture des ordinateurs : memoires
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données II
 
Récursivité
RécursivitéRécursivité
Récursivité
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
 

Similar to Seance 3- Programmation en langage C

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 SYSSSSSSAyoubElmrabet6
 
03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdfAhmed12314
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelleMICHRAFY MUSTAFA
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptxolfaharrabi2
 
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#MSDEVMTL
 
Seance 4- Programmation en langage C
Seance 4- Programmation en langage CSeance 4- Programmation en langage C
Seance 4- Programmation en langage CFahad Golra
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdfMARYAM510573
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieLoic Yon
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)Tunisie collège
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMALoic Yon
 

Similar to Seance 3- Programmation en langage C (20)

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
 
03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
POO-chapitre2.pptx
POO-chapitre2.pptxPOO-chapitre2.pptx
POO-chapitre2.pptx
 
POO en C++: Les fonctions
POO en C++: Les fonctionsPOO en C++: Les fonctions
POO en C++: Les fonctions
 
Python chapitre 4.pdf
Python chapitre 4.pdfPython chapitre 4.pdf
Python chapitre 4.pdf
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Chap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptxChap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptx
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
 
Seance 4- Programmation en langage C
Seance 4- Programmation en langage CSeance 4- Programmation en langage C
Seance 4- Programmation en langage C
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partie
 
Theme 7
Theme 7Theme 7
Theme 7
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
 

More from Fahad Golra

Seance 2 - Programmation en langage C
Seance 2 - Programmation en langage CSeance 2 - Programmation en langage C
Seance 2 - Programmation en langage CFahad Golra
 
Tutorial 4 - Basics of Digital Photography
Tutorial 4 - Basics of Digital PhotographyTutorial 4 - Basics of Digital Photography
Tutorial 4 - Basics of Digital PhotographyFahad Golra
 
Tutorial 3 - Basics of Digital Photography
Tutorial 3 - Basics of Digital PhotographyTutorial 3 - Basics of Digital Photography
Tutorial 3 - Basics of Digital PhotographyFahad Golra
 
Tutorial 2 - Basics of Digital Photography
Tutorial 2 - Basics of Digital PhotographyTutorial 2 - Basics of Digital Photography
Tutorial 2 - Basics of Digital PhotographyFahad Golra
 
Tutorial 1 - Basics of Digital Photography
Tutorial 1 - Basics of Digital PhotographyTutorial 1 - Basics of Digital Photography
Tutorial 1 - Basics of Digital PhotographyFahad Golra
 
Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Fahad Golra
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Fahad Golra
 
Lecture 8 Enterprise Java Beans (EJB)
Lecture 8  Enterprise Java Beans (EJB)Lecture 8  Enterprise Java Beans (EJB)
Lecture 8 Enterprise Java Beans (EJB)Fahad Golra
 
Lecture 7 Web Services JAX-WS & JAX-RS
Lecture 7   Web Services JAX-WS & JAX-RSLecture 7   Web Services JAX-WS & JAX-RS
Lecture 7 Web Services JAX-WS & JAX-RSFahad Golra
 
Lecture 6 Web Sockets
Lecture 6   Web SocketsLecture 6   Web Sockets
Lecture 6 Web SocketsFahad Golra
 
Lecture 5 JSTL, custom tags, maven
Lecture 5   JSTL, custom tags, mavenLecture 5   JSTL, custom tags, maven
Lecture 5 JSTL, custom tags, mavenFahad Golra
 
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)
Lecture 4:  JavaServer Pages (JSP) & Expression Language (EL)Lecture 4:  JavaServer Pages (JSP) & Expression Language (EL)
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)Fahad Golra
 
Lecture 2: Servlets
Lecture 2:  ServletsLecture 2:  Servlets
Lecture 2: ServletsFahad Golra
 
Lecture 1: Introduction to JEE
Lecture 1:  Introduction to JEELecture 1:  Introduction to JEE
Lecture 1: Introduction to JEEFahad Golra
 
Lecture 3: Servlets - Session Management
Lecture 3:  Servlets - Session ManagementLecture 3:  Servlets - Session Management
Lecture 3: Servlets - Session ManagementFahad Golra
 
Deviation Detection in Process Enactment
Deviation Detection in Process EnactmentDeviation Detection in Process Enactment
Deviation Detection in Process EnactmentFahad Golra
 
Meta l metacase tools & possibilities
Meta l metacase tools & possibilitiesMeta l metacase tools & possibilities
Meta l metacase tools & possibilitiesFahad Golra
 

More from Fahad Golra (17)

Seance 2 - Programmation en langage C
Seance 2 - Programmation en langage CSeance 2 - Programmation en langage C
Seance 2 - Programmation en langage C
 
Tutorial 4 - Basics of Digital Photography
Tutorial 4 - Basics of Digital PhotographyTutorial 4 - Basics of Digital Photography
Tutorial 4 - Basics of Digital Photography
 
Tutorial 3 - Basics of Digital Photography
Tutorial 3 - Basics of Digital PhotographyTutorial 3 - Basics of Digital Photography
Tutorial 3 - Basics of Digital Photography
 
Tutorial 2 - Basics of Digital Photography
Tutorial 2 - Basics of Digital PhotographyTutorial 2 - Basics of Digital Photography
Tutorial 2 - Basics of Digital Photography
 
Tutorial 1 - Basics of Digital Photography
Tutorial 1 - Basics of Digital PhotographyTutorial 1 - Basics of Digital Photography
Tutorial 1 - Basics of Digital Photography
 
Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)
 
Lecture 8 Enterprise Java Beans (EJB)
Lecture 8  Enterprise Java Beans (EJB)Lecture 8  Enterprise Java Beans (EJB)
Lecture 8 Enterprise Java Beans (EJB)
 
Lecture 7 Web Services JAX-WS & JAX-RS
Lecture 7   Web Services JAX-WS & JAX-RSLecture 7   Web Services JAX-WS & JAX-RS
Lecture 7 Web Services JAX-WS & JAX-RS
 
Lecture 6 Web Sockets
Lecture 6   Web SocketsLecture 6   Web Sockets
Lecture 6 Web Sockets
 
Lecture 5 JSTL, custom tags, maven
Lecture 5   JSTL, custom tags, mavenLecture 5   JSTL, custom tags, maven
Lecture 5 JSTL, custom tags, maven
 
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)
Lecture 4:  JavaServer Pages (JSP) & Expression Language (EL)Lecture 4:  JavaServer Pages (JSP) & Expression Language (EL)
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)
 
Lecture 2: Servlets
Lecture 2:  ServletsLecture 2:  Servlets
Lecture 2: Servlets
 
Lecture 1: Introduction to JEE
Lecture 1:  Introduction to JEELecture 1:  Introduction to JEE
Lecture 1: Introduction to JEE
 
Lecture 3: Servlets - Session Management
Lecture 3:  Servlets - Session ManagementLecture 3:  Servlets - Session Management
Lecture 3: Servlets - Session Management
 
Deviation Detection in Process Enactment
Deviation Detection in Process EnactmentDeviation Detection in Process Enactment
Deviation Detection in Process Enactment
 
Meta l metacase tools & possibilities
Meta l metacase tools & possibilitiesMeta l metacase tools & possibilities
Meta l metacase tools & possibilities
 

Recently uploaded

GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...Nguyen Thanh Tu Collection
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...Faga1939
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfssuserc72852
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxRayane619450
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaireTxaruka
 

Recently uploaded (13)

GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 

Seance 3- Programmation en langage C

  • 1. Programmation en langage C Fahad R. Golra Faculté des Sciences et Technologies Université de Lorraine Séance 3 – Fonctions
  • 2. 2 13/10/2017 Programmation Structurée Programmation en langage C, Université de Lorraine • La programme est écrit dans un manière structurée. • Découper un programme en parties isolées • Remplacer une partie qui se répète • Les fonctions permettent d’écrire un programme de manière modulaire. • Un programme C sera constitué donc de plusieurs modules (fonctions) qui pourront être appelés autant de fois que nécessaire avec un paramétrage souvent différent. • Chaque module pourra lui aussi être décomposé en sous-module.
  • 3. 3 13/10/2017 Exemple de fonction Programmation en langage C, Université de Lorraine • On vient de définir une fonction dont le nom est « carre » • qui a un paramètre x de type int • qui retourne un nombre entier (carré de x) de type int • La valeur retourné pourra bien entendu être affecté à une variable. # include <stdio.h> int carre(int); int main(void) { int n, n2, n3; printf("Entrez un nombre "); scanf("%d", &n); n2 = carre(n); printf("Carre de %d = %d", n, n2); n3 = carre(n2); printf("Carre de %d = %d", n2, n3); return 0; } int carre (int x) { int res; res = x * x; return res; }
  • 4. 4 13/10/2017 Décomposition en modules Programmation en langage C, Université de Lorraine # include <stdio.h> int carre(int); int main(void) { int n, n2, n3; printf("Entrez un nombre "); scanf("%d", &n); n2 = carre(n); printf("Carre de %d = %d", n, n2); n3 = carre(n2); printf("Carre de %d = %d", n2, n3); return 0; } int carre (int x) { int res; res = x * x; return res; } Fonction main Fonction carre • Découper un programme en parties isolées
  • 5. 5 13/10/2017 Gérer la répétition Programmation en langage C, Université de Lorraine # include <stdio.h> int carre(int); int main(void) { int n, n2, n3; printf("Entrez un nombre "); scanf("%d", &n); n2 = carre(n); printf("Carre de %d = %d", n, n2); n3 = carre(n2); printf("Carre de %d = %d", n2, n3); return 0; } int carre (int x) { int res; res = x * x; return res; } • Remplacer une partie qui se répète • Le seul type de sous- programme qui existe en C est la fonction
  • 6. 6 13/10/2017 Syntaxe générale Programmation en langage C, Université de Lorraine • Dans cette déclaration type_R est le type de retour de la valeur calculée par la fonction. On dit aussi par abus de langage qu’il s’agit du type de la fonction. • type1, type2 sont les types des variables nom1 et nom2 etc. passées en paramètre de la fonction. On dit aussi que ce sont les arguments de la fonction. type nomDeFonction( liste de paramètre(s)) { déclarations locales si nécessaire Instructions …. retour du résultat (avec return) } type_R nom_fct ( type1 nom1, type2 nom2 ….) { Instructions …. return valeur; }
  • 7. 7 13/10/2017 Syntaxe générale Programmation en langage C, Université de Lorraine • Dans cette déclaration type_R est le type de retour de la valeur calculée par la fonction. On dit aussi par abus de langage qu’il s’agit du type de la fonction. • type1, type2 sont les types des variables nom1 et nom2 etc. passées en paramètre de la fonction. On dit aussi que ce sont les arguments de la fonction. type nomDeFonction( liste de paramètre(s)) { déclarations locales si nécessaire Instructions …. retour du résultat (avec return) } type_R nom_fct ( type1 nom1, type2 nom2 ….) { Instructions …. return valeur; }
  • 8. 8 13/10/2017 Exemple de fonction Programmation en langage C, Université de Lorraine # include <stdio.h> int carre(int); int main(void) { int n, n2, n3; printf("Entrez un nombre "); scanf("%d", &n); n2 = carre(n); printf("Carre de %d = %d", n, n2); n3 = carre(n2); printf("Carre de %d = %d", n2, n3); return 0; } int carre (int x) { int res; res = x * x; return res; } • Ecrire un programme en utilisant les fonctions • Appel à fonction • Fournir le nom de la fonction et les arguments (données) • La fonction effectue des opérations ou des manipulations • La fonction renvoie les résultats
  • 9. 9 13/10/2017 Exemple de fonction Programmation en langage C, Université de Lorraine # include <stdio.h> int carre(int); int main(void) { int n, n2, n3; printf("Entrez un nombre "); scanf("%d", &n); n2 = carre(n); printf("Carre de %d = %d", n, n2); n3 = carre(n2); printf("Carre de %d = %d", n2, n3); return 0; } int carre (int x) { int res; res = x * x; return res; } Prototype de fonction type_r nom_funct (type_p, …); Appel à fonction nom_funct (valeur p, …); Fonction retourne un valeur int Fonction prends un valeur int en parametre Fonction retourne la valeur Déclaration locale
  • 10. 10 13/10/2017 Portée des fonctions Programmation en langage C, Université de Lorraine • Les variables locales et les copies locales des paramètres n’existent plus lorsque l’exécution de la fonction est terminée # include <stdio.h> int carre(int); int main(void) { int n, n2; printf("Entrez un nombre "); scanf("%d", &n); n2 = carre(n); printf("Carre de %d = %d", n, n2); printf("%d", res);//res n'exist plus return 0; } int carre (int x) { int res; n2 = x * x;//n2 n'est pas accessible res = x * x; return res; } Erreur Erreur
  • 11. 11 13/10/2017 Return Programmation en langage C, Université de Lorraine • L’appel de la fonction « vaut » le résultat retourné • La valeur retournée est celle placée à droite de l’instruction return qui est exécutée par ex: return 0; /* retourne la valeur 0 (faux) */ • Une fonction ne peut retourner qu’une seule valeur avec return • L’exécution du return provoque la fin de la fonction int carre (int x) { int res; res = x * x; return res; } La valeur retournée
  • 12. 12 13/10/2017 Fonction void Programmation en langage C, Université de Lorraine • Ne retourne pas de valeur • L’utilisation de return est possible mais sans placer de valeur. Cette instruction va terminer l’exécution de la fonction • Utile lorsque l’on veut faire un traitement qui ne produit pas de nouvelle valeur • ex : Affichage, trie. etc. # include <stdio.h> void ligne(int); int main(void) { ligne(30); printf("Premiere phrase n"); ligne(10); printf("Deuxieme phrase n"); ligne(30); return 0; } void ligne(int x) { int i = 0; for (i = 0; i <= x; i++) printf("-"); printf("n"); return; }
  • 13. 13 13/10/2017 Exemple : fonction factorielle Programmation en langage C, Université de Lorraine • En mathématiques, la factorielle d'un entier naturel n est le produit des nombres entiers strictement positifs inférieurs ou égaux à n. • La fonction factorielle « fact » peut être écrite de manière récursive, i.e. la fonction s’appelle elle-même. fact(n) =1 * 2 * 3 …. * (n-1) * n fact(n) = n * (n-1) * …. 3 * 2 * 1 fact(n) = n * fact(n-1)
  • 14. 14 13/10/2017 Récursion Programmation en langage C, Université de Lorraine • Une fonction peut faire référence à elle-même et s'appeler elle- même. fact(4) return 1 fact(3)4 *return fact(2)3 *return fact(1)2 *return appel résultat
  • 15. 15 13/10/2017 Exemple : fonction factorielle Programmation en langage C, Université de Lorraine • La fonction factorielle « fact » peut être écrite de manière itérative avec une boucle ou de manière récursive, i.e. la fonction s’appelle elle-même. • Pour ce dernier cas on utilise la propriété de récurrence de fact : fact(n)=n*fact(n-1) # include <stdio.h> int facti(int); int factr(int); int main(void) { int x, f; printf("Entrez un nombre "); scanf("%d", &x); f = facti(x); printf("Fact iterative = %d", f); f = factr(x); printf("Fact recursive = %d", f); return 0; } int facti (int n) { int i, res = 1; for (i = 1; i <= n; i++) res = res * i; return res; } int factr (int n) { if (n <= 1) return 1; else return (n * factr(n - 1)); }
  • 16. 16 13/10/2017 Permutation Programmation en langage C, Université de Lorraine • Les variables x et y ne sont pas permutées. Pourquoi ? # include <stdio.h> void permute(int, int); int main(void) { int x = 3, y = 4; permute (x, y); printf("x = %dn", x); printf("y = %dn", y); return 0; } void permute(int a, int b) { int temp; temp = a; a = b; b = temp; }
  • 17. 17 13/10/2017 Permutation Programmation en langage C, Université de Lorraine • Les variables x et y ne sont pas permutées. Pourquoi ? # include <stdio.h> void permute(int, int); int main(void) { int x = 3, y = 4; permute (x, y); printf("x = %dn", x); printf("y = %dn", y); return 0; } void permute(int a, int b) { int temp; temp = a; a = b; b = temp; } • Par défaut, seul une copie de la valeur est passée en paramètre • a = 3 (copie de la valeur de x) • b = 4 (copie de la valeur de y) • Permutation a et b, donc • a = 4 • b = 3 • Fonction retourne aucune valeur • Aucun effet sur x et y
  • 18. 18 13/10/2017 Permutation – Passage par valeur Programmation en langage C, Université de Lorraine • Les variables x et y ne sont pas permutées. Pourquoi ? # include <stdio.h> void permute(int, int); int main(void) { int x = 3, y = 4; permute (x, y); printf("x = %dn", x); printf("y = %dn", y); return 0; } void permute(int a, int b) { int temp; temp = a; a = b; b = temp; } a 3 b 4 Copie x 3 y 4
  • 19. 19 13/10/2017 Permutation – Passage par référence Programmation en langage C, Université de Lorraine • Si l'on veut qu'une fonction modifie un paramètre, on ne passe pas la variable mais l'adresse de la variable. # include <stdio.h> void permute(int*, int*); int main(void) { int x = 3, y = 4; permute (&x, &y); printf("x = %dn", x); printf("y = %dn", y); return 0; } void permute(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } • On a passé la copie de l'adresse de la variable. Dans la fonction on va chercher la variable par son adresse.
  • 20. 20 13/10/2017 Permutation – Passage par référence Programmation en langage C, Université de Lorraine • Si l'on veut qu'une fonction modifie un paramètre, on ne passe pas la variable mais l'adresse de la variable. # include <stdio.h> void permute(int*, int*); int main(void) { int x = 3, y = 4; permute (&x, &y); printf("x = %dn", x); printf("y = %dn", y); return 0; } void permute(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } *a &x *b &y x 3 y 4 3 4 x la valeur de la variable &x l'adresse de la variable *a la valeur de la variable qui se trouve à l'adresse contenue dans a
  • 21. 21 13/10/2017 Permutation Programmation en langage C, Université de Lorraine # include <stdio.h> void permute(int*, int*); int main(void) { int x = 3, y = 4; permute (&x, &y); printf("x = %dn", x); printf("y = %dn", y); return 0; } void permute(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } # include <stdio.h> void permute(int, int); int main(void) { int x = 3, y = 4; permute (x, y); printf("x = %dn", x); printf("y = %dn", y); return 0; } void permute(int a, int b) { int temp; temp = a; a = b; b = temp; } Passage par référence Passage par valeur
  • 22. 22 13/10/2017 Retourner plusieurs résultats Programmation en langage C, Université de Lorraine • De manière générale une fonction ne retourne qu’une valeur calculée à l’aide de l’instruction return. Cette valeur doit avoir bien entendu le même type que celui de la fonction. • Toutefois on peut contourner cette règle, en définissant des paramètres formels de type pointeur et passage par référence. void calcule ( int *a, int *b) { int res1, res2; res1 = (*a) + (*a); res2 = (*b) + (*b) + (*b); *a = res1; *b = res2; }
  • 23. 23 13/10/2017 Passage de tableau en paramètres Programmation en langage C, Université de Lorraine #include <stdio.h> float moyen(float tab[]); int main(void) { float n; float tab[] = { 23.4, 55, 22.6, 40.5}; n = moyen(tab); /* Seul le nom de tableau est passé en paramètre*/ printf("Moyen = %.2f", n); return 0; } float moyen(float tab[]) { int i; float res, somme = 0.0; for (i = 0; i < 4; i++) somme += tab[i]; res = (somme / 4); return res; } • Pour passer un tableau à une dimension en paramètre, on passe seulement le nom du tableau • Rappelez-vous: le nom d'un tableau est un pointeur vers le premier élément du tableau. • Ce programme fonctionnera, mais la taille du tableau n'est pas claire pour le lecteur.
  • 24. 24 13/10/2017 Passage de tableau en paramètres Programmation en langage C, Université de Lorraine #include <stdio.h> #define dimension 4 float moyen(float tab[]); int main(void) { float n; float tab[] = { 23.4, 55, 22.6, 40.5}; n = moyen(tab); /* Seul le nom de tableau est passé en paramètre*/ printf("Moyen = %.2f", n); return 0; } float moyen(float tab[dimension]) { int i; float res, somme = 0.0; for (i = 0; i < dimension; i++) somme += tab[i]; res = (somme / dimension); return res; } • Comme le nom d'un tableau est un pointeur vers le premier élément du tableau. On peut aussi déclaré le fonction moyen : float moyen(float *tab) { … }
  • 25. 25 13/10/2017 Passage de tableau en paramètres Programmation en langage C, Université de Lorraine • On peut également passer la taille du tableau en paramètre. • De cette façon, la fonction peut être réutilisée pour des tableaux de différentes tailles. #include <stdio.h> float moyen(float tab[], int taille); int main(void) { float n; float tab[] = { 23.4, 55, 22.6, 40.5}; n = moyen(tab, 4); /* passer la taille en parametre*/ printf("Moyen = %.2f", n); return 0; } float moyen(float tab[], int taille) { int i; float res, somme = 0.0; for (i = 0; i < taille; i++) somme += tab[i]; res = (somme / taille); return res; }
  • 26. 26 13/10/2017 Passage de tableau multidimensionnelle Programmation en langage C, Université de Lorraine #include <stdio.h> #define lig 3 #define col 3 int question2 ( int t[lig][col]); int main (void) { int somme; int tab[lig][col]={{1,2,3},{4,5,6},{7,8,9}}; somme = question2(tab); printf("Somme diagonale = %dn", somme ); return 0; } int question2 ( int t[lig][col]) { int i, j, res; for (i = 0, res = 0; i < lig; i++) for (j = 0; j < col; j++) if (i == j) res += t[i][j]; return res; } t[][col] aussi possible