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 :

tableau dynamique en arguments


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Points : 5
    Points
    5
    Par défaut tableau dynamique en arguments
    Bonjour à tous,

    Je débute en c++ et travaille un peu avec les tableaux dynamiques et les fonctions.

    Je voudrais faire un programme me permettant d'encoder, de supprimer le dernier ou d'afficher des élèves. Cela reste simple pour l'instant, j'y vais progressivement pour bien essayer de comprendre.

    J'ai le code suivant, mais il ne fonctionne pas. J'arrive a rentrer des noms d'élèves, mais je n'arrive pas à les entrer dans le tableau.

    Merci pour votre aide.

    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
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    void encode_eleve(vector<string> eleves)
    {
        string nom;
        cout << "encoder un eleve "; cin >> nom;
        eleves.push_back(nom);
        cout << endl << " taille du tableau "<< eleves.size();
     
    }
    void supprime_eleve(vector<string> eleves)
    {
         eleves.pop_back();
         cout << "le dernier eleve a ete supprime " << endl;
    }
    void affiche_eleve(vector<string> eleves)
    {
        for (int i=0; i< eleves.size();i++)
        {
        cout << "eleve numero " << i << "  " << eleves[i];
        }
    }
    int main()
    {
        vector <string> eleves;
        int choix (0);char rep ('o');
        string nom;
        while (rep=='o')
        {
     
        cout << "bonjour que voulez-vous faire ? " << endl << endl;
        cout << "1. encoder des eleves  " << endl;
        cout << "2. supprimer des eleves " << endl;
        cout << "3. afficher des eleves " << endl;
        cin >> choix;
     
        while (choix <1 || choix >3)
        {
        cout << "veuillez introduire un numéro correct "; cin >> choix;
        }
        if (choix==1)
        {
            encode_eleve(eleves);
     
        }
        if (choix==2)
        {
            supprime_eleve (eleves);
     
        }
        if (choix==3)
        {
            affiche_eleve(eleves);
     
        }
        cout << "Voulez-vous encore faire une opération ?  (o/n)"; cin >> rep;
        }
     
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    C'est parce que tes fonctions travaillent à chaque fois sur une copie du vecteur, étant donné qu'il est passé par valeur. Renseigne-toi sur le passage par référence en C++.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Points : 5
    Points
    5
    Par défaut trouvé
    Bonjour merci pour votre réponse,

    je vais consulter les références, mais entre temps, j'avais trouvé un moyen d'y arriver. Je ne sais pas s'il est très orthodoxe, mais il fonctionne. Je suis en train de voir pointeurs et références. j'arriverais peut-être à faire ce programme plus facilement par la suite.

    A bientôt

    Merci

    Olivier
    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
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    string encode_eleve(vector<string> eleves)
    {
        string nom;
        cout << "encoder un eleve "; cin >>nom;
        return nom;
     
    }
    vector <string> supprime_eleve(vector<string> eleves)
    {
         eleves.pop_back();
         cout << "le dernier eleve a ete supprime " << endl;
         return eleves;
    }
    void affiche_eleve(vector<string> eleves)
    {
        for (int i=0; i< eleves.size();i++)
        {
        cout << "eleve numero \t" << i+1 << "  " << eleves[i]<< endl;
        }
    }
    int main()
    {
        vector <string> eleves;
        int choix (0);char rep ('o');
        string nom;
        while (rep=='o')
        {
     
        cout << "bonjour que voulez-vous faire ? " << endl << endl;
        cout << "1. encoder des eleves  " << endl;
        cout << "2. supprimer des eleves " << endl;
        cout << "3. afficher des eleves " << endl;
        cin >> choix;
     
        while (choix <1 || choix >3)
        {
        cout << "veuillez introduire un numéro correct "; cin >> choix;
        }
        if (choix==1)
        {
            nom= encode_eleve(eleves);
            eleves.push_back(nom);
     
        }
        if (choix==2)
        {
            eleves=supprime_eleve (eleves);
     
        }
        if (choix==3)
        {
            affiche_eleve(eleves);
     
        }
        cout << "Voulez-vous encore faire une opération ?  (o/n)"; cin >> rep;
        }
     
    }

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Là ça reste incorrect, mais surtout dans le cas actuel encode_eleve() accepte un paramètre dont elle ne fait rien!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour Olivier,

    sais-tu que tu peux configurer ton compilateur pour qu'il t'aide à trouver ces petites erreurs qui ont un grand impact. Pour chacune de ces erreurs ton compilateur te dira : "He mec ! tu prend un paramètre et tu ne l'utilises même-pas ... regarde, *ici*". On ne s'en passe plus.

    Comment activer ces warnings ? c'est compilateur-dépendant.


    Je te conseille vivement de prendre l'habitude de prêter attention et de corriger tous tes warnings. C'est une bonne habitude, et ça permet de repérer plus tôt des erreurs.
    -- Yankel Scialom

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Octobre 2015
    Messages : 25
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    Il faut que tu passe tes vecteurs en référence.
    Pour cela, il faut utiliser le & devant le nom de tes arguments.

    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
     
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    void encode_eleve(vector<string> &eleves) {
      string nom;
      cout << "encoder un eleve "; cin >> nom;
      eleves.push_back(nom);
      cout << endl << " taille du tableau "<< eleves.size();
    }
     
    void supprime_eleve(vector<string> &eleves) {
      eleves.pop_back();
      cout << "le dernier eleve a ete supprime " << endl;
    }
     
    void affiche_eleve(const vector<string> &eleves) {
      for (int i=0; i< eleves.size();i++) {
        cout << "eleve numero " << i << "  " << eleves[i];
      }
    }
     
    int main() {
      vector <string> eleves;
      int choix (0);char rep ('o');
      string nom;
     
      while (rep=='o') { 
        cout << "bonjour que voulez-vous faire ? " << endl << endl;
        cout << "1. encoder des eleves  " << endl;
        cout << "2. supprimer des eleves " << endl;
        cout << "3. afficher des eleves " << endl;
        cin >> choix;
     
        while (choix <1 || choix >3) {
          cout << "veuillez introduire un numéro correct "; cin >> choix;
        }   
        if (choix==1) {
          encode_eleve(eleves);
        }   
        if (choix==2) {
          supprime_eleve (eleves);
        }   
        if (choix==3)
        {   
          affiche_eleve(eleves);
        }   
        cout << "Voulez-vous encore faire une opération ?  (o/n)"; cin >> rep;
    }
    Ce code fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. récupérer la memoire et tableau dynamique
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 06/01/2003, 08h02
  3. AFFICHER UN TABLEAU DYNAMIQUE
    Par ghassenus dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2002, 14h19
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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