Problème de tabeau dans un code orienté objet

Signaler
Messages postés
13
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2009
-
Messages postés
13
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2009
-
Bonsoir, je débute actuellement en C++ orienté objet et je suis bloqué avec ce programme qui doit réaliser un tableau d'élèves, prendre leur moyenne et faire la moyenne de tous cela!

J'ai déjà réalisé le programme suivant :




#include "stdafx.h"
#include <stdio.h>
#include
#include <string>
using namespace std;

class Eleve
{
private :
    string nom;
    float note;
public :
    void init(string pnom, float pnote);  //initialisation
    string getNom();                    //retourne le nom de l'élève
    float getNote();                        //retourne la note de l'élève
};

class TabEleves
{
    private :
        Eleve ele[36];                        //les élèves mémorisés
        int nb;                                //nombre d'élèves mémorisés
    public :
        void init();                        //initialisation
        int getNb();                        //retourne le nombre d'élèves mémorisés
        void ajouter(Eleve ele);            //ajoute un élève dans le tableau
        Eleve valeur(int i);                //retourne l'élève mémorisé à l'indice i
        void supprimer(int i);                //supprime l'élève mémorisé à l'indice i fin classe
};

void saisirEleve(Eleve & eleve); // prototypage de la procédure
void resultats(Eleve ele[36]);

void Eleve::init(string pnom, float pnote)
{
    nom = pnom;
    note = pnote;
}

string Eleve::getNom()
{
    return nom;
}

float Eleve::getNote()
{
    return note;
}

void TabEleves::init()
{    
    nb = 0;
    int i;
    Eleve elacon;
    elacon.init("",0);    
    for (i = 0; i < 35; i++)
    {
        ele[i] = elacon;
    }
}

int TabEleves::getNb()
{
    return nb;
}

void TabEleves::ajouter(Eleve eleve)
{
     ele[nb] = eleve;
     nb++;
}

Eleve TabEleves::valeur(int i)
{
    return ele[i];
}

void TabEleves::supprimer(int i)
{
    //ele[i] = 0;
}

void saisirEleve(Eleve & eleve) // Implementation de la procedure.
{
    string pnom;
    float pnote;
    cout << "veuillez saisir le nom de l'élève" << endl;
     cin >> pnom;
    cout << endl << "veuillez saisir la note de l'élève" << endl;
    cin >> pnote;
    cout << endl;
    eleve.init(pnom, pnote);
}

void resultats(TabEleves tabele)
{
    float notelaplusbasse = 0;
    float notelaplushaute = 0;
    string nomdufaible;
    string nomdufort;
    float moyenne = 0;
    int j = 0;
    int i;

    for (i=0; i < 35; i++)
    {
        Eleve tabEle1 = tabele.valeur(i);
        float note1 = tabEle1.getNote();

        if (note1 < notelaplusbasse)
        {

            notelaplusbasse = note1;
            nomdufaible = tabEle1.getNom();
        }
        if (note1 > notelaplushaute )
        {
            notelaplushaute = note1;
            nomdufort = tabEle1.getNom();
        }
        moyenne = note1 + moyenne;
        j++;
    }
    moyenne = moyenne / j;
    cout << "Elève le plus nul    :" << notelaplusbasse << " : " << nomdufaible << endl;
    cout << "Elève le plus fort   :" << notelaplushaute << " : " << nomdufort << endl;
    cout << "Moyenne de la classe :" << moyenne << endl;
}

void main (void)
{
    Eleve eleve;
    TabEleves tabele;
    saisirEleve(eleve);
    tabele.ajouter(eleve);
    resultats(tabele);
    system("pause");
}

Le problème, après recherche, se situe au niveau de cette partie du code (je pense) :


void TabEleves::ajouter(Eleve eleve)

{

     ele[nb] = eleve;

     nb++;

}





J'ai tenté quelques modifications, mais rien n'y fait, la boucle ne veut pas se mettre en route...

Pourrais-je, s'il vous plait, avoir votre avis sur la question?

2 réponses

Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Tu dois initialiser nb dans le constructeur.
Messages postés
13
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2009

C'est bon, ça a fini par marché, merci beaucoup pour le conseil ^^.