Collection d`ustensiles [ka02] - Exercice
Transcription
Collection d`ustensiles [ka02] - Exercice
Collection d’ustensiles [ka02] - Exercice Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 10 avril 2015 Table des matières 1 Collection d’ustensiles / pg-brocanteC1 (C++) 1.1 Hiérarchie de classes . . . . . . . . . . . . . . . . 1.2 Chargement par fichier . . . . . . . . . . . . . . . 1.3 Décompte du nombre d’objets . . . . . . . . . . . 1.4 Surface des assiettes . . . . . . . . . . . . . . . . 1.5 Valeur des ustensiles . . . . . . . . . . . . . . . . 1.6 Solution . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 2 3 3 4 Collection d’ustensiles / pg-brocanteC1 (C++) Mots-Clés Classes abstraites, Algorithmique, Programmation, C++. Requis Classes, Classes (suite), Pointeurs, Héritage, Polymorphisme, Modèles, Classes abstraites. Comprend [Chappelier-I1]. Cet exercice élabore une hiérarchie de classes d’ustensiles anciens de cuisine, plus précisément des assiettes (rondes ou carrés) et des cuillères, en réalise le comptage, calcule la surface totale des assiettes et estime la valeur totale des ustensiles. 1.1 Hiérarchie de classes Il convient de modéliser les objets de la collection avec une hiérarchie de classes comme indiquée ci-après. – Chaque ustensile a une année (entier) de fabrication. – Un Ustensile est une Assiette ou une Cuillere. – Il n’est pas possible d’instancier la classe Ustensile. – Une Assiette est une AssietteRonde ou une AssietteCarre. – Il n’est pas possible d’instancier la classe Assiette. – Chaque AssietteRonde a un rayon (réel). – Chaque AssietteCarree a un côté (réel). 1 Unisciel algoprog – Collection d’ustensiles / ka02 2 – Chaque Cuillere a une longueur (réel). – Une Brocante est une collection d’ustensiles. Créez une hiérarchie de classes permettant la gestion de la collection. Validez votre schéma avec la solution. Solution simple Voici une solution. ... Écrivez le code de cette hiérarchie de classes, y compris les variables d’instance et les constructeurs. 1.2 Chargement par fichier Écrivez une méthode Brocante::charger(fn) qui charge l’ensemble des ustensiles depuis un nom de fichier fn (chaine de caractères) et qui crée dynamiquement les instances. La méthode retournera Vrai si l’opération de chargement a été réalisée, Faux sinon. Aide détaillée Écrivez une méthode interne ajouterUstensile<T>(is) qui lit des caractéristiques d’un ustensile depuis un flux d’entrée is et ajoute une instance dynamique de type T à la collection. Supposez qu’il y a une ligne par ustensile et que le premier caractère définit le type d’ustensile : ’A’ ou ’a’ (assiette carrée), ’R’ ou ’r’ (assiette ronde), ’C’ ou ’c’ (cuillère). Écrivez un programme qui demande le nom de fichier puis charge les données et affiche la taille de la collection. Téléchargez le fichier des données. @[dt-brocante1.txt] r c a c r 1926 1881 1935 1917 1837 Testez. 8.4 7.3 5.6 8.8 5.4 // // // // // assiette ronde cuillere assiette carree cuillere assiette ronde Unisciel algoprog – Collection d’ustensiles / ka02 1.3 3 Décompte du nombre d’objets Écrivez un modèle de méthodes Brocante::decompte<T> qui calcule et renvoie le nombre d’objets de type T qui sont stockés dans la collection d’ustensiles. Complétez votre programme afin de décompter le nombre d’objets de type Cuillere stockés dans la collection d’ustensiles. Testez. 1.4 Surface des assiettes La surface des assiettes se calcule comme suit : – AssietteRonde : π · r2 (où r dénote son rayon) – AssietteCarre : c2 (où c dénote son côté) Complétez la hiérarchie des classes avec une méthode surface. Écrivez un modèle de méthodes Brocante::surface<T> qui calcule et renvoie la somme des surfaces des objets de type T stockés dans la collection d’ustensiles. Complétez votre programme afin d’afficher la somme des surfaces de toutes les Assiettes (rondes ou carrées) stockées dans la collection d’ustensiles. Testez. 1.5 Valeur des ustensiles La valeur des ustensiles se calcule comme suit : – Cuillere et AssietteRonde : – Si l’ustensile a moins de 50 ans, il vaut 0 e. – Sinon il vaut 1 e pour chaque année qu’il a de plus de 50 ans. Par exemple, pour l’année 2005, un tel objet fabriqué en 1943 vaut : 2005 - annee - 50 = 12 euros – AssietteCarree : – Cinq fois la valeur qu’elle aurait eu en étant ronde (car les assiettes carrées sont plus rares). Ainsi pour l’année 2005, un tel objet fabriqué en 1943 vaut : 5 * 12 = 60 euros Unisciel algoprog – Collection d’ustensiles / ka02 4 Complétez la hiérarchie des classes avec une méthode eval(annee) qui évalue et renvoie la valeur de l’objet relativement à une annee. Ici aussi évitez de dupliquer inutilement des instructions. Écrivez une méthode Brocante::valeur(annee) qui calcule et renvoie la valeur totale de la collection d’ustensiles relativement à une annee. Complétez votre programme afin d’afficher la valeur de la collection d’ustensiles en 2014 par exemple. Testez. Voici le résultat d’exécution. Nom du fichier des donnees? dt-brocante1.txt Taille de la collection: 5 Il y a 2 cuilleres Surface totale des assiettes: 344.64 Valeur totale en 2014: 440 euros 1.6 Solution Validez vos classes d’Ustensiles et méthodes avec la solution. Solution simple C++ @[BUstilesC1.hpp] @[BUstilesC1.cpp] Validez vos classes Brocante et méthodes avec la solution. Solution simple C++ @[BrocanteC1.hpp] @[BrocanteC1.cpp] Validez votre programme avec la solution. Solution simple C++ @[pg-brocanteC1.cpp]
Documents pareils
Collection d`ustensiles [ka02] - Exercice
1 Collection d’ustensiles / pg-brocanteC1 (C++,
1.1 Hiérarchie de classes . . . . . . . . . . . . . . .
1.2 Chargement par fichier . . . . . . . . . . . . . .
1.3 Décompte du nombre d’objets . . ...