Visual Studio 2010 — Дисперсия для чисел Фибоначчи Переполнение стека

Здравствуйте, я написал программу на С ++ для вычисления чисел Фибоначчи.
По сути, я хочу, чтобы моя программа вычисляла, например, 10 чисел Фибоначчи, а затем вычисляла их дисперсию и стандартное отклонение. На данный момент мне удалось получить программу для вычисления чисел Фибоначчи, но я не знаю, как можно сразу загрузить эти числа для вычисления дисперсии и стандартного отклонения. Поэтому я прошу ввести их и сохранить их в массиве х, а затем я вычисляю дисперсию и стандартное отклонение.

#include <conio.h>
#include <iostream>
#include <windows.h>
#include <math.h>
using namespace std;

int n,i,one=0,two=1,ne;
//one -> first number
//two -> second number
//ne -> next number
float x[100], sum=0, avg, vari=0, vari2, sd;

int main()
{
cout << "Enter how many Fibonacci numbers you want\n" << endl;
cin >> n;

cout << "\nFirst " << n << " Fibonacci numbers are : " << endl;

for ( i=0 ; i<n ; i++ )
{
if ( i<=1 )
ne=i;
else
{
ne=one+two;
one=two;
two=ne;
}
cout << ne << endl;
}

for (i=0; i<n; i++)
{
cout << "Input your Fibonacci numbers  ";
cin >> x[i];

sum = sum + x[i];
}
avg = sum/n;

for (i=0; i<n; i++)
{
vari = vari + pow((x[i] - avg),2);
}

vari2 = vari/n;
sd = sqrt(vari2);

cout << "The sum of the numbers: " << sum << endl;
cout << "The average of the numbers: " << avg << endl;
cout << "The variance of the numbers: " << vari2 << endl;
cout << "The standard deviation of the numbers: " << sd << endl;_getch();
}

Это новый код:
Все работает хорошо, кроме дисперсии.
Я не знаю, почему дисперсия рассчитывается неправильно.

#include <conio.h>     #include <iostream>
#include <windows.h>
#include <math.h>
using namespace std;

int n,i,one=0,two=1,ne;
//one -> first number
//two -> second number
//ne -> next number
float x[10000], sum=0, avg, vari=0, vari2, sd;

int main()
{
cout << "Enter how many Fibonacci numbers you want\n" << endl;
cin >> n;

cout << "\nFirst " << n << " Fibonacci numbers are : " << endl;

for ( i=0 ; i<n ; i++ )
{
if ( i<=1 )
ne=i;

else
{
ne=one+two;
one=two;
two=ne;
}

cout << ne << endl;
sum = sum + ne;
avg = sum/n;

}for (i=0; i<n; i++)
{
vari = vari + pow((x[i] - avg),2);
}

vari2 = vari/n;
sd = sqrt(vari2);

cout << "The sum of the numbers: " << sum << endl;
cout << "The average of the numbers: " << avg << endl;
cout << "The variance of the numbers: " << vari2 << endl;
cout << "The standard deviation of the numbers: " << sd << endl;_getch();
}

0

Решение

Нет необходимости создавать цикл for для суммы и среднего, их код может быть реализован внутри самого первого цикла:

for ( i=0 ; i<n ; i++ )
{
if ( i<=1 )
ne=i;
else
{
ne=one+two;
one=two;
two=ne;
}
cout << ne << endl;
sum = sum + ne;
avg = sum/n;

Теперь для дисперсии и sd вы можете создать функцию для каждого из них, чтобы вычислять их значения:

double funcvari(double d){

vari = vari + pow((ne - d),2);
vari2 = vari/n;return vari2;
}

double funcsd(double fd){
sd = sqrt(fd);
return sd;
}

Live Demo

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]