У меня есть это задание, в котором я покажу подсказку для него:
Напишите программу, которая считывает данные набора результатов теста от пользователя. (Результаты теста должны быть введены в десятичной форме, чтобы представить процентную оценку). Как только пользователь завершит ввод результатов теста (ввод -1 будет означать конец ввода), распечатайте количество введенных тестов, среднее значение тестов и стандартное отклонение. Используйте следующую формулу (метод Уэлфорда) для расчета стандартного отклонения: (Стандартная формула Девиатона)
Вы можете вычислить эту величину, отслеживая количество (количество тестов), сумму и сумма квадратов при обработке входных значений. Примечание. Хотя существуют и другие способы расчета стандартного отклонения, используйте этот метод. Этот метод используется, поскольку он требует только один проход данных. Не используйте массивы или векторы.
Теперь приведенный ниже код - это то, что я имею до сих пор. В терминале я получаю неправильные цифры для среднего и стандартного. Выходы отклонения (Терминальный выход) . Что-то не так с моей математикой? Любая помощь приветствуется. РЕДАКТИРОВАТЬ: Вот данные, которые я использую и ожидаемые результаты, которые я должен получить:
1. 67.8
2. 95.6
3. 89.5
4. 76.7
5. 71.3
6. 83.2
7. 90.6
8. 56.1
9. 98.6
10. 85.2
результат:
Number of Test Scores: 10
Average : 81.46
Std. Deviation: 13.39
Код
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double sum = 0;
double sumSq = 0;
double grade = 0;
int numtests = 0;
cout << "Enter the test scores. Once finished, enter -1 to end input.\n";
cin >> grade;
while (grade != -1)
{
cin >> grade;
sum = sum + grade;
sumSq = sumSq + pow(grade, 2);
numtests++;
}
double average = (sum / numtests);
double std = (sumSq - numtests * pow(average, 2) / (numtests - 1));
cout << "The number of scores: " << numtests << "\n";
cout << "Average: " << average << "\n";
cout << "Std. Deviation: " << std << "\n";
return 0;
}