Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2700 connectés 

  FORUM HardWare.fr
  Programmation

  HELP DEBUGAGE D' UN PETIT PROG EN C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

HELP DEBUGAGE D' UN PETIT PROG EN C++

n°51915
carrereloi​c
Posté le 08-08-2001 à 22:34:49  profilanswer
 

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 ();
  }

mood
Publicité
Posté le 08-08-2001 à 22:34:49  profilanswer
 

n°51916
verdoux
And I'm still waiting
Posté le 08-08-2001 à 22:39:23  profilanswer
 

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

n°51917
carrereloi​c
Posté le 08-08-2001 à 22:48:01  profilanswer
 

non malheureusement

n°51918
TheJackal
Posté le 08-08-2001 à 22:55:35  profilanswer
 

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 ???

n°51919
grahf
Posté le 08-08-2001 à 22:59:24  profilanswer
 

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

n°51920
carrereloi​c
Posté le 08-08-2001 à 23:00:28  profilanswer
 

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

n°51921
grahf
Posté le 08-08-2001 à 23:15:00  profilanswer
 

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]

n°51922
BifaceMcLe​OD
The HighGlandeur
Posté le 08-08-2001 à 23:46:07  profilanswer
 

  • 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]

n°51936
TheJackal
Posté le 09-08-2001 à 07:12:48  profilanswer
 

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:

n°51940
carrereloi​c
Posté le 09-08-2001 à 08:18:51  profilanswer
 

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.

mood
Publicité
Posté le 09-08-2001 à 08:18:51  profilanswer
 

n°52017
AlphaT
Posté le 09-08-2001 à 12:08:19  profilanswer
 

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]

n°52134
grahf
Posté le 09-08-2001 à 16:11:55  profilanswer
 

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 ';') !!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  HELP DEBUGAGE D' UN PETIT PROG EN C++

 

Sujets relatifs
HELP html + javascript (ca doit etre tres facile mais pourtant...)[Oracle] Help !
Pourquoi on arrive pas a s'inscrire ce ce Forum ? HELP WEBMASTERSHelp euro
Empaquetage des prog. VB6Please help
Pour les gas ki font des sites, urgent help !!!!!!!!HELP!!! Problème avec #include
help sur JACOB (composant java pour exectuer des applications win)[PHP] images aléatoire | help plz =)
Plus de sujets relatifs à : HELP DEBUGAGE D' UN PETIT PROG EN C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR