Documente Academic
Documente Profesional
Documente Cultură
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
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
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.
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;
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;
}
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…
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");
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;
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;
}
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.
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
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 );
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
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
int i,f,n;
for(i=n, f=1; i>1; f *= i, i--);
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)
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)
}
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.
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 ;
}
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++;
}
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
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++;
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…)
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.
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
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];
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];
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
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)
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
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( ; ; )
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 :
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.
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
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é
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];
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.
……
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]
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:
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
Exemple:
Char t[20] ;
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
Exemple:
char t[]= "Bonjour\n";
printf ("Bonjour\n");
printf ("%s", t);
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);
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);
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);
}
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
……. …….
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.
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)
Pointeur
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;
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;
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;
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.
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.
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
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.
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);
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.
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
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}.
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
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
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
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):
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)):
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:
Appel
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>);
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
p = (int )malloc(sizeof(int));
P =4;
205 4
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
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);
}
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));
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
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
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
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
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.
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 :
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
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.
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
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>
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);
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;
}
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 :
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>
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);
}
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
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
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
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>
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
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
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.
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
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
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:
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.
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;
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");
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()
{
……
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") ;
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") ;
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);
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") ;
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)
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
PROTOTYPE:
int ferror( FILE* file);
La fonction renvoie:
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().
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().
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
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)
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
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
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
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();
}
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();
}
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
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.
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
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
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);
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) ;
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
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);
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
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
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.
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
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;
}
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;
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;
}
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
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
main()
{
struct LIVRE livre1, livre2;
……
livre2=livre1;
}
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];
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.
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;
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;
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
saisir_editeur(&livre1.editeur_livre);
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
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) ; }
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)
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
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 } }; }
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 :
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.
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.
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.
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
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.
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 */
};
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
main ()
{
enum couleur col;
col = noir;
printf ("%d ", col); imprime (col);
col += rouge;
printf ("%d ", col); imprime (col);
col += cyan;
printf ("%d ", col); imprime (col);
col -= bleu;
printf ("%d ", col); imprime (col);
}
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
void imprime (coul)
{
enum couleur coul;
{ case jaune: puts ("jaune");
switch (coul) break;
{ case cyan: puts ("cyan");
case noir: puts ("noir"); break;
break; case magenta:puts ("magenta");
case rouge: puts ("rouge"); break;
break; case blanc: puts ("blanc");
case vert: puts ("vert"); break;
break; }
case bleu: puts ("bleu"); }
break; }
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