Éléments de cours-td sur les tableaux
Les tableaux sont certainement les variables structurées les plus populaires. Ils sont disponibles dans tous les langages de programmation et servent à résoudre une multitude de problèmes. Dans une première approche, le traitement des tableaux en C ne diffère pas de celui des autres langages de programmation. On verra la manipulation via les pointeurs plus tard.
Définition : collection d'objets de même type ordonnée (1er, 2eme ...) accès individuel via l'indiceUn 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].
Déclaration de tableaux en CTypeSimple NomTableau [Dimension];
Les noms des tableaux sont des identificateurs
Exemples
int A[25];
float B[100];
int C[10];
char D[5];
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.
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)
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]
Exemples
MAX = (A[0]>A[1]) ? A[0] : A[1];A[4] *= 2;
Si T est un tableau 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]
Modification d'un élément : T[indice]=expression
Exemple de l'échange des elements d'indice i et j temp = t[i]; t[i]=t[j]; t[j]=temp;
Dans une procédure qui prend un tableau t en paramètre, passer aussi sa taille en paramètre Exemple (à faire avec les eleves en TD) affichage des éléments d'un tableau (un par ligne) : boucle for bien adaptée pour ce type de traitement
/*interface ...
*/void table_ecrire(int table[], int n)
{
/* variable de parcours des éléments de la table *
int i;
/* Affichage des n-1 premiers éléments, séparés par des virgules */
for (i=0; i }
Lecture des éléments d'un tableau
void table_lire(int table[], int n)
{
/* variable de parcours des éléments de la table */
int i;
/* Affichage des n éléments,
séparés par des espaces */
for (i=0; i }