Я впервые пытаюсь что-то запрограммировать. Я хочу иметь возможность вводить переменный объем данных и выводить среднее и стандартное отклонение. Я хочу, чтобы это было как можно проще и желательно с использованием команд, которые уже присутствуют в текущей программе.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float num[46];
float amount_num;
cout<< "How many numbers do you want? (max 45)\n";
cin>> amount_num;
for (int counter =0; counter < amount_num; counter++)
{
cout<< "Enter value "<< counter<< ":"<< endl;
cin>> num[counter];
}
int total;
int average;
int latot;
int fun;
int n;
int taco;
int sd;
int bell;
for(int t= 0; t< amount_num; t++)
{
total = total + num[t];
}
average= total/amount_num;
for(int t= 0; t< amount_num; t++){
latot = num[t] - average;
bell = pow (latot,2);
fun = fun + bell;
}
n=amount_num-1;
taco=fun/n;
sd=sqrt(taco);
cout<< "Average: "<< average<< endl;
cout<< "SD: "<< sd<< endl;
}
Логика вашего кода выглядит правильно. Однако вы не должны использовать целочисленные переменные. Вместо этого используйте переменные с плавающей точкой. Использование целочисленных переменных приводит к большому целочисленному делению, которое вызывает много ошибок численного усечения.
Например, с average= total/amount_num
если total
128 и amount_num
тогда 10 average
будет 12, когда это должно быть 12,8. Это ошибки усечения распространяются при вычислении значения отклонений, num[t] - average
,
Аналогичная проблема целочисленного деления найдена с taco=fun/n
,
Использование переменных с плавающей точкой устраняет целочисленное деление и эти промежуточные числовые ошибки.