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 :

probléme de liste


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut probléme de liste
    Bonjour,

    Je dois gérer un gestionnaire de comptes en c++...

    J'ai créé une classe Compte et dans mon main, j'initialise une liste de compte

    Le probléme est que je ne sais pas comment sélectionner le n-ième élément de ma liste afin d'effectuer des méthodes dessus...

    Quelle est le fonction à utiliser?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si tu veux faire des accès indicés, utilise plutôt un tableau (std::vector). Jette un oeil à la FAQ si tu ne sais pas l'utiliser.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    j'ai déja essayer avec un tableau dynamique mais j'ai plus de problèmes qu'avec une liste, alors que là, il n'y a que ça qui bloque...

    La fonction liste.begin() ne peut pas s'utiliser avec un indice??

  4. #4
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    j'ai déja essayer avec un tableau dynamique mais j'ai plus de problèmes qu'avec une liste, alors que là, il n'y a que ça qui bloque...
    Quels problèmes ?

    Une liste (qui est une liste chaînée) n'est pas la structure de données la plus efficace pour effectuer des accès directs aux éléments. Le "vector" est la structure qu'il te faut (cf post de Laurent Gomila).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    quand j'utilise un tableau, j'arrive bien à faire mon appel à mes méthodes, mais quand j'exécute le programme, au premier appel de méthode, il plante

  6. #6
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    au premier appel de méthode, il plante
    Peux-tu être plus précis ? Quelle méthode, quel type de plantage ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    une méthode que j'ai initialisée dans ma classe Compte, je lui passe un Compte et un double en paramètres et elle me retourne un double..

    et quand le programme plante, il arréte tou san me mettre de message d'erreur, juste un rapport a envoyer ou pas (comme pour tout plantage)

  8. #8
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 46
    Par défaut
    C'est assez simple pourtant, et dans ton cas, le mieux est bel et bien un vector, comme le dit Laurent Gomila.

    Un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <vector>
     
    int main()
    {
        vector<Compte> comptes;
        comptes.push_back(&new Compte(/*paramètres*/)); //ajout d'1 compte
        comptes.push_back(&new Compte(/*paramètres*/)); //ajout d'1 autre compte
     
        Compte compte1 = comptes[0]; //accés au premier compte
        Compte compte2 = comptes[1]; //accés au deuxieme compte
     
        return 0;
    }
    Hope it helps.

  9. #9
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    vector<Compte> comptes;
    comptes.push_back(&new Compte(/*paramètres*/)); //ajout d'1 compte
    comptes.push_back(&new Compte(/*paramètres*/)); //ajout d'1 autre compte
    Ce code n'a aucune chance de compiler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vector<Compte> comptes;
    comptes.push_back(Compte(/*paramètre*/);

    Peux-tu poster ton code stp djey08 ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    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
     
    int main(int argc, char *argv[])
    {
        int choix, nbComptes, operation, sens;
        list <Compte> tab ;
        //Compte* tab ;
        Compte c ;
        double valeur, solde, s ;
        string libelle, nom, num, fin ;
     
        cout<<"Bienvenue dans le gestionnaire de compte"<<endl ;
        cout<<"Combien de comptes voulez-vous gerer ?"<<endl ;
        cin>>nbComptes ;
     
        //tab = new Compte[nbComptes] ;
     
        for (int i = 0 ; i < nbComptes ; i++)
        {
            cout<<"A qui appartient le compte ?"<<endl ;
            cin>>nom ;
            cout<<"Quel est le numero du compte ?"<<endl ;
            cin>>num ;
            cout<<"quel est le solde du compte ?"<<endl ;
            cin>>solde ;
            tab.push_back (Compte (nom, num, solde)) ;
            //tab[i] = Compte (nom, num, solde) ;
            cout<<endl ;
        }
     
        for (list<Compte>::iterator j = tab.begin () ; j != tab.end() ; j++ )
        {
            cout<<"nom : "<<j->DonneProprio()<<endl ;
            cout<<"numero : "<<j->DonneNum()<<endl ;
            cout<<"solde : "<<j->DonneSolde()<<" euros"<<endl ;
            cout<<endl ;
        }
     
        /*for (int j = 0 ; j < nbComptes ; j++)
        {
            cout<<"nom : "<<tab[j].DonneProprio()<<endl ;
            cout<<"numero : "<<tab[j].DonneNum()<<endl ;
            cout<<"solde : "<<tab[j].DonneSolde()<<" euros"<<endl ;
            cout<<endl ;
        }*/
     
        do
        {
            cout<<"Gerer le compte de :"<<endl ;
            int i = 1;
            for (list<Compte>::iterator j = tab.begin () ; j != tab.end() ; j++ )
            {
                cout<<i<<") "<<j->DonneProprio()<<endl ;
                i++ ;
            }
     
            /*for (int j = 0 ; j < nbComptes ; j++)
            {
                cout<<i<<") "<<tab[j].DonneProprio()<<endl ;
                i++ ;
            }*/
     
            cin>>choix ;
            cout<<"Quelle operation souhaitez-vous effectuer?"<<"\n"<<"1) Credit"<<"\n"<<"2) Debit"<<"\n"<<"3) Virement"<<endl ;
            cin>>operation ;
     
            //list<Compte>::iterator j = tab.begin() ;
     
            if (operation == 1)
            {
                cout<<"Saisir le libelle du credit : "<<endl ;
                cin>>libelle ;
     
                cout<<"Saisir la valeur du credit : "<<endl ;
                cin>>valeur ;
     
                c = Compte (tab[i-1].DonneProprio(), tab[i-1].DonneNum(), tab[i-1].DonneSolde()) ;
                s = c.CreditDebit (c, valeur) ;
                tab.begin()->ModifSolde(s) ;
                //tab[i-1].ModifSolde (s) ;
                cout<<"nouveau solde :"<<tab[i-1].DonneSolde()<<endl ;
            }

    par contre la j'ai les deux façons un peu mélangées...

  11. #11
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Tu peux utiliser les vecteurs comme les listes, à savoir avec des itérateurs. Par ailleurs, pour éviter le plantage, vérifie les entrées : tab[i-1] n'est pas toujours défini (i=0 => aïe).
    Par ailleurs, il existe des fonction de recherche dans un vecteur (find) que tu peux utiliser.

    Bon courage.

  12. #12
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 46
    Par défaut
    Citation Envoyé par Patriarch24
    Ce code n'a aucune chance de compiler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vector<Compte> comptes;
    comptes.push_back(Compte(/*paramètre*/);
    houlala oui, je me suis embrouillé!!

Discussions similaires

  1. [MySQL] Problème de liste déroulante dynamique
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 03/03/2006, 16h38
  2. Problème de liste déroulante et js...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/03/2006, 10h44
  3. [MySQL] Problème de listes déroulantes liées avec requêtes sql
    Par richton95 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/12/2005, 16h04
  4. Problème avec liste déroulante
    Par Invité dans le forum IHM
    Réponses: 2
    Dernier message: 14/12/2005, 21h04
  5. Problème avec listes liées entre elles et bouton "précé
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/08/2005, 15h10

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