Vous êtes sur la page 1sur 39

Chapitre 4:

Les tableaux
Enseignant : Maha Maalej

Année Universitaire: 2020/2021 Groupe : LEM-A1


LES TABLEAUX DE NOMBRES (INT ou FLOAT)
1. Les tableaux à une dimension (monodimdensionnels)
1.1 Définition
1.2 La déclaration en algorithmique
1.3 La déclaration en langage C
a) La dimension d’un tableau
b) Les indices
c) Les éléments de tableau
d) Débordement d’indice
1.4 Initialisation d’un tableau

2. Les tableaux à plusieurs dimensions (multidimensionnels)

2020/2021 Cours Initiation à la programmation 2


1.1 Définition

• Les tableaux regroupent des données de même type et de manière adjacente.


• Un tableau est donc un bloc de mémoire de dimension finie qui commence à une
adresse déterminée qui est celle de son premier élément.
• La définition d’un tableau nécessite trois informations :
• Le type des éléments du tableau
• Le nom du tableau (son identificateur)
• La dimension du tableau (le nombre d’éléments qui le composent)
• Les éléments du tableau peuvent être
• Des données de type simple : int, char, float, long, double, etc.
• Des tableaux
• Des structures

2020/2021 Cours Initiation à la programmation 3


Exemple

• Supposons que nous souhaitions déterminer, à partir de six notes d’élèves


(fournies en données), combien d’entre elles sont supérieures à la moyenne de la
classe.

2020/2021 Cours Initiation à la programmation 4


Première solution sans utiliser le tableau

#include <stdio.h>
void main()
{ int a,b,c,d,e,f, nbm ;
float moy ;
for (i=0 ; i<6 ; i++)
{ printf ("donnez les six notes) ;
scanf ("%d %d %d %d %d %d", &a,&b,&c,&d,&e,&f) ;
}
moy=(a+b+c+d+e+f)/6;
printf ("\n\n la moyenne est : %f\n", moy) ;
if (a > moy) nbm++ ;
if (b > moy) nbm++ ;
if (c > moy) nbm++ ;
if (d > moy) nbm++ ;
if (e > moy) nbm++ ;
If (f > moy) nbm++;
printf ("%d élèves ont plus de cette moyenne", nbm) ;
}
2020/2021 Cours Initiation à la programmation 5
Exemple

• Supposons maintenant que nous souhaitions déterminer, à partir de vingt notes


d’élèves (au lieu de six), combien d’entre elles sont supérieures à la moyenne de la
classe.

 La déclaration de vingt variables est fastidieuse et n’est pas pratique,

 Donc on aura besoin d’utiliser un tableau qui va contenir les vingt notes.

2020/2021 Cours Initiation à la programmation 6


Deuxième solution avec le tableau

#include <stdio.h>
void main()
{ int i, som, nbm ;
float moy ;
int t[20] ;
for (i=0 ; i<20 ; i++)
{ printf ("donnez la note numéro %d : ", i+1) ;
scanf ("%d", &t[i]) ;
}
for (i=0, som=0 ; i<20 ; i++) som += t[i] ;
moy = som / 20 ;
printf ("\n\n moyenne de la classe : %f\n", moy) ;
for (i=0, nbm=0 ; i<20 ; i++ )
if (t[i] > moy) nbm++ ;
printf ("%d élèves ont plus de cette moyenne", nbm) ;
}

2020/2021 Cours Initiation à la programmation 7


1.2 La déclaration en algorithmique

• Déclaration d’un tableau en algorithmique :


<nom_tableau> [valeur initial….valeur final] de type
Exemples:
• t [1..20] d’entier ; ⇨ réserve l’emplacement pour 20 éléments de type entier
• Note [1..12] de réel; ⇨ réserve l’emplacement pour 12 éléments de type réel
Accès aux éléments du tableau
Note[1] : le premier élément dans le tableau
Note[2] : le 2ème élément dans le tableau
… …
Note [12] : le dernier élément dans le tableau

2020/2021 Cours Initiation à la programmation 8


Exercice

Ecrire un algorithme qui permet de lire N notes (1 <= N <= 20) puis de les afficher.

1 2 3 . . . . . . 20

2020/2021 Cours Initiation à la programmation 9


Réponse
Algorithme: lire_note
Variables: Note[1..20] de réel;
i, N : entier;
Début
Ecrire ("Entrez les éléments du tableau ");
Pour i de 1 à N faire
//Lecture du tableau
Lire (Note[i]);
Fin pour
Pour i de 1 à N faire //Affichage du tableau
Ecrire (Note[i]);
Fin pour
Fin

2020/2021 Cours Initiation à la programmation 10


Remarques

• Si on ne connait pas la dimension du tableau avant l’exécution


 Soit on fixe une valeur maximale pour le tableau (approximativement)
 Soit elle va être lue à partir du clavier (saisie par l’utilisateur et sera considérée
comme maximale)

2020/2021 Cours Initiation à la programmation 11


Exercice

Ecrire un algorithme qui permet de lire N entier (1 <= N <= 50) et d’afficher la plus
petite valeur.

2020/2021 Cours Initiation à la programmation 12


Réponse

Algorithme: lire_note Pour i de 1 à n faire


Variables: Note[1..50] de réel; Lire (Note[i]);
Fin pour
min, i, n :entier;
Début min ← Note[1];
// Dimension du tableau donnée par l’utilisateur
Pour i de 2 à n faire
Répéter
si Note[i] < min alors
Ecrire ("Entrez la dimension du tableau "); min ← Note[i];
Lire(n); fin si
Fin pour
Jusqu’à (n>=1 et n<=50);
Ecrire ("Entrez les éléments du tableau "); Ecrire ("le min=",min);
fin

2020/2021 Cours Initiation à la programmation 13


1.3 La déclaration en langage C

• Syntaxe: type nom[n];


Exemples:
• t [1..20] d’entier;  int t[20] ;
• Note [1..12] de réel;  float Note[12];
• nom [1..20] de char;  char nom [20];

2020/2021 Cours Initiation à la programmation 14


a) La dimension d’un tableau

