IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

programme en c++


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 35
    Points : 28
    Points
    28
    Par défaut programme en c++
    Bonjour,
    j'ai un fichier txt contenant deux colonnes avec des noms de médicament. Chaque ligne recense une interaction connue entre 2 médicaments en listant les 2 médicaments concernés.
    Il faut que je crée un programme qui : lorsque je saisis le nom d’un médicament répertorié dans la première colonne du premier fichier, vous renvoie le nom des médicaments avec lesquels il est connu pour interagir (contenus dans la deuxième colonne).

    Est ce que quelqu'un pourrais m'aidez s'il vous plait?

    Bonne journée

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Une simple std::unordered_multimap devrait faire l'affaire.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    D'accord, je vais essayer de comprendre cette fonction
    Merci

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    C'est un peu difficile de te donner des conseils sans faire l'exercice à ta place (ce n'est certainement pas ce que tu souhaites, hein?).

    Pour la lecture d'un fichier en c++, il faut regarder la classe fstream: http://www.cplusplus.com/reference/fstream/fstream/ qui marche un peu comme std::cin.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::string a, b;
    std::fstream fs("monfichier.txt");
    fs >> a;
    fs >> b;

    Pour ton programme, ce que je suggérerais serait de de faire une map (std::map) entre un médicament et les médicaments avec lesquels il interagit.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::map<std::string, std::vector<std::string>> interaction_map;
    using interaction = std::pair<std::string, std::string> // une ligne du fichier (médicament médicament)
    interaction i;
    while (fs >> i) // à toi de surcharger l'opérateur >>
    {
      interaction_map[i.first].push_back(i.second);
      interaction_map[i.second].push_back(i.first);
    }

    Ensuite pour chaque médicament, tu peux connaître la liste des médicaments avec lesquels il interagit en interrogeant la map:

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    auto doliprane_interactions = interaction_map["doliprane"];

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    stendhal666 : j'essai de comprendre et de mettre en application ce que tu m'a montré.

    Voici le code que je suis en train de taper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <map>
    #include <vector>
     
    using namespace std;
     
    int main()
    {	string a, b;
    	ifstream fichier("drugbank_22_02_2012.txt", ios::in); 
     
            if(fichier)
    {
            string ligne;
            while(getline(fichier, ligne))
            {
                    cout << ligne << endl;
            }
    }
     
            else
                    cerr << "Impossible d'ouvrir le fichier !" << endl;
            fichier >> a;
            fichier >> b;
     
            map<string, vector<string>> interaction_map;
            string i;
    	using interaction=pair<string,string>interaction i;
    	while (fichier>i){
    	    	interaction_map[i.first].push_back(i.second);
    	    	interaction_map[i.second].push_back(i.first);
    		}
            return 0;
        }
    la lecture du fichier marche sans problème mais la suite bloque et j'ai vraiment d mal à comprendre pourquoi. j'ai essayer d'identifier dans la map les string en string a et b ou de définir i comme une string ou un int...
    Je n'ai pas vu cette fonction en cours et j'avoue que je me mélange un peu les pinceau avec les infos que tu m'a donné et celles que je trouve sur le net en plus.

  6. #6
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    @stendhal666, une raison particulière d'utiliser une map<string, vector<string> au lieu d'une(unordered_)multimap<string, string> ?

    @Harmon, i est une pair<string, string>, c'est une interaction entre 2 médicaments (et une ligne de ton fichier).

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    quelle est la différence entre les deux foncions?

  8. #8
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Une map autorise une seule valeur par clef, une multimap autorise plusieurs valeurs pour une seule clef.

    Une map<string, vector<string>> contourne ce problème pour autoriser plusieurs valeurs par clef.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    je crois que je m'en suis sorti avec cette question! Merci

    J'ai une autre question : est ce qu'il est possible de parcourir un répertoire de fichier txt sachant que ce répertoire est dans un dossier sur l'ordi?

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    un répertoire est un dossier.

    Il est possible de le parcourir, mais sans passer par une bibliothèque externe, tu devras le faire d'une manière dépendante de l'OS.

    Ou attendre les premières pré-version du C++17. Il me semble que la toute dernière version de GCC propose cela.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  11. #11
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Pas besoin d'attendre la dernier version de gcc, la 5.2 implémente déjà <filesystem> dans le dossier experimental (#include <experimental/fleystem>).
    Sinon il y a toujours boost.filesystem en attendant (à part le namespace, les différences sont minimes, voir nulles).

  12. #12
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Je croyais que c'était la dernière version. En fait non, il y a une 5.3 depuis début décembre
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  13. #13
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    La dernière version est pour moi la 6, même si toujours en développement .

Discussions similaires

  1. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  2. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  3. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  4. Comment débuter en programmation ?
    Par Marc Lussac dans le forum Débuter
    Réponses: 0
    Dernier message: 08/04/2002, 11h29
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo