2D ArrayLoops C++

2D ArrayLoops C++

本文关键字:C++ ArrayLoops 2D      更新时间:2023-10-16

有麻烦让我的代码正常运行,我第一次使用c++,只是试图学习它为我的知识,我试图得到一个2d数组与所有零除了在最后一列。输入为stock = 100, strike = 100,到期日= 1,利率= 0.06,时间步长= 3,上因子= 1.1,下因子= 0.9091。end Array应该看起来像{[0,0,0,133.10],[0,0,0,110],[0,0,0,90.91],[0,0,0,75.13]},但由于某种原因,我一直在第一列中获取值,这让我很困惑。任何建议吗?

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <cmath>
using namespace std;
int main(int nNumberofArgs, char*pszArgs[])
{
double st;
cout << " Enter Value of stock: ";
cin >> st;
double K;
cout << " Enter Value of strike price: ";
cin >> K;
double t;
cout << " Enter time of maturity: ";
cin >> t;
double r;
cout << " Enter Value of the interest rate: ";
cin >> r;
int N;
cout << " Enter Value of time steps: ";
cin >> N;
double u;
cout << " Enter value of up factor: ";
cin >> u;
double d;
cout << " Enter Value of down factor: ";
cin >> d;
double dt;
dt = t/N;
double p;
p = (exp(r*dt)-d)/(u-d);
// Initialise asset price at maturity time step N
double price[N][N];
for( int i = 0; i < N+1; i++)
{
    for (int j = 0; j<N+1; j++)
    {
       price[i][j] = 0;
   }
}
price[N][N] = st*pow(d,N);
cout << "price[N][N] is equal to: " << price[N][N] << endl;
double newN;
newN = N-1;
//cout << price[2][0] << endl;
for(int ii = newN; ii >=0; ii--)
{
price[ii][N] = (price[ii+1][N]) * (u/d);
}
//cout << price[2][0] << endl;
for( int i = 0; i <= N; i++)
{
    for (int j = 0; j <=N; j++)
    {
       cout << price[i][j] << "  ";
   }
       cout << endl;
}
system("PAUSE");
return 0;
}

问题区域

for(int ii = newN; ii >=0; ii--)
{
price[ii][N] = (price[ii+1][N]) * (u/d);
} 

而不确定如何修复它。有什么想法?

在C/c++中索引从0

double price[N][N];

double price[10][10];

意味着你有一个从0到…9和0..9

price[N][N] = st*pow(d,N);

写入数组外的位置,因为最大索引是price[N-1][N-1]

,因此,C/c++中的循环

for( int i = 0; i <= N; i++)

应该写成

for( int i = 0; i < N; i++)

程序的几个问题。您已经在堆栈上创建了一个具有可变长度(N)的二维数组。如果你的数组大小是动态的,不要在堆栈上创建它,使用new在堆上分配它。而且,正如我看到的,你正在访问数组外的条目。

相关文章: