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