
Test de C++ n° 3 : (25 mars 2000 – durée : 2h)
© D. Mathieu mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
Créé le 27/03/2000 - Dernière mise à jour
: 13/04/2000

Tout document autorisé
Dans les exercices qui nécessitent de modifier
du code existant (comme les exercices faits en TP par exemple), il n'est
pas nécessaire de réécrire tout le code environnant,
mais seulement de situer l'ajout/modification que vous effectuez : si vous
ajoutez une fonction membre dans une classe, inutile de recopier la classe
entière, mais faites apparaître clairement à quel endroit
se situe l'ajout (partie privée, protégée, publique,
etc...)
Sommaire
Fonction resize()
Fonction swap()
de pile CStackArray
Fonction swap()
d'élément de CStackArray
Fonction swap() de
CStackList
Destructeur de la classe
CStackList
Classe abstraite CFileAbstr
Fonction resize()
La technique qui consiste à augmenter la taille
d'une structure lorsque c'est nécessaire est très fréquente.
Nous l'avons rencontrée déjà à plusieurs reprises
: les conteneurs standards de la bibliothèque C++ (push_back()
de vector et de list, append() de string
etc...) ainsi que dans la fonction Pop() de la pile générique
CStackArray
implémentée dans le TP 09. En revanche, il est rare que la
réduction automatique soit implémentée. La solution
préférée est de ne réduire la structure qu'à
la demande expresse de l'utilisateur. C'est le rôle de la fonction
resize(), elle aussi déjà utilisée.
A la classe générique CStackArray,
ajouter la fonction resize() qui permet de donner une nouvelle
taille à la pile :
-
si la taille indiquée est supérieure à la taille courante,
pas de problème
-
si la taille indiquée est inférieure à la taille courante,
mais supérieure au nombre d'éléments courant de la
pile, pas de problème
-
si la taille indiquée est inférieure au nombre d'éléments
courant de la pile, n'effectuer la modification que si le second paramètre
de la fonction, NoTrunc est false. S'il est à
true,
lever une exception de code CstNoTrunc que vous ajouterez
à l'endroit adéquat.
Ne pas tester la mémoire insuffisante.
Remarque : si nécessaire, il existe une fonction
min(a, b), avec a et b de type entier.
Voir corrigé.
Sommaire
Fonction swap()
de pile CStackArray
A la classe générique CStackArray,
ajouter la fonction membre swap() qui admet une autre pile en
paramètre, et qui permute les deux piles.
Voir corrigé.
Sommaire
Fonction swap()
d'élément de CStackArray
A la classe générique CStackArray,
ajouter la fonction sans paramètre swap() qui permute l'élément
sur le sommet de la pile avec celui qui est immédiatement dessous.
Prévoir une éventuelle exception.
Voir corrigé.
Sommaire
Fonction swap() de
CStackList
A la classe générique CStackList,
ajouter la fonction sans paramètre swap() qui permute l'élément
sur le sommet de la pile avec celui qui est immédiatement dessous.
Prévoir une éventuelle exception. Il est fortement conseillé
de faire un schéma avant de programmer cette fonction. On supposera
que la fonction SetSuivant() existe dans la classe générique
CElemGen.
Voir corrigé.
Sommaire
Destructeur de la classe
CStackList
Le destructeur de la classe CStackList écrit
dans le TP 09 est maladroit : si la pile n'est pas vide, une exception
est levée, ce qui permet d'informer l'utilisateur : c'est bien !.
Mais le destructeur de la pile est appelé automatiquement lorsque
le contrôle du programme sort de la portée de la pile. L'exception
levée ne peut donc être capturée qu'à l'extérieur
de ce bloc : la mémoire est donc de toutes façons perdue.
Corriger le destructeur de la classe générique CStackList
pour résoudre ce problème.
Voir corrigé.
Sommaire
Classe abstraite CFileAbstr
Une file est une structure dans laquelle on dépose
des données à une extrémité, que l'on récupère
à l'autre. On la désigne généralement sous
le terme de FIFO : First In, First Out
(premier entré, premier sorti). Quelle que soit l'implémentation,
une file doit donc permettre de déposer et de retirer. Ecrire la
classe abstraite correspondante CFileAbstr
Voir corrigé.
Sommaire
© D. Mathieu mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
