Le parc Aéroport [he03] - Exercice
Transcription
Le parc Aéroport [he03] - Exercice
Le parc Aéroport [he03] - Exercice Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 10 avril 2015 Table des matières 1 Le parc Aéroport / pg-aeroportC1 (C++) 1.1 La classe Vehicule . . . . . . . . . . . . . . 1.2 La classe dérivée Voiture . . . . . . . . . . 1.3 La classe dérivée Avion . . . . . . . . . . . 1.4 La classe Aeroport . . . . . . . . . . . . . 1.5 Programme de test . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 3 4 5 Le parc Aéroport / pg-aeroportC1 (C++) Mots-Clés Héritage, Algorithmique, Programmation, C++. Requis Classes, Classes (suite), Héritage. Comprend [Chappelier-I1 :c11 :ex55]. Cet exercice réalise un programme orienté objet manipulant un parc de véhicules d’un aéroport composé de voitures et d’avions. 1.1 La classe Vehicule Ce problème définit une classe de base représentant tout type de véhicule. Créez une classe Vehicule ayant pour attributs : – Sa marque (une chaı̂ne de caractères). – Son année d’achat (un entier). – Son prix d’achat (un réel). L’ensemble des méthodes getter/setter ne seront pas fournies. Orientation Les attributs seront Protégé afin de pouvoir y accéder directement depuis les sous-classes. 1 Unisciel algoprog – Le parc Aéroport / he03 2 Écrivez un constructeur à trois paramètres qui initialise les attributs. Écrivez une méthode afficher qui affiche l’état de l’instance : Veh: m=[marque], a=[date], achat=[achat] Écrivez une méthode protégée decote(annee) qui calcule et renvoie le taux de dévaluation relativement à une annee (entier) selon : « 1 % (d’amortissement) par année entre la date d’achat et la date annee. ». Dans le cas où annee est antérieur à la date d’achat, retournez zéro. Déduisez une méthode eval(annee) qui calcule et renvoie le prix de l’argus par rapport à une annee (entier). La méthode se contentera de calculer la décote d puis retournera le maximum entre 0.0 et (1-d)*prixAchat. (Le prix doit rester positif.) Validez votre classe et vos méthodes avec la solution. Solution simple C++ @[VehiculeC1.hpp] @[VehiculeC1.cpp] 1.2 La classe dérivée Voiture Ce problème définit une classe particulière de véhicule. Constructeurs et méthodes d’affichage devront utiliser les méthodes appropriées de la classe parente. Créez une classe Voiture héritant de façon public de la classe Vehicule et ayant les attributs supplémentaires suivants : – Sa cylindrée (un réel). – Son nombre de portes (un entier). – Sa puissance (un entier). – Son kilométrage (un réel). Écrivez un constructeur à sept paramètres qui initialise les attributs. Aide simple Faites appel au constructeur de la classe Vehicule dans la section d’initialisation des constructeurs. Écrivez une méthode afficher qui affiche la valeur des attributs internes suivis de l’état des attributs hérités : ** Voiture: [cylindree] litres, [nportes] portes, [puissance] CV, [km] km [états des attributs hérités] Unisciel algoprog – Le parc Aéroport / he03 Aide simple 3 Faites appel à la méthode d’affichage de la super-classe. Redéfinissez la méthode decote qui vaut maintenant : – Moins 2 % pour chaque année depuis sa fabrication jusqu’à la date actuelle. – Et moins 5 % pour chaque tranche de 10000 km parcourus arrondie à la tranche la plus proche. – Et moins 10 % s’il s’agit d’un véhicule « Renault » ou « Fiat » (ou choix d’autres marques). – Et plus 20 % s’il s’agit d’un véhicule « Ferrari » ou « Porche » (même remarque que ci-dessus). Rappel Dans le cas où annee est antérieur à la date d’achat, retournez zéro. Faut-il ré-écrire la méthode eval(annee) ? Si oui, faites-le. Solution simple Il faut effectivement la réécrire, et ce même si le code est identique. La méthode Vehicule::eval appellera la méthode Vehicule::decote et non pas la méthode Voiture::decote. Validez votre classe et vos méthodes avec la solution. Solution simple C++ @[VoitureC1.hpp] @[VoitureC1.cpp] 1.3 La classe dérivée Avion Ce problème définit une autre classe particulière de véhicule. Créez une classe Avion héritant de façon public de la classe Vehicule et ayant les attributs supplémentaires suivants : – Son type [hélices ou réaction] (un entier). – Son nombre d’heures de vol (un entier). Écrivez un constructeur qui initialise l’ensemble des attributs. Écrivez une méthode afficher qui affiche la valeur des attributs internes suivis de l’état des attributs hérités : ** Avion: [mt], [hv] heures de vol [états des attributs hérités] Unisciel algoprog – Le parc Aéroport / he03 4 Redéfinissez la méthode decote qui vaut : – Moins 10 % pour chaque tranche de 1000 heures de vol s’il s’agit d’un avion à réaction. – Et moins 10 % pour chaque tranche de 100 heures de vol s’il s’agit d’un avion à hélices. Copier/collez la méthode Vehicule::eval(annee) pour les Avion. Validez votre classe et vos méthodes avec la solution. Solution simple C++ @[AvionC1.hpp] @[AvionC1.cpp] 1.4 La classe Aeroport Ce problème définit une classe regroupant les deux types de véhicules. Créez une classe Aeroport permettant de représenter un parc d’aéroport contenant : – Un vecteur garage regroupant le parc de Voitures. – Un vecteur hangar regroupant le parc d’Avions. Fournissez le constructeur par défaut. Écrivez une méthode interne ajouterVoiture(is) qui lit les caractéristique d’une Voiture depuis un flux d’entrée is et l’ajoute au garage de voitures. Voici le format d’entrée d’une ligne : V [marque] [annee] [achat] [cylindrée] [nportes] [puissance] [km] Écrivez une méthode interne ajouterAvion(is) qui lit les caractéristique d’un Avion depuis un flux d’entrée is et l’ajoute au hangar d’avions. Voici le format d’entrée d’une ligne : A [marque] [annee] [achat] [mt] [hv] Déduisez une méthode charger(fn) qui charge les données (voitures et avions) depuis un nom de fichier fn (chaine de caractères). Écrivez une méthode partagée interne calculerGarage(p,annee) qui calcule et affiche l’état d’un vecteur de Voiture nommé p relativement à une annee (entier). Unisciel algoprog – Le parc Aéroport / he03 5 Écrivez une méthode partagée interne calculerHangar(p,annee) qui calcule et affiche l’état d’un vecteur d’Avion nommé p relativement à une annee (entier). Déduisez une méthode calculer(annee) qui calcule et affiche l’état du parc (garage et hangar) relativement à une annee (entier). Écrivez une méthode vider qui vide l’ensemble des éléments du parc, garage et hangar. Validez votre classe et vos méthodes avec la solution. Solution simple C++ @[AeroportC1.hpp] @[AeroportC1.cpp] 1.5 Programme de test Écrivez un programme qui : – Demande un nom de fichier contenant les données, – En effectue son chargement, – Puis lance la fonction de calcul. Téléchargez le fichier des données. @[dt-vehicules1.txt] V V V A A Peugeot Porsche Fiat Cessna Nain_C 1998 1985 2001 1972 1992 14732 2.5 5 180 12000. #voiture 25000 6.5 2 280 81320. #voiture 732 1.6 3 65 3000. #voiture 123067 1 250 #avion 432109 0 1300 #avion Testez. Résultat d’exécution. Nom du fichier des donnees? ..\fichiers\vehicules1.txt ** Voiture: 2.5 litres, 5 portes, 180 CV, 12000 km Veh: m = Peugeot, a = 1998, achat = 14732, argus = 11638.3 ** Voiture: 6.5 litres, 2 portes, 280 CV, 81320 km Veh: m = Porsche, a = 1985, achat = 25000, argus = 9500 ** Voiture: 1.6 litres, 3 portes, 65 CV, 3000 km Veh: m = Fiat, a = 2001, achat = 732, argus = 585.6 ** Avion: HELICES, 250 heures de vol Veh: m = Cessna, a = 1972, achat = 123067, argus = 92300.2 ** Avion: REACTION, 1300 heures de vol Veh: m = Nain_C, a = 1992, achat = 432109, argus = 375935 Unisciel algoprog – Le parc Aéroport / he03 Validez votre programme avec la solution. Solution simple C++ @[pg-aeroportC1.cpp] 6