Leçon 2 : Types énumérés, Tableaux et Structures
Rodrigue DJEUMEN
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 1 / 23
Sommaire
Sommaire
1 Sommaire
2 Dénitions de types énumérés
Les types énumérés
Dénitions
Dénitions de type
3 Les tableaux
Dénition
Tableaux à une dimension
Déclaration d'une variable vecteur
Indexation d'un vecteur
Parcours d'un vecteur
Les chaînes de caractères
Exercices
Tableaux à deux dimensions
Déclaration d'une variable matrice
Indexation d'une matrice
Parcours d'une matrice
Exercices
4 Les structures
Dénition de type structure
Dénition
Exemple
Opérations sur les types structures
Exercices
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 2 / 23
Dénitions de types énumérés Les types énumérés
Types énumérés
Un type énuméré déni un ensemble de valeurs ordonnées par énumération des
identicateurs qui dénotent ces valeurs. Ces identicateurs sont des identicateurs de
constantes.
Syntaxe :
enum identificateur {id1, id2, ..., idN};
Les valeurs d'un type énuméré sont ordonnées. Ainsi : id 1 < id 2 < ... < idN .
Deux variables de type énumérés diérents ne peuvent être comparées.
Deux types énumérés ayant les mêmes valeurs d'identicateurs ne peuvent être
dénis dans un programme
Il n'est pas possible de lire ou d'écrire une variable de type énuméré.
Exemples :
enum arcenciel {violet, indigo, bleu, vert, jaune, orange, rouge};
enum sexe {masculin, feminin};
enum jour {lundi,mardi, mercredi, jeudi, vendredi, samedi, dimanche};
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 3 / 23
Dénitions de types énumérés Les types énumérés
Dénitions de type
Quand on a déni le type enum jour {· · · }; par exemple, jour n'est pas
considéré comme un nouveau type.
Une dénition d'un type que l'on veut désigner par un identicateur se
fait grâce à une déclaration typedef .
Exemple :
typedef int LONGUEUR; /* On peut utiliser LONGUEUR
comme un type entier*/
typedef enum {false, true} Boolean;
Le type Boolean ainsi déni, correspond bien à la convention
false = 0 et true = 1.
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 4 / 23
Les tableaux Dénition
Dénition
Un tableau est une collection d'objets de même type qui a :
une taille xe dénie lors de sa déclaration,
un type déni lors de sa déclaration (le type de ses éléments),
les objets sont indicés par des valeurs allant de 0 à la taille − 1 du
tableau.
On distingue : les tableaux à une dimension (ou vecteur ), les tableaux à
deux dimensions (ou matrice ) et les tableaux à N dimensions (N > 2).
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 5 / 23
Les tableaux Tableaux à une dimension
Déclaration d'un vecteur
SYNTAXE : type nom_de _type _tableau[taille];
type indique le type des éléments du vecteur ;
nom_de _type _tableau est un identicateur représentant le nom du vecteur
crée.
taille est un entier qui indique le nombre de cases constituant le tableau.
Exemple :
int t[10]; //tableau de 10 entiers
char lettres[2*26]; //tableau de 52 caractères
Il est possible de déclarer un vecteur en l'initialisant :
int tab[5] = {3, 3}; /* les 2 premières cases sont initialisées à 3*/
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 6 / 23
Les tableaux Tableaux à une dimension
Opérateur d'indexation
Il faut pouvoir sélectionner un élément (ou cellule) du tableau, ceci est
réalisé à l'aide de la fonction d'adressage nommée indexation. La variable
ainsi désignée est dite variable indicée.
SYNTAXE
identificateur [indice]
identificateur est le nom utilisé lors de la déclaration du tableau.
indice est une expression arithmétique à résultat entier, tel que
0 ≤ indice ≤ taille .
Exemple :
t[4] {expression qui désigne le 5ème élément du tableau, c'est un entier}
lettres[60] {est incorrect, parce que indexe au-delà des bornes}
Si 0 ≤ i ≤ taille , t[i + 1] désigne l'élément successeur de t[i].
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 7 / 23
Les tableaux Tableaux à une dimension
Opération de parcours d'un vecteur
Étant donné que le nombre d'éléments contenus dans un tableau est connu
d'avance, la boucle for est plus indiquée lorsque l'on voudrait parcourir un
tableau.
SYNTAXE
for(initialisation; prédicat; incrément)
action;
Exemple : lire séquentiellement les éléments d'un vecteur de N éléments.
for(indice = 0; indice <= N-1; indice++)
scanf(%d,&tab[indice]);
Remarque : l'identicateur d'un tableau dénote l'adresse du premier
élément du tableau ; donc tab == &tab[0], le parcours peut aussi s'écrire :
for(indice = 0; indice <= N-1; indice++)
scanf(%d,tab[indice]);
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 8 / 23
Les tableaux Tableaux à une dimension
Les chaînes de caractères
Toute variable de type chaîne a la forme char ch[n] ;
En C il n'existe pas de type chaîne ;
Un tableau de caractères dénissant une chaîne, contient le caractère
\0 qui est le marqueur de n de chaîne ;
Exemple :
char nom[4]={'b', 'o', 'b', '\0'};
l'aectation d'une valeur à une chaîne, se fait grâce à l'opérateur
strcpy (ch1, ”bob”);
On peut utiliser scanf pour lire une chaîne, scanf (”%s”, ch)
Les fonctions ch = gets() et puts(ch) permettent respectivement de
lire et d'acher une chaîne.
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 9 / 23
Les tableaux Tableaux à une dimension
Exercices
Exercice 1 : Écrivez un programme calculant la somme des valeurs d'un vecteur (on suppose
que le tableau a été préalablement saisi).
Exercice 2 : Écrire un programme qui calcule la fonction suivante :
Pn Pn 2
i=1 j=1 (t[i] − t[j])
Exercice 3 : Crible d'Eratosthène
L'algorithme suivant permet de déterminer les N premiers nombres premiers. Soit un tableau T
d'entiers à une dimension initialisée à 1. Le principe du crible est énoncé de la manière suivante :
parcourir le tableau avec l'indice i initialisé à 2 comme suit :
Pour chaque i tel que T [i] 6= 0 , on met à 0 tous les éléments d'indice multiple de i
à partir de l'élément d'indice i 2 ;
On incrémente i de 1 et on recommence le parcours du tableau
On s'arrête lorsque i vaut la valeur entière de racine carré de N .
Les nombres premiers sont les nombres i tels que T [i] = 1
Parcourir le tableau pour et acher les nombres diérents de 0
Illustration :
Tableau initial (pour N = 16)
État du tableau lorsque i = 2
1. Dénir les types de donnée à manipuler ;
2. Écrire le programme.
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 10 / 23
Les tableaux Tableaux à deux dimensions
Déclaration d'une matrice
SYNTAXE : type identificateur [taille1 ][taille2 ];
La première dimension représente le nombre de lignes du tableau (soit taille1
lignes) et la deuxième, le nombre de colonnes (soit taille2 colonnes). Le
nombre d'éléments du tableau est de taille1 ∗ taille2 .
Exemple : déclaration d'une variable de type matrice.
#define NBLIGNES 25
#define NBCOLONNES 80
int mat[NBLIGNES][NBCOLONNES];
Il est possible de déclarer une matrice en l'initialisant :
int m[3][2] = {{1,1}, {2}, {3,3}};
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 11 / 23
Les tableaux Tableaux à deux dimensions
Opérateur d'indexation
SYNTAXE
identificateur [indice 1][indice 2]
identificateur est le nom utilisé lors de la déclaration du tableau.
indice 1, indice 2 sont des expressions arithmétiques à résultat entier, tel
que 0 ≤ indicei ≤ taillei .
Exemple :
m[2][1] /* est une expression qui désigne l'élément du tableau,
se trouvant au croisement de la 3e ligne et la 2e colonne */
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 12 / 23
Les tableaux Tableaux à deux dimensions
Opération de parcours d'une matrice
SYNTAXE
for(indice1 = 0; indice1 <= taille-1; indice1++)
for(indice2 = 0; indice2 <= taille-1; indice2++)
traiter(tab[indice1][indice2]);
Exemple : lire séquentiellement les éléments d'une matrice de N ×M
éléments.
for(i = 0; i <= N-1; i++)
for(j = 0; j <= N-1; j++)
scanf(%d,m[i][j]);
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 13 / 23
Les tableaux Tableaux à deux dimensions
Exercices
Exercice 4 : Matrice unité
Une matrice unité est un tableau qui a des valeurs 1 sur la diagonale (la
ligne est égale à la colonne). Il vous est demandé de créer une matrice
unité de taille 10 lignes et 10 colonnes.
1 Dénir le type Matrice unité ;
2 Déclarer une variable de type matrice ;
3 Comment référencer un élément de la matrice ?
4 Écrire un programme qui initialise la diagonale de la matrice à 1.
Exercice 5 : Tableau magique
Soit un tableau d'entiers à deux dimensions de N lignes et N colonnes.
Écrire un programme qui reconnaît si ce tableau est magique ou non.
Un tableau magique est un tableau dont la somme des deux diagonales, des
N lignes et des N colonnes sont toutes égales.
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 14 / 23
Les tableaux Tableaux à deux dimensions
Exercice 6
On voudrait mettre en ÷uvre une bibliothèque de fonctions permettant de
manipuler les matrices carrées d'ordre N.
1 Écrire la procédure lireMatrice(int mat[][], int n)permettant de lire les
données d'une matrice carrée mat de taille n × n.
2 Écrire la fonction int[][] somme(int A[][], int B[][], int n)qui calcule la
somme de deux matrices carrées.
3 Écrire la fonction int[][] produit(int A[][], int B[][], int n) qui calcule le
produit de deux matrices carrées de la manière suivante :
Si A, B et C sont des matrices carrées, alors C =A×B est déni tel
que :
P1
n−
cij = aik ∗ bkj
k=0
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 15 / 23
Les tableaux Tableaux à deux dimensions
Exercice 7
Soit un tableau d'entiers rectangulaire, de N lignes et M colonnes. On désire
acher les éléments de ce tableau de la façon suivante :
Les lignes de numéro impair sont achées de gauche à droite ;
Les lignes de numéro pair sont achées de droite à gauche ;
1 Dénir le type Matrice conforme à la description ci-dessus ;
2 Écrire une fonction void lecture(Matrice mat, int n, int m), permettant de
lire les données d'une matrice ;.
3 Écrire une fonction void afficher (Matrice mat; int n, int m), permettant
d'acher les données d'une matrice, suivant le principe décrit ci-dessus ;.
4 Écrire le programme principal, qui se sert des deux fonctions précédentes,
pour lire les données d'une matrice et acher son contenu.
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 16 / 23
Les structures Dénition de type structure
Dénition de type structure
Une structure (ou enregistrement, ou article) est une collection d'objet de diérents
types. Chaque objet composant un enregistrement, a un identicateur et un type
qui lui sont associées ; ces objets sont appelés les champs de l'enregistrement.
Syntaxe :
struct nom_de_enregistrement{
champ1 : type1;
champ2 : type2
...
champN : typeN;
};
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 17 / 23
Les structures Dénition de type structure
Exemples de structure
Exemple :
struct Date{
short j, m;
int a;
};
typedef enum {lun, mar, mer jeu, ven, sam, dim} Jour;
typedef struct{
Jour j;
struct Date d;
} UneDate;
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 18 / 23
Les structures Opérations sur les types structures
Opérations sur les structures
Déclaration de variables de type structurés :
struct date d1,d2;
UneDate demain;
On peut faire des aectations entre des variables de même type structurés
(par exemple d 1 = d 2).
La sélection d'un champ se fait à l'aide de l'opérateur ”.”
demain.j = sam;
demain.d.a = 2015;
demain.d.m = 12;
demain.d.j = 5;
On peut initialiser les variables structures lors de leur déclaration :
UneDate d = {lun, {3, 5}};
L'opérateur int sizeof (identificateur ) délivre la taille en octet occupée par
une structure déclarée.
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 19 / 23
Les structures Exercices
Exercice 8
On voudrait créer un logiciel pour la gestion d'une banque ; sachant que :
Un compte est caractérisé par son numéro, le nom et le prénom du titulaire,
le solde et le type (épargne, courant, chèque,. . .) ;
Une personne est caractérisée par le numéro de sa carte d'identité, son nom
et son prénom, sa date de naissance.
1 Donner la dénition des types suivants :
1 Le type Compte
2 Le type Personne
2 Écrire un programme permettant de lire les données d'un compte.
3 Écrire un programme permettant de lire et d'acher les données d'une
personne.
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 20 / 23
Les structures Exercices
Exercice 9
Un des magasiniers d'un supermarché de la place, gère un stock de 10 produits de
catégories diérentes ; chaque produit étant caractérisé par son code, sa désignation et
sa quantité en stock. Le travail quotidien devenant compliqué pour lui, il vous sollicite
en tant qu'expert informaticien pour réaliser un logiciel lui facilitant la tâche.
1 Dénir le type Produit ;
2 Dénir le type ProduitStock permettant de représenter les produits en stock ;
3 Dénir le type Stock ;
4 Écrire une fonction qui prend en paramètre un produitStock et le range dans le
stock ;
5 Écrire une fonction qui retourne en résultat la somme totale de quantité de
produits, dont le numéro de catégorie est transmis en paramètre.
6 Écrire une fonction qui prend en paramètre un code de produit et le numéro de sa
catégorie, puis indique si ce produit est en stock.
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 21 / 23
Travaux pratiques Contexte
Un réseau
Un réseau d'ordinateurs, peut être représenté par une matrice M de taille N × N,
dans lequel, les lignes et les colonnes représentent les numéros de machines.
Chaque ordinateur, dispose d'une paire d'information, à savoir son nom et son
numéro.
Les cellules M[i, j] (avec 1 ≤ i, j ≤ N et N étant le nombre d'ordinateurs)
indiquent les liaisons entre les ordinateurs tel que :
M[i, j] = 1 Si le ordinateurs de numéros i et j sont reli és
M[i, j] = 0 Si le ordinateurs de numéros i et j ne sont pas reli és
Il y'a double liaison entre deux ordinateurs si M[i, j] = M[j, i] = 1
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 22 / 23
Travaux pratiques Travail à faire
Travail à faire
Pour un N une constante à dénir :
1 Écrire la fonction int[][] creerLien(int m[][], int i, int j,int n) qui permet de créer un
lien entre deux ordinateurs de numéro i et j .
2 Écrire la fonction int[][] supprimerLien(int m[][], int i, int j, int n) qui permet de
supprimer un lien entre deux ordinateurs de numéro i et j .
3 Écrire la fonction void acherConnexion(int m[][], int n) qui ache la liste des
connexions existantes entre les ordinateurs pris deux à deux.
4 Comment peut-on utiliser la fonction de la question 1 pour créer une liaison
double ? expliquer.
5 Écrire la fonction int etatLien(int m[][], int ord1, int ord2, int n) qui retourne 1 s'il
existe un lien entre ord 1 et ord 2 et 0 sinon.
6 Écrire le programme principal proposant un menu d'accueil et permettant au choix
de créer et de supprimer un lien, d'acher les connexions existantes, de dire s'il
existe un lien entre deux ordinateurs donnés.
Rodrigue DJEUMEN Leçon 2 : Types énumérés, Tableaux et Structures 23 / 23