Vous êtes sur la page 1sur 184

F T ra n sf o F T ra n sf o

PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009

Langage C

KHALID SBAI
Enseignant – Chercheur

Ecole Supérieure de Technologie


Département de Génie Electrique

Université Moulay Ismaïl


Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I. Structures de contrôle

On appelle structure de contrôle toute instruction qui


permet de contrôler le fonctionnement d’un programme.

Parmi les structures de contrôle, on distingue :

structures de choix structures répétitives

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I. Structures de contrôle
I.1 Structures de choix
Les structures de choix permettent de déterminer
quelles Instructions seront exécutées et dans quel ordre.

En C, les structures de choix peuvent être exprimées par:

L’instruction de branchement L’instruction de branchement


conditionnels: multiple:

If ……. else switch

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.1.1 Branchement conditionnel ( if … else)
Forme 1:
Syntaxe:

if(expression)
{

bloc d’instructions;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.1.1 Branchement conditionnel ( if … else) (suite)
Forme 2:
Syntaxe:

if(expression)
{
bloc d’instructions1;
}

else

{
bloc d’instructions2;
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.1.1 Branchement conditionnel ( if … else) (suite)
Remarques :
Lorsqu’on a plusieurs cas à tester, on peut enchaîner les if … else

if(expression1)
instruction1
else
if(expression2)
instruction2
else…

Lorsque plusieurs instructions if sont imbriquées, il est


convenu que chaque else se rapporte au dernier if qui ne
possède pas de partie else.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.1.1 Branchement conditionnel ( if … else) (suite)
Exemples :

if (var1==0)
if (var1!=0)
printf("La variable est nulle \n");
if (var1 > 0)
printf("Elle est positive\n");
else //sinon c'est faux
else
if (var1 > 0)
printf("Elle est négative\n");
printf("Elle est positive \n");
else
printf("Elle est négative");

else se rapporte toujours au if le plus proche

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.1.1 Branchement conditionnel (suite)
Opérateur conditionnel

Syntaxe:
(condition) ? instruction_vrai : instruct_faux;

Exemple :
max_xy = y;
x = 3; 0
y = 2; =
max_xy = ( (x>=y) ? x : y);
=
1 max_xy = x;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.1.2 Branchement multiple ( switch )
Suitch est utilisée lorsqu’une expression prend une valeur
parmi une suite de constantes.
Syntaxe :
switch(expression)
{
case constante_1 : instructions;
Break;
case constante_2 : instructions;
…….
case constante_n : instructions;
default : instructions;
}
Attention. Lorsqu’il y a branchement réussi à un case, toutes
les instructions qui le suivent sont exécutées, jusqu’à la fin du
bloc ou jusqu’à une instruction de rupture (break).
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.1.2 Branchement multiple ( switch )
Exemple 1:
char choix;
printf("Taper 1 ou 2");
scanf("%c",&choix);
switch(choix)
{
case '1': printf("vous avez tape 1\n");
break;
case '2': printf("vous avez tape 2\n");
break;
default : printf("je vous ai dit 1 ou 2 pas %c\n",choix);
break;
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.2 Structures répétitives ( Boucles )
Les structures répétitives (ou Boucles) permettent de
répéter une série d’instructions tant qu’une certaine
condition reste vraie.

On appelle parfois ces structures instructions d’itérations.

En C, les structures répétitives sont exprimées par:

For While Do …. While

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.2.1 Structure répétitive: while
L’instruction while représente un moyen d’exécuter plusieurs
fois la même série d’instructions.
Syntaxe
while ( condition )
{

liste d’instructions

Dans la structure while on vérifie la condition avant


d’exécuter la liste d’instructions.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.2.1 Structure répétitive: while
Exemple : Calcule de la somme des entiers de 1 à n

#include <stdio.h>
int I, S, n;
main () {
printf("Donner un entier positif :");
scanf(" %d",&n);
S=0;
I= 1;
while(I n)
{ S += I;
I++; }
printf("Somme S= %d ", S);
return (0)
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.2.2 Structure répétitive: do … while
L’instruction do .. while représente un moyen d’exécuter
plusieurs fois la même série d’instructions.
Syntaxe :
Do
{

liste d’instructions

}.
while ( condition );

Dans la structure do .. while la condition est


vérifiée après exécution de la liste d’instructions.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.2.2 Structure répétitive: do … while
Exemple : Calcule de la somme des entiers de 1 à n
#include <stdio.h>
int I, S, n;
main () {
printf("Donner un entier positif :");
scanf(" %d",&n);
I=1;
S=0;
do
{ S += I;
I++; }
wihle ( I n);
printf("Somme S= %d ", S);
return (0)
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.2.3 Structure répétitive: For
Syntaxe:
for ( expr1 ; expr2 ; expr3 )
{

liste d’instructions

Dans la construction de la boucle for :


expr1 : effectue l’initialisation avant l’entrée dans la boucle
expr2 : le test de continuation de la boucle; le test est évalué
avant l’exécution du corps de la boucle;
expr3 : est évaluée à la fin du corps de la boucle.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.2.3 Structure répétitive: For
Remarques

En pratique, expr1 et expr3 contiennent souvent


plusieurs initialisations séparées par des virgules.
Exemple : calcul de n! sur une seule ligne

int i,f,n;
for(i=n, f=1; i>1; f *= i, i--);

Lorsque expr2 est absente, l’expression correspondante


est considérée comme vraie.
Par conséquent, for( ; ; ) est une Boucle infinie.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.2.3 Structure répétitive: For
Remarques (suite)

La boucle for peut être traduite en boucle Tant .. Que.

for ( expr1 ; expr2 ; expr3 ) expr1;


{ while ( expr2 )
{
liste d’instructions liste d’instructions;
expr3;
} }

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.2.3 Structure répétitive: For
Exemples
Calcule de la somme des entiers de 1 à n

#include <stdio.h>
int I, S, n;
main ()
{
printf("Donner un entier positif :");
scanf(" %d",&n);
for(S=0, I= 1; I n; I++)
S += I;
printf("Somme S= %d ", S);
Return (0)
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.3 Instructions break et continue
I.3.1 l’instruction break
L’instruction break peut être employée à l’intérieur
de n’importe quelle boucle.

Elle permet l’abandon de la structure et le passage à la


première instruction qui suit la structure.

En cas de boucles imbriquées, break fait sortir de la


boucle la plus interne.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.3.1 l’instruction break Exemple2
#include <stdio.h>
Exemple1
int main( )
s = 0; { int i, j ;
for(i=0; i<10; i++) for (i = 1 ; i<=15 ; i++)
{ {
scanf(’’%d’’,&n); for (j = 1 ; j<=15 ; j++)
if(n<=0) {
break; if (j = = 5) break ;
s += n; printf("%d\t", i * j) ;
} }
printf("\n") ;
}
return 0 ;
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.3.1 l’instruction break (suite)

Exemple3
x=1;
While (x<=10)
{
a = x-7;
printf("%f", 1/a);
x++;
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.3.1 l’instruction break (suite)

Exemple3
x=1;
while(x<=10)
{
a = x-7;
if (a == 0)
{
printf("/ par 0");
break;
}
printf("%f", 1/a);
x++;
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.3.2 l’instruction continue

L’instruction continue peut être employée à l’intérieur


d'une structure de type boucle (for ; while ; do ..while ).

Sert à sauter l’itération courante de la boucle la plus


interne dans laquelle elle se trouve, et à passer à
l’instruction suivante.

L’instruction continue concerne la boucle la plus proche.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.3.2 l’instruction continue (suite)

Exemple1

x=1;

while(x<=10)
{

a=1/(x-7);
printf("%f",a);
x++;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
I.3.2 l’instruction continue (suite)

Exemple2
x=1;
while(x<=10)
{
if (x==7)
{
printf("division par 0");
x++;
continue;
}
a=1/(x-7);
printf("%f",a);
x++;
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II. Les Tableaux
Utilité des tableaux:
Exemple: Calcul d’une moyenne de n notes
Solution sans tableau:
Déclarer autant de variables que de notes
Écrire la somme de ces n variables
Implique de connaître au départ le nombre de notes
(pour déclarer le bon nombre de variables).
Notation très lourde (surtout si beaucoup de notes à gérer…)

Idée : rassembler toutes cas variables dans une structure


de donnée particulière : le tableau

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II. Les tableaux
II.1 Tableaux à 1 dimension
Définition
Un tableau est une structure de donnée qui contient une
collection d'éléments de même type (ex : tableau d’entiers,
de réels, …).
Le nombre des éléments d’un tableau, appelés "composantes
du tableau , défini la dimension du tableau.
Chaque élément a une position définie dans le tableau :
désignée par un indice.

En faisant le rapprochement avec les mathématiques, on


dit encore que "A est un vecteur de dimension N"

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)
Définition
– Un tableau est une variable composée de plusieurs
variables de même type.
– Contenant une collection de valeurs de même type.
– Comme toutes les variables, le tableau a un nom.
– Chaque élément du tableau est désigné par ce nom
Exempleet par sa position.
Tableau de 10 entiers

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)
Déclaration
Syntaxe:
Type_donnee Ident_Tab [NbElem];

Type_donnee : n’importe quel type valide.


(entier, réel, caractères, …..).
Ident_Tab : le nom du tableau
NbElem : le nombre maximal d’éléments du tableau
C’est une constante littérale ou symbolique (#define)
On l’appelle aussi la dimension (ou taille) du tableau
La taille d’un tableau est fixée à sa déclaration.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)
Exemple #define N 5
int T[5]; ou int T[N];

T désignera un tableau contenant 5 valeurs de type entier


En C, les indices valides seront compris entre 0 et 4 inclus
Indice < nombre d’éléments du tableau
Chaque élément du tableau sera désignée par son indice

On peut accéder à la première composante du tableau par


T[0], à la deuxième composante par T[1], . . . , à la dernière
composante par T[N-1].

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)
Initialisation d’un tableau
Par défaut les tableaux sont “vides” : pas initialisés

C’est incorrect d’accéder à une case qui ne contient rien.


Initialiser un Tableau c’est donner à chacune des cases du
tableau une valeur.
Exemple:
int A[5] = {10, 20, 30, 40, 50};
==> initialisation des cinq éléments du tableau par des valeurs
int B[5] = {0};
==> tous les éléments du tableau sont initialisés à zéro
(initialisation en bloc)
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)
Remplissage
Complet (toutes les cases contiennent une valeur)

Partiel : certaines cases sont vides

Cases entre deux indices i et j donnés remplies

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)
Remarques:
int tab [20];
déclare un tableau baptisé tab de 20 objets de type int
int i;
déclare un objet élémentaire i pouvant servir à indicer
un tableau
tab [i]
utilisable comme un objet élémentaire, c’est l’élément
d’indice i du tableau tab.

(tab[3])++
incrémente de 1 l’élément d’indice 3 de tab, qui est le
4ème élément de ce tableau

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)
Tableaux et boucle for( ; ; )

Les tableaux s’exploitent souvent avec la boucle for

parce que l’on connaît leur nombre d’éléments

parce qu’elle permet d’initialiser un indice (premier


terme)
de définir quand le traitement s’arrête (second
terme)
de définir comment la progression a lieu (troisième
terme)

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)
Exemple d’utilisation des tableaux en C
:
int main(void)
{
int tableau[10]; Déclaration du
int i; tableau de 10 entiers
/* remplir le tableau */
i= 0;
while(i < 10)
{
tableau[i]= i; Remplissage de chaque
i= i+1; case par la valeur de
} son indice
return 0;
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)
Exemple
#include <stdio.h>
void main()
{
int i;
float moyenne, somme, temperature[7];
for (i=0;i<7;i++)
{
printf("Temperature[%d]=",i);
scanf("%d",&temperature[i]);
}
somme=0;
for (i=0;i<7;i++)
somme += temperature[i];
moyenne=somme/7;
printf("la température moyenne de la semaine est=%f\n",moyenne);
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)
Voici les points importants `a retenir :

1. On accède à un élément du tableau en lui appliquant l’operateur


[].

2. Les index des éléments d’un tableau vont de 0 `a nombre-


éléments-1

3. la taille d’un tableau DOIT être connue statiquement par le


compilateur.

Impossible donc d’´ecrire int t[n] ou n est une variable.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.1 Tableaux à 1 dimension (suite)

Exercice :
Ecrire un programme qui lit la dimension N d'un tableau T du
type int (dimension maximale: 20 composantes), remplit le
tableau par des valeurs entrées au clavier et affiche le tableau.
Calculer et afficher ensuite la somme des éléments du tableau.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.2 Tableaux à 2 dimension
Définition
En C, un tableau à deux dimensions est interpréter comme un
tableau (uni- dimensionnel) de dimension L dont chaque
composante est un tableau (unidimensionnel) de dimension C.

C le nombre de
colonnes du
tableau

L le nombre de lignes du tableau


L et C sont alors les deux dimensions du tableau.
Un tableau à deux dimensions contient donc L*C composantes.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.2 Tableaux à 2 dimension (suite)
Utilité

Modélisation de la notion mathématique de matrice


Modéliser une surface ou un plan

collection de mesures de différents capteurs

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.2 Tableaux à 2 dimension (suite)
Déclaration

Type_donne Indent_Tab[Nlign][Ncol];

Type_donnee : c’est le type de données à préciser pendant


la déclaration (entier, réel, caractères, …..).
Ident_Tab : le nom du tableau

Nlign et Ncol : représente le nombre de lignes et de colonne


maximal du tableau. Ce sont des constantes
littérales ou symbolique.
Exemple:
long A[10][10];
float B[2][20];
int C[3][3];
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.2 Tableaux à 2 dimension (suite)
Réservation
Les composantes d'un tableau à deux dimensions
sont stockées ligne par ligne dans la mémoire.

……

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.2 Tableaux à 2 dimension (suite)
Initialisation et Réservation
On peut déclarer et initialiser les composantes d’un tableau
à 2 dimension en indiquant la liste des valeurs respectives
entre accolades.
Exemple
int A[3][4] ={{ 0,10,20,30}, réservation de
{10,11,12,13}, 3*4*2 = 24 octets
{1,12,23,34}};
Si le nombre de lignes L (ou de colonnes) n'est pas
indiqué explicitement:
Exemple
int A[ ][4] ={{ 0,10,20,30}, réservation
{10,11,12,13}, automatique de
{1,12,23,34}}; 3*4*2 = 24 octets
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.2 Tableaux à 2 dimension (suite)
Accès aux éléments du tableau
En C, les indices du tableau varient de 0 à L-1, respectivement
de 0 à C-1.
Considérons un tableau T de dimensions L et C.

Premier Dernier
Elément Elément
T[0][0] T[L-1][C-1]

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.2 Tableaux à 2 dimension (suite)
Exemple:

#include <stdio.h>
#define L 3 //nombre de lignes
#define C 2 //nombre de colonnes
short tab[L][C] = {{1, 2}, {14, 15}, {100, 200}};
int main()
{
int i, j;
for (i = 0 ; i < L; i++) {
for (j = 0; j < C; j++)
printf("tab[%d][%d]=%d\n",i,j,tab[i][j]);
}
return 0;
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
II.2 Tableaux à 2 dimension (suite)

Exercice:

Ecrire un programme qui transforme un


tableau M à deux dimensions L et C
En un tableau V à une dimension L*C.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. Chaînes de caractères
Définition
En C, il n’ya pas de type particulier pour les chaînes de
caractères.
Une chaîne de caractères est un tableau unidimensionnel
de caractères
Le nom de chaîne fait référence à l’adresse de début du
premier caractère de la chaîne
Une chaîne de caractères bien fermée est toujours terminée
par un caractère nul \0:
Indique où le contenu utile de la chaîne se termine
Ne pas oublier de compter réserver sa place.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. Chaînes de caractères
Déclaration et initialisation

On peut déclarer et initialiser une chaîne de caractères


comme on déclare un tableau de caractères .

char t[6] = {‘a’,’b’,’c’,’\0’};

Exemple:
Char t[20] ;

char t2[] = Bonjour ;

char s[10] = Salut ;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. Chaînes de caractères
Affichage de chaînes

Directement dans printf si chaîne simple


– Code %s pour afficher des chaînes

La chaîne est affichée jusqu’au premier \0 rencontré

Exemple:
char t[]= "Bonjour\n";
printf ("Bonjour\n");
printf ("%s", t);

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. Chaînes de caractères
Lecture de chaînes
On peut utiliser scanf:
– Code "%s"
Exemple:
char str[10];
int a;
printf(" Entrez votre nom :");
scanf("%s",str);

Pas besoin du "& " car une chaîne est déjà


une référence sur une zone mémoire

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. Chaînes de caractères
Lecture et écriture de chaînes
A côté des fonctions printf et scanf, on trouve les deux
fonctions puts et gets, spécialement conçues pour
l'écriture et la lecture de chaînes de caractères
puts( <Chaîne> )
écrit la chaîne de caractères désignée et provoque
un retour à la ligne.
gets( <Chaîne> )
lit une ligne de caractères et la copie à l'adresse
indiquée par <Chaîne>.
Le retour à la ligne final est remplacé par le
symbole de fin de chaîne '\0'.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. Chaînes de caractères
Lecture et écriture de chaînes
Exemple:
#include <stdio.h>
main()
{
char nom[20], prenom[20], ville[25];
printf("quelle est votre ville : ");
gets(ville);
printf("Donnez vos nom et prenom : ");
scanf("%s %s", nom, prenom);
printf("Bonjour cher %s %s, qui habitez a ", prenom, nom);
puts(ville);
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. Chaînes de caractères
Bibliothèque de chaînes : string.h.
Les chaines de caractères peuvent être manipulés grâce à
une bibliothèque de fonctions spéciales, décrites dans le
fichier string.h.

Principales fonctions :

strcpy(dest, source);
strcat(dest, source);
strlen(source);
strcmp(chaine1, chaine2);

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. Chaînes de caractères
Exemple:
#include <stdio.h>

void main()
{
int lg;
char chaine[50];
printf("saisir une chaine : ");
gets(chaine);
for (lg=0; chaine[lg] !=‘\0’; lg++);
printf(" %d ", lg);
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS
Rappel sur les variables:
Une variable peut être représentée par une case de
la mémoire, qui contient la valeur d’une donnée.
Int a;
a
……. …….

0xC1 0xC2 0xC3 0xC4


Mémoire centrale
Chaque variable est identifiée par:
un nom avec lequel on accède à son contenu.
une adresse attribuée par le système d'exploitation .
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Définition
Un pointeur est une variable qui contient l'adresse
d'une autre variable :
Déclaration
Type_donnee * Ident_ptr;
Exemple :
int * pA;
pA est une variable codé sur 4 octets (adressage 32
bits) et contiendra l'adresse d'un entier.

Si un pointeur P contient l'adresse d'une variable A, on


dit que 'P pointe sur A'.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)

Accès au contenu d'une variable

adressage direct adressage indirect

Accès au contenu par Accès au contenu à partir de


le nom de la variable l’adresse de la variable.

Pointeur

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Accès au contenu d'une variable

Exemple:

int *pA , i;
Adresse de i
i=10;
contenu contenant
pA = &i; Adresse de pA
contenu contenant
*pA = 12;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Accès au contenu d'une variable

Exemple:

int *pA , i;
10 Adresse de i
i=10;
contenu contenant
pA = &i; ? Adresse de pA
contenu contenant
*pA = 12;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Accès au contenu d'une variable

Exemple:

int *pA , i;
10 Adresse de i
i=10;
contenu contenant
pA = &i; Adresse de i Adresse de pA
contenu contenant
*pA = 12;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Accès au contenu d'une variable

Exemple:

int *pA , i;
12 Adresse de i
i=10;
contenu contenant
pA = &i; Adresse de i Adresse de pA
contenu contenant
*pA = 12;

pA = &i *pA i
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Les pointeurs et les noms de variables ont le même rôle: Ils
donnent accès à un emplacement dans la mémoire interne
de l'ordinateur.

Il faut quand même bien faire la différence:

Un pointeur est une variable qui peut 'pointer' sur


différentes adresses.

Le nom d'une variable reste toujours lié à la


même adresse.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Représentation en mémoire
Un pointeur est un entier.
– Contenant l’adresse de la variable pointée.
– Sa taille dépend du Microprocesseur.
Comment varie la taille en mémoire d’un pointeur en
fonction du type pointé ?
char * pchar; Sur PC sous Win32 :
int * pint; toujours 32 bits.
double * pdouble;
printf("pchar:%n", sizeof(pchar));
printf("pint:%d\n", sizeof(pint)); Sur PC sous Win64 :
printf("pdouble:%d\n", sizeof(pdouble)); toujours 64 bits.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Opérateurs de base

Récupération d’adresse: & Récupération de donnée : *


(opérateur 'adresse de‘) (opérateur 'contenu de‘)

int i; *pi;

pi =&i;
i = 1;
*pi = 2;
*&i = 3;
pi = 4;
*pi = 5;
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Somme d’un pointeur et d’un entier
Lorsqu’on ajoute 1 à un pointeur, cela augmente la valeur
de l’adresse qu’il contient non pas de 1, mais de la taille
d’un élément pointé.

Intérêt :
Si un pointeur pointe au début d’un tableau.
Ajouter 1 fait pointer sur l’élément suivant.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Somme d’un pointeur et d’un entier
Exemple1 Exemple2
int tab[4] = {0, 10, 20, 30}; int i, *pi;
int* t; double x, *px;
t = &tab[0]; pi = &i;
printf("%d\n", *t); printf("pi :%d\n", pi);
t = t + 1; pi = pi + 1;
printf("%d\n", *t); printf("pi+1 :%d\n" ,pi);
t = t + 1; px = &x;
printf("%d\n", *t); printf("px :%d\n", px);
t = t + 1; px = px + 1;
printf("%d\n", *t); printf("px+1 :%d\n", px);

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. POINTEURS (suite)
Somme d’un pointeur et d’un entier
Lorsqu’on ajoute « n » à un pointeur, cela augmente la
valeur de l’adresse de « n » fois la taille d’un élément
pointé.
Si le pointeur pointe vers un tableau, il pointe ensuite
sur l’élément situé n éléments plus loin
Opérateurs combinés: +=
-=
Opérateurs d’incrémentation et de décrémentation
++ : le pointeur pointe sur l’élément suivant.
-- : le pointeur pointe sur l’élément précédent.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Tableaux à un 1 dimension et Pointeur

Soit un tableau Tab de type entier:


int Tab[10];

printf("%d",*Tab); ou printf("%d" ,Tab[0]);

scanf("%d" ,Tab+2); ou scanf("%d",&Tab[2]);

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Tableaux à 1 dimension et Pointeur
Exemple1 Exemple2
main() main()
{ {
int T[5] = {-3, 4, 0, -7, 3}; int T[5] = {-3, 4, 0, -7, 3};
int POS[5]; int POS[10];
int I,J; int I,J;
for (J=0,I=0 ; I<5 ; I++) for (J=0,I=0 ; I<5 ; I++)
if (T[I]>0) if (*(T+I)>0)
{ {
POS[J] = T[I]; *(POS+J) = *(T+I);
J++; J++;
} }
return 0; return 0;
} }
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Tableau à 2 dimension et Pointeurs
Soit le tableau M à deux dimensions défini comme suit:
int M[4][3] = { { 0, 1, 2},
{10,11,12},
{20,21,22},
{30,31,32}};
Le nom du tableau M représente l'adresse du premier
élément du tableau et pointe sur le tableau M[0] qui a la
valeur: {0,1,2}.

L'expression (M+1) est l'adresse du deuxième élément du


tableau et pointe sur M[1] qui a la valeur: {10,11,12}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX Exemple1
Lecture et Affichage d’une matrice matérialisé par un pointeur
/* lecture d’une matrice */
#include <stdio.h> pt = &A[0][0] ; /* ou bien pt = A[0] ; */
#define M 4 for (i = 0 ; i<M ; i++)
#define N 10 {
void main() printf("\t ligne n° %d \n", i+1) ;
for (j = 0 ; j<N ; j++)
{ scanf("%i", pt + i * N + j ) ;
short A[M][N] ; }
short *pt ;
int i, j ; for (i = 0 ; i<M ; i++)
} {
for (j = 0 ; j<N ; j++)
printf("%d", *( pt + i * N + j ) ) ;
printf("\n") ;
}
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique
2 types de données dans un programme :

Données statiques
On connaît à l'avance (lors de l'écriture du programme)
la taille des données. La mémoire peut être réservée à
l'avance, avant l'exécution du programme

Données dynamiques
On ne connaît la taille des données qu'à l'exécution du
programme la réservation de la mémoire se fait au cours
de l'exécution du programme

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique

La déclaration d’un tableau définit un tableau "statique": il


possède un nombre figé d’emplacements.
Il y a donc un gaspillage d’espace mémoire en
réservant toujours l’espace maximal prévisible.

Il serait souhaitable que l’allocation de la mémoire dépend


du nombre d’éléments à saisir. Ce nombre ne sera connu
qu’à l’exécution : c’est l’allocation dynamique.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique
En C, il existe 4 fonctions pour gérer l’allocation
dynamiquement de la mémoire
Bibliothèque <stdlib.h>
char *malloc(taille) allocation d’un bloc
char *calloc(taille, sizeof(type)) allocation & initialisation d’un bloc
char *realloc(char *, taille) modification de la taille d’un bloc
void free(char *) libération d’un bloc

Chacune des fonctions malloc, calloc ou realloc, prend une


zone d’une taille donnée dans l’espace mémoire libre réservé
pour le programme (appelé tas ou heap) et affecte l’adresse
du début de la zone à une variable pointeur.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique
malloc ( N):

Fournit l'adresse d'un bloc mémoire de N


octets libres ou la valeur zéro sinon.
(int *) malloc(N):

Fournit l'adresse d'un bloc mémoire de N


octets libres pour déposer des int, ou la
valeur zéro sinon.
Dynamiquement, N est du type unsigned int, donc on ne peut
pas réserver plus de 65536 octets à la fois
La fonction malloc retourne l’adresse du premier octet de la
zone mémoire allouée. En cas d’échec, elle retourne NULL.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique
Utilisation des fonctions de la bibliothèque <stdlib.h>
(int *) malloc(N*sizeof(int)):

Fournit l'adresse d'un bloc mémoire de


N*taille de int libres pour déposer des int,
ou la valeur zéro sinon.

int * pt = (int *)malloc(N*sizeof(int)):

mémorisation dans pt l’adresse obtenue

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique

La commande exit
S'il n'y a pas assez de mémoire pour effectuer une action avec
succès:

il est conseillé d'interrompre l'exécution du


programme et de renvoyer une valeur différente
de zéro comme code d'erreur du programme

Appel

commande exit (de <stdlib>)

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique
Si on n’a plus besoin d’un bloc de mémoire réservé
dynamiquement par malloc, alors on peut le libérer à
l’aide de la fonction free.

free(<pointeur>);

Libère le bloc de mémoire désigné par le pointeur


<pointeur>

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique

101 20 int i=20;


102 205
int p;

p = (int )malloc(sizeof(int));
P =4;
205 4

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique

101 20 int i=20;


102 205
int p;

p = (int )malloc(3 sizeof(int));


P =4
205 4
(p+1)=14;
14

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique Cas d’un tableau à 1 dimension
#include <stdio.h>
#include <stdlib.h> printf("Saisie du tableau : ");
int main() for ( i = 0 ; i < N; i++)
{ scanf("%d", pt + i ) ;
short *pt; printf("Affichage du tableau ") ;
int N , i; for ( i= 0 ; i < N; i++)
printf("Entrez la taille N du tableau \n") ; printf("%d\t", *( pt + i ) ) ;
scanf("%d", &N) ; free( pt );
pt = ( short * ) malloc(N*sizeof( short ) ); return 0;
if (pt == NULL) }
{
printf("Mémoire non disponible") ;
system("pause");
exit( 1);
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique
Cas d’un tableau à 2 dimensions
Pour allouer dynamiquement de la mémoire à un tableau
de 15 lignes et 20 colonnes on procède ainsi:

int ** tab;
tab = (int **)malloc(15*sizeof(int *));
for (int i=0; i<15; i++)
tab[i] =(int *) malloc(20*sizeof(int));

Pour libérer les espaces inutiles


for (i=0; i<15; i++)
Ou free(tab);
free(tab[i]);

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
Allocation dynamique

EXERCICE

Ecrire un programme qui lit 10 mots au clavier (longueur


maximale: 50 caractères) et attribue leurs adresses à un
tableau de pointeurs MOT. Copier les mots selon l'ordre
lexicographique en une seule 'phrase' dont l'adresse est
affectée à un pointeur PHRASE. Réserver l'espace nécessaire
à la PHRASE avant de copier les mots. Libérer la mémoire
occupée par chaque mot après l'avoir copié. Utiliser les
fonctions de <string>.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. POINTEURS ET TABLEAUX
SOLUTION:
Allocation dynamique
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
char PHRASE[50]; char *MOT[10]; int I;
for (I=0; I<10; I++)
{
gets(PHRASE);
MOT[I] = malloc(strlen(PHRASE)+1);
if (MOT[I]) strcpy(MOT[I], PHRASE);
else {
printf("ERREUR: Pas assez de mémoire \n");
exit(-1); }
}
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Introduction
Enoncé d’un problème

Analyse

Données résultats

Formulation de l’Algorithme

Sous- … Sous- … Sous-


programme_1 programme_k programme_n

Chacun réalise une tâche bien définie


Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Structuration d’un programme

Un programme C est constitué d'un ensemble de fonctions


toutes accessibles à partir du programme principal main().

En programmation structurée, le programme est divisé en


fonctions qui réalisent chacune une tâche bien définie. Ceci
facilite l'organisation et la mise au point du programme.

Un programmeur professionnel utilise des bibliothèques de


fonctions pour accélérer le développement de son application.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Une fonction vue du processeur

C'est un code exécutable à une adresse en mémoire terminé


par une instruction de retour

A l'appel de la fonction, le -processeur exécute le code à


partir de l'adresse de la fonction et l'instruction retour le
fait revenir à l'instruction suivant l'appel.

Des données peuvent être transmises à la fonction en


paramètres. Lors du retour une valeur peut être récupérée.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Définition
Une fonction est donc un code (programme) exécutable à une
adresse en mémoire terminé par une instruction de retour.
Appel de la fonction

Exécution du code
à partir de l'adresse
de la fonction.

Instruction retour
le fait revenir à
l'instruction suivant
l'appel.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Exemple :

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Du point de vue du programmeur

Un programme est un ensemble de fonctions,

Il s'exécute à partir de la fonction main (),

En programmation structurée, le programme est divisé en


fonctions qui réalisent chacune une partie de la tâche. Ceci
facilite l'organisation et la mise au point du programme.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Communication
Le programme principal main() et les fonctions ont
besoin de se communiquer des données.
Cette communication se fait par l’intermédiaire des
paramètres (appelés arguments) entre la fonction appelée
et la fonction appelante.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS

Une fonction est donc définie par :


son nom
ses arguments formels
le type de la fonction (type de
l'argument retourné par la fonction)
son corps

Elle possède la même structure que le programme principal.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Mise en œuvre:
#include <stdio.h>

/* 1) Le Prototypage */ Déclarer le prototype

int main()
{
… Appel de la fonction

/* 3) L'appel */

}
Définir la fonction
/* 2) La définition */
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
1) Le Prototypage
La déclaration de prototype permet de définir au compilateur
les paramètres d'entrée et de sortie afin de pouvoir vérifier
lors d'appel de fonction l'ordre de passage des paramètres
Syntaxe :
Type Ident_fonc (type_1 arg1, …… , Type_k argk);

Type du résultat Nom de la Les paramètres


retourné fonction de la fonction

Exemple:
double CalcDiscri (double Arga, double Argb, double Argc);
void fdouble (double *pVar);
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
2) La Définition
Elle décrit l'enchaînement de toutes les instructions
permettant de réaliser la fonction.
Syntaxe : Pas de point
virgule
Type Ident_fonc (type_1 arg1, …… , Type_k argk)
{
//Déclaration des variables si besoin
instruction_1; Arguments
……………….
formels
instruction_n;

return(expression) ;
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
3) L'Appel de la fonction
#include<stdio.h>
float cube(float); // prototype de la fonction cube
void main()
{
float c, a=1.5; Pendant l’appel les
c = cube(a); // premier appel et utilisation de cube Arguments passés
printf("c : %f\n", c); sont
c = cube(a) * 3.0f; // deuxième appel et utilisation de cube appelés:
printf("c : %f\n", c); Arguments effectifs
printf("cube de 2 : %f\n", cube(2.0f)); // troisième utilisation
}
float cube(float x)
{ float y;
y = x * x * x;
return y;
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Deux Types de fonctions
Les fonctions qui retournent quelque chose possèdent un
type. Pour cela, il faut utiliser l'instruction return
EXEMPLE :
/* Une fonction calculant le produit de deux entiers */
/* Paramètres d'entrée : deux entiers, Type retour : entier */
int calcule_produit (int iExp1, int iExp2)
{
int iProduit;
iProduit = iExp1 * iExp2;
return iProduit;
}
Si on ne précise pas de type a une fonction, par défaut le
type du résultat retourné est un entier
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Deux Types de fonctions
Les fonctions qui ne retournent rien doivent être précédées
par void. Ce type de fonctions sont également appelées
procédures.
EXEMPLE :
/* Procédure affichant le produit de deux entiers */
/* Paramètres d'entrée : deux entiers, Type retour : rien */
void affiche_produit (int iExp1, int iExp2)
{
int iProduit;
iProduit = iExp1 * iExp2;
printf ("Le produit de %d et %d est égal à %d",
iExp1, iExp2, iProduit);
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Fonctionnement
#include <stdio.h>
float cube(float y);
int main()
{
float c, a; 1
a = 1.5; 2
c = cube(a); float cube(float x)
printf("c : %f\n", c); {
system("PAUSE"); 5 float y;
return 0;
3
4 y = x * x * x;
}
float cube(float x) return y;
{ }
float y;
y = x * x * x;
return y;
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Le passage des arguments en C
Entre la fonction appelante et la définition appelée se pose le
problème de la communication des arguments. On distingue
deux modes :

Passage par valeur pour les arguments en entrée :


une copie est créée, affectée de la valeur. L’appel ne
modifie pas la valeur du paramètre.

Passage par adresse, pour les arguments en entrée/sortie:


le compilateur travaille sur un alias du paramètre. La
valeur du paramètre est changée par la fonction.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Passage de paramètres : par valeurs

Exemple de programme sans fonctions

#include <stdio.h>
int a,b,res;
void main()
{
printf("Donnez les valeurs de a et b ");
scanf("%d %d",&a,&b);
res=a+b;
printf("\t\tJe traite\n");
printf("L'addition de a=%d et de b=%d est égale à d\n",a,b,res);
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Passage de paramètres : par valeurs
void saisie(void) Programme Principal
{
#include <stdio.h>
printf("Donnez les valeurs de a et b ");
int a,b,res;
scanf("%d %d",&a,&b);
void saisie(void);
}
void traitement(void);
void traitement(void)
void affichage(void);
{
res=a+b;
main()
printf("\t\tJe traite\n");
{
}
saisie();
traitement();
void affichage(void)
affichage();
{
}
printf("L'addition de a=%d et de b=%d
est égale à %d\n",a,b,res);
//définition des fonctions
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Passage de paramètres : par valeurs
Programme Principal
void saisie(void) #include <stdio.h>
{ int a,b,res;
printf("Donnez les valeurs de a et b "); void saisie(void);
scanf("%d %d",&a,&b); void traitement(int val1,int val2);
} void affichage(void);
void traitement(int val1,int val2) main()
{ {
printf("\t\tJe traite\n"); saisie();
res=val1+val2; traitement(a,b);
} affichage();
void affichage(void) }
{
printf("L'addition de a=%d et de // définition des fonctions
b=%d est égale à %d\n",a,b,res);
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS Passage de paramètres : par valeurs
void saisie(void) Programme Principal
{
#include <stdio.h>
printf("Donnez les valeurs de a et b ");
int a,b,res;
scanf("%d %d",&a,&b);
}
void saisie(void);
int traitement(int val1,int val2)
int traitement(int val1,int val2);
{
void affichage(void);
int val3;
printf("\t\tJe traite\n");
main()
val3=val1+val2;
{
return(val3);
saisie();
}
res=traitement(a,b);
void affichage(void)
affichage();
{
}
printf("L'addition de a=%d et de
b=%d est égale à %d\n",a,b,res);
//définition des fonctions
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Passage de paramètres : par valeurs

#include <stdio.h> Fonction


int a,b; void fonction(int val1,int val2)
void fonction(int val1,int val2); {
val1 +=4;
main() val2 -=2;
{ printf("val1=%d et
a=4;b=6; val2=%d\n",val1,val2);
printf("a=%d et b=%d\n",a,b); }
fonction(a,b);
printf("a=%d et b=%d\n",a,b);
}
// définition

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Passage de paramètres : par adresse

#include <stdio.h> Fonction


int a,b; void fonction(int* val1,int* val2)
void fonction(int val1,int val2); {
*val1 +=4;
main() *val2 -=2;
{ printf("val1=%d et
a=4;b=6; val2=%d\n",*val1,*val2);
printf("a=%d et b=%d\n",a,b); }
fonction(&a,&b);
printf("a=%d et b=%d\n",a,b);
}
// définition

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Tableaux passés en paramètres à une fonction

Tableaux à une dimension (un indice)


Type Ident(Type *ptab, int dim_tableau, …);
OU
Type Ident(Type Tab[], int dim_tableau, …);
Tableaux à deux dimensions (2 indices)

Type Ident(Type Tab[][NCOL], int nLign, …);


OU
Type Ident(Type (*pTab)[NCOL], int nLign, …);

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Tableaux passés en paramètres à une fonction
#include <stdio.h>
#include <stdlib.h>

void init_tab (int tab[], int n) int i,


{ int n = 5;
int i; int *tab;
for (i = 0; i < n; i++) tab= (int*)malloc(n * sizeof(int));
tab[i] = i;
return; init(tab, n);
} return 0
}
int main()
{
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FONCTIONS
Pointeur sur fonction
Utilisation comme un tableau de taille variable

double* generer_sinus(double amplitude, int nombre_points)


{
double* valeurs;
int i;
valeurs = (double*)malloc(nombre_points * sizeof(double));
if (valeurs != NULL)
{
for (i = 0; i < nombre_points; i++)
valeurs[i] = amplitude * sin(i * 2 * M_PI /nombre_points);
}
return valeurs;
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
INTRODUCTION

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
INTRODUCTION
Définition d’un fichier
Un fichier est un ensemble d'information codée en binaires
(bits), définis par un identificateur au même titre qu’une
variable et stockée sur un support de mémoire non volatil:
disque dur, disquette, bande magnétique, CD-ROM.

les informations sont sauvegardées à la suite les unes des autres


ne sont pas forcément de même type (un char, un int, une
structure ...)

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Types d'accès

Généralement deux types de fichiers sont employés

Fichiers à Accès séquentiel Fichiers à Accès direct

L’accès au contenu s’effectue dans on peut directement accéder à


l'ordre du stockage, c’est-à-dire n'importe quel endroit du fichier
du premier au dernier en passant par l'adresse individuelle de
par tous les enregistrements chaque enregistrement
intermédiaires..

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Codage d’informations
Deux façons de coder les informations
stockées dans un fichier

En Binaire En ASCII

ce sont des fichiers structurés sous Ces fichiers sont


forme d'enregistrements (struct en listables et éditables.
langage C), dont le contenu doit
être interprété par le programme
qui les a créés.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Caractéristiques d’un fichier
Sur le support de sauvegarde, le fichier possède:

une extension Nom proprement dit

Un fichier possède des attributs, c’est à dire des droits d’accès :

lecture écriture destruction etc…

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Opérations possibles avec les fichiers:
Création
Ouverture
Lecture
Ecriture
Destruction
Renommer
Fermer.

La plupart des fonctions permettant la manipulation


des fichiers sont rangées dans la bibliothèque standard
stdio.h.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Déclaration d'un fichier
Toutes les fonctions de gestion des informations admettent comme
paramètre un pointeur sur la structure FILE définie dans stdio.h.:
Syntaxe: FILE * P_Nom;

majuscules obligatoires pour FILE


P_Nom est la variable qui permettra de manipuler le fichier dans le
programme.
Ce pointeur repère une cellule donnée.

Le pointeur permet de se repérer dans le fichier. On accède à une


information en amenant le pointeur sur sa position.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Ouverture du fichier
Avant de pouvoir lire ou écrire dans un fichier, il faut que celui-ci
soit ouvert. Pour ouvrir un fichier on utilise la syntaxe suivante:
Syntaxe:
P_Nom = fopen ("nom_du_fichier.dat", "mode");

Il permet d’associer à la variable P_Nom:


Nom logique (interne: en mémoire Les modes
centrale) le nom physique (externe: sur le d'ouvertures des
disque). fichiers
La valeur retournée par fopen est:
– soit un flot de données ;
– soit NULL si l’exécution de cette fonction ne se déroule
pas normalement.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Ouverture du fichier
Exemple:
#include<stdio.h>

FILE fic;
char nom_fich[20];
main()
{
……

printf("donner le nom du fichier :");


scanf("%s",nom_fich);
fic = fopen(nom_fich, "r"); // ouvrir en lecture
……
return 0:
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Différents modes utilisés pour les fichiers TEXTES :
"r" : ouverture du fichier en lecture seule
"w" : ouverture du fichier en écriture seule (destruction de
l'ancienne version si elle existe)
"a" : Ajout d’enregistrement, ouverture du fichier et se
positionne en écriture à la fin du fichier.
"r+" : ouverture du fichier en mode mise à jour (lecture/écriture)
(fichier existant pas de création d'une nouvelle version).
"w+" : crée un fichier en mode mise à jour (lecture/écriture)
(destruction de l’ancienne version si elle existe)
"a+" : lecture/écriture d'un fichier existant (mise à jour),
pas de création d'une nouvelle version, le pointeur est
positionné à la fin du fichier.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Différents modes utilisés pour les fichiers Binaires :
"rb" : lecture seule
"wb" : écriture seule (destruction de l'ancienne version
si elle existe)
"wb+" : lecture/écriture (destruction de l’ancienne version
si elle existe)
"rb+" : lecture/écriture d'un fichier existant (mise à jour),
pas de création d'une nouvelle version.
"ab+" : lecture/écriture d'un fichier existant (mise à jour),
pas de création d'une nouvelle version, le pointeur
est positionné à la fin du fichier.
A l’ouverture, le pointeur est positionné au début du fichier
(sauf "a+" et "ab+", à la fin).
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Exemple
FILE * P_Nom ;
P_Nom = fopen("c :\\travail.dat", "rb") ;

Ouverture d’un fichier :


- nommé travail.dat
- se trouvant au répertoire racine.
- mode binaire en lecture seule
FILE * P_Nom ; Ouverture d’un fichier :
char nom[30] ; - nom : saisit par l’utilisateur
printf( "Nom du fichier : " ); - mode texte en écriture seule
gets(nom ); (destruction de l'ancienne
P_Nom = fopen(nom, "w") ; version si elle existe)
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Fermeture:
On utilise la fonction de prototype int fclose(FILE *f);
Syntaxe:
fclose(P_Nom);
La fonction retourne 0 si la fermeture s’est bien passée
et -1 si il y a eu une erreur.
Exemple: FILE * P_Nom ;
P_Nom = fopen( c :\\travail.dat", "rb") ;

// Ici instructions de traitement

fclose(P_Nom) ;
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Fermeture:
FILE fic;
char nom_fich[20];
…………………………………………….
scanf("%s",nom_fich);
fic = fopen(nom_fich, "r"); // ouvrir en lecture
if(fic == NULL)
{ printf("Impossible d'ouvrir le fichier %s\n", nom_fich);
exit(1); }
else
printf("Ouverture du fichier %s est réussie \n", nom_fich);
……………………………………………….
if( fclose(P_Nom) )
{ printf("Probleme de fermeture du fichier %s", nom_fich);
exit(0); }
else
printf("Fermeture du fichier %s est réussie \n", nom_fich);

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Destruction:
On utilise la fonction de prototype int remove(char *nom);
Syntaxe:
remove(" Nom_fichier") ;

La fonction retourne 0 si la destruction s’est bien passée.


Exemple:
int x ;
x = remove("c :\\travail.dat") ;
if (x == 0)
printf( Destruction OK : ") ;
else
printf(" Problème à la destruction : ") ;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Renommer:
On utilise la fonction de prototype :
int rename(char *oldname, char *newname);
Syntaxe:
rename("c :\\travail.dat", "c :\\user.dat") ;
La fonction retourne 0 si la modification de nom de fichier
s’est bien passée.
Exemple:
int x ;
x = rename ("c :\\travail.dat", "c :\\user.dat");
if (x == 0)
printf(“ Operation OK : ") ;
else
printf( "L’operation s’est mal passee : " );
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Fin de Fichier
int feof(FILE * P_Nom)

Retourne 0 tant que la fin du fichier n’est pas atteinte


et -1 sinon.
utilisation dans une boucle :
lecture initiale;
while( ! feof(fic) )
{
lecture courante;
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Détecter les erreurs pendant la lecture

La fonction ferror permet de détecter les erreurs


pendant la lecture des données dans un fichier :

PROTOTYPE:
int ferror( FILE* file);

La fonction renvoie:

Une valeur différente de zéro si une erreur est survenue


Une valeur égale à zéro si tout va bien

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Les entrées-sorties formatées
Manipulations des fichiers textes
Ecriture
Syntaxe:
int fprintf(P_Nom, "format", variable);

Exemple :
fprintf(P_Nom, "%d\n",compteur);
Remarque:
La valeur de retour est le nombre de valeurs
imprimés. En plus du flux à afficher, la fonction
ressemble très fortement à printf().

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Manipulations des fichiers textes

Lecture

Syntaxe:
int fscanf(P_Nom,"format", &variable);

Exemple :
fscanf(P_Nom, "%d", &age);
Remarque:
La valeur de retour est le nombre d'information lue.
En plus du flux à afficher, la fonction ressemble très
fortement à scanf().

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Manipulations des fichiers textes

La fonction de prototype

int fputc(char c, FILE * P_Nom)

Écrit la valeur de c à la position courante du pointeur, le pointeur


avance d'une case mémoire.
Elle retourne l’entier correspondant au caractère écrit
ou –1 en cas d’erreur.
Exemple :
fputc(‘A’, P_Nom) ;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Manipulations des fichiers textes

La fonction de prototype
int fgetc(FILE * P_Nom)

Permet de lire 1 caractère, et retourne son code ASCII, sous


forme d’un entier. En cas d’erreur ou bien si la fin du fichier est
atteinte, elle retourne la valeur –1 (EOF).

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Exemple: Manipulations des fichiers textes

#include <stdio.h> Suite:


#include <stdlib.h>
#define ENTREE "entree.txt" // Recopie du contenu de
#define SORTIE "sortie.txt" // ENTREE dans SORTIE
int main(void) {
FILE *f_in, *f_out; while ((c = fgetc(f_in)) != EOF)
int c; fputc(c, f_out);
// Ouverture du fichier ENTREE en lecture
if ((f_in = fopen(ENTREE,"r")) == NULL) { // Fermeture des flots de
printf("Impossible de lire %s\n",ENTREE); // donnees
exit(0); }
// Ouverture du fichier SORTIE en ecriture fclose(f_in);
if ((f_out = fopen(SORTIE,"w")) == NULL) { fclose(f_out);
printf("Impossible d’ecrire dans %s\n",SORTIE); return(0);
exit(0);
} }

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Manipulations des fichiers textes

int fgets(char * chaine, int n, FILE * flux);


Cette fonction lit n-1 caractères à partir de la position du pointeur ou
bien jusqu'au caractère '\n', s'il survient avant les n-1 caractères et
les range dans chaîne en ajoutant '\0'. La valeur de retour est NULL
s’il y a un échec en lecture ou bien si la fin du fichier est atteinte.
ATTENTION : à la rencontre de '\n', il y arrêt, mais cet '\n' est
copié comme un autre caractère dans la chaine.
Exemple :
char chaine[10]; Si l'enregistrement est : trois\n
fgets(chaine, 10, flux); ‘chaine' sera composé de : trois\n\0???
Astuce : on met l'\0 à la place de l'\n par une
commande facile à comprendre.
chaine [ strlen(chaine) – 1 ] = '\0';
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Manipulations des fichiers textes
La fonction de prototype

int fputs(char *chaîne, FILE * P_Nom)

est analogue avec une chaîne de caractères.

Le pointeur avance de la longueur de la chaîne ('\0' n'est pas


rangé dans le fichier).

La fonction retourne une valeur non négative si tout s'est bien


passé et 1 en cas d’erreur (par exemple tentative d’écriture
dans un fichier ouvert en lecture)

Exemple : fputs("BONJOUR ! ", index) ;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS if (fichier != NULL)
{
while (!feof(fichier))
Exemple typique {
pour la lecture fgets(ligne, L_MAX, fichier);
d’un fichier texte if (!ferror(fichier))
puts(ligne);
else
#include <stdio.h> {
#define L_MAX 80 printf("Erreur lors de la lecture du fichier\n");
void main() break;
{ }
FILE* fichier; }
char ligne[L_MAX]; fclose(fichier);
fichier = }
fopen(" essai.txt", "r"); else
printf("Erreur lors de l'ouverture du fichier.\n");
getch();
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
#include <stdio.h>
int main()
{
FILE * fichier;
int i;
Exemple fichier = fopen("Essai.txt", "w");
typique pour if (fichier != NULL)
{
l’écriture d’un for (i = 0; i < 10; i++)
fichier texte {
fprintf(fichier, "ligne %d\n", i);
if (ferror(fichier))
{
printf("Erreur lors de l'ecriture.\n");
break;
}
}
if (fclose(fichier))
printf("Le fichier n'a pas été correctement écrit.\n");
}
else
printf("Erreur lors de l'ouverture du fichier.\n");
_getch();
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS

MANIPULATIONS DES FICHIERS BINAIRES

Un fichier binaire est une copie conforme de la mémoire


centrale. Les informations numériques sont écrites en
hexadécimal et le retour a la ligne prend une forme
particulière (ce n'est pas 2 caractères comme en mode
texte).

Les fonctions d’entrées-sorties binaires permettent de


transférer des données dans un fichier sans transcodage.

Elles sont notamment utiles pour manipuler des données de


grande taille

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Manipulations des fichiers binaires
Ecriture
int fwrite(void *p, int taille_bloc, int nb_bloc, FILE *P_Nom)
Écrit, à partir de la position courante du pointeur P_Nom, nb_bloc
fois taille_bloc octets lus à partir de l'adresse p. Le pointeur fichier
avance d'autant.
ou fwrite(&variable, sizeof(variable), 1, flux);
Cette fonction retourne le nombre de blocs écrits (0 en cas
d’erreur, ou bien si la fin du fichier est atteinte).
Exemple :
taille_bloc = 4 (entier codé sur 4 octets),
nb_bloc=3, écriture de 3 entiers.
int tab[10] ;
fwrite(tab,4,3, P_Nom) ;
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Manipulations des fichiers binaires
Lecture
Elle est analogue à fwrite en lecture.

int fread(void *p, int taille_bloc, int nb_bloc, FILE * P_Nom)

Cette fonction retourne le nombre de blocs luts


(0 en cas d’erreur, ou bien si la fin du fichier est atteinte).

L'astuce pour la lecture est identique à l'écriture.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Manipulations des fichiers binaires
Exemple 1:

#include <stdio.h>
void main() while ( ! feof(p_entree) )
{ {
int donnee; i++;
int i = 0; // ecriture
FILE * p_entree; fwrite(&donnee, sizeof(donnee), 1, p_sortie);
FILE * p_sortie; // lecture courante
p_entree = fopen("entree.dat", "rb"); fread(&donnee, sizeof(donnee), 1, p_entree);
}
// entree.dat est composé d'un entier
// par enregistrement fclose(p_entree);
fclose(p_sortie);
p_sortie = fopen("sortie.dat", "wb"); }
fread(&donnee, sizeof(donnee), 1, p_entree);
// lecture initiale

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS Manipulations des fichiers binaires
#include <stdio.h>
#include <stdlib.h>
Exemple 2: #define NB 50
#define F_SORTIE "sortie.txt"
int main(void) {
FILE *f_in, *f_out;
int *tab1, *tab2;
int i;
// allocation memoire des tableaux
tab1 = (int*)malloc(NB * sizeof(int));
tab2 = (int*)malloc(NB * sizeof(int));
for (i = 0 ; i < NB; i++)
tab1[i] = i;
/* ecriture du tableau dans F_SORTIE */
if ((f_out = fopen(F_SORTIE, "wb")) == NULL) {
printf("\nImpossible d’ecrire dans %s\n",F_SORTIE);
exit(0);
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Manipulations des fichiers binaires

Exemple 2: fwrite(tab1, NB * sizeof(int), 1, f_out);


fclose(f_out);
(suite) /* lecture dans F_SORTIE */
if ((f_in = fopen(F_SORTIE, "rb")) == NULL) {
printf("\nImpossible de lire dans %s\n",F_SORTIE);
exit(0);
}
fread(tab2, NB * sizeof(int), 1, f_in);
fclose(f_in);
for (i = 0 ; i < NB; i++)
printf("%d\t",tab2[i]);
printf("\n");
return(EXIT_SUCCESS);
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Fonction particulière aux fichiers à acces direct:
La fonction de prototype:
int fseek(FILE *index , int offset , int direction);

Permet de se positionner dans un fichier et Déplace le


pointeur de offset octets à partir de direction.
Valeurs possibles pour direction:
0 -> à partir du début du fichier.
1 -> à partir de la position courante du pointeur.
2 -> en arrière, à partir de la fin du fichier.

Cette fonction retourne « offset » si la manipulation s’est


bien passée , retourne 0 si le pointeur n’a pu être déplacé.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Positionnement du pointeur au début du fichier:
On utilise la fonction de prototype :
void rewind(FILE *f);
Syntaxe:
rewind (P_Nom) ;

Elle est équivalente à: fseek(P_Nom, 0, 0)

Exemple:
FILE * P_Nom;
P_Nom = fopen("C:\\travail.dat", "rb") ; // pointeur au début
// ici traitement du fichier
rewind(P_Nom) ; // repositionne le pointeur au début
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Fonction particulière aux fichiers à acces direct:

Exemple :

FILE *index ;
index = fopen("c :\\travail.dat", "rb") ; // pointeur au début

// ici manipulation du fichier

fseek(index, 5, 1) ; // déplace le pointeur de 5 position à


// partir de la position courante du pointeur

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Fonction particulière aux fichiers à acces direct:

la fonction de prototype :
long ftell(FILE *P_Nom);

retourne la position courante dans le fichier (en


nombre d’octets depuis l’origine).

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS

Exemple : #include <stdio.h>


#include <stdlib.h>
#define NB 50
#define F_SORTIE "sortie.txt"
int main(void) {
FILE *f_in, *f_out;
int *tab;
int i;
// Initialisation du tableau
tab = (int*)malloc(NB * sizeof(int));
for (i = 0 ; i < NB; i++)
tab[i] = i;
/* ecriture du tableau dans F_SORTIE */
if ((f_out = fopen(F_SORTIE, "wb")) == NULL)
{
printf("Impossible d’ecrire dans %s\n",F_SORTIE);
exit(0);
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
III. FICHIERS
Exemple : (suite)
fwrite(tab, NB * sizeof(int), 1, f_out);
fclose(f_out);
/* lecture dans F_SORTIE */
if ((f_in = fopen(F_SORTIE, "rb")) == NULL)
{ printf("Impossible de lire dans %s\n",F_SORTIE);
exit(0);
}
/* on se positionne a la fin du fichier */
/* deplacement de 5 int en avant */
fseek(f_in, 0, SEEK_END);
fseek(f_in, 5 * sizeof(int), SEEK_CUR);
printf("\n position %ld", ftell(f_in));
printf("\n position %ld", ftell(f_in));
/* deplacement de 10 int en arriere */
fread(&i, sizeof(i), 1, f_in);
fseek(f_in, -10 * sizeof(int), SEEK_END);
printf("\t i = %d\n", i);
printf("\n position %ld", ftell(f_in));
fclose(f_in);
fread(&i, sizeof(i), 1, f_in);
return(EXIT_SUCCESS);
printf("\t i = %d", i);
}
/* retour au debut du fichier */
rewind(f_in); L’exécution de ce programme affiche à l’écran :
printf("\n position %ld", ftell(f_in)); position 200
fread(&i, sizeof(i), 1, f_in); position 160 i = 40
printf("\t i = %d", i); position 0 i = 0
position 24 i = 6
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Définition
Les structures
– Type de données du langage C
– Constitué de plusieurs éléments, appelés champs
ou membres.
– Chaque membre a un nom.
– Chaque membre peut être de type différent.
Intérêt
Rassembler des données hétérogènes caractérisant
une entité pour en faire un type utilisateur.
Équivalence base de données :
Champ de la table /membre de la structure
Enregistrement / variable du type structure
Table / structure
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Une structure est un élément qui regroupe un ensemble fini de
variables de type différents et groupées sous le même nom pour être
traitées comme une seule entité.
Chaque élément ou variable d’une structure est appelé membre (ou
champ). Chaque membre est identifié par un identificateur.
Déclaration de base du struct nom_structure
modèle formel de la structure {
avec le mot clé struct et non la
type1 nomchamps1;
variable.
type2 nomchamps2;
.
est appelé étiquette de la .
.
structure. L’étiquette permet
d’identifier un modèle de typeN nomchampsN;
structure. };
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Exemple1
struct LIVRE
{ Déclaration optionnelle
char titre[80]; d’un type
char auteur[40];
char editeur[40];
char ISBN[11];
int nombre_pages;
int annee edition;
double prix;
} un_livre;
Déclaration optionnelle
d’une variable

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Signification
Type livre: comporte plusieurs membres (sous variables)
– De type différent.

– Identifiés par un nom.

Taille mémoire utilisée

struct LIVRE livre1;

printf("%d\n", sizeof (livre1)); // Affiche 192

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Forme plus habituelle
struct LIVRE Déclaration du type structure
{
char titre[80];
char auteur[40]; Réutilisation du type pour déclarer
char editeur[40]; des variables
char ISBN[11];
int nombre_pages;
int annee edition; struct LIVRE livre1, livre2;
double prix;
};
Le mot struct doit être répété lors
de l‘utilisation du type

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES

Exemple1 Exemple2
struct pt struct personne
{
int x; {
int y; char nom[20];
int z; char prenom[20];
char nom; int no_employe;
};
};
main()
{ struct personne p1, p2;
struct pt p;
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Définition d’un type structure avec typedef: On peut créer le synonyme
d’une structure en utilisant typedef. La syntaxe est la suivante :
Forme recommandée
typedef struct
{ Ici, il s’agit bien du
char titre[80]; nom du type, et non
char auteur[40]; pas d’une variable
char editeur[40];
char ISBN10[11];
int nombre_pages;
int annee edition;
double prix;
} LIVRE;

Déclaration de variables avec le nouveau type créé


Syntaxe habituelle: LIVRE livre1;
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Simplification de l'écriture
struct pt
{ typedef struct pt
Notations
int x; {
int y; équivalentes
int z; int x;
char nom; int y;
}; int z;
char nom;
typedef struct pt point; } point;
main()
{
point p;
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Opérations permises

Les seules opérations permises sur une structure sont:

1. La copie ou l’affectation. Ce, en considérant la structure


dans son ensemble.

2. La récupération de son adresse au moyen de


l’opérateur &.

3. L’accès à ses membres.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Accès aux données des membres d’une structure
Chaque membre d’une structure peut être utilisée comme
une variable isolée du même type. Pour faire référence à un
membre particulier, on sépare le nom de la structure
concernée de celui du membre visée, par l’opérateur (.).
struct LIVRE livre1;
livre1.titre = "Les misérables"; (non)
strcpy(livre1.titre, "Les misérables");
strcpy(livre1.auteur, "Victor Hugo");
strcpy(livre1.editeur, "Mason");
strcpy(livre1.ISBN, "2203011459");
livre1.nombre_pages = 64;
livre1.annee edition = 1944;
livre1.prix = 22.30;
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Exemple
#include <math.h>
struct complexe
{
double reelle;
double imaginaire;
};
main()
{
struct complexe z;
double norme;
...
norme = sqrt(z.reelle * z.reelle + z.imaginaire * z.imaginaire);
printf("norme de (%f + j %f) = %f \n",z.reelle,z.imaginaire,norme);
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES

En C, on peut appliquer l’operateur d’affectation aux


structures (`a la différence des tableaux). Dans le contexte
précédent, on peut écrire :

main()
{
struct LIVRE livre1, livre2;

……

livre2=livre1;
}

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Tableaux de structures
Comme le mot clef struct définit un type alors il est
parfaitement possible de créer des tableaux stockant
des structures du même type.
Exemple

struct eleve
{ La récupération de la valeur d’un
int module1; membre d’un élément du tableau
int module2; devient:
}; promotion[25].module1=20;
struct eleve promotion[35];

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Structures comportant des tableaux
Une structure peut avoir des champs qui sont des
tableaux. Il est donc parfaitement possible de
mélanger ces deux types de structures de données.
Une telle structure pourrait être de la forme :
struct eleve Chaque variable de type élève
{ caractérise le nom d’un élève
char nom[50]; (tableau de caractère) et
double notes[4]; l’ensemble de ses quatre notes
}; qui sont stockés dans un tableau.

L’accès à la 8ème note d’un élève dont la variable associée est


notée par fich1 serait donc effectué par fich1.notes[7].
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Structure et pointeurs
Tout comme les types int, float ... vus auparavant on
peut manipuler des pointeurs sur des structures.
Accès aux champs d’une variable
LIVRE livre1;
livre1.nombre_pages = 64;

Accès aux champs avec un pointeur


LIVRE livre1;
LIVRE * plivre; Syntaxe habituelle : fastidieuse
plivre = &livre1; (*plivre).nombre_pages = 64;
plivre ->nombre_pages = 64;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Structure comportant des structures
typedef struct De la même manière on peut
{ avoir un des membre qui est
char nom[40]; lui-même une structure.
char adresse[80];
} EDITEUR;
typedef struct
{
int main()
char titre[80];
{
char auteur[40];
LIVRE livre1;
EDITEUR editeur_livre;
...
char ISBN[11];
strcpy(livre1.editeur_livre.nom,
int nombre_pages;
"Casterman");
int annee_edition;
...
double prix;
}
} LIVRE;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Passage en paramètre de fonctions – par adresse

void saisir_editeur(EDITEUR * pediteur)


Conséquences:
{
printf("Nom de l'editeur:"); – Seule l’adresse est
gets(pediteur->nom); recopiée, très efficace.
printf("Adresse:");
gets(pediteur->adresse); – La variable passée en
} paramètres est modifiable
dans la fonction.
...

saisir_editeur(&livre1.editeur_livre);

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Exemple d’utilisation –
typedef struct les nombres complexes
{
double x;
double y; Z somme_complexe(Z c1, Z c2)
} Z; {
void afficher_nb_complexe(Z c1) Z resultat;
{ resultat.x = c1.x + c2.x;
printf("Z = %lf +j%lf ", c1.x, c1.y); resultat.y = c1.y + c2.y;
} return resultat;
void saisir_nb_complexe (Z * c1) }
{
printf("x:");
scanf("%lf", &c1->x);
printf("y:");
scanf("%lf" &c1->y);
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES

Exemple d’utilisation – les nombres complexes

int main()
{
Z c1, c2, c3;

saisir_nb_complexe (&c1);
saisir_nb_complexe (&c2);
// Calculer et afficher la somme
c3 = somme_complexe (c1 c2);

printf("somme: ");
afficher_nb_complexe (c3);
printf("\n");
return 0;
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Allocation dynamique
#include<stdio.h>
/*déclaration des structures */
struct s_date main()
{ {
int jour ; struct s_fiche *fiche ;
int mois ; int nb_fiches ;
int an ; int i ;
} printf( Combien de fiches ? ) ;
struct s_fiche scanf( %d ,&nb_fiches) ;
{ /* allocation avec gestion des erreurs */
char nom[20] ;
int numero ; fiche=(struct s_fiche*)
struct s_date naissance ; malloc(nb_fiches*sizeof(s_fiche)) ;
}
if (fiche==NULL)
void afficher(struct s_fiche f) ; {printf( erreur d’allocation \n ) ;
struct s_date SaisirDate(void) ; exit(1) ;
void SaisirFiche(struct s_fiche *f) ; }

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES (suite)

/* saisie et affichage des fiches */ struct s_date SaisirDate(void)


for(i=0 ;i<nb_fiches ;i++) { struct s_date date ;
{ printf( Jour ? ) ;
SaisirFiche(&fiche[i]) ; scanf( %d ,&date.jour) ;
Afficher(fiche[i]) ; printf( \n Mois ? ) ;
} scanf( %d ,&date.mois) ;
getch(); printf( \n An ? ) ;
return 0; scanf( %d ,&date.an) ;
} printf( \n ) ;
/* définition des fonctions */ return date ;
void Afficher(stuct s_fiche f) }
{ void SaisirFiche(struct s_fiche *f)
printf( Nom : %s\n ,f.nom) ; {
printf( Numero : %d\n ,f.numero) printf( Nom ? ) ;
; fgets(f->nom,19,stdin) ;
printf( Naissance : %d / %d / %d printf( Numero ? ) ;
\n ,f.jour,f.mois,f.an) ; scanf( %d ,&f->numero) ;
} f->naissance=SaisirDate() ; }

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES

Structures et fichiers

#include <stdio.h> fichier = fopen("article1.dat", "wb");

typedef struct if (fichier != NULL)


{ {
char code; fwrite(&article1, sizeof(article), 1, fichier);
short taille; if (fclose(fichier))
double prix; printf("Le fichier n'a pas été correctement écrit");
} article; }
else
int main() printf("Erreur lors de l'ouverture du fichier.\n");
{
FILE * fichier; printf("Pressez une touche...");
article article1 = _getch();
{ 'A', 42, 25.50 }; }

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
Structures et fichiers
Ecriture – exemple typique avec un tableau
#include <stdio.h>
typedef struct fichier = fopen("articles.dat", "wb");
{
char code; if (fichier != NULL)
short taille; {
double prix; fwrite(articles, sizeof(article), 3, fichier);
} article; if (fclose(fichier))
printf("Le fichier n'a pas été correctement écrit.\n");
int main() }
{ else
FILE * fichier; printf("Erreur lors de l'ouverture du fichier.\n");
article articles[3] =
{ { 'A', 42, 25.50 }, printf("Pressez une touche...");
{ 'A', 43, 26.50 }, getch();
{ 'B', 40, 32.00 } }; }

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
UNION
Définition :

Une union rassemble une collection de champs occupant


tous le même emplacement mémoire. Une union est
comparable à une structure sauf qu'elle permet de
définir plusieurs variables stockées au même endroit en
mémoire.

Les unions permettent de stocker dans un espace


mémoire des variables de plusieurs types différents.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
UNION
Déclaration:
Le principe de déclaration de type union ou de définition est le
même que pour les structures. Le mot réservé struct est remplacé
par union
Déclaration du modèle formel union nom_union
de l’union avec le mot clé {
union et non la variable.
type1 nomchamps1;
type2 nomchamps2;
.
est appelé étiquette de la .
.
l’union. L’étiquette permet
d’identifier un modèle de typeN nomchampsN;
union. };
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
UNION
Exemple

union zone
{ Le programme définit deux variables
int a; z1 et z2 construites sur le modèle
long b; d’une zone qui peut contenir soit un
float x; entier, soit un entier long, soit un
double y; nombre avec point décimal, soit un
nombre avec point
} z1,z2; décimal long.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
UNION
Même syntaxe, mêmes opérations, mêmes remarques que
pour les structures.

La taille d’une union est celle du plus long types de ces membres.

Lorsque l’on définit une variable correspondant à un type


union, le compilateur réserve l’espace mémoire nécessaire
pour stocker le plus grand des champs appartenant à l’union.

Dans notre exemple, le compilateur réserve l’espace mémoire


nécessaire pour stocker un double pour chacune des variables z1
et z2.
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
UNION
Les champs d’une union commencent tous à la même adresse.
L’occupation mémoire est donc déterminée par le plus
important des champs. D’où : sizeof(union essai) retournera 8
octets.

Une union ne contient cependant qu’une donnée à la fois et


l’accès à un champ de l’union pour obtenir une valeur, doit
être fait dans le type qui a été utilisé pour stocker la valeur.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
UNION
Exemple
union st_union
{
char a ;
char ch[16] ;
};
int main ()
{
union st_union t;
strcpy( t.ch , "bonjour" ) ;
t.a=‘B' ;
printf( "%s\n" , t.ch ) ; /* Bonjour */
return 0 ;
}
Khalid SBAI – Cours d’informatique
F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
TYPES ENUMERES

Les énumérations servent à offrir des possibilités de


gestion de constantes énumérées dans le langage C.
Ces énumérations permettent d’exprimer des valeurs
constantes de type entier en associant ces valeurs à
des noms.

Le type booléen en est un exemple car les seules valeurs


que peuvent prendre les variables de ce type sont vrai
et faux.

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
TYPES ENUMERES
Définition
La définition d’une énumération respecte la syntaxe
donnée dans l’encart suivant.

enum nom_enum Les différents énumérateurs sont des


{ constantes symboliques.
énumérateur1, Les valeurs associées aux énumérateurs
énumérateur2, sont, par défaut, définies de la manière
énumérateur3, suivante :
énumérateur4, la première constante est associée à la
... valeur 0, les constantes suivantes
énumérateurN suivent une progression de 1.
} variables ;

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y
er

er
ABB

ABB
y

y
bu

bu
2.0

2.0
to

to
re

re
Université Ecole supérieure de Technologie
he

he
k

k
lic

lic
C

C
w om w om
w

w
w.
A B B Y Y.c
Moulay Ismaïl Département de Génie Electrique w.
A B B Y Y.c

15/12/2009
IV. STRUCTURE DE DONNÉES
TYPES ENUMERES
Exemple
enum couleur /* type énumération des couleurs */
{ noir, /* 0 = absence de couleur */
rouge = 1,
vert = 2,
bleu = 4, /* couleurs fondamentales */
jaune = rouge + vert, /* valeur 3 */
cyan = vert + bleu, /* valeur 6 */
magenta = rouge + bleu, /* valeur 5 */
blanc = rouge + vert + bleu /* valeur 7 */
};

/* fonction d'impression, reçoit une couleur et imprime sa valeur */

void imprime ();

Khalid SBAI – Cours d’informatique


F T ra n sf o F T ra n sf o
PD rm PD rm
Y Y
Y

Y