Cours en Devlopement Informatique

  • Langage C

Tableaux en langage C



 

Définition

On appelle tableau une variable composée de données de même type, stockée de manière contiguë en mémoire (les unes à la suite des autres).

La taille d’un tableau est conditionnée (ou définie) par le type et le nombre de ces éléments :

Taille tableau (en octet) = taille du type de donnée (en octet) * le nombre des éléments

  • Le type des éléments du tableau peut être :
  • simple : char, int, float, double, ...
  • à tableau à une dimension ou tableau unidimensionnel
  •  
  • tableau

à tableau à plusieurs dimensions ou tableau multidimensionnel

Autres : Pointeurs et Structures

 

Tableaux à une dimension (vecteur)

Déclaration

 

La déclaration d’un tableau à une dimension se fait de la façon suivante :

<Type Simple> Nom_du_Tableau [Nombre_Elements];

 

Type Simple        : définit le type d’élément que contient le tableau (char, int,…)

Nom_du_Tableau : est le nom que l'on décide de donner au tableau, le nom du tableau suit les mêmes règles qu'un nom de variable.

Nombre_Elements : est une expression constante entière positive.

Exemples :

char        caracteres[12] ;       //Taille en octet : 1 octet * 12 = 12 octets 
float      reels_SP[8] ;                //Taille en octet : 4 octets * 8 = 32 octet 
#define N    10                //define permet d’assigner un nom à une constante 
int                entier[N] ;               //Taille en octet : 2 octets * 10 = 20 octets

double     reel_DP[2*N-5] ;      //Taille en octet : 8 octets * 15 = 120 octets

Initialisation à la déclaration

Il est possible d’initialiser le tableau à la définition :

<Type> Tableau [Nombre_Elements] = {C1, C2, … , Cn};

C1, C2, .., Cn sont des constantes dont le nombre ne doit pas dépasser le Nombre_Elements (n<=Nombre_Elements).

Si la liste de constantes ne contient pas assez de valeurs pour tous les éléments,les éléments restantes sont initialisées à zéro.

Exemples :

char   voyelles[6]               = { 'a' , 'e' , 'i' , 'o' , 'u' , 'y' } ;

int     Tableau_entier1[10] = {10 , 5 , 9 , -2 , 011 , 0xaf , 0XBDE}; float Tableau_reel[8]                 = { 1.5 , 1.5e3 , 0.7E4 };

short A[3]                         = {12 , 23 , 34 , 45 , 56};                                   //Erreur !

int Tableau_entier2[] = { 15 , -8 , 027 , 0XABDE }                                                                           //Tableau de 4 éléments
  • Accès aux composantes d’un tableau

Pour accéder à un élément du tableau, il suffit de donner le nom du tableau, suivi de l’indice de l’élément entre crochets :

Nom_du_Tableau [indice]

Où indice est une expression entière positive ou nulle. Un indice est toujours positif ou nul ;

L’indice du premier élément du tableau est 0 ;

L’indice du dernier élément du tableau est égal au nombre d’éléments – 1.

Exemple :

short A[5] = {12 , 23 , 34 , 45 , 56};

A[0]              donne accès   au 1er élément du tableau A

int i = 4; A[i]              donne accès au dernier élément du Tableau A int j = 2; A[2*j-1]                       donne accès au 4ème élément de A

En revanche la plus part des compilateurs C ne font aucun contrôle sur les indices! Ils laissent passer par exemple : A[20] = 6 ; : Accès en dehors du tableau

 

Remarques

  • Chaque élément ( TAB[i] ) d’un tableau ( int TAB[20] ) est manipulé comme une simple variable (lvalue), on peut :
  • scanf("%d", &TAB[i] ); TAB[i] sera initialisé par un entier saisi depuis la clavier printf("TAB[%d] = %d", i , TAB[i] ); Le contenu de TAB[i] sera affiché sur
  • écran
  • Apparaître comme opérande d’un opérateur d’incrémentation : TAB[i]++ ou -- TAB[i]
  • Pour initialiser un tableau (TAB1) par les éléments d’un autre tableau (TAB2) :
    • évitez d’écrire TAB1 = TAB2 (incorrect)
    • On peut par exemple écrire :