• La dimension d’un tableau (son nombre d’éléments) ne peut être qu’une


constante.
• Exemple : #define N 50
.....
int t[N] ;

2020/2021 Cours Initiation à la programmation 15


b) Les indices

• Chaque élément est repéré par sa position dans le tableau, nommée indice.
• Conventionnellement, en langage C, la première position porte le numéro 0 par
contre à l’algorithmique où la première position porte le numéro 1.
• L'indice maximum est donc N-1 par contre à l’algorithmique où l'indice maximum
est la dimension du tableau N.
• Exemple:
Pour t [1..20] d’entier; int t[20] ; // La première position est : 1 en algo et 0 en C
// L’indice maximum est : 20 en algo et 19 en C

2020/2021 Cours Initiation à la programmation 16


c) Les éléments de tableau

• Le premier élément du tableau sera désigné par t[0]

• Le dernier élément sera désigné par t[n-1] avec n est la dimension du tableau

Exemple: int t[10]; t[0]:premier élément, t[9]:dernier élément

• Plus généralement, une notation telle que t[i] désigne un élément dont la position
dans le tableau est fournie par la valeur de i

2020/2021 Cours Initiation à la programmation 17


c) Les éléments de tableau

• Un élément de tableau peut apparaître à gauche d’un opérateur d’affectation


comme dans : t[2] = 5
• Il peut aussi apparaître comme opérande d’un opérateur d’incrémentation, comme
dans : t[3]++ --t[i]
• le langage C n’offre aucune possibilité d’affectations globales de tableaux, si t1 et
t2 sont des tableaux d’entiers, il n’est pas possible d’écrire t1 = t2 ;

2020/2021 Cours Initiation à la programmation 18


c) Les éléments de tableau

• La notation &t[i] désigne l’adresse de l’élément t[i] de même que &x désignait
l’adresse de x.
Exemples:
int compteur[10];
float nombre[20];
compteur[2] = 5;
nombre[i] = 6.789;
printf("%d",compteur[i]);
scanf("%f",&nombre[i]);

2020/2021 Cours Initiation à la programmation 19


d) Débordement d’indice

• Aucun contrôle de débordement d’indice n’est mis en place par la


plupart des compilateurs.
• De sorte qu’il se peut par erreur de désigner et de modifier, un
emplacement situé avant ou après le tableau.

2020/2021 Cours Initiation à la programmation 20


1.4 Initialisation d’un tableau

int tab[4]={2,5,3,10} ⇨ tab[0]=2; tab[1]=5; tab[2]=3; tab[3]=10;


