IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Projet de gestion de notes d'étudiants


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2004
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 45
    Points : 30
    Points
    30
    Par défaut Projet de gestion de notes d'étudiants
    Bonjour,

    voici le code que j'ai réalisé pour la gestion des notes des étudiants lorsque je passe à la compilation voici ce que je relève comme message
    process returned 65536(0x10000)  execution time 0.000s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    #include <iostream>
    #include<cstdlib>
    using namespace std;
     
    class Etudiant
    {
    private:
        char nom[50],prenom[50];
        float tabnotes[10];
    public:
        void saisie();
        void affichage();
        float moyenne();
        int admis();
        int Exae_quo(Etudiant E);
    };
    void Etudiant::saisie()
    {int i;
        cout<<"nom de l'etudiant:";
        cin >>nom;
        cout<<"prenom de l'étudiant:";
        cin >>prenom;
        cout<<"les notes ";
        for(i=0;i<10;i++)
        {
            cout<<"donner la note :"<<i;
            cin >>tabnotes[i];
        }
    }
    float Etudiant::moyenne()
    {
    int i;
    float tabnotes[10];
    float som = 0 ;
    for(i=0;i < 10 ; i++)
      som+=tabnotes[i];
      return(som/10);
    }
    void Etudiant::affichage()
    {int i;
     cout<<"le nom:"<<nom<<endl;
     cout<<"le prenom:"<<prenom<<endl ;
     for(i=0;i<10;i++)
        cout<<"la note N°"<<i<<"est"<<tabnotes[i]<<endl;
    }
    int Etudiant::admis()
    {
     if(Etudiant::moyenne() >= 10) return(1); else return(0);
    }
     int Etudiant::Exae_quo(Etudiant E)
    {
        if(Etudiant::moyenne()== E.moyenne()) return(1);else return (0);
    }
    //Les méthode qui sont à redefinir dans la classe Etudiant_en_Maitrise sont :saisie ,affichage ,admis , et exae_quo.
    class Etudiant_en_Maitrise : public Etudiant
    {
    private:
        float note_memoire;
    public:
        void saisiec();
        void affichagec();
        int admisec();
        int Exae_quoec(Etudiant_en_Maitrise E);
    };
    void Etudiant_en_Maitrise ::saisiec()
     {
         Etudiant ::saisie();
         cout<<"donnez la note du mémoire:";
         cin>>note_memoire;
     }
     void Etudiant_en_Maitrise::affichagec()
     {
         Etudiant ::affichage();
         cout<<"La note Mémoire est:"<<note_memoire<< endl;
    }
    int Etudiant_en_Maitrise ::admisec()
    {
        if((Etudiant::moyenne()>=10) && (note_memoire >=10))return(1); else return(0);
    }
    int Etudiant_en_Maitrise::Exae_quoec(Etudiant_en_Maitrise E)
    {
    if((moyenne()== E.moyenne())&& (note_memoire == E.note_memoire))return(1);else return(0);
    }
      main()
    {
     
    Etudiant_en_Maitrise p;
     
        p.saisie();
        p.affichage();
        p.moyenne();
        p.admis();
        p. saisiec();
        p.affichagec();
        p.admisec();
    }
    Merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Je trouve ça étonnant que ça compile. Pas de type de retour à main() ? c'est illégal en C++.

    Et de fait :

    edt@edt-thinkpad:21:09:~/tmp$ g++ -Wall -g -O0 etudiant.cpp -o etud
    etudiant.cpp:97:6: warning: ISO C++ forbids declaration of ‘main’ with no type [-Wreturn-type]
    main()
    ^

    Bon, une fois corrigée cette légère bourdinette, le programme fonctionne "correctement" (pour autant que je puisse en juger). Bon, il y a des problèmes de présentation, ce qui n'est rien par rapport au code lui-même (qui souffre lui aussi de problème de présentation).

    Accessoirement, voici une version un peu plus lisible avec des commentaires sur ce que je trouve limite ou qui présente un bug (il y en a un certain nombre).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     
    #include <iostream>
    #include <cstdlib>
     
    using namespace std;
     
    class Etudiant
    {
    private:
    	char nom[50]; 				// NOPE (std) : std::string
    	char prenom[50];			// NOPE (std) : std::string
    	float tabnotes[10];			// NOPE (std) : std::vector
    public:
    	void saisie();				// NOPE (bug) : cette fonction devrait être virtuelle
    	void affichage();			// NOPE (bug) : celle-là aussi
    	float moyenne();
    	int admis();				// NOPE (bug) : virtuelle again
    	int Exae_quo(Etudiant E);		// NOPE (bug) : et encore celle-là
     
    	// NOPE (bug) : pas de destructeur virtuel ? On ne doit pas dériver cette classe
    };
     
    void Etudiant::saisie()
    {
    	int i;
     
    	cout << "nom de l'etudiant: ";
    	cin >> nom;
    	cout << "prenom de l'étudiant: ";
    	cin >> prenom;
    	cout << "les 10 notes " << std::endl;
     
    	for(i=0;i<10;i++) {
    		cout << " donner la note " << i << " : ";
    		cin >> tabnotes[i];
    	}
    }
     
    float Etudiant::moyenne()
    {
    	int i;
    	float tabnotes[10];			// NOPE (bug) : variable shadowing
    	float som = 0 ;
     
    	// NOPE (bug) : 
    	// là tu crois que tu calcule la moyenne sur les notes de l'étudiant, 
    	// et bien non : tu calcule la moyenne sur des notes au hasard - le
    	// tableau tabnotes[] étant celui que tu as défini juste au dessus.
    	for(i=0;i < 10 ; i++)
    		som += tabnotes[i];
     
    	return (som/10);
     
    	// et puis NOPE (std) : std::accumulate() divisé par la taille du std::vector
     
    }
     
    void Etudiant::affichage()
    {
    	int i;
     
    	cout << "le nom : " << nom << endl;
    	cout << "le prenom : "<< prenom << endl ;
     
    	for(i=0;i<10;i++)
    		cout << " la note N°" << i << " est " << tabnotes[i] << endl;
     
    	// NOPE (std) : std::for_each sur le vecteur
    }
     
    int Etudiant::admis()
    {
    	// NOPE (style) : pas besoin de préciser 'Etudiant::' ici
    	if (Etudiant::moyenne() >= 10) 
    		return (1); 
    	else 
    		return (0);
    }
     
    // ex_aequo
    int Etudiant::Exae_quo(Etudiant E)
    {
    	// NOPE (style) : pas besoin de préciser 'Etudiant::' ici
    	// NOPE (style) : un nom de variable en majuscule ? pas beau
    	// NOPE (bug) : les float ne peuvent pas être comparés entre eux
    	// pour des raisons de précision du calcul. 
    	if (Etudiant::moyenne() == E.moyenne()) 
    		return (1);
    	else 
    		return (0);
    }
     
    //Les méthode qui sont à redefinir dans la classe Etudiant_en_Maitrise sont :saisie ,affichage ,admis , et exae_quo.
    class Etudiant_en_Maitrise : public Etudiant
    {
    private:
    	float note_memoire;
    public:
    	void saisiec();			// NOPE (bug) : pas le même nom que la fonction parent, 
    					//  qui n'est pas virtuelle de toute façon
    	void affichagec();		// NOPE (bug) : idem
    	int admisec();			// NOPE (bug) : idem
    	int Exae_quoec(Etudiant_en_Maitrise E);		// NOPE (bug) : idem
    };
     
    void Etudiant_en_Maitrise ::saisiec()
    {
    	Etudiant::saisie();
     
    	cout << "donnez la note du mémoire: ";
    	cin >> note_memoire;
    }
     
    void Etudiant_en_Maitrise::affichagec()
    {
    	Etudiant::affichage();
    	cout << "La note Mémoire est: " << note_memoire << endl;
    }
     
    int Etudiant_en_Maitrise ::admisec()
    {
    	// NOPE (style) : pas besoin de 'Etudiant::'
    	if ((Etudiant::moyenne()>=10) && (note_memoire >= 10))
    		return (1); 
    	else 
    		return (0);
    }
     
    // ex_aequo
    int Etudiant_en_Maitrise::Exae_quoec(Etudiant_en_Maitrise E)
    {
    	// NOPE (style) : pas besoin de 'Etudiant::'
    	// NOPE (bug) : comparaison de float interdites
    	if ((moyenne()== E.moyenne())&& (note_memoire == E.note_memoire))
    		return (1);
    	else 
    		return (0);
    }
     
    int main()
    {
    	Etudiant_en_Maitrise p;
     
    	p.saisie();
    	p.affichage();
    	p.moyenne();
    	p.admis();
    	p.saisiec();
    	p.affichagec();
    	p.admisec();
    }
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2004
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 45
    Points : 30
    Points
    30
    Par défaut gestion des notes des étudiant
    çà compile mais je n'ai pas la présentation defini dans le main() :
    le nom:
    le prenom:
    donnez les notes :
    donnez la note de la mémoire:
    l'étudiant est admis
    l'étudiant a réussit à la maitrise

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Parce que tu ne sais pas qu'un flux peut être "buffered", c'est-à-dire, manipulé via un tampon mémoire.
    std::endl a deux propriété. Il active produit une fin de ligne, mais aussi vide le tampon.

    Cette second partie est aussi possible avec ostream::flush(). (et, si je me souviens bien, std::flush)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2004
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 45
    Points : 30
    Points
    30
    Par défaut projet de gestion de note d'étudiant
    je ne comprend pas ce que tu me fait comprendre le buffered std::endl
    je demande plus d'explication
    merci

Discussions similaires

  1. Gestion de notes d'étudiants avec menu
    Par baye7 dans le forum Débuter
    Réponses: 5
    Dernier message: 22/03/2010, 22h27
  2. Gestion des notes étudiants
    Par baye7 dans le forum C
    Réponses: 0
    Dernier message: 22/03/2010, 12h38
  3. [MCD] gestion des notes étudiants
    Par Milleras dans le forum Schéma
    Réponses: 8
    Dernier message: 19/11/2009, 12h13
  4. Architecture projet de gestion avec dynamisme
    Par n8ken dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 15
    Dernier message: 20/04/2009, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo