HELP DEBUGAGE D' UN PETIT PROG EN C++

HELP DEBUGAGE D' UN PETIT PROG EN C++ - Programmation

Marsh Posté le 08-08-2001 à 22:34:49    

Bonsoir à tous.
JE fais un petit prog en c++ qui consiste en ceci:
 
on doit saisir 5 noms d' élèves, puis 5 notes pour chacun d' entre eux. mon prog renvoie une moyenne pour chacun d' eux.
Cependent j' ai plus de 10 erreurs lors de la compilation.
C' est mon premier programme alors je ne sais pas trop ce qui ne va pas. Je pense que ca doit sauter aux yeux rapidement à ceux qui connaissent un temps soit peu.
 
Merci à tous ceux qui veulent prendre le temps de m' aider.
 
VOILA LE FAMEU PROG:
 
 
 
#include <iostream.h>
 
 
 void SaisieNOMS ()
   {
     int i;
     char nomELEVE [5][10];
     for  (i=1; i<5;i++);
         {  cout << "\n veuillez entrer le nom de l' élève "<< i<<": ";
            cin >> nomELEVE[i] ;
         }
    }
 
 
  void saisieNOTES ()
 
    { int noteELEVE [5][5];
     // Boucle de répétition concernant les élèves
     for (int E=1; E<5;E++);
 
     {
     // Boucle de répétition de saisies de notes pour chaque élève
          for (int N=1;N<5; N++);
          {
           cout <<"\n Entrez la note " <<N <<" de " <<nomELEVE [E] <<": ";
           cin >> noteELEVE [E][N] ;
           }
      }
 
 
  void calculMOY  ()
 
 
      {
        cout <<"VOICI LA MOYENNE DE CHAQUE ELEVE \n" ;
 
        //Boucle des élèves
        for (int i=1;i<5;i++);
 
        {
         //Boucle des notes
         for (int n=1;n<5;n++);
        { int x = 0;
         x= noteELEVE[i][n] + x;
         }}
        cout <<"La moyenne de " <<nomELEVE [i] <<" est de: "<< x/5 "\n";
       }
 
 void main ()
 
  { saisieNOMS ();
  }

Reply

Marsh Posté le 08-08-2001 à 22:34:49   

Reply

Marsh Posté le 08-08-2001 à 22:39:23    

Humm, t'as tapé ça au hasard ? :D

Reply

Marsh Posté le 08-08-2001 à 22:48:01    

non malheureusement

Reply

Marsh Posté le 08-08-2001 à 22:55:35    

S majuscule pour SaisieNOMS en bas
pour le reste jsuis trop mort
ca va pas de poser des questions comme ca a cette heure ci ???

Reply

Marsh Posté le 08-08-2001 à 22:59:24    

declare un tableau de 5 chaines de caracteres separement de ta matrice et dans ton main sinon les procedures connaissent pas, passe les en parametre apres
 
par exemple, cin >> nomELEVE[i] ; ca veut rie dire : nomELEVE[i] est un tableau de char, cad un pointeur;
 
ensuite laisse un peu plus de trucs dans ton main, la saisie des noms par exemple

Reply

Marsh Posté le 08-08-2001 à 23:00:28    

Merci bien
 
Maintenant 6 erreurs!
celle ci m' énerve:  ligne 25: undefined symbole N
                     ligne 25 undefined symbole  E
 
 
 
 
 
Merci encore

Reply

Marsh Posté le 08-08-2001 à 23:15:00    

avec quelques erreurs en moins :
 
#include <iostream.h>
 
void saisieNOMS (int[5] nom)
{
 for (int i=0; i<5;i++);
        {  
  cout << "\n veuillez entrer le nom de l' élève "<<i<<": ";
         cin >> nom[i] ;
        }
}
 
 
void saisieNOTES (int [5][5] notes, char*[5] noms)
{  
 // Boucle de répétition concernant les élèves
 for (int E=0; E<5;E++)
 {
      // Boucle de répétition de saisies de notes pour chaque élève
         for (int N=0;N<5; N++)
         {
          cout <<"\n Entrez la note " <<N <<" de " <<noms[E] <<": ";
          cin >> notes [E][N] ;
           }
      }
}
 
void calculMOY(int [5][5] notes, char*[5] noms)
{
        cout <<"VOICI LA MOYENNE DE CHAQUE ELEVE \n" ;
 
        //Boucle des élèves
        for (int i=0;i<5;i++)
        {
  float x = 0;
         //Boucle des notes
         for (int n=0;n<5;n++)
         {
          x+=notes[i][n]/5.0;
         }
         cout<<"La moyenne de "<<noms[i]<<" est de: "<<x<<"\n";
 }
}
 
int main ()
{  
 char* nomELEVE [5];
 int noteELEVE [5][5];
 saisieNOMS(nomEleve)
 saisieNOTES(noteEleve, nomELEVE);  
 calculMOY(noteEleve, nomELEVE);  
 return 0;
}
 
PS : g pas de compilo C++ sous la main, g surement du me dechirer a un endroit ou 2  :D
par contre la structure est pas tres propres, il faudrait la changer

 

[edtdd]--Message édité par grahf--[/edtdd]

Reply

Marsh Posté le 08-08-2001 à 23:46:07    

  • Dans saisieNOMS(), le point-virgule à la fin du "for" est de trop (et ça, ça s'appelle un bug, pas une erreur de compilation...)


  • Définis quand même 2 constantes globales NUM_ELEVES et NUM_NOTES_PAR_ELEVE (qui ici valent 5 et 5), ça serait un peu vraiment plus clair...


  • Les paramètres de fonction de type tableau sont tous définis de façon incorrecte. En C, on n'écrit pas "void calculMOY(int [5][5] notes, char*[5] noms)", mais "void calculMOY(int notes[5][5], char* noms[5])". Je sais, ton écriture semblait plus logique, mais cela fait partie des incohérences du langage C.


  • Je te rappelle qu'en général, pour calculer une moyenne, on fait la somme de toutes les notes et, à la fin (et seulement à la fin), on divise par le nombre de notes. Toi, tu fais la somme des notes divisées par le nombre de notes au lieu de faire la somme des notes divisée par le nombre de notes : "n1/N + n2/N + n3/N + n4/N + n5/N" au lieu de "(n1 + n2 + n3 + n4 + n5) / N". Tu vas me dire mathématiquement, c'est strictement équivalent, mais pas de bol, pour un ordinateur qui travaille sur des nombres à virgule flottante, ce n'est pas du tout équivalent.


  • Il manque un point-virgule lors de l'appel à saisieNOMS(), dans le main.


  • Je peux déjà te dire que tu auras un gros plantage quand tu vas saisir le nom des élèves : l'espace mémoire nécessaire pour les stocker n'est pas alloué. Pour résoudre le problème, il te faut utiliser new() ou utiliser un tableau plutôt qu'un pointeur.


  • Tu as un sérieux problème d'indentation de code. Présenter correctement ton code est une nécessité si tu veux qu'on puisse facilement le comprendre. Je te donne un exemple à partir de ton propre code :

    Code :
    1. void calculMOY(int notes[5][5], char* noms[5])
    2.     {
    3.         cout << "VOICI LA MOYENNE DE CHAQUE ELEVE \n";
    4.         // Boucle des élèves
    5.         for (int iEleve = 0; iEleve < 5; iEleve++) {
    6.             float  moyenne = 0;
    7.             // Boucle des notes
    8.             for (int iNote = 0; iNote < 5; iNote++) {
    9.                 x += notes[iEleve][iNote];
    10.             }
    11.             moyenne /= (float) 5;
    12.             cout << "La moyenne de " << noms[i] << " est de: " << moyenne << "\n";
    13.         }
    14.     }

Le but de bien présenter le code est que la structure du code soit clairement identifiable en voyant le code sans avoir à lire le détail du code. L'indentation du code est là pour mettre en valeur la structure du code.
 

  • Tu a aussi un problème de nommage de tes variables. Il faut absolument que tu choisisses des noms de variables plus significatifs de ce qu'elles sont censées contenir (y compris pour les variables locales). J'ai également changé cela dans l'exemple ci-dessus pour essayer de te donner quelques idées.


[edtdd]--Message édité par BifaceMcLeOD--[/edtdd]

Reply

Marsh Posté le 09-08-2001 à 07:12:48    

Citation :

Les paramètres de fonction de type tableau sont tous définis de façon incorrecte. En C, on n'écrit pas "void calculMOY(int [5][5] notes, char*[5] noms)", mais "void calculMOY(int notes[5][5], char* noms[5])". Je sais, ton écriture semblait plus logique, mais cela fait partie des incohérences du langage C.


 
qui oserai faire ca :ouch:

Reply

Marsh Posté le 09-08-2001 à 08:18:51    

Merci à tous pour vos réponses et sutrout à grahf pour sa patience.
 
Je commence à bien comprendre mes erreurs.
 
Sur ce je pars au travail et vous souhaite une très bonne journée.

Reply

Marsh Posté le 09-08-2001 à 08:18:51   

Reply

Marsh Posté le 09-08-2001 à 12:08:19    

Ce programme est simple mais les tableaux ne devraient être utilisés que si on connait à l'avance le nombre d'éléments du tableau.
 
J'ai vu que dans son code il fait une grave erreur. Celui de commencer l'indice à 1 au lieu de 0 avec < 5 en plus, il ne comptera que 4 éléments au lieu de 5. C'est comme ca que l'on risque l'erreur de débordement de capacité quand on remplit un tableau et que l'on part de 1 :ouch:

 

[edtdd]--Message édité par AlphaT--[/edtdd]

Reply

Marsh Posté le 09-08-2001 à 16:11:55    

BifaceMcLeOD a écrit a écrit :

 
Tu as un sérieux problème d'indentation de code.  




 
ca c pas moi c quand g fait le copier colle dans la fenetre, je suis justement un adepte de la presentation propre.
 
pour le reste, effectivement g un peu fait le boulet, surtout pour l'oubli de l'allocation  :ouch: , mais j'avais ecrit a partir de son code (nom des var ou des fctions, ou les ';') !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed