Académique Documents
Professionnel Documents
Culture Documents
Département d’Informatique
Les structures de
données complexes
et statiques
Février 2016
Guy MBATCHOU
Préliminaires
Préliminaires
1.1 - Durée :
1.3 - Ressources
Soit un programme où il est question de sauvegarder (stocker dans des variables) les
informations sur un étudiant. Pour simplifier, nous nous intéressons aux caractéristiques
suivantes d’un étudiant : nom, prénom, âge, sexe, niveau et filière d’études. Pour stocker donc
un étudiant, nous aurons besoin six (06) variables correspondant aux six caractéristiques d’un
étudiant : 3 variables de type chaîne de caractères pour le nom, prénom et filière d’études ; 2
variables de type entier pour l’âge et le niveau d’études ; 1 variable de type caractère pour le
sexe.
La difficulté vient du fait que d’une part pour déclarer un étudiant, il faut beaucoup de
variables (proportionnelles aux caractéristiques) et d’autre part, il est possible de se tromper
lors de la manipulation des variables et associer par exemple le nom d’un étudiant au prénom
d’un autre.
Pour résoudre ces problèmes, il serait intéressant d’avoir une structure permettant
d’encapsuler (englober) toutes les caractéristiques en un seul bloc indivisible. En algorithmique,
cette structure existe et s’appelle les enregistrements. En langage C, elle s’appelle struct.
1.3.1 - Définition
Un enregistrement est une structure de données composée de caractéristiques pouvant
être de type différent.
Un enregistrement est utilisé si et seulement si l’information a au moins deux (02)
caractéristiques.
1.3.2 - Déclaration
struct nomStructure {
type1 champ1 ;
type1 champ1 ;
…
type1 champN ;
};
struct est le mot clé qui permet de déclarer une structure dont le nom est nomStructure
contenant plusieurs champs avec leur type respectif.
Un champ de la structure peut être de type simple (char, int, float, double) ou de type
structure ou un autre type complexe comme un tableau.
L’ordre des champs ou caractéristiques est laissé à l’appréciation du programmeur.
Vous pouvez décider de regrouper les caractéristiques par type ou par sémantique ou par ordre
alphabétique ou selon des critères propres à vous. L’ordre des caractéristiques importe peu !
1.3.4 - Utilisation
L’accès à un champ de la variable de type structure se fait en suivant le nom de la
variable par l’opérateur point « . » et du nom du champ.
Exemple :
nombre1.partie_en = 10 ;
Lors de la manipulation des structures, vous devez le faire champ par champ car :
même si les champs sont de même type, leur manipulation groupée (non champ par
champ) peut être sémantiquement incorrecte. Par exemple l’instruction nombre1 +
nombre2 est incorrecte car c’est à vous de programmer l’addition de 2 nombres
complexes en additionnant les parties réelles (nombre1.partie_en + nombre2.partie_en)
entres elles et les parties imaginaires (nombre1.partie_im + nombre2.partie_im) entres
elles.
Par contre, il est possible d’affecter à une variable de type structure une autre variable
de même type.
Au lieu d’écrire :
nombre1.partie_en = nombre2.partie_en ;
nombre1.partie_im = nombre2.partie_im ;
on peut écrire :
nombre1 = nombre2 ;
MonEntier y, z ;
Nombre_Complexe n1, n2 ;
Struct Complex_Number n1,n2 ;
1.4 - Activités
Exercice 01 : Poids : 100% - Seuil de validation : 80% Titre : QCM
Exercice 02 : Poids : 100% - Seuil de validation : 80% Titre : Equation du
second degré dans C
Exercice 03 : Poids : 100% - Seuil de validation : 80% Titre : Nombre complexe
MENU
1. Argument
2. Module
3. Conjuguée
4. Addition
5. Soustraction
6. Multiplication
7. Division
0. Quitter
Proposer une structure de données pour stocker un nombre fractionnaire puis réaliser le
programme correspondant au menu ci-dessous.
Nombres Fractionnaires
1- Arithmétique avec un entier
2- Arithmétique avec des fractions
3- Puissance
4- Inverse
5- Simplification
0- Quitter
Votre choix :
0- Quitter
Votre choix :
0- Quitter
Votre choix :
2.1 - Durée :
2.3 - Ressources
Les énumérations sont des cas particuliers des entiers dans lesquels chaque valeur
dispose d’un nom unique. Leur utilisation permet de définir les constantes entières dans un
programme et de les nommer.
enum nomEnumeration {nom1 [=valeur1] [, nom2 [=valeur2] [...]]};
nomEnumeration est le nom du nouveau type défini qui est un enum ;
nom1, nom2, … représentent les noms des différents énumérations.
A chaque nom, on peut associer si l’on veut une valeur entière. Au cas où ce n’est pas
fait, les énumérés reçoivent les valeurs 0, 1, … c’est-à-dire 0 pour le premier énuméré, 1 pour
le second, ainsi de suite.
Exemple : Enumération sans valeur définie
enum couleur {blanc, rouge, vert, bleu, noir} ;
Dans cet exemple, blanc a la valeur 0, rouge la valeur 1, vert la valeur 2, bleu la valeur
3 et noir la valeur 4.
Soient 2 variables c1 et c2 de type enum couleur. On peut effectuer les opérations
suivantes :
enum couleur c1, c2 ;
int a = 4 ;
c1 = bleu ; //équivalent à c1 = 3
c1 = 0 ; // équivalent à c1 = blanc
c1 = c2 ;
c1 = (3 * b) + c2 ;
n = noir + rouge ;
Les énumérations sont traitées comme des entiers et peuvent être affectées aux variables
de type entier et peuvent aussi en recevoir des valeurs venant des variables de type entier. On
peut également affecter à une variable de type enum la valeur d’une autre variable de type enum
différent
Exemple : Enumération avec valeur définie
Utilisation de l’alias
typedef enum color {blanc, rouge, vert, bleu, noir} Couleur ;
enum color a, b ;
Couleur c, d ;
2.4 - Activités
Exercice 05 : Poids : 40% - Seuil de validation : 60% - Titre :
Ecrire un programme qui