Besoin d'aide sur un programme de calcul de moyenne

Signaler
Messages postés
1
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
28 décembre 2008
-
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
bonjour a tous je débute en programmation, je suis en première année de bts iris et j'ai un petit programme a rendre mais j'avoue avoir pas mal de dificultées....

le programme est censé receuillir les notes d'un élève via des vecteurs et ensuite de calculer sa moyenne ( sa a l'air tout bete comme sa^^)
jvous donne directement mon code source, sa devrait mieux vous parler.

voila mon .h :

#ifndef UntClassEtudiantH
#define UntClassEtudiantH
#define NB_NOTES 10
#define NOM_ETUDIANT 15
#include <vcl.h>
//---------------------------------------------------------------------------



class Etudiant {



private :
  char vectnom[NOM_ETUDIANT] ;  // stock le nom de l'élève (15 caractères) 
  double vectnotes[NB_NOTES];   //stock jusqu'a 10 notes de l'élève
  float moyenne ;   // contient la moyene de l'élève (float - précis,rapide.suffisant)
  int compteurNotes ;           // compte le nombre de note obtenu par l'élève



public :
//---------------------.:Constructeur,Destruceur de la class:.---------------





  Etudiant() ;  // Constructeur sans parametre
  ~Etudiant() ;





//-----------------------.:Fonctions lire et écrire nom:.--------------------





  void EcrireNom(char prmNom) ;
  char LireNom(void) ;





//----------------------.:Fonctions Lire et Ecrire moyenne:.-----------------





  void CalculerMoyenne(float prmMoyenne) ;
  float LireMoyenne(void) ;




 



//---------------.:Fonctions Lire et Ecrirevectnotes[NB_NOTES]:.-------------





  void EcrireVectnotes(double prmVectnotes) ;
  double LireVectnotes(void) ;



//-------------------.:Fonctions Lire et Ecrire CompteurNotes:.---------------





  void EcrirecompteurNotes(int prmCompteurNotes) ;
  int LireNbNotes(void) ;





} ;




#endif
--------------------------------------------------------------------------------------








et voila mon .cpp




#pragma hdrstop



#include "UntClassEtudiant.h"
#include <vcl.h>
//---------------------------------------------------------------------------



#pragma package(smart_init)



//----------------------------Constructeur-----------------------------------





Etudiant :: Etudiant(){         // Constructeur sans parametre

  vectnom[NOM_ETUDIANT] = 0 ;  // Code ascii 0 qui équivaut a un caractére nul
  moyenne = -1 ;               // Initialisation a -1 de l'attribut   moyenne
  vectnotes[NB_NOTES] = -1 ;   // Initialistion a -1
  compteurNotes = 0 ;          // Initiatlisation a 0 du compteur
  int i ;



  for( i = 0; i <= NB_NOTES; i++){        //boucle qui inialise le vecteur notes
  vectnotes[i] = vectnotes[NB_NOTES] ;
  }
  for( i = 0; i <= NOM_ETUDIANT ; i++){   //boucle qui inialise le vecteur nom
  vectnom[i] = vectnom[NOM_ETUDIANT] ;
  }
}
//----------------------------Destructeur------------------------------------



Etudiant :: ~Etudiant(){
}
//------------------Fonctions Lire et Ecrire vecteurnom----------------------





char Etudiant :: LireNom(void){
  return vectnom[NOM_ETUDIANT] ;
}
void Etudiant :: EcrireNom(char prmNom){
  vectnom[NOM_ETUDIANT] = prmNom ;
}





//--------------------Fonctions Lire et Calculer moyenne---------------------





  float Etudiant :: LireMoyenne(void){
    return moyenne ;
}
  void Etudiant :: CalculerMoyenne(float prmMoyenne) {
    moyenne = vectnotes[NB_NOTES] / compteurNotes ;
    moyenne = prmMoyenne ;
}
/* Remarque: Risque d'erreur, si j'associe directement a Calculermoyenne une
             valeur quelqconque l'attribut va bien etre modifié mais va instantanément
             changé pour etre egale au vectnotes[NB_NOTES] / compteurNotes
             surtout ke les attributs sont initialisé avec une valeur donc si j'ecrit
             la moyenne via l'appel de la fonction avec un objet sans parametre
             elle va instantanement changé pour etre divisé par un compteur initialisé
             a zero ce qui est problmématique!!*/



/* Remarque : si le vectnotes contient le nb de note recu par léleve pourquoi ne
              pas faire la somme de ces valeurs diviser par la taille du vecteur??
              et donc se passer du compteur! */





//----------------Fonctions Lire et Ecrire CompteurNotes---------------------





  void Etudiant :: EcrirecompteurNotes(int prmCompteurNotes) {
    compteurNotes = prmCompteurNotes ;
// la je peu écrire dans le compteur mais il ne calcul rien, comment faire??
}



  int Etudiant :: LireNbNotes(void) {
    return compteurNotes ;
}





//-------------Fonctions Lire et Ecrire vectnotes[NB_NOTES]------------------



  void Etudiant :: EcrireVectnotes(double prmVectnotes) {
    vectnotes[NB_NOTES] = prmVectnotes ;
}
  double Etudiant :: LireVectnotes(void) {
    return vectnotes[NB_NOTES] ;
}
----------------------------------------------------------------------------------


pour faire tester le bon fonctionnement je déclare un objet sans parametre dans une autre fiche avec lequel j'appel les différentes fonctions lire et écrire et vérifie le résulta attendu avec le déboger.
Seulement impossible dan l'état actuel de compter le nb de notes, j'arrive pas a le coder! et puis jpense avoir des erreurs dans ma fonctions CalculerMoyenne magré que le compilateur ne renvoie aucune erreur.
d'ailleurs j'arrive pas non plus a utiliser mes fonctions, le compilateur me renvoie cette erreur : "structure necessaire sur le coté gache.ou*." (mwa pas comprendre) j'ai essayer différentes façon que voila :

float resultat ;
resultat = objEtudiant.CalculerMoyenne(20) ;
            
EdtSaisieNotes->Text = objEtudiant.EcrireNom("tartempion") ;

Merci a celui qui aura le courage de lire ce pavé et de m'aider!!! (jspr avoir été assez clair)

1 réponse

Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
1
Bon, j'ai pas lu jusqu'à la fin mais déjà il me semble que tes 2 boucles for() sont fausses, non ?

  for( i = 0; i <= NB_NOTES; i++){        //boucle qui inialise le vecteur notes
  vectnotes[i] = vectnotes[NB_NOTES] ;
  }
  for( i = 0; i <= NOM_ETUDIANT ; i++){   //boucle qui inialise le vecteur nom
  vectnom[i] = vectnom[NOM_ETUDIANT] ;
  }

Le fait de mettre le égal revient à compter 11 éléments dans le 1er cas (NB_NOTES + 1) et 16 dans le 2ème cas (NOM_ETUDIANT + 1).
Donc forcément ça te retourne une erreur dès que i est égal à chacune de tes constantes.

Je ne sais pas si c'est vraiment ça le problème, mais déjà corrige ça.

Cordialement, uaip.