Как рассчитать среднее?
Меня попросили подсчитать среднюю оценку за 10 учеников. Сначала я смог прочитать и извлечь данные из файла data.txt, который выглядит следующим образом:
№ Имя Test1 Test2 Test3
1 Ахмад 58 97 83
2 Долла 78 76 70
3 Рамеш 85 75 84
4 Маймуна 87 45 74
5 Роберт 74 68 97
6 Кумар 77 73 45
7 Интан 56 23 27
8 пинг 74 58 18
9 Идаю 47 98 95
10 Рослан 79 98 78
Затем я должен рассчитать среднее значение для каждого учащегося и определить оценки.
Вот что я сделал до сих пор.
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
using namespace std;
int main()
{
ifstream inFile1;
string temp;
int line=0;
inFile1.open("data.txt");
if(inFile1.fail())
{
cout << "File cannot be opened" << endl;
exit(1);
}
while(getline(inFile1, temp))
{
line++;
}
inFile1.close();
return 0;
}
Эта программа должна состоять как минимум из двух функций-прототипов: средняя () и классная (). Вот где я застрял.
1 ответ
Вы можете проверить ответы здесь: найти среднюю зарплату из файла в C++.
В основном, когда вы перебираете строки файла, вы должны разделить temp
Строка в токены, которые вас интересуют. Как? Вариант будет использовать getline
с разделителем ' '
или заглянуть в std::noskipws
потоковый манипулятор или просто использовать operator>>
читать из файла - зависит от деталей ваших требований.
Если я правильно понимаю ваш случай, я бы пошел с operator>>
чтобы получить имя студента, а затем читать с помощью getline(inFile, gradesText)
читать до конца строки, чтобы получить все оценки для текущего студента.
Затем я бы использовал отдельную функцию для разделения строк на вектор оценок. Как сделать разбиение вы можете проверить в разделе Разделить строку в C++?, Таким образом, вы можете подготовить такую функцию, как vector<int> split(const string& line, char delim = ' ')
, В рамках реализации вы, вероятно, должны использовать std::stoi
для преобразования строки в int.
После этого, когда у вас уже есть правильная коллекция, вы можете рассчитать среднее значение из нее с помощью:
const double sum = std::accumulate(grades.begin(), grades.end(), 0.0);
const double gradesMean = sum / grades.size();