for( i = 0 ; i < taille_tableau ; i++ ) TAB1[i] = TAB2[i];
Tableaux à plusieurs dimensions
Déclaration

De manière similaire, on peut déclarer un tableau à plusieurs dimensions :

<Type Simple> Nom_du_Tableau [Nbre_E_1] [Nbre_E_2]…[Nbre_E_N];

  • Chaque élément entre crochets désigne le nombre d’éléments dans chaque dimension ;
  • Le nombre de dimension n’est pas limité.

Tableaux à deux dimensions (Matrices)

Déclaration

<Type Simple> Nom_du_Tableau [Nombre_ligne] [Nombre_colonne];

Exemple :

short        T[3][4] ;             //Taille en octet : 3 * 4 * 2 octets = 24 octets La variable tableau T est une matrice. Si on considère la représentation matricielle alors la disposition des éléments de T est :

Tableaux à deux dimensions (matrices)

Initialisation à la déclaration et accès aux éléments :
  • Les valeurs sont affectées ligne par ligne lors de l’initialisation à la déclaration
  • Accès aux composantes se fait par : Nom_tableau[ligne][colonne]. Exemples :

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

int B[4][4] = { {-1 , 10 , 013 , Oxfe} , {+8 , -077} , {} , {011,-14,0XAD} };

Exemple

  • Saisie et affichage des données d’un tableaux d’entiers de 20 éléments aux maximum.
  • Déterminer la plus petite valeur d’un tableau d’entiers A. Ecrire un programme C qui remplit un tableau T de N entiers long (taille maximale : 30) et affiche ensuite la valeur et la position du minimum. Si le tableau contient plusieurs minimum, retenir la position du premier minimum rencontré.
  • Recherche d'une valeur dans un tableau : Etant donnés un tableau de float ( taille maximale 50) et une valeur. On recherche la première occurrence de cette valeur dans le tableau. S’il existe, on affiche sa position sinon on affiche un message d’erreur.
    • Tableau est non trié (recherche séquentielle)
    • Tableau est trié (recherche dichotomique).
  • Exemple
  • Saisie et affichage des donées entières d’une matrice de M ligne (20 lignes au maximum) et N colonnes (30 colonnes au maximum). M et N sont entrées au clavier.
  • Produit de deux matrices des données réelles: En multipliant une matrice A de M lignes (au maximum 10 ligne) et N colonnes (au maximum 15 colonnes) avec une matrice B de N lignes et P colonnes (au maximum 20 colonnes), on obtient une matrice C de M lignes et P colonnes :

La composante cij de la matrice C, placée à la ième ligne et jème colonne, se calcule de la façon suivante :

Exercice (Extrait du CC version 2008/2009)

Dans cet exercice, on considérera les entiers de l’ensemble [-200,200]. Ecrire un programme C qui :

  • Remplit une matrice A de M lignes et N colonnes (au maximum 30 lignes et 20 colonnes) ligne par ligne par des entiers saisis au clavier.
  • Puis construit un tableau T par les éléments strictement positifs de la matrice A parcourue colonne par colonne.

Ex :                                                               T = (14, 5, 17, 8, 11, 4, 8, 6, 4, 7)

  • Ensuite trie le tableau T selon le critère suivant : tous les entiers pairs doivent être au début du tableau et les entiers impairs à la fin (sans utiliser un tableau intermédiaire).

Ex :

    • Pour le tableau                 T = (14, 5, 17, 8, 11, 4, 8, 6, 4, 7)
    • deviendra après le tri        T = (14, 4, 6, 8, 8, 4, 11, 17, 5, 7)

Enfin affiche le tableau T.

Organisation de la mémoire RAM

Représentation en mémoire d’un tableau à une dimension

Déclaration et représentation en mémoire d’un tableau à une dimension

 

Représentation en mémoire d’un tableau à 2 dimensions

Ajouter un commentaire

Veuillez vous connecter pour ajouter un commentaire.

Pas encore de commentaires.