Programmation Objet & - Algorithmique UMONS - Faculté Polytechnique Service d'Informatique - Moodle
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
UMONS - Faculté Polytechnique Service d’Informatique Rue de Houdain, 9 www.ig.fpms.ac.be B- 7000 Mons www.umons.ac.be Programmation Objet & Algorithmique Projet IG Charleroi Enseignant responsable Mohammed BENJELLOUN Année académique 2018-2019
But : Manipulation des conteneurs associatifs MAP/Multi-MAP. Utilisation des algorithmes de la libraire STL. Manipulation de bases de données (Textes, Entreprises). Optimisation et création de code générique. L’implémentation d’une interface graphique n’est pas obligatoire mais représente un plus pour ce projet. Rappel Une Map est un conteneur associatif implémenté selon un arbre de recherche binaire. La figure suivante compare la structure globale des différents conteneurs1. 1 Bo Quian, https://www.youtube.com/watch?v=6iyzPed7FrM&t=366s Projet IG Charleroi Umons FPMs : Service d’Informatique 2018-19 1 Mohammed Benjelloun
Compiler et analyser le code suivant qui introduit la création et l’affichage d’une map2 #include #include #include using namespace std; int main() { map poids; // Création d’une map poids["souris"] = 1; // Ajoute ou écrase la valeur existante poids.emplace("chat ",3); // C++ 11 poids.insert(pair("tigre ", 200)); poids.insert(make_pair("elephant ",10000)); // Déduit le type cout
Écrivez un programme qui permet de lire : - La base de données des 150 premières Entreprises mondiale pour l’année 2015 (source : https://www.ft.com/content/1fda5794-169f-11e5-b07f- 00144feabdc0#axzz3mMra30FA). Elle sera lue à partir du fichier Entreprises.txt - La base de données de tous les pays du monde (source : http://gsociology.icaap.org/dataupload.html). Elle sera lue à partir du fichier Countries.txt Pour ce faire, vous déclarerez deux classes : Une classe Entreprise dont les objets sont des entreprises caractérisées par : string m_company; //(Nom) // identifiant string m_country; //(Pays) floatm_market_value; //(Valeur Marchande) string m_sector; //(Secteur d’Activité) floatm_turnover; //(Chiffre d’Affaire) float m_employees; //(Nombre d’Employés) int m_rank_2015; //(Rang en 2015) int m_rank_2014; //(Rang en 2014) Une seconde classe PAYS dont les objets sont des pays caractérisés par : string Region; // (Localisation) identifiant string Nom ; // (Nom) float Population ; // (Population) float Area ; // (Superficie) Dans les deux classes (Entreprise, PAYS), on déclarera au moins deux méthodes, l’une pour saisir et l’autre pour afficher chaque objet de la classe (Saisie() et affichage()). La manipulation des Entreprises et des Pays se fera en utilisant les conteneurs associatifs MAP/Multi-MAP. Par exemple, pour Entreprise, il faut réaliser un programme qui permet de charger et analyser la base de données du classement des entreprises selon leurs Market Value3. La base de données se trouve dans le fichier entreprises.txt . 3 Market value is the value of a company according to the stock market. ~ investopedia.com Projet IG Charleroi Umons FPMs : Service d’Informatique 2018-19 3 Mohammed Benjelloun
La démarche est la suivante : 1. Créer une map, pour contenir la base de données, la clé string étant le nom de l’entreprise. 2. Définir la fonction chargement qui : a. Ouvre le fichier entreprise.txt à l’aide de ifstream b. Créer un objet entreprise à partir de chaque ligne du fichier. c. Insérer l’objet entreprise dans la map map. Le nom de l’entreprise est la clé de la map. 3. Définir la fonction Affichage de la map (qui appelle la fonction affiche de la classe) NB : Vérifier bien que la map est ordonnée par ordre alphabétique de sa clé (c’est automatique) Le code de ce projet (préférable mais pas obligatoire) doit être organisé comme suit : Entreprise.h : contiendra la définition, les prototypes et les attributs de la classe Entreprise.cpp : contiendra la définition des méthodes de la classe main.cpp : la fonction main et le reste du programme PAYS.h : contiendra la définition, les prototypes et les attributs de la classe PAYS.cpp : contiendra la définition des méthodes de la classe Votre programme doit gérer en boucle le menu suivant : 1) Stocker les données des Entreprises dans une Map + affichage. 2) Stocker les données des Pays dans une Multimap + affichage. 3) Chercher une entreprise via son nom et l’afficher. 4) Chercher tous les pays situés dans une région et les afficher. 5) Effacer les conteneurs. 6) Afficher toutes les entreprises étant dans un pays donné. 7) Afficher les 5 premières entreprises dans une région donnée. 8) Quitter. Les choix seront traités via l’instruction case. Votre programme utilisera une série de fonctions permettant de séparer les tâches. Si nécessaire, des fonctions membres peuvent être ajoutées aux classes. Optimisez votre code afin de permettre la réutilisation des morceaux de code. Format base de données : • Entreprise : Company;Country;Market_Value;Sector;Turnover;Employees;Rank_2015;Rank_2014 • Pays : Region;Nom;Population;Area Projet IG Charleroi Umons FPMs : Service d’Informatique 2018-19 4 Mohammed Benjelloun
Liste des régions : ASIA (EX. NEAR EAST), EASTERN EUROPE, NORTHERN AFRICA, OCEANIA, WESTERN EUROPE, SUB-SAHARAN AFRICA, LATIN AMER. & CARIB, C.W. OF IND. STATES, WESTERN EUROPE, NEAR EAST, BALTICS, NORTHERN AMERICA Indications: Vous pourrez par exemple, Pour la question 6 : a) Créer une multimap dans laquelle vous stockerez les entreprises avec comme clé leur pays d’appartenance. b) Rechercher et afficher toutes les occurrences d’une clé (nom d’un pays). Pour la question 7 : En considérant « M_E » comme la map créée à la question 1 et « MM_P », la multimap créée à la question 2. Solution avec utilisation de Map+Multimap Solution avec utilisation de Map+Multimap+ List a) Saisir la région où s’effectuera la a) Saisir la région où s’effectuera la recherche. recherche. b) Rechercher dans « MM_P » tous les b) Rechercher dans « MM_P » tous les pays situés dans la région entrée et pays situés dans la région entrée et les stocker dans une map MP (clé = Nom_du_Pays). c) Stocker les données de « M_E » dans c) Stocker les données de « M_E » dans une multimap une multimap MM_E dont la clé est le pays MM_E dont la clé est le pays d’appartenance. d’appartenance. d) Créer une map M_E2 d) Créer une list L dans dans laquelle on stockera toutes les laquelle on stockera toutes les entreprises appartenant à la région entreprises appartenant à la région entrée sur base de leur rang en 2015 entrée. (clé = Rank_2015). e) Afficher les 5 premières sur base de e) Afficher les 5 premières sur base de leur rang en 2015. leur rang en 2015. Notez que dans la solution utilisant les Map+Multimap, nous utiliserons judicieusement le fait que les maps et multimap sont « automatiquement » triées par rapport à leur clé. Aussi, après d), les 5 premières entreprises occuperont les 5 premières places dans le conteneur. Par contre pour la List, après d), il sera nécessaire de définir un bool operator < () afin d’utiliser la méthode « .sort() » pour effectuer un tri sur le rang en 2015. Projet IG Charleroi Umons FPMs : Service d’Informatique 2018-19 5 Mohammed Benjelloun
Vous pouvez aussi lire