Title: Les tableaux
1Les tableaux
- Comment traiter les foules?
2Les types structurés
- Le type simple une variable n'a qu'une valeur
- Le type structuré une variable a plusieurs
valeurs - tableau tous les valeurs sont du même type
- structure les valeurs sont de types différents
3Tableau
- Définition structure (objet) qui a plusieurs
éléments du même type. Chaque élément est accédé
par le nom du tableau et une valeur d'indice qui
détermine sa place dans le tableau.
a
a0
a5
- Problèmes
- Pour quoi ? Quel est le besoin ?
- Comment ?
4Les besoin de tableaux
- Sommer les valeur de 4 variables entières
début
a
s0 i0
sai i1
sai i1
...
afficher s
fin
5L'algorithme générique
début
Initialisation i0
non
iltN
oui
Traitement de ai
i1
fin
6Les tableaux unidimensionnels en C
- Déclaration syntaxe
- Déclaration simple
- Exemple
- Déclaration avec initialisation seulement par
constantes - Exemple
Type de base.
type nom taille
int a4, b100 float z30
type nom val1,val2,val3,...
int a 3,56,12,24 float b2
1.5,2.3 int c5 1,2,3
Dans ce cas le nombre des constantes doit être ?
au nombre d'éléments déclaré.
7L'arithmétique de pointeurs
- Le nom du tableau c'est le nom d'un pointeur
constant qui désigne le premier élément
int a
Mémoire
- C'est-à-dire que
- a ? a0 ou a ? a0
- Autres opérateurs sur pointeurs
- addition de pointeur et entier pi est égale à
une adresse qui est la valeur de p
isizeof(type de p) - soustraction de deux pointeurs du même type au
nombre d'objets de ce type qui peuvent se trouver
entre le deux adresses.
a
11
1
102
int a 11,1,102,3 int p a3 printf("d
d d d", a, a1,(a1),(p-1)) printf(" ("d
d d d ",a2,p,a3,p-a)
13
p
102 13 13 3
11 1 1 102
8L'algorithme générique en C
for (i0 iltN i) //Traitement de ai
i0 while (iltN) //Traitement de ai i
- La somme des éléments d'un tableau
include ltstdio.hgt void main (void) int a
11,3,6,34 int i,s 0 for (i0 ilt4i)
sai // ou s(ai) printf ("d\n", s)
9Un pointeur marche sur le tableau
include ltstdio.hgt void main (void) int a
11,3,6,34 int s 0 int p for (pa
p-alt4p) sp printf ("d\n", s)
Mémoire
11
a
3
6
34
?
0
s
14
20
11
54
?
p
Cet instruction peut être abrégée for (pa
p-alt4 ) sp
10Paramètres de type tableau
- Le paramètre formel est
- soit le nom d'un tableau sans nombre d'éléments
- soit le nom d'un pointeur
- Le paramètre effectif est le nom du tableau
actuel - Note C'est indispensable de fournir comme un
paramètre et le nombre d'éléments
type nom_de_fonction(type nom,...)
type nom_de_fonction(type nom,...)
nom_de_fonction(nom_du_tableau,...)
type nom_de_fonction(type nom,int nombre)
11Exemples
- Fonction qui trouve la somme des éléments d'un
tableau d'entiers
include ltstdio.hgt int intsomme(int a, int
n) void main (void) int a 11,3,6,34
printf ("d\n", intsomme(a,4)) int
intsomme(int a, int n) int i,s 0 for
(i0 iltni) sai return s
L'appel de la fonction
Résultat la somme des éléments
2 ème paramètre le nombre d'éléments qui
doivent être sommés
1 er paramètre le tableau (l'adresse de son
premier élément
int intsomme(int a, int n)
L'instruction qui rend le résultat
int intsomme(int const a, int n)
12Exemples
Résultat le nombre d'élements lus
- Fonction qui lit les éléments d'un tableau et une
autre qui les affiche.
int lir_tab( int a, const int maxnom) int
n,i n lit_entier_verifie(1,maxnom) if (n
lt0) return 0 printf("Tapez d nombres
entiers\n",n) for (i0 iltn i)
scanf("d",ai)//scanf("d",ai) return
n void aff_tab( const int a, const int n)
int i printf("Les d éléments du
tableau\n",n) for (i0 iltn i)
printf("d, ",ai) printf ("\n")
2 ème paramètre le nombre maximal d'éléments
(la talle du tableau)
2 ème paramètre le nombre maximal d'éléments
(la talle du tableau)
1 er paramètre le tableau (l'adresse de son
premier élément
1 er paramètre le tableau (l'adresse de son
premier élément
13Exemples
- Trouver le nombre maximal d'un tableau d'entiers
int maxel( int a, int n) int i,maxa0
for (i1 iltni) if (aigtmax) maxai
return max
int maxel( int a, int n) int i,max for
(i1,maxa0 iltni) if ((ai)gtmax)
maxai return max
14Les tableaux bidimensionnels
- Définition
- un tableau (uni-dimensionnel) de dimension L dont
chaque composante est un tableau
(uni-dimensionnel) de dimension C
m13
15Les tableaux bidimensionnels
- Déclaration
- Disposition dans la mémoire
- m ? m0 ? (m00)
- m00 ? m0 ? m
type nom nombre_lignes nombre_colonnes
int m34
16Les tableaux bidimensionnels
int t144 1, 2, 3 , 4, 5, 6 , 7, 8,
9 int t244 1, 2, 3, 4, 5, 6, 7, 8, 9
t1
t2
17Les tableaux bidimensionnels
for (i 0 iltnumlin i) //Traitement de
ligne i for(j0 jltnumcolj) //
Traitement de l'élément i,j
- Exemple affichage d'une matrice
for (i 0 ilt3 i) for(j0 jlt4j)
printf("3d ",mij) printf("\n")
18Les tableaux bidimensionnels
- Déclaration d'un type nouveau typedef
- Dans la déclaration le rôle du nom de la variable
est joué par le nom du type qu'on veut définir - Exemple
typedef déclaration
typedef float MATRICE510 ... MATRICE mat1,
mat2 MATRICE m
19Les tableaux bidimensionnels
define MAXCOL 10 define MAXROW 20 typedef float
MATRICE MAXROWMAXCOL float floatsomme(
float aMAXCOL, int nl, int nc) int i,j
float s 0 for (i0 iltnli) for (j0
jltnc j) saij return s
20Linstruction goto
- Syntaxe
- UtilisationQuand on doit sortir brusquement
dune boucle imbriquée.
goto label ... labelinstruction
21Exemple
- Trouver la somme de premiers L nombres positifs
dune matrice.
non
iltnl
float floatsommeL(float aMAXCOL, int
nl, int nc) int i,j,cont0 float s 0
for (i0 iltnli) for (j0 jltnc j)
if (aijgt0) saij cont
if (cont L) goto ex ex return s
oui
non
jltnc
oui
aijgt0
oui
non
saij cont
oui
contL
non
j1
i1
return s
22Tableaux de pointeurs
- On peut créer des tableaux bidimensionnelles qui
ne sont pas carrés
Constantes!!
include ltstdio.hgt int TAILLE1,2,3 int
ligne12 int ligne23,4 int
ligne31,2,3 void affichemat( int a,
const int n) void main (void) int
mattriangligne1,ligne2,ligne3
affichemat(mattriang,3) void affichemat( int
a, const int n) int i,j printf("Les
éléments du tableau\n") for (i0 iltn i)
for (j0 jltTAILLEi j) printf("3d,
",aij) printf ("\n")