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