Programmation Objet & - Algorithmique UMONS - Faculté Polytechnique Service d'Informatique - Moodle

La page est créée Jessica Lopez
 
CONTINUER À LIRE
Programmation Objet & - Algorithmique UMONS - Faculté Polytechnique Service d'Informatique - Moodle
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
Programmation Objet & - Algorithmique UMONS - Faculté Polytechnique Service d'Informatique - Moodle
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