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 :

Programmation en langage c++


Sujet :

C++

  1. #1
    Membre habitu�
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Mai 2023
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : C�te d'Ivoire

    Informations professionnelles :
    Activit� : ETUDIANT
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par d�faut Programmation en langage c++
    salut a tous voici mon projet en c++ quelqu'un peut me donner des id�es

    Cr�e en c++ une classe permettant d'implementer un graphe selon le model suivant:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class graph 
    {
    private :
    int rechercher_indice_sommet(string id);
    public:
    int creer_sommet(string id);
    int creer_arret(string u, string v,double pds=0);
    in enregistrer(string fichier);
    int ouvrir(string fichier);
    };
    sachant que les methodes creer_sommeet ;creer_arret doivent permettre de cr�er respectivement les sommets et les ar�tes (pond�r�es ou non) de toute instance de cette classe. La m�thode rechercher_indice_sommet permettant de v�rifier l'existence d'un sommet et de retrouver son indice le cas �ch�ant. La m�thode enregistrer doit permettre de sauvegarder les �l�ments du graphe (sommets + ar�tes) dans un fichier texte ou binaire. Tandis que la m�thode enregistrer permettra quant � elle, de recr�er les �l�ments d'un graphe � partir du contenu du fichier fourni en param�tre


    Selon votre groupe vous devez ajouter � la classe Graph une m�thode court chemin dijkstra(string u, string v ) ;court_chemin_bellman_Ford (string u, string v), court_chemin_floyd warshall(string u, string v), permettant de rechercher respectivement le plus court chemin entre deux sommets selon les algorithmes de Dijkstra, de Bellman-Ford et de Floyd-Warshall. Ne pas oublier d'impl�menter �galement les m�thodes parcours_profondeur() et parcours largeur () permettant de parcourir le graphe respectivement en profondeur*et*en*largeur.

  2. #2
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    La d�finition de la classe "graph" sens bon le "C with class" plut�t que le C++ moderne (int en valeur de retour, manque "const", une using namespace std implicite, etc...).
    Est-ce un biais de votre formation qui commence par du C puis du C++ ou un truisme de votre prof pour le C et non le C++ ?

    Concept de base de l'informatique : diviser les "gros" probl�mes en probl�mes plus simples.

    Commencez par choisir une mani�re de repr�senter un graphe de mani�re souple (donc pas performant) pour ne pas �tre bloqu� plus tard.
    (Moi, strat�gie de faignant, je chercherais une biblioth�que d�di�e, mais peut-�tre pas tr�s pertinent pour votre apprentissage)

    Les algorithmes utilis�s ont une influence non n�gligeable sur l'efficacit� d'une repr�sentation d'un graphe ou pas.
    Il vous faut donc connaitre un minimum l'algorithme � impl�menter pour savoir si la repr�sentation du graphe lui convient ou pas.
    (Donc r�fl�chissez � 2 fois avant de pomper le travail d'un autre groupe. )

  3. #3
    Membre habitu�
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Mai 2023
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : C�te d'Ivoire

    Informations professionnelles :
    Activit� : ETUDIANT
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par d�faut
    Mais vous pouviez me donner un exemplaire de code source de l'impl�mentation des graphes en c++

  4. #4
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Bin, si vous voulez pomper sans comprendre, prenez le code source des dites biblioth�ques.
    Sinon, r�pondez aux questions qu'on vous pose.

  5. #5
    Membre habitu�
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Mai 2023
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : C�te d'Ivoire

    Informations professionnelles :
    Activit� : ETUDIANT
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par d�faut
    Citation Envoy� par bacelar Voir le message
    Bin, si vous voulez pomper sans comprendre, prenez le code source des dites biblioth�ques.
    Sinon, r�pondez aux questions qu'on vous pose.

    ok posez les questions je vais vous repondre

  6. #6
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Quelle algo ?
    Quelles structures de donn�es ma�triser-vous ?
    Avez-vous droit � des biblioth�ques d�di�es ?
    Si oui, les quelles ?

    Avez-vous d�j� r�fl�chi � la structuration des donn�es ?
    Si oui, quel le r�sultat de cette r�flexion ?

    Avec cette structure de donn�es, avez-vous tent� d'impl�menter les algorithmes ?
    Si oui, qu'est-ce qui coince ?

  7. #7
    Membre habitu�
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Mai 2023
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : C�te d'Ivoire

    Informations professionnelles :
    Activit� : ETUDIANT
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par d�faut
    Citation Envoy� par bacelar Voir le message
    Quelle algo ?
    Quelles structures de donn�es ma�triser-vous ?
    Avez-vous droit � des biblioth�ques d�di�es ?
    Si oui, les quelles ?

    Avez-vous d�j� r�fl�chi � la structuration des donn�es ?
    Si oui, quel le r�sultat de cette r�flexion ?

    Avec cette structure de donn�es, avez-vous tenter d'impl�menter les algorithmes ?
    Si oui, qu'est-ce qui coince ?

    ok moi suis un debutant dans la programmation c'est un projet qui m'a ete donner en classe pour implementer les graphes en langage C++
    et puisse que je n'ai pas beaucoup de notion sur le langage donc c'est pourquoi je demande de l'aide
    Si vous comprenez l'exercice expliquer moi comment on fait
    pour les biblioth�ques ils nous a demand� d'utiliser les biblioth�ques: string,vector,iostream,fstream avec les headers
    et on doit utiliser la structure des CLASSES

  8. #8
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Il faut utiliser des sites comme https://cplusplus.com/ ou https://en.cppreference.com/w/

    Par exemple, la classe std::string sa documentation

    1 graphe en informatique est compos� d'1 liste de sommets et d'1 liste d'ar�tes (2 sommets).
    Dans ton exercice :
    • 1 sommet est identifi� par 1 identifiant de type "cha�ne de caract�res" (<- ce n'est pas id�al, mais pourquoi pas)
    • comme 1 ar�te peut �tre pond�r�e, je ne pense pas que tu puisses utiliser std::pair. Tu peux �ventuellement faire 1 ar�te "paire de sommets", et ensuite 1 paire "ar�te, poids"


    Donc tu peux commencer par faire 1 petite structure pour 1 ar�te ("edge" en anglais).
    Par exemple, avec tous les attributs en public, pas d'accesseur/ mutateur (on appelle cela 1 dto ["Data Transfer Object"] ou 1 objet valeur ["value object"[)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct t_one_edge {
    public:
     
        t_one_edge() : weight(0.0) {}
     
     
    public:
     
         std::string u;
         std::string v;
         /*unsigned*/ double weight;
    };
    �dit: ici, 1 ar�te est compos�e de 2 identifiants de sommets u et v (et d'1 poids).
    Mais on pourrait aussi � la place des 2 identifiants "chaine de caract�res", stocker les indices des 2 sommets dans la liste des sommets du graphe. Mais cela cr�e des indirections, ce qui peut �tre "complexe" � g�rer pour 1 d�butant.

    Ainsi:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    class t_graph {
    // ...
     
    private:
     
        std::vector<std::string> list_vertices;
        std::vector<t_one_edge>  list_edges;
    };

    La recherche est assez triviale. Le retour de l'indice n'est pas g�nial, parce que 0 veut dire soit faux soit premier sommet
    retourne la taille de list_vertices si non trouv�.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    size_t t_graph::find_vertice_index(string id) {
        if ( id.empty() ) { return list_vertices.size(); }
     
        size_t index, nb_vertices;
        bool no_found;
     
        no_found = true;
     
        for(index=0, nb_vertices=list_vertices.size(); (no_found && (index < nb_vertices)); ++index) {
            if (id == list_vertices[index]) { no_found = false; }
        }
     
        return index;
    }
    Tu peux utiliser les it�rateurs, les "for range", 1 lambda, std::find, �

    Mais si tu d�butes, il faut regarder ton cours et y aller progressivement

  9. #9
    Membre habitu�
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Mai 2023
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : C�te d'Ivoire

    Informations professionnelles :
    Activit� : ETUDIANT
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par d�faut
    Citation Envoy� par foetus Voir le message
    ...


    svp pouviez vous expliquer vos ligne de code????????

  10. #10
    Membre habitu�
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Mai 2023
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : C�te d'Ivoire

    Informations professionnelles :
    Activit� : ETUDIANT
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par d�faut
    Voici ce que j'ai commencer mais je suis bloquer si vous pouviez m'aider

    en HEADER VOICI MON CODE:



    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
    #ifndef GRAPH_H_INCLUDED
    #define GRAPH_H_INCLUDED
    #include <iostream>
    #include <string>
    #include <vector>
     
    using namespace std;
    class Graph
    {
    private:
        int nbresommets;
        int rechercher_indice_sommet(string id);
     
    struct arete
    {
        string vers;//PARTIR VERS
        double pds;//POIDS
    };
    struct sommet
    {
        string id;
        vector <struct arete> aretes;
    };
    vector<struct sommet> graph;
    public:
        int creer_sommet(string id);
        int creer_arete(string u,string v,double pds=0);
        bool existearc(string u,string v);//rnvoie vraie ou fausse s'il existe un arc entre deux sommets
    //    parcours_en_largeur();
    //    parcours_en_profondeur();
        int enregistrer(string fichier);
        int ouvrir(string fichier);
    };
     
    #endif // GRAPH_H_INCLUDED
    en graph.cpp
    voici le code
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    #include <iostream>
    #include "graph.h"
    #include <string>
    #include <vector>
     
    using namespace std;
     
    int Graph::rechercher_indice_sommet(string id)
    {
        vector <struct sommet>::iterator i;
        int idx=0 ;
           for (i=graph.begin();i!=graph.end();++i)
           {
               if((*i).id==id)
                    return idx;
               idx++;
           }
           return -1;
     
    }
    int Graph::creer_sommet(string id)
    {
        if(rechercher_indice_sommet(id)==-1)
        {
            struct sommet v;
            v.id=id;
            graph.push_back(v);
        }
        else return -1;
    return graph.size();
    }
    Graph::creer_arete(string u,string v,double pds)
    {
        int idx_1=rechercher_indice_sommet(u);
        int idx_2=rechercher_indice_sommet(v);
        if(idx_1!=-1 && idx_2!=-1)
        {
            struct arete a;
            a.vers=v;
            a.pds=pds;
            graph[idx_1].aretes.push_back(a);
            return graph[idx_1].aretes.size();
        }
        return -1;
    }
     
    //parcours_en_largeur()
    //{
    //    FILE F;
    //    int n;
    //    bool *visite=new bool[n+1];
    //    cout <<"Entrez le nombre de sommet du graphe"<<endl;
    //    cin>>n;
    //    for(int i=1;i<=n;++i)
    //        visite[i]=false;
    //    F.ajouefile(graph[0]);
    //    visite[graph[0]]=true;
    //    cout <<"resultat du parcours en largeur"<<endl;
    //    cout<<"en commencent a partir du sommet "<<s<<" ";
    //    cout<<"**************************************"<<endl;
    //    while(!F.filevide())
    //    {
    //        string k=F.enleverfile();
    //        cout <<" "<<endl;
    //        for(int j=1;j<=n;++j)
    //            if(existearc(k,j)&&visite[j]==false)
    //        {
    //            F.ajouerfile(j);
    //            visite[j]=true;
    //        }
    //    }
    //}
    //
    //void Graph::parcours_en_profondeur()
    //{
    //    Pile P;
    //    bool *visite=new bool[n+1];
    //    int i;
    //    for(i=1;i<=n;++i)
    //        visite[i]=false;
    //    P.empiler(s);
    //    visite[s]=true;
    //    cout <<"parcours en profondeur en commencant par"<<s<<" "<<endl;
    //    while (!P.Pilevide())
    //    {
    //        int k=P.depiler();
    //        cout<<k<<endl:
    //            for(i=n;i>=1;--i)
    //                if(existearc(k,i)&&visite[i]==false)
    //            {
    //                P.empiler(i);
    //                visite[i]=true;
    //
    //            }
    //    }
    //    cout <<endl;
    //}
    et dans le programme principal
    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
    37
    38
    39
    40
    41
    #include <iostream>
    #include <string>
    #include <vector>
     
    #include "graph.h"
     
    using namespace std;
     
    int main()
    {
        int nbresommets;
        vector<struct sommet> graph;
        cout <<"combien de sommets voulez-vous créer :";
        cin>>nbresommets;
        cout<<" "<<endl;
        for(int i=1;i<=nbresommets;++i)
        {
            cout <<"entrez l'ID du sommet" <<i<<":"<<endl;
            string id;
            cin>>id;
            int j=creer_sommet(id);
        }
            for(int i=0;i<=graph.size();++i)
        {
            string de=graph[i].id;
            cout <<"le sommet "<< de << " a combien de voisins?"<<endl;
            int nbrevoisins;
            cin>>nbrevoisins;
            cin.ignore();
            for(int i=0;i<nbrevoisins;++i)
            {
                cout <<"entrez l'ID su voisin"<<i+1<< " :";
                string vers;
                getline(cin,vers);
                if(creer_arete(de,vers)==-1)
                    cout<<"le voisin " << vers<< " n'existe pas";
            }
        }
     
        return 0;
    }

  11. #11
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Avec votre approche o� les sommets contiennent les arr�tes, une arr�te qui part du sommet A vers le sommet B ne sera pas la m�me que l'arr�te qui part du sommet B vers le sommet A.
    Dans certain type de graphes c'est pas g�nant, m�me obligatoire pour les graphes "� arr�tes non sym�triques".
    Mais je ne vois pas de trace de ce type de probl�matique dans votre sujet.
    Il est possible de maintenir la sym�trie avec une couche d'abstraction mais j'ai du mal � y voir un int�r�t.

    Dans l'exemple de @foetus, il n'y pas cette notion de sommets contenant des arr�tes.
    C'est le graphe qui contient les 2 et qui peut maintenir la coh�rence entre les groupes, les sommets et les arr�tes.

  12. #12
    Membre habitu�
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Mai 2023
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : C�te d'Ivoire

    Informations professionnelles :
    Activit� : ETUDIANT
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par d�faut
    Donc vous ne pouvez pas m'aider ?

  13. #13
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    ???
    Vous voulez qu'on le fasse � votre place ce projet ?

    @foetus vous a donn� une base "saine", pas complexe, et j'ai donn� ce qui me semble la principale faille dans votre conception.

    Qu'est-ce qui n'est pas clair dans le code de @foetus ?

  14. #14
    Membre habitu�
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Mai 2023
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : C�te d'Ivoire

    Informations professionnelles :
    Activit� : ETUDIANT
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par d�faut
    Merci � vous

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. probleme sur un programme en langage c
    Par haddad dans le forum D�buter
    R�ponses: 24
    Dernier message: 17/12/2007, 08h36
  2. programmation delphi langage pascal:lien de parent�
    Par christt6789 dans le forum Delphi
    R�ponses: 2
    Dernier message: 23/05/2007, 15h48
  3. R�ponses: 13
    Dernier message: 02/01/2006, 11h08
  4. programme en langage c
    Par nivine dans le forum C
    R�ponses: 18
    Dernier message: 08/10/2005, 10h34
  5. Programme en langage c et asm pour PowerPC
    Par punkybreizh dans le forum Autres architectures
    R�ponses: 4
    Dernier message: 07/04/2005, 13h58

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