Seance 4 2014 2015
Seance 4 2014 2015
Seance 4 2014 2015
de Langage C
Les tableaux en Langage C
Objectifs de la séance
Les tableaux 1D en langage C
Tableaux et fonctions
Emplacement du début d’un tableau
Les tableaux 2D
Variante sur les notations
Notion d’adresse
Notion d adresse
2
Tableaux à une dimension (« Tableaux 1D »)
On va se préoccuper des tableaux à 3 occasions :
Déclaration : Préciser le type des éléments d
: Préciser le type des éléments d’un
un tableau
tableau
1 seule fois
tous les éléments sont du même type
Initialisation: Remplir un tableau avec des valeurs
Peut être fait en une seule fois avec la déclaration
Sinon, dans le code, les cases seront remplies une par une
Si d l d l li
Utilisation du tableau
Le plus souvent case par case
Ex : tableau[i] = 45 ;
Parfois en un seul bloc , dans des fonctions (voir fin de ce cours)
( f )
3
Tableaux à une dimension
Déclaration d’un tableau
int Tab[100] ;
Déclare un tableau d’entiers de 100 éléments
Allant de Tab[0] à Tab[99].
Le 1er élément a l’indice 0 (et non 1 comme en Matlab)
Le nom du tableau est Tab, ses éléments sont tous du même type
et contigus en mémoire (une mémoire informatique a une
et contigus en mémoire (une mémoire informatique a une
structure 1D) Tableau de taille 100
… … …
Tab[0] Tab[i] Tab[99]
Attention aux problèmes de débordement : l’élément Tab[100] n’existe pas4
Initialisation d’un tableau 1D
Initialisation à la déclaration
int tab[5]={1,2,3,4,5};
Initialisation dans le programme
Par exemple avec une boucle
{…
int tab[5];
int i;
for (i=0;i<5;i++) tab[i]=i+1;
}
Exemples de codes interdits
tab[5]={1,2,3,4,5};
tab[5]={1 2 3 4 5}; interdit dans le code
interdit dans le code
5
tab2=tab; interdit
Taille d’un tableau 1D
La taille d’un tableau est connue à la compilation : c’est une
constante symbolique ou bien un nombre.
Erreur à la compilation
La taille d’un tableau
ne peut pas être une variable.6
Fonctions et tableaux
On est souvent amené à parcourir les éléments d’un tableau pour
O t t éà i l élé t d’ t bl
faire des opérations (Moyenne, classement, …)
les fonctions sont indispensables pour ne pas avoir à réécrire un
les fonctions sont indispensables pour ne pas avoir à réécrire un
nouveau code pour chaque tableau.
Un tableau peut donc être passé comme argument d’une fonction.
On transmet à la fonction l’emplacement mémoire du début du
tableau
On parlera de l’adresse du tableau qui est égale à l’adresse du 1er
élément du tableau : il s’agit
élément du tableau : il s agit du nom
du nom du tableau
du tableau
Ex : int tab[10] ; tab est l’adresse du tableau (et de tab[0])
Fonctions et tableaux : déclaration, utilisation, définition
, , f
//Définition
void
id i
initialise_tab(int
iti li t b(i t t
tab[
b[ ]
], iint
t n, iintt valeur)
l )
{
int i; Recopie du prototype
for (i=0;i<n;i++) tab[i]=valeur;
}
Fonctions et tableaux : utilisation
Syntaxe pour transmettre à la fonction l’emplacement
Syntaxe pour transmettre à la fonction l’emplacement
mémoire du début du tableau :
Rq : Le plus souvent, il faudra aussi transmettre la taille du
: Le plus souvent, il faudra aussi transmettre la taille du
tableau comme autre argument de la fonction.
Plusieurs interprétations :
• tab[i][j] pour i = 0,1,2,3,4 et j=0,1,2 est un entier
• tab[i] pour i=0,1,2,3,4 est un tableau de 3 entiers
• tab est un tableau dont chacune des 5 composantes est un
tableau de 3 entiers
Tableaux à 2 dimensions (« 2D »)
IInitialisation :
iti li ti
‐En bloc :
i t tab[2][3]
int t b[2][3] = {{1
{{1,2,3};{3,2,1}}
2 3} {3 2 1}} ;
int tab[2][3] = {1,2,3,3,2,1} ;
‐Dans le programme avec deux boucles for.
Utilisation des tableaux 2D
Comme pour les tableaux 1D
Tableaux à 2 dimensions (« 2D »)
P iti
Positionnement en mémoire
t é i
La mémoire du PC a une structure 1D et non 2D
En mémoire on aura pour int
En mémoire, on aura pour tab[5][3] ;
Ce symbole & pourra aussi servir à accéder à l’adresse d’une
variable (en dehors de la notion de tableau)
i bl ( d h d l i d bl )
int a = 8 ;
i
int b
b;
b= &a ;
En‐tête de fonction
Une fonction ne retourne qu’une valeur (au plus) mais peut
U f ti t ’ l ( l ) i t
maintenant changer N variables : par exemple avec la fonction
ClasserTableau
L’en‐tête de fonction devra alors préciser le(s) tableau(x)
modifiés par cette fonction
p
/* La
/ a fonction
o ct o CClasserTableau()
asse ab eau() range
a ge da
dans
s
l’ordre croissant les N elements tab[i]
ENTREES : le tableau tab d’int, sa taille n
SORTIE : tab */
void ClasserTableau(int
( tab[],
[], int n)
) ;
Histogramme
Principe
On tire Ntirs valeurs comprises entre min et max
probabil
p ité