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

 


Dernière réponse
Sujet : HELP DEBUGAGE D' UN PETIT PROG EN C++
grahf

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


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
grahf

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

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

carrereloic 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.
TheJackal

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:

BifaceMcLeOD

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

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

carrereloic Merci bien
 
Maintenant 6 erreurs!
celle ci m' énerve:  ligne 25: undefined symbole N
                     ligne 25 undefined symbole  E
 
 
 
 
 
Merci encore
grahf 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
TheJackal 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 ???
carrereloic non malheureusement
verdoux Humm, t'as tapé ça au hasard ? :D
carrereloic 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 ();
  }

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)