Не вычисляется среднее
У меня должен вычисляться средний балл (функция average) у студентов по трем предметам. Проблема: я ввожу разные оценки а средний балл у всех студентов всегда один, плюс ещё отрицательный. Не знаю, откуда берется это число. Дальше должна работать функция excellent, которая выводит всю информацию о студентах, со средним баллом > 4.5 В чем может быть проблема?
Код:
#include <iostream>
using namespace std;
struct student
{ char surname[21];
char group[21];
int course;
int physics;
int programming;
int math;
float mark;
// Информация о рабочих
char WorkersName[21];
char JobTitle[21];
};
void read(student & s)
{ cout << " Фамилия: ";
cin >> s.surname;
cout << "\n Группа: ";
cin >> s.group;
cout << "\n Курс: ";
cin >> s.course;
cout << "\n Физика: ";
cin >> s.physics;
cout << "\n Программирование: ";
cin >> s.programming;
cout << "\n Математика: ";
cin >> s.math;
cout << "\n Имя рабочего: ";
cin >> s.WorkersName;
cout << "\n Должность рабочего: ";
cin >> s.JobTitle;
}
void print(student & s)
{ printf("\t%10s \t", s.surname);
printf("\t%10s \t", s.group);
printf("\t%1d \t", s.course);
printf("\t%1d \t", s.physics);
printf("\t%1d \t", s.programming);
printf("\t\t%1d \t", s.math);
printf("\t%.2f \t", s.mark);
}
void average(student & s, const int n) {
float sr_rating = 0;
sr_rating += s.physics;
sr_rating += s.programming;
sr_rating += s.math;
sr_rating /= n;
sr_rating = s.mark;
sr_rating = 0;
}
void excellent(student & s) {
if (s.mark > 4.5) {
print(s);
}
}
int main()
{ student *s;
setlocale(0, "");
int n = 3;
cout << "Введите количество студентов > ";
cin >> n;
cout << endl;
s = new student [n];
cout << "\nВведите данные > \n";
for (int i = 0; i<n; i++)
{
read(s[i]);
average(s[i], n);
excellent(s[i]);
}
printf("\tФамилия:\t\tГруппа:\t\tКурс:\t\tФизика:\t\tПрограммирование:\t\tМатематика:\t\tСредний:\n");
for (int i = 0; i < n; i++)
{
print(s[i]);
cout << endl;
}
cout << endl;
cout << endl;
system("pause");
return 0;
}
Ответы (2 шт):
вас не смущает что average() ничего не делает? В прямом смысле слова. может там все же что-то типа
s.mark = sr_rating;
А что она вообще у вас делает?
void average(student & s) {
float sr_rating = 0;
sr_rating += s.physics;
sr_rating += s.programming;
sr_rating += s.math;
sr_rating = s.mark;
sr_rating = 0;
}
Она суммирует что-то в локальной переменной sr_ratting, после чего, затирает эту сумму значением s.mark, а потом, никуда не сохраняя это значение, просто выбрасывает его при выходе из функции.
Так что она не только не считает среднее, но даже и сумму не сохраняет...
P.S. Более того, наличие каких-то рабочих в студентах меня очень смущает. В том плане, что вы взяли чью-то программу, и пытаетесь в ней менять что-то под свои нужды, не понимая, как... Я неправ?