hej igen...
Jeg har lavet en kode i c++
men mangler at få den til at lave et tilfældigt normalt fordelt tal. plz hjælp
kodene ser sådan ud og det er "e" dom skal være et tilfældigttal
# include <fstream.h> // Så man kan gemme og hente data fra filer
# include <iomanip.h> // Sørger for at programmet kan modtage og udskrive data
# include <stdlib.h> // Så vi kan tømme skærmen
# include <math.h> // Så programmet kan regne lidt svære matematik
# define max 5
void inddata1(int &T, double r[max], double &vol);
void kurs(double &S0, double &X);
void sim1(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T);
void sim2(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T);
void sim3(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T);
main()
{
int T, ti, valg, n, k, K;
double r[max], S0, X, t, vol;
inddata1(T,r, vol);
kurs(S0, X);
do
{
system("cls");
cout<<"\\n hvilket interval har dine maalinger?";
cout<<"\\n --------------------------------------";
cout<<"\\n\\n maandlig (1)";
cout<<"\\n\\n pr kvartal (2)";
cout<<"\\n\\n halvaarlig (3)";
cout<<"\\n\\n--------------------------------------";
cout<<"\\n\\n tast her: ";
cin>> valg;
}
while ((valg!=1)&&(valg!=2)&&(valg!=3));
if(valg==1)
{
t=0.083;
ti=T*12;
}
else
{
if(valg==2)
{
t=0.25;
ti=T*4;
}
else
{
t=0.5;
ti=T*2;
}
}
system("cls");
cout<<"\\n hvornaar skal maalingen starte?";
cout<<"\\n (tael bagfra)";
cout<<"\\n\\n\\n tast her: ";
cin>>k;
K=ti-k;
system("cls");
cout<<"\\n hvormange simuleringer skal programmet lave? ";
cin>>n;
if(valg==1)
{
sim1(n,k,K,ti,t,X,S0,r,vol,T);
}
else
{
if(valg==2)
{
sim2(n,k,K,ti,t,X,S0,r,vol,T);
}
else
{
sim3(n,k,K,ti,t,X,S0,r,vol,T);
}
}
return 0;
}
void inddata1(int &T, double r[max], double &vol)
{
int i;
do
{
system("cls");
cout<<"\\n hvormange aar loeber din option? ";
cin>>T;
}
while ((T!=1)&&(T!=2)&&(T!=3)&&(T!=4)&&(T!=5));
for(i=0; i<T; i++)
{
cout<<"\\n\\n hvad er renten for aar "<<i<<" ? ";
cin>>r;
}
cout<<"\\n\\n hvad er volatiliteten? ";
cin>>vol;
}
void kurs(double &S0, double &X)
{
char svar;
system("cls");
cout<<"\\n hvad er din start kurs? ";
cin>>S0;
cout<<"\\n er din strik price anderledes end din start kurs? ";
cin>>svar;
if((svar=='n')||(svar=='N'))
{
X=S0;
}
else
{
cout<<"\\n hvad er din strik kurs ";
cin>>X;
}
}
void sim1(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T)
{
double smiddel, kavg, e, nykurs, kontrol, C;
int i, j;
kavg=0;
nykurs=S0;
for(i=0; i<n; i++)
{
smiddel=0;
for(j=0; j<ti; j++)
{
e=2; //skal tildeles et tilfældigt normaltfordelt tal med middel værdi 0 og stadard afvigelse 1
if(j<=11)
{
nykurs=nykurs*exp((r[1]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>11)&&(j<=23))
{
nykurs=nykurs*exp((r[2]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>23)&&(j<=35))
{
nykurs=nykurs*exp((r[3]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>35)&&(j<=47))
{
nykurs=nykurs*exp((r[4]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
nykurs=nykurs*exp((r[5]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
}
}
}
}
smiddel=smiddel/k;
kontrol=smiddel-S0;
if(kontrol<=0)
{
smiddel=S0;
}
kavg=kavg+smiddel;
}
C=exp(-(r[T]*T))*kavg/n;
system("cls");
cout<<"\\n\\n\\n\\n\\n\\n\\n options prisen er "<<C;
}
void sim2(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T)
{
double smiddel, kavg, e, nykurs, kontrol, C;
int i, j;
kavg=0;
nykurs=S0;
for(i=0; i<n; i++)
{
smiddel=0;
for(j=0; j<ti; j++)
{
e=2; //skal tildeles et tilfældigt normaltfordelt tal med middel værdi 0 og stadard afvigelse 1
if(j<=3)
{
nykurs=nykurs*exp((r[1]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>3)&&(j<=7))
{
nykurs=nykurs*exp((r[2]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>7)&&(j<=11))
{
nykurs=nykurs*exp((r[3]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>11)&&(j<=15))
{
nykurs=nykurs*exp((r[4]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
nykurs=nykurs*exp((r[5]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
}
}
}
}
smiddel=smiddel/k;
kontrol=smiddel-S0;
if(kontrol<=0)
{
smiddel=S0;
}
kavg=kavg+smiddel;
}
C=exp(-(r[T]*T))*kavg/n;
system("cls");
cout<<"\\n\\n\\n\\n\\n\\n\\n options prisen er "<<C;
}
void sim3(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T)
{
double smiddel, kavg, e, nykurs, kontrol, C;
int i, j;
kavg=0;
nykurs=S0;
for(i=0; i<n; i++)
{
smiddel=0;
for(j=0; j<ti; j++)
{
e=2; //skal tildeles et tilfældigt normaltfordelt tal med middel værdi 0 og stadard afvigelse 1
if(j<=1)
{
nykurs=nykurs*exp((r[1]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>1)&&(j<=3))
{
nykurs=nykurs*exp((r[2]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>3)&&(j<=5))
{
nykurs=nykurs*exp((r[3]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>5)&&(j<=7))
{
nykurs=nykurs*exp((r[4]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
nykurs=nykurs*exp((r[5]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));
if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
}
}
}
}
smiddel=smiddel/k;
kontrol=smiddel-S0;
if(kontrol<=0)
{
smiddel=S0;
}
kavg=kavg+smiddel;
}
C=exp(-(r[T]*T))*kavg/n;
system("cls");
cout<<"\\n\\n\\n\\n\\n\\n\\n options prisen er "<<C;
}