Написал код но выводить неправильно в чем проблема?
#include "stdafx.h"
#include <iostream>
#include <locale.h>
#include <math.h>
using namespace std;
double* aArrayX;
// нерекурсивная функция
double Calculate(int N)
{
double Summ=0;
for(int i=1;i<=N;i++)
Summ+=pow(aArrayX[i],2);
return Summ;
}
// рекурсивная функция
double CalculateRec(int N)
{
if (N>=1)
return pow(aArrayX[N],2)+CalculateRec(N-1);
else
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"rus");
int N;
double fResult;
cout<<"Input N"<<endl;
cin>>N;
if (N>0)
{
// применение оператора new для формирования указателя на массив
aArrayX=new double [N];
// инициазизация элементов массива
cout<<"Input x(0):"<<endl;
cin>>aArrayX[0];
cout<<"Input x(1):"<<endl;
cin>>aArrayX[1];
for(int i=2;i<=N;i++)
aArrayX[i+1]=pow(aArrayX[i],2) - pow(aArrayX[i-1],2);
// вызов нерекурсивной функции Calculate
fResult=Calculate(N);
cout<<"Result(not recursion)= "<<fResult<<endl;
// вызов рекурсивной функции CalculateRec
fResult=CalculateRec(N);
cout<<"Result(recursion)= "<<fResult<<endl;
// вывод всех элементов x(i)
for(int i=0;i<=N;i++)
cout<<"x("<<i<<")= "<<aArrayX[i]<<endl;
}
system("pause");
return 0;
}
Указатель aArrayX
указывает на массив из N
элементов, в функции Calculate
i
может дойти до этого значения на последней итерации i<=N
, тем самым выйдя за предел массива, в функции CalculateRec
выход за предел массива происходит сразу же, в main
циклы for
опять же выходит за предел массива. Каждый такой выход - неопределенное поведение Перед разыменованием указателя следует проверять, входит ли индекс в диапазон. Память, выделенная для aArrayX
утекает. Ну и использовать глобальные переменные не следует. Совсем.
Ну вот как Linux написать, так он тут как тут, а как простенькую программку...
Поскольку ваше решение из серии "зачем просто, если можно сложно?", пишу заново:
void Iteration()
{
double x0 = 0.3, x1 = 0.5;
double Z = x1*x1;
for(int n = 1; n <= 7; ++n)
{
cout << "n = " << n << " Z = " << setprecision(12) << Z << endl;
double x = x1*x1-x0*x0;
Z += x*x;
x0 = x1; x1 = x;
}
}
void Recursion(double x0 = 0.3, double x1 = 0.5, double Z = 0.0, int n = 1)
{
if (n > 7) return;
Z += x1*x1;
cout << "n = " << n << " Z = " << setprecision(12) << Z << endl;
Recursion(x1,x1*x1-x0*x0,Z,n+1);
}
int main(int argc, const char * argv[])
{
cout << "Iteration:\n";
Iteration();
cout << "Recursion:\n";
Recursion();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Найти натуральное число n представимое суммой кубов двух натуральных чисел двумя разными способамиx^3+y^3,(x<=y)
может кому-то уже доводилось создавать график работы на сайте, или кто-то знает существует ли плагин для создания графика, я на данный момент...
ЗдравствуйтеЯ хочу заставить эти стрелки вращаться вокруг телефона посредством :hower