Cours tableaux à deux dimensions en C | Exam-Lib
  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
Dismiss Notice
Welcome to our Education website, plz like our page facebook to support us. Thank You and wish you good navigation

Cours tableaux à deux dimensions en C

abdelouafiDec 22, 2017

    1. abdelouafi

      abdelouafi Administrator Staff Member

      Messages:
      636
      Likes Received:
      14
      Trophy Points:
      18
      Joined
      Sep 13, 2016
      7.2. Les tableaux à deux dimensions




      Définitions



      En C, un tableau à deux dimensions A est à interpréter comme un tableau (uni-dimensionnel) de dimension L dont chaque composante est un tableau (uni-dimensionnel) de dimension C.



      On appelle L le nombre de lignes du tableau et C le nombre de colonnes du tableau. L et C sont alors les deux dimensions du tableau. Un tableau à deux dimensions contient donc L*Ccomposantes.



      [​IMG]



      On dit qu'un tableau à deux dimensions est carré, si L est égal à C.





      En faisant le rapprochement avec les mathématiques, on peut dire que "A est un vecteur de L vecteurs de dimension C", ou mieux:



      "A est une matrice de dimensions L et C".





      Exemple

      Considérons un tableau NOTES à une dimension pour mémoriser les notes de 20 élèves d'une classe dans un devoir:



      int NOTE[20] = {45, 34, ... , 50, 48};


      [​IMG]



      Pour mémoriser les notes des élèves dans les 10 devoirs d'un trimestre, nous pouvons rassembler plusieurs de ces tableaux uni-dimensionnels dans un tableau NOTES à deux dimensions :

      int NOTE[10][20] = {{45, 34, ... , 50, 48},
      {39, 24, ... , 49, 45},
      ... ... ...
      {40, 40, ... , 54, 44}};

      [​IMG]



      Dans une ligne nous retrouvons les notes de tous les élèves dans un devoir. Dans une colonne, nous retrouvons toutes les notes d'un élève.

      7.2.1. Déclaration et mémorisation


      Déclarations

      Déclaration de tableaux à deux dimensions en lang. algorithmique

      <TypeSimple> tableau <NomTabl>[<DimLigne>,<DimCol>]

      Déclaration de tableaux à deux dimensions en C

      <TypeSimple> <NomTabl>[<DimLigne>][<DimCol>];


      Exemples

      Les déclarations suivantes en langage algorithmique,

      entier tableau A[10,10]
      réel tableau B[2,20]
      booléen tableau C[3,3]
      caractère tableau D[15,40]

      se laissent traduire en C par:

      int A[10][10];

      ou bien
      long A[10][10];
      ou bien
      ...
      float B[2][20];
      ou bien
      double B[2][20];
      ou bien
      ...
      int C[3][3];




      char D[15][40];




      Mémorisation

      Comme pour les tableaux à une dimension, le nom d'un tableau est le représentant de l'adresse du premier élément du tableau (c.-à-d. l'adresse de la première ligne du tableau). Les composantes d'un tableau à deux dimensions sont stockées ligne par ligne dans la mémoire.



      Exemple: Mémorisation d'un tableau à deux dimensions

      short A[3][2] = {{1, 2 },
      {10, 20 },
      {100, 200}};

      [​IMG]



      Un tableau de dimensions L et C, formé de composantes dont chacune a besoin de M octets, occupera L*C*M octets en mémoire.


      Exemple

      En supposant qu'une variable du type double occupe 8 octets (c.-à-d: sizeof(double)=8), pour le tableau T déclaré par: double T[10][15];
      C réservera L*C*M = 10*15*8 = 1200 octets en mémoire.
      7.2.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. A l'intérieur de la liste, les composantes de chaque ligne du tableau sont encore une fois comprises entre accolades. Pour améliorer la lisibilité des programmes, on peut indiquer les composantes dans plusieurs lignes.



      Exemples

      int A[3][10] ={{ 0,10,20,30,40,50,60,70,80,90},
      {10,11,12,13,14,15,16,17,18,19},
      { 1,12,23,34,45,56,67,78,89,90}};

      float B[3][2] = {{-1.05, -1.10 },
      {86e-5, 87e-5 },
      {-12.5E4, -12.3E4}};

      Lors de l'initialisation, les valeurs sont affectées ligne par ligne en passant de gauche à droite. Nous ne devons pas nécessairement indiquer toutes les valeurs: Les valeurs manquantes seront initialisées par zéro. Il est cependant défendu d'indiquer trop de valeurs pour un tableau.



      Exemples

      [​IMG]



      [​IMG]



      [​IMG]



      [​IMG]





      Réservation automatique


      Si le nombre de lignes L n'est pas indiqué explicitement lors de l'initialisation, l'ordinateur réserve automatiquement le nombre d'octets nécessaires.
      int A[][10] = {{ 0,10,20,30,40,50,60,70,80,90},
      {10,11,12,13,14,15,16,17,18,19},
      { 1,12,23,34,45,56,67,78,89,90}};

      réservation de 3*10*2 = 60 octets


      float B[][2] = {{-1.05, -1.10 },
      {86e-5, 87e-5 },
      {-12.5E4, -12.3E4}};

      réservation de 3*2*4 = 24 octets


      Exemple

      [​IMG]

      7.2.3. Accès aux composantes


      Accès à un tableau à deux dimensions en lang. algorithmique

      <NomTableau>[<Ligne>, <Colonne>]

      Accès à un tableau à deux dimensions en C

      <NomTableau>[<Ligne>][<Colonne>]
      Les éléments d'un tableau de dimensions L et C se présentent de la façon suivante:

      / \
      | A[0][0] A[0][1] A[0][2] . . . A[0][C-1] |
      | A[1][0] A[1][1] A[1][2] . . . A[1][C-1] |
      | A[2][0] A[2][1] A[2][2] . . . A[2][C-1] |
      | . . . . . . . . . . . . . . . |
      | A[L-1][0] A[L-1][1] A[L-1][2] . . . A[L-1][C-1] |
      \ /
      Attention !


      [​IMG]

      Considérons un tableau A de dimensions L et C.

      En C,

      - les indices du tableau varient de 0 à L-1, respectivement de 0 à C-1.

      - la composante de la Nième ligne et Mième colonne est notée:

      A[N-1][M-1]
      En langage algorithmique,


      - les indices du tableau varient de 1 à L, respectivement de 1 à C.

      - la composante de la Nième ligne et Mième colonne est notée:

      A[N,M]
       
      Loading...

Share This Page

Share