Bonjour,

J'ai fait un exercice pour mes révisions et j'aimerais que quelqu'un me corrige, merci pour ceux qui peuvent m'aider:
Enoncé:

Eleve:
1 Elève Chaque élève est représenté par une structure Eleve qui a un prénom, un tableau contenant ses notes (tableau de flottants) et le nombre de notes (entier). Une note est un réel (type float) compris entre 0,0 et 20,0. Une classe est une structure Classe qui contient un tableau d’Eleves et un nombre d’élèves. — Créer la structure Eleve — Créer la structure Classe Lors de l’initialisation d’un Eleve on lui fournit son prénom, sans aucune note dans le tableau (on peut avoir plusieurs «Charles-Kévin»). On peut ajouter une note à un élève (dans la limite du tableau).
Tous les élèves n’ont pas forcément le même nombre de notes. On doit pouvoir calculer la moyenne d’un élève sur les notes rentrées.
Si il n’y a pas de note on renvoie -1.0 et on ne les prend pas en compte dans la moyenne de la classe.
— Créer 8 élèves avec entre 3 et 8 notes chacun.

2 Classe:

Lors de l’initialisation d’une Classe, on a 0 élève. On peut ajouter des Eleves préalablement créés à une classe. L’ajout se fait par insertion triée sur la moyenne des élèves du plus grand au plus petit. Les élèves sont ajoutés un à un, on doit incrémenter le nombre d’élèves. Exemple : L’élève avec la meilleure moyenne se trouve au début du tableau d’élève de la classe, celui avec la deuxième meilleure moyenne se trouve en 2ème position ... l’élève avec la moins bonne moyenne se trouve à la fin du tableau). On peut calculer la moyenne de la classe en faisant la moyenne de la moyenne de chaque élève. Si la classe est vide ou qu’aucun des élèves n’a de note, on renvoie -1.
— Créer 1 classe contenant 5 élèves dont 2 ont plus de 10,0 de moyenne
— Créer 1 classe contenant 3 élèves dont 2 ont plus de 10,0 de moyenne

3 Super classe:
On souhaite créer un classe d’élèves contenant les élèves qui ont plus de 10,0 de moyenne.
— Créer 1 classe contenant les élèves qui ont plus de 10,0 de moyenne

Mon programme:

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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
#include <iostream>
#include <cstdlib>
#include <string.h>
 
#define MAXN 26
#define MAXS 15
#define MAXE 42
 
using namespace std;
 
//Declaration structure Eleve
struct Eleve{
	String prenom;
	float Notes[26]
	int nbNotes;
};
 
 
//Declaration structure Classe
struct Classe{
	Eleve eleves[42];
	int nbEleve;
};
 
//Fonction pour Creer une classe Vide
Classe classeVide(){
	Classe c;
	c.nbEleve=0;
	return c;
}
 
//Renvoie true si la classe n'a aucun eleve, false sinon
bool estVide(Classe c){
 	return (c.nbEleve==0);
}
 
//Renvoie true si l'eleve n'a aucune note, false sinon
bool aucuneNote(Eleve e){
	return (e.nbNotes==0);
}
 
//Creer un eleve avec son prénom et aucune note dans son tableau de notes
Eleve creerEleve(char prenom[]){
	  Eleve e;
	  Classe c;
	  strcpy(e.prenom,prenom);//fonction pour l'affectation de chaines de caracteres
	  if(e.nbNotes==42){
	  	out << "Pas d'ajout possible : plus de mémoire" << endl;
	  }
	  else{
	  	for(i=1;i<e.nbNotes;i++){
	  	e.prenom=strcpy(e.prenom,prenom);
	  	c.eleves[c.nbEleve-1]=e.prenom;
 
		  }
		  	c.nbEleve++;
	  }
//a completer
}
 
