[ srba90 @ 07.01.2013. 20:54 ] @
Pokusavam da napravim program koji ce da simulira random walk u nekih 1000 iteracija ali sam odavno radio u C++ pa se ne secam bas dobro svega. Bio bih zahvalan ako neko moze da na brzinu pregleda kod i napise zasto program ne radi. main.cpp: #include <iostream> #include <stdio.h> #include "randomwalk.h" using namespace std; int main() { int N(10000); //broj koraka za randomwalk int N2(1000); //broj randomwalkova double steplength(1); //duzina jednog koraka double *R; R= new double[N2]; //initial seed int seed (11324); for(int i=0;i<N2;++i) { R=randomwalk(seed,N,steplength); ++seed; } cout <<R[23]; delete []R; // delete []R; return 0; } randomwalk.h: #ifndef RANDOMWALK_H_ #define RANDOMWALK_H_ double randomwalk(int seed, int N, double steplength); #endif /* RANDOMWALK_H_ */ randomwalk.cpp: #include <iostream> #include <fstream> #include <cmath> #include "randomwalk.h" double randomwalk(int seed, int N, double steplength) { //random number generator unsigned int c(16807); unsigned int p(21474837); unsigned int *r; double *randomnumb; r= new unsigned int[N+1]; randomnumb=new double [N]; r[0]=seed; randomnumb[0]=r[0]; randomnumb[0]=randomnumb[0]/p; //generisanje random brojeva for(int i=1;i<N+1;++i) { r=r[i-1]*c%p; randomnumb[i-1]=r; randomnumb[i-1]=randomnumb[i-1]*2*3.14159265/p; } //x i y komponente svakog vektora double *x,*y; x= new double [N]; y= new double [N]; for(int i=0;i<N;++i) { x=cos(randomnumb)*steplength; y=sin(randomnumb)*steplength; } //merenje duzine vektora double Rx(0),Ry(0); for(int i=0;i<N;++i) { Rx=Rx+x; Ry=Ry+y; } double R2; R2=Rx*Rx+Ry*Ry; delete[] r; delete[] randomnumb; delete[] x; delete[] y; return R2; } |