1. Les tableaux à une dimension Définitions Un tableau (uni-dimensionnel) A est une variable structurée formée d'un nombre entier N de variables simples du même type, qui sont appelées les composantes du tableau. Le nombre de composantes N est alors la dimension du tableau. En faisant le rapprochement avec les mathématiques, on dit encore que "A est un vecteur de dimension N" Exemple La déclaration int JOURS[12]={31,28,31,30,31,30,31,31,30,31,30,31}; définit un tableau du type int de dimension 12. Les 12 composantes sont initialisées par les valeurs respectives 31, 28, 31, ... , 31. On peut accéder à la première composante du tableau par JOURS[0], à la deuxième composante par JOURS[1], . . . , à la dernière composante par JOURS[11]. 1.1. Déclaration et mémorisation Déclaration Déclaration de tableaux en langage algorithmique <TypeSimple> tableau <NomTableau>[<Dimension>] Déclaration de tableaux en C <TypeSimple> <NomTableau>[<Dimension>]; Les noms des tableaux sont des identificateurs qui doivent correspondre aux restrictions définies au chapitre 2.2.4. Exemples Les déclarations suivantes en langage algorithmique, entier tableau A[25] réel tableau B[100] booléen tableau C[10] caractère tableau D[30] se laissent traduire en C par: int A[25]; ou bien long A[25]; ou bien ... float B[100]; ou bien double B[100]; ou bien ... int C[10]; char D[30]; Mémorisation En C, le nom d'un tableau est le représentant de l'adresse du premier élément du tableau. Les adresses des autres composantes sont calculées (automatiquement) relativement à cette adresse. Exemple: short A[5] = {1200, 2300, 3400, 4500, 5600}; Si un tableau est formé de N composantes et si une composante a besoin de M octets en mémoire, alors le tableau occupera de N*M octets. Exemple En supposant qu'une variable du type long occupe 4 octets (c.-à-d: sizeof(long)=4), pour le tableau T déclaré par: long T[15]; C réservera N*M = 15*4 = 60 octets en mémoire. 1.2. Initialisation et réservation automatique Initialisation Lors de la déclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant la liste des valeurs respectives entre accolades. Exemples int A[5] = {10, 20, 30, 40, 50}; float B[4] = {-1.05, 3.33, 87e-5, -12.3E4}; int C[10] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1}; Il faut évidemment veiller à ce que le nombre de valeurs dans la liste corresponde à la dimension du tableau. Si la liste ne contient pas assez de valeurs pour toutes les composantes, les composantes restantes sont initialisées par zéro. Réservation automatique Si la dimension n'est pas indiquée explicitement lors de l'initialisation, alors l'ordinateur réserve automatiquement le nombre d'octets nécessaires. Exemples int A[] = {10, 20, 30, 40, 50}; ==> réservation de 5*sizeof(int) octets (dans notre cas: 10 octets) float B[] = {-1.05, 3.33, 87e-5, -12.3E4}; ==> réservation de 4*sizeof(float) octets (dans notre cas: 16 octets) int C[] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1}; ==> réservation de 10*sizeof(int) octets (dans notre cas: 20 octets) Exemples 1.3. Accès aux composantes En déclarant un tableau par: int A[5]; nous avons défini un tableau A avec cinq composantes, auxquelles on peut accéder par: A[0], A[1], ... , A[4] Exemple Exemples MAX = (A[0]>A[1]) ? A[0] : A[1]; A[4] *= 2; Attention ! Considérons un tableau T de dimension N: En C, - l'accès au premier élément du tableau se fait par T[0] - l'accès au dernier élément du tableau se fait par T[N-1] En langage algorithmique, - l'accès au premier élément du tableau se fait par T[1] - l'accès au dernier élément du tableau se fait par T[N]