int tab[4]={0,5,10,7,8,25}; ⇨ faux
int tab[5]={5,3,8}; 5 3 8 ? ? ⇨ ce n’est pas faux mais les deux dernières
cases vont contenir des valeurs aléatoires
int tab[]={5,8,6,15,28};
int tab[]; ⇨ faux
int x;
int tab[x]; ⇨ faux

2020/2021 Cours Initiation à la programmation 21


Exercice

Ecrire un programme qui permet de lire 8 notes et leurs coefficients et


calculer la moyenne.

2020/2021 Cours Initiation à la programmation 22


Réponse
#include <stdio.h>
For(c=0,s=0,i=0;i<8;i++)
void main()
{ s += A[i]*B[i];
{ int i, s,c ; c += B[i];
float A[8], B[8], M ; }M = s / c ;
printf ("votre moyenne est %f", M) ;
}
for (i=0 ; i<8 ; i++)
{ printf ("donnez la note numéro %d : ", i) ;
scanf ("%d", &A[i]) ;
printf ("donnez le coefficient de la note numéro %d : ", i) ;
scanf ("%d", &B[i]) ;
}

2020/2021 Cours Initiation à la programmation 23


Exercice

Ecrire un programme qui permet d’accepter un tableau de 10 éléments et de les


inverser (sans utiliser un autre tableau)

Exemple: 5 10 8 7 15 12 13 1 2 6

Résultat : 6 2 1 13 12 15 7 8 10 5

2020/2021 Cours Initiation à la programmation 24


Réponse

#include <stdio.h>
for(i=0;i<n/2;i++){
void main() temp=T[i];

{ int T[10]; T[i]=T[n-i-1];


T[n-i-1]=temp;
int i, n=10, temp;
}
printf ("donnez les éléments du tableau \n") ;
for (i=0;i<10;i++)
for(i=0;i<10;i++)
printf("%d", T[i]) ;
scanf ("%d", &T[i]) ; }

2020/2021 Cours Initiation à la programmation 25


LES TABLEAUX DE NOMBRES (INT ou FLOAT)

1. Les tableaux à une dimension (monodimensionnels)

2. Les tableaux à plusieurs dimensions (multidimensionnels)

2.1 Définition

2.2 Déclaration et Initialisation

2.3 Affichage et lecture des éléments d’une matrice

2.4 Affichage et lecture des éléments d’un cube

2020/2021 Cours Initiation à la programmation 26


2.1 Définition

• Les tableaux multidimensionnels sont des tableaux qui contiennent des


tableaux.

2020/2021 Cours Initiation à la programmation 27


2.2 Déclaration et Initialisation

Déclaration
Syntaxe: <type> <nom> [dim1][dim2]…;
Exemple: Matrice[0][0] Matrice[0][1] Matrice[0][2] Matrice [0][m]
int Matrice[n][m]; Matrice[1][0] Matrice[1][1] Matrice[1][2] …
Avec n = nombre de lignes
Matrice[2][0] Matrice[2][1] Matrice[2][2] …
Et m = nombre de colonnes
Matrice[n][0] … … Matrice [n][m]
int Matrice[3][3];
int esp[3][3][4];
1 5 7
Initialisation
2 8 10
int Matrice[3][3]{ {1,5,7},{2,8,10},{3,6,3}}; 3 6 3

2020/2021 Cours Initiation à la programmation 28


2.3 Affichage et lecture des éléments d’une matrice

• Compteur sur les lignes: i varie de 0 à n lignes


• Compteur sur les colonnes: j varie de 0 à m colonnes
Matrice n×m
Matrice [i][j] j varie de 0 à m colonnes

Matrice[0][0] Matrice[0][1] Matrice[0][2] Matrice [0][m]


i varie de
0àn Matrice[1][0] Matrice[1][1] Matrice[1][2] …
n lignes
lignes
Matrice[2][0] Matrice[2][1] Matrice[2][2] …

Matrice[n][0] … … Matrice [n][m]


m colonnes

2020/2021 Cours Initiation à la programmation 29


2.3 Affichage et lecture des éléments d’une matrice

