Obtenir la Moyenne,Min et Max de nombres dans le tableau 2D
J'ai un problème avec l'obtention de la min,max, moyenne de l'un des éléments de tableau 2D.
J'ai un tableau 2D qui contient des Étudiants et des Grades.
Je suis de la génération de la sortes avec rand. Par exemple Quand je rentre de 2,2 elle imprime m'
Courses : 01 02 Average Min Max
ID
01 8 50 29
02 74 59 29
Mon moyen de la fonction prend la première de celles de la moyenne et de ne pas prendre les autres en moyenne.
Voici mon code ;
int A[30][30];
int findAverage(int noOfStudents ,int noOfGrades ){
float sum,average;
for (int i = 0 ; i < noOfGrades ; i++) {
for (int j = 0; j<noOfStudents; j++) {
sum += A[i][j];
}
average = sum / noOfGrades;
//cout << " " << format(average);
sum = 0;
return format(average);
}
et voici comment je l'utilise
int main() {
int noOfCourses , noOfStudents;
cin >> noOfCourses >> noOfStudents;
cout << "Courses : " ;
for (int i = 0; i < noOfCourses; i++) {
if (i+1 >= 10) {
cout << i+1 << " ";
}else{
cout <<"0" << i+1 << " ";
}
}
cout << "Average Min Max";
for(int i=0; i<noOfStudents; i++) { //This loops on the rows.
for(int j=0; j<noOfCourses; j++) { //This loops on the columns
A[i][j] = genGrade();
}
}
cout << "\n ID " << endl;
for(int i=0; i<noOfStudents; i++) { //This loops on the rows.
if (i+1 >= 10) {
cout <<" " << i+1 << " ";
}else{
cout <<" 0" << i+1 << " ";
}
//cout <<" 0" << i+1 << " ";
for(int j=0; j<noOfCourses; j++) { //This loops on the columns
if (A[i][j] >= 10 && A[i][j] <=99) {
cout <<" " << A[i][j] << " ";
}
if(A[i][j] < 10) {
cout <<" " << A[i][j] << " ";
}
if (A[i][j] == 100) {
cout << A[i][j] << " ";
}
}
cout <<" "<<findAverage(noOfStudents,noOfCourses);
cout << endl;
}
}
Ce que je fais mal ? Aussi, Comment pourrais-je obtenir le min,le max de ce tableau?
- Qu'est-ce que la déclaration de
A
? - int A[30][30]; , désolé 🙂
- Vous n'avez pas initialisé
sum
avant de l'utiliser, et vous retournez au cours de la première itération de la boucle externe. Est-il une raison pour laquelle vous n'utilisez passtd::vector
pour stocker les données etstd::accumulate
pour additionner les valeurs? Vous pouvez obtenir des min et max avecmin_element
etmax_element
.
Vous devez vous connecter pour publier un commentaire.
Le problème est que dans votre
findAverage
de la fonction vous avez une instruction return dans la boucle qui se boucle sur les lignes. Si vous voulez une solution simple d'ajouter un autre paramètre à lafindAverage
fonction qui indique le rang de calculer la moyenne.et de l'appeler comme ça
Pour commencer, vous êtes de retour à partir de l'intérieur de votre boucle:
Pouvez-vous voir comment la boucle externe ne jamais exécuter une fois?
sum
dans chaque boucle.Je voudrais fort vous recommandons d'utiliser des conteneurs pour cette tâche. Par exemple, vous pouvez effectuer les opérations suivantes
http://en.cppreference.com/w/cpp/algorithm/minmax
http://en.cppreference.com/w/cpp/algorithm/accumulate
http://en.cppreference.com/w/cpp/utility/tuple/tie
float min=std::min(gr.begin(), gr.end()); float max=std::max(gr.begin(), gr.end()); float avg=std::accumulate(gr.begin(), gr.end(), 0.0f);
espère que ça aide