//Ajouter une note a l'eleve 
void ajouterNote(Eleve &e, float n){
	 //verifier que la note est entre 0 et 20 compris pour ajouter la note
	i=0;
	while(n>=0 && n<=20{
		if(i<e.nbNotes){
	 	    e.Notes[e.nbNotes-1]=note;
		}
		i++;
	}
 
}
 
//Calcul de la moyenne d'un élève
//Renvoie la moyenne des notes de l'élève si l'élève a des notes
//Renvoie -1 si l'élève n'a pas de notes
float moyenne(Eleve e){
	float somme=0;
	float moyenne;
	int i;
 
	  //je verifie que mon eleve a au moins une note pour faire la moyenne
	 if (!aucuneNotes(e)){
	 	for(i=0;i<e.nbNotes-1;i++){
	 		//je parcours le tableau pour faire la somme des notes
	 		somme=somme+Notes[i];
	 		i++;
		 }
		 //je divise la somme par le nombre de notes
		 moyenne=somme/nbNotes;
		 //Renvoie la moyenne des moyennes des étudiants de la classe
		 return moyenne;
	 }
 
	 else
	 //Renvoie -1 s'il n'y a pas d'étudiants dans la classe ou si aucun étudiant n'a de note
	 return aucuneNote(e);
}
 
 
float moyenneClasse(Classe c){
	Eleve e;
	int i=0;
	int nbEtudiantNotes=0;
	float moyenneClasse=0;
	  //Verifier que la classe ne soit pas vide
	  if(!classeVide){
	  	if (aucuneNotes(e)){
	  		//Si aucun etudiant n'est note, la moyenne de la classe est -1
	  		return (aucuneNotes(e));
		  }
		  else{
		  	//compter le nombre d'etudiants notes dans la classe
		  	while(!aucuneNote(e)){
	  		nbEtudiantNotes=nbEtudiantNotes+i;
	  		i++;
		   }
		    cout << "Le nombre des étudiants notés est: " << nbEtudiantsNotes << endl;
		    //Faire la moyenne des notes des etudiants notes sinon :
		    moyenne(e);
		    for(j=0;j<nbEtudiantsNotes;j++){
		    // faire la somme des moyennes des etudiants ayant des notes
		    	somme=somme+moyenne(e);
		    	j++;
			}
 
		 	//diviser cette somme par le nombre d'etudiants ayant des notes
			moyenneClasse=somme/nbEtudiantNotes;
			return moyenneClasse;
 
		  }	  
 
	  }
	  else 
	  return (classeVide);	 		 	
}
 
 
void ajouterEleve(Classe &c, Eleve &e){
	//Ajouter un eleve a la classe
	nouveauEleve=creerEleve(prenom);
	nouveauIndex=e.nbEleve+1
	e.eleves[nouveauIndex]=nouveauEleve;
	//Suggestion d'algorithme (peut etre different) :
 
	for(i=0;i>nouveauIndex-1;i++){
		for(j=0;j<nouveauIndex-1;j++){
			// moyenne est superieur a celle du precedent
			if(moyenne(eleves[i]) > moyenne(eleves[i-1]){
			//c'est-a-dire qu'on intervertit 2 elements pour les remettre dans l'ordre
			permut=eleve[i];
			eleve[i]=eleve[i-1];
			eleve[i-1]=permut;
		}
			nouveauIndex++; //on incremente le nb d'eleves de la classe
 
		}
	}
 
 
}
 
//Renvoie la classe de l'annee suivante : les etudiants qui ont plus de 10 de moyenne
Classe classeProchaine(Classe c1, Classe c2){
	int nbmoyennec1=0;
	int nbmoyennec2=0;
	//entre 3 et 8 notes chacun
	e1.notes[]={10,12,13};
	e2.notes[]={6.5,9,7.5};
	e3.notes[]={17,16,18,19,15};
	e4.notes[]={0.6,11,4,3,6,2};
	e5.notes[]={1,1,1,0.5};
 
	e6.notes[]={12,11,14};
	e7.notes[]={0,2,4,7};
	e8.notes[]={10,10,10,10.5};
 
	 //Creer une classe vide
	c1=classeVide();
	c2=classeVide();
 
	for(i=1:i<=5;i++){
		if moyenne(ei>=10){
			nbmoyennec1++
		}
		ajouterEleve(ci,e1);
	}
	for(j=6;j<=8;j++){
		if moyenne(ej>=10){
			nbmoyennec2++
		}
		ajouterEleve(cj,ej);
	}
 
	    cout << "Le nombre d'étudiant qui ont la moyenne dans la classe 1 est' " << nbmoyennec1 <<endl;
	    cout << "Le nombre d'étudiant qui ont la moyenne dans la classe  est' " << nbmoyennec2 <<endl;
 
	    //parcourir chaque classe c1 et c2 :
	    c3=classeVide();
	    while(moyenne(ei)>=10){
	    	//ajouter chaque eleve ayant une moyenne >=10 dans la nouvelle classe
	    	ajouter(ei,c3))
	    	i++;
		}
 
	return c3;
}
 
//Afficher Eleve
//Affiche un eleve, sa moyenne et ses notes
void afficherEleve(Eleve e){
	 cout << e.prenom << " : ";
	 cout << "Moyenne : " << moyenne(e) << endl;
	 cout << "Notes : ";
	 for (int i=0; i < e.nbN; i++){
	 	 cout << e.notes[i] << " " ;
	 }
	 cout << endl;
}
 
//afficher Classe
//affiche une classe, son nb d'etudiants, sa moyenne puis les caracteristiques de chaque eleve qui y est
void afficherClasse (Classe c){
	 cout << "La classe a " << c.nbE << "eleves." << endl;
	 cout << "La moyenne de la classe est : " << moyenneClasse(c) <<endl;
	 cout << "Les eleves de la classe sont : " << endl;
	 for (int i =0; i < c.nbE; i++){
	 	 afficherEleve(c.eleves[i]);
	 }
	 cout << endl;
}
 
//CF sujet
int main(){
//Creer des eleves et les afficher
 
//afficher les élèves
for(i=1;i<=8;i++){
	ei=créerEleve(ei);
	afficherEleve(Eleve ei)
}
//Creer des classes et les afficher
for(j=1;j<=5;j++){
	ajouterEleve(Classe c1, Eleve ej );
}
afficherClasse (c1);
 
for(k=6;k<=8;k++){
	ajouterEleve(Classe c2, Eleve ej );
}
afficherClasse (c2);
//Creer la super classe et l'afficher
classeProchaine(Classe c1, Classe c2);
 
	system("pause");
	return EXIT_SUCCESS;
}