for (i=0;i<3;i++)
1 5 7
{for (j=0;j<3;j++)
2 8 10
printf("%d", Matrice[i][j]);
printf("\n"); 3 6 3

for (i=0;i<3;i++)
{for (j=0;j<3;j++)
scanf("%d",&Matrice[i][j]);
}

2020/2021 Cours Initiation à la programmation 30


2.4 Affichage et lecture des éléments d’un cube

int esp[3][3][4];
for (i=0;i<3;i++)
{for (j=0;j<3;j++)
{for (k=0;k<4;k++)
printf("%d", esp[i][j][k]);
printf("\n");
}}
for (i=0;i<3;i++)
{for (j=0;j<3;j++)
{for (k=0;k<4;k++)
scanf("%d",&esp[i][j][k]);
}}
2020/2021 Cours Initiation à la programmation 31
Exemple

Ecrire un programme qui permet de lire une matrice 4×4 puis de vérifier si elle est
symétrique.
Une matrice symétrique est une matrice carrée telle que ai,j = aj,i pour tout i et j
compris entre 1 et n (n=4 dans cet exemple).

1 8 10 15

8 2 7 5

10 7 3 0

15 5 0 4

2020/2021 Cours Initiation à la programmation 32


Réponse
#include <stdio.h> for (i=0 ; i<4 && test ; i++)
void main () { for (j=0 ; j<4 && test; j++)
int i, j, test , T[4][4]; if (T[i][j] != T[j][i])
// Remplir la matrice par des valeurs entrées par test=0;
l’utilisateur
if(test==1)
for (i=0 ; i<4 ; i++)
printf ("la matrice est symétrique") ;
for (j=0 ; j<4 ; j++)
else
{
printf ("la matrice n’est pas symétrique") ;
printf ("donnez la valeur de %d : ", T[i][j]) ;
}
scanf ("%d", &T[i][j]) ;
}
test =1;

2020/2021 Cours Initiation à la programmation 33


Exercice

Ecrire un programme qui effectue la saisie des éléments d’un tableau


pouvant contenir au maximum 10 entiers, puis recherche et affiche sa
valeur maximum et son rang.

2020/2021 Cours Initiation à la programmation 34


Réponse

#include<stdio.h> /* Recherche du max et de son rang */


#define dim 10 /* taille du tableau */ max = V [ 0 ]; /* initialisation avec le 1er élt */
void main () rmax = 0;
{ for (i=1; i<=nb-1; i=i+1)
int nb, i, V [ dim ], max, rmax; {
if (V [ i ] > max) {
do max = V [ i ]; /* on récupère le
{ printf ("Donner la taille du tableau "); nouveau max */
scanf("%d",&nb); rmax = i;
} }
while ((nb<=0) || (nb >dim)); }

for (i=0; i<=nb-1; i=i+1) /* Affichage du résultat */


{ printf ("Le maximum du tableau est %d au rang %d \n",
printf ("Entrer la valeur %d du tableau ",i); max,rmax+1);
scanf("%d",&V[i]);
} }

2020/2021 Cours Initiation à la programmation 35


Exercice

Ecrire un programme qui permet de déterminer si un tableau est trié en


ordre croissant.

2020/2021 Cours Initiation à la programmation 36


Réponse

#include<stdio.h>
#define dim 20 /* taille du tableau */ for (i=1; i<n&&test; i++)
void main () if (T [ i ] <T[i-1])
{ test=0;
int i, T [dim], test=1,n,signe;

do if(test)
{ printf ("Donner la taille du tableau "); printf ("Le tableau est trié");
scanf("%d",&n); else
} printf("Le tableau n\'est pas trié");
while ((n<1) || (n >dim));
}
for (i=0; i<n; i++)
{
printf ("Entrer la valeur %d du tableau ",i);
scanf("%d",&T[i]);
}

2020/2021 Cours Initiation à la programmation 37


Exercice

Ecrire un programme qui permet de déterminer si un tableau est trié


(croissant ou décroissant).

2020/2021 Cours Initiation à la programmation 38


Réponse

#include<stdio.h> signe=T[n-1]-T[0];
#define dim 20 /* taille du tableau */ for (i=0; i<n-1&&test; i++)
void main () if ((signe>0)&& (T[i] >T[i+1]) )
{ test=0;
int i, T [dim], test=1,n,signe; else
if ((signe<0)&&(T[i]<T[i+1]) )
do test=0;
{ printf ("Donner la taille du tableau "); else
scanf("%d",&n); if ((signe==0 )&& (T[i]!=T[i+1]))
} test=0;
while ((n<1) || (n >dim)); if (test==1)
printf ("Le tableau est trie");
for (i=0; i<n; i++) else
{ printf("Le tableau n\'est pas trie");
printf ("Entrer la valeur %d du tableau ",i);
scanf("%d",&T[i]); }
}

2020/2021 Cours Initiation à la programmation 39

Vous aimerez peut-être aussi