Master MIMSE - Spécialité 3-1ère Année J0MS7301 : Algorithmique et Programmation Objet Feuille d'exercices 2 Structures Exercice 1 : Ecrire un programme qui : dénit une structure horaire au format heures, minutes, secondes, déclare une variable du type horaire, lit un horaire dans cette variable, ache l'horaire lu. Exercice 2 : Ecrire un programme qui dénit une structure immatriculation permettant de stocker les informations d'une plaque d'immatriculation de voiture (numéro, chire, département). dénit une structure voiture permettant de gérer les informations liées à une voiture (marque, modèle, plaque d'immatricumlation). lit et ache une voiture. Exercice 3 : En reprenant les structures de l'exercice précédent, écrire un programme qui déclare, lit et ache un tableau de 3 voitures. Les pointeurs et les références Exercice 4 : int x = 0; int y = 1; int &ref1 = x; ref1 = 2; 1
cout << "x = " << x << endl; int *pt1 = &y; *pt1 = ref1; (*pt1)++; cout << "y = " << y << endl; ref1*=2; cout << "x = " << x << " -- y = " << y << endl; ref1 = y; y++; cout << "x = " << x << " -- y = " << y << endl; Analyser les résultats obtenus (s'aider d'un schéma). Exercice 5 : int x = 0; int y = 42; int * pt1 = &x; cout << *pt1 << endl; pt1++; cout << *pt1 << endl; Analyser les résultats obtenus (s'aider d'un schéma). Exercice 6 : int *tab = new int[10]; 2
int *ctab; tab[i] = i; ctab = tab; cout << *ctab << " - "; ctab++; cout << endl; cout << tab[i] << " - "; cout << endl; delete[] tab; Analyser les résultats obtenus. Exercice 7 : Ecrire un programme C++ qui alloue dynamiquement un tableau de taille n (n entré au clavier), l'initialise à 0 puis l'ache. Ne pas oublier de libérer l'espace mémoire alloué à la n du programme! Exercice 8 : Ecrire un programme en C++ qui déclare et alloue dynamiquement un tableau à deux dimensions n m de réels (n et m entrés au clavier), initialise ce tableau avec comme terme général a ij = i/j, ache le tableau. Ne pas oublier de libérer l'espace mémoire alloué à la n du programme! Exercice 9 : Ecrire un programme en C++ qui déclare et alloue dynamiquement un tableau de pointeurs sur des réels, initialise ce tableau avec comme terme général a i = i, ache le tableau. Ne pas oublier de libérer l'espace mémoire alloué à la n du programme! 3
Exercice 10 : En reprenant les structures de l'exercice 2, écrire un programme qui alloue dynamiquement un tableau de 3 voitures, lit 3 voitures et les stocke dans le tableau, et ache le tableau. Les listes chaînées Un tableau permet de stocker consécutivement en mémoire un ensemble de taille xé d'éléments. Ce stockage consécutif permet un accès direct (à l'aide des crochets) aux éléments. En revanche, il est nécéssaire de connaître la tailole de l'ensemble au moment de la création (déclaration pour un tableau statique, allocation pour un tableau dynamique) du tableau. Lorsque l'on ne connaît pas la taille de l'ensemble, une solution est l'utilisation de la structure de liste chaînée. La base d'une liste chaînée est le maillon (ou chaînon). Un maillon est une structure qui contient deux types d'attributs : l'élément que l'on veut stocker, l'adresse du maillon suivant. Une liste chaînée est caractérisée par l'adresse de son premier maillon (un pointeur sur le premier maillon). Ce dernier est égale à 0 (ou NULL) si la liste est vide. La liste chaînée est construite au fur et à mesure que l'on y ajoute des éléments. Ces éléments ne sont plus stockés de manière consécutive en mémoire. On ne peut donc plus y accéder directement en utilisant les crochets. On y accedera de manière séquentielle en partant du début de la liste et en passant itérativement aux éléments suivants. 3 9 2 6 3 Exemples de listes chaînées. Exercice 11 : Ecrire un programme en C++ qui : dénit la structure du maillon, les éléments que l'on veut stocker seront des entiers. déclare un pointeur tete sur un maillon, 4
initialise la liste à une liste vide, ajoute un premier maillon à la liste, ajoute en un second maillon (on insère le maillon entre la et le premier maillon), ajoute en un troisième maillon, ache la liste, libère tout l'espace mémoire alloué pour la liste. nouv Ajout en dans une liste chaînée. 5