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
    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 confirm�
    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 : 33
    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
    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 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    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 026
    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 �m�rite

    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
    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 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    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 026
    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 confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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).

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    2
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    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 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    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 026
    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