Précédent Remonter Suivant

5.1  Le type tableau

Dans les sections précédentes, nous avons utilisé des variables de type int et float. Ces types sont qualifiés de scalaire car à chaque variable est associée une seule une information simple. Ainsi, si on la déclaration : int A=0;, la variable A ne contient qu'une seule valeur à un moment donné. Par opposition, une variable d'un type composé est associée à plusieurs informations.

5.1.1  Tableaux monodimensionnel

Si on veut stocker un tableau contenant n entiers dans une variable, il nous faut tout d'abord définir la structure de données correspondante. Ainsi, on va définir un tableau nom à 10 entrées entières par la commande :
type nom[n] ;

On peut affecter 7 à la troisième composante du tableau associé à cette variable par l'instruction var[3]=7;. On peut affecter un tableau d'entiers var2 lors de sa déclaration en utilisant l'instruction :
int var2[10] = {1,2,3,4,5,6,7,8,9,10} ;



Exercice 5.0 --- Crible d'Érathostène.


Construire un programme qui affiche tous les nombres premiers de 2 à 1000. Pour ce faire, on va utiliser le crible d'Érathostène : on construit un tableau contenant tout les entiers de 2 à 1000, puis on supprime (par exemple remplacer par 0) les multiples de 2, puis ceux de 3, etc.







Exercice 5.1 --- Fréquence d'incidence dans un tableau.


Lors d'une enquête de satisfaction pour un produit, des clients étaient invités à donner une note entière entre 0 et 20. Les 500 réponses ont été collectées dans un tableau d'entiers.
#define NbNote 500

int resultat[NbNote]={3, 7, 9,  0, 18, 5, 4, 19,  8, 3, 10, 7, 14, 13,
0, 18, 17, 5, 16, 4, 5, 1, 20, 6, 16, 10, 13, 12,  6, 5, 20, 8, 9, 15,
3, 17, 12, 10, 19, 3, 13, 4, 13, 14 , 17, 17, 15, 14, 18, 6, 17, 9, 9,
6, 15, 17, 11, 8, 8, 0, 19,  19, 13, 18, 11, 1,  16, 5, 16, 7, 18, 20,
3, 16, 3, 9, 1, 3, 20, 11, 6, 19, 0, 13, 10, 14, 13,  5, 1, 16, 2, 19,
10, 2, 14, 6, 8, 15, 4, 6, 8, 20, 4, 2, 0, 18,  19, 20, 13, 1, 13, 16,
12, 12, 7, 19, 13, 11, 3, 18, 10, 7, 20, 0, 4, 4, 16, 14, 19, 0, 0, 16,
  4, 0, 7, 18, 15, 8, 8, 6, 1, 12, 17,  9, 1, 4, 13,  0, 8, 15, 19, 4,
3, 1, 3, 1, 1, 1, 6, 10, 15, 8, 14, 17, 14, 3, 5, 0, 19, 6, 8, 13, 14,
2, 1, 12, 4, 1, 10, 17, 11, 7,  11, 12, 6, 10,  8, 18, 13, 15, 12, 14,
8, 2, 2, 3, 17, 6,  9, 17, 9, 19,  16, 8, 18, 0, 10,  15, 2, 17, 2, 3,
13, 19, 13, 12, 12, 2, 2, 4, 17, 17, 17, 2, 11, 19, 13, 8, 0, 9, 8, 5,
4, 13, 9, 9, 19, 15, 19, 1, 19, 10, 20, 1, 11, 8,  13, 0, 10, 6, 5, 1,
11, 0, 8, 13, 5, 0, 15, 9, 7, 0, 10, 0, 1,  12, 12, 10,  19, 17, 0, 6,
16, 12, 8, 12, 14, 13, 15, 20, 7, 17, 1, 18, 15, 13, 6, 14, 18, 8, 13,
14, 8, 14, 7, 16, 2, 19, 14, 6, 17, 8, 11, 14, 16, 11,  19, 2, 20, 16,
2, 13, 14, 20, 6, 13, 20, 9, 3, 19, 3, 0, 7, 0, 16,  7, 4, 15, 16, 17,
2, 14, 3, 15, 12, 16, 18, 1, 5,  9, 2, 1, 5, 9,  5, 13, 10, 11, 16, 6,
16, 8, 13, 11, 6, 8, 2, 5, 2, 5, 9, 1,  7, 20, 19, 4, 14,  2, 8, 9, 5,
9, 9, 5, 15, 12, 3, 7, 15, 17, 6, 0, 7, 2, 17, 19,  20, 15, 1, 11, 11,
18, 9, 7, 1, 1, 17, 1, 17, 10, 2, 5, 1,  14, 7, 2, 3, 0,  4, 2, 9, 17,
3, 6, 7, 18, 14, 14,  4, 10, 3, 15,  16, 17, 6, 15, 12,  17, 9, 5, 14,
14, 6, 4, 4, 4, 17, 10, 10, 11, 13, 16, 3, 0, 2, 18, 3,  20, 5, 16, 6,
0, 8, 3, 3, 10, 2, 0, 6, 11, 12, 9, 18, 8, 6, 2, 0, 0,  19, 12, 17, 5,
19, 12, 17, 4, 0, 20, 8, 3, 7,  6, 10, 0,  3, 4, 4,  6, 11, 0, 13, 14,
17, 20, 12, 3, 18, 3, 13, 14 };
Construisez une procédure qui permet d'afficher les notes qui ont été données le plus et le moins souvent ainsi que les fréquences correspondantes. De plus, affichez un histogramme horizontal des fréquences des notes données en entrées.

Indications. Pour ce faire, on va créer un tableau de 21 éléments indicé de 0 à 20 dont la nième composante contiendra le nombre de fois où la note i a été donnée. Ensuite, il nous faudra déterminer le maximum et le minimum de ce tableau et en déduire les notes les plus et moins fréquentes.

L'exemple a été choisi afin que le maximum et le minimum des fréquences soient uniques.


5.1.2  Tableaux bidimensionnel

Un tableau peut être multidimensionnel et coder une matrice 6x6 à coefficients flottant.

On peut définir le tableau à deux dimensions correspondant par l'instruction :
float matrice[6][6];
et affecter à 1 le coefficient (i,j) de la variable matrice par l'instruction matrice[i][j]=1;. Remarquons que l'on peut déclarer et affecter la matrice 2x2 identité par l'instruction :
int id[2][2]={{1,0},{0,1}};



Exercice 5.2 --- Matrice : saisie, produit et affichage.


Écrivez une procédure qui permet de saisir deux matrices 3x3, de faire leurs produit et de l'afficher.







Exercice 5.3 --- Jeu de la vie.


Le jeu de la vie a été élaboré par John H. Conway. On considère un tableau bidimensionnel dont chaque cellule peut être dans l'un des deux états suivants : Chacune des huits cases qui entourent une case donnée est dite adjacente ou voisine. Les règles du jeu sont les suivantes :
  1. Règle de la survie : chaque cellule vivante ayant, à l'étape n, deux ou trois cellules vivantes adjacentes survit à l'étape n+1 ;
  2. Règles de la mort : chaque cellule vivante ayant pour voisines, à l'étape n, quatre cellules vivantes adjacentes ou plus, disparaît à l'étape n+1 (mort par surpopulation). Une cellule vivante n'ayant qu'une ou aucune cellule vivante adjacente meurt à l'étape suivante (mort par isolement) ;
  3. Règle de naissances : chaque cellule morte ayant exactement trois cellules vivantes adjacentes, engendre à l'étape suivante une cellule vivante.
Le jeu de la vie est un exemple d'automate cellulaire. Nous allons construire un programme permettant d'initialiser, de représenter les états, de gérer et d'afficher cet automate. Pour ce faire, il nous faut : Pour tester votre programme voici quelques configurations classiques : Enfin, vous pouvez choisir des conditions initiales aléatoires en utilisant la fonction random() (cf. man random).






Pour tout commentaire : Alexandre Sedoglavic.
Précédent Remonter Suivant