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 :

Passage par référence et tableau


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Passage par référence et tableau
    Bonjour,

    En lisant le cours " Programmez avec le langage C++" réaliser par Mathieu Nebra (M@teo21) et Matthieu Schaller (Nanoc), j'ai trouvé un exemple dans le chapitre des tableaux de la première partie.
    Ce petit exemple demande de calculer la moyenne des notes.
    J'ai vu le code complet et j'ai remarqué que tout le code est écrit dans la fonction principale "main", alors je me suis dit pourquoi pas le découper en deux fonctions et demander à l'utilisateur de saisir ses notes à lui, la première fonction est pour saisir ces notes, la deuxième pour calculer leur moyenne.

    Voilà ce que j'ai fait, mais c'a na pas marché

    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>
     
     
    using namespace std;
    void donnerSesNotes (int const& nbrNotes, double& notes[]);
    double calculeMoyenne (int const& nbrNotes, double& notes[]);
     
    int main ()
    {
        int const nbrNotes(6);
        double notes[nbrNotes];
     
        donnerSesNotes(nbrNotes,notes[nbrNotes]);
        double moyenne(calculeMoyenne(nbrNotes, notes[nbrNotes]));
        cout << "votre moyenne est :"<< moyenne << endl;
     
        return 0;
    }
     
    void donnerSesNotes (int const& nbrNotes, double& notes[])
    {
        cout << "Veuillez nous donner vos 5 meilleurs notes"<< endl;
        for (int i=1; i< nbrNotes; i++)
        {
            cout << "note "<< i << ":";
            cin >> notes[i] << endl;
        }
    }
     
    double calculeMoyenne (int const& nbrNotes, double& notes[])
    {
        double moyenne(0);
        for (int i(0); i<nbrNotes; i++)
        {
            moyenne += notes[i];
        }
        moyenne /= nbrNotes;
        return moyenne;
    }

    Veuillez m'aider à trouver les erreurs que j'ai fait, car je suis bloqué là :/.

    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 87
    Points : 56
    Points
    56
    Par défaut
    Salut,

    Y a-t-il une erreur quelconque ?
    Qu'est-ce qui ne va pas ?

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    notes[nbrNotes]Est un double (à la ligne 16)
    double& notes[]Est un tableau de référence vers des doubles (si je me trompes pas).

    Mais il n'est pas utile de passer un tableau par référence car les tableaux ne sont jamais passé par copie, seul le pointeur vers le premier élément du tableau est transmis.

    Il faut donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void fonction( double tab[5] ) // ou double tab[] ou double * tab
    {
    }
     
    double t1[5];
    fonction(t1);

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Il y a aussi le endl ligne 28 qui à mon avis va poser problème.

    --edit--
    J'ajoute qu'en C++, il faut impérativement connaître dès la compilation la taille d'un tableau si on souhaite le passer par référence -- ce qui n'est pas le cas ici. La taille du tableau va être "intégrée" au type, selon une syntaxe un peu étrange :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void f(double (&tableau)[10])
    {
        cout << tab[0] << ... << tab[9];
    }
     
    double tab[10];
    f(tab);

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    En effet, et à la ligne 25, je pense qu'il y a une petite erreur d’inattention (cf ligne 35).

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void donnerSesNotes (int const& nbrNotes, double& notes[]);
    notes est un pointeur vers une reference vers double. ca compile?

    Ca me semble etre un probleme de comprehension sur les rapports entre tableaux et pointeurs. J'ai commis une tentative d'eclaircissement parce que j'en avais assez de donner des explications partielles par manque de temps. J'espere qu'elle peut aider.

    (En passant, passer des int par reference constante, ca ne se fait que si on veut les alias que donnent les references).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonsoir,

    En effet, j'ai fait deux erreurs :
    La première : c'est que j'ai voulu passer un tableau vers une fonction en utilisant une référence, chose qui n'est pas valide en C++. (Merci à Neckara et Jean-Marc.Bourguet)
    La seconde : à la ligne 28 y'a un endl inutile. (Merci à cob59)

    voilà le code correct complet :

    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
     
     
     
    #include <iostream>
    #include <string>
     
     
    using namespace std;
    void donnerSesNotes (int const& nbrNotes, double notes[]);
    double calculeMoyenne (int const& nbrNotes, double notes[]);
     
    int main ()
    {
        int const nbrNotes(6);
        double notes[nbrNotes];
     
        donnerSesNotes(nbrNotes,notes[nbrNotes]);
        double moyenne(calculeMoyenne(nbrNotes, notes[nbrNotes]));
        cout << "votre moyenne est :"<< moyenne << endl;
     
        return 0;
    }
     
    void donnerSesNotes (int const& nbrNotes, double notes[])
    {
        cout << "Veuillez nous donner vos 5 meilleurs notes"<< endl;
        for (int i=1; i< nbrNotes; i++)
        {
            cout << "note "<< i << ":";
            cin >> notes[i];
        }
    }
     
    double calculeMoyenne (int const& nbrNotes, double notes[])
    {
        double moyenne(0);
        for (int i(0); i<nbrNotes; i++)
        {
            moyenne += notes[i];
        }
        moyenne /= nbrNotes;
        return moyenne;
    }
    Et à la fin je remercie tous ceux qui m'ont aidé.
    VIVE DEVELLOPEZ

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Tu as toujours une erreur à la ligne 27 et à la ligne 12.
    Ton code compile mais il te sort un résultat erroné.

    Petit rappel : les tableau commencent à l'indice 0.
    Un tableau de 5 élément a donc des numéro d'élément 0 <= i < 5.

    Sinon, si tu as trouvé toutes les réponses à ton problème, n'oublie pas de mettre ton sujet en "résolu".

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/08/2011, 17h31
  2. passage par référence d'un tableau en parametre de fonction
    Par crazykangourou dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/01/2009, 14h30
  3. Réponses: 4
    Dernier message: 26/12/2005, 17h01
  4. Passage par référence
    Par difficiledetrouver1pseudo dans le forum Langage
    Réponses: 9
    Dernier message: 28/09/2005, 11h17
  5. Problème très rapide de passage par référence
    Par Noxexplorer dans le forum ASP
    Réponses: 2
    Dernier message: 23/06/2005, 10h02

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