//Linearni generator slucajnih brojeva - LCG //by Markic Zeljko #include #include //ovo je procedura za LCG int LCG(double m, double a, double b, double y0) { FILE *fizlaz,*fizlaz2; double pom,pomy0; int i,n; //fajl, otvaranje if ( (fizlaz = fopen("rand.out", "w")) == NULL ) { printf("Error opening 'rand.out'"); exit(1); } if ( (fizlaz2 = fopen("stats.out", "w")) == NULL ) { printf("Error opening 'stats.out'"); exit(1); } // nikad se ne zna sta korisnik zeli printf("Koliko random brojeva je potrebno? "); scanf("%i",&n); printf("Svaka zvjezdica predstavlja generiran broj\nCtrl+Break za prekid\n"); fprintf(fizlaz2,"Linearni generator slucajnih brojeva\nnapomena: brojevi se pocinju ponavljati nakon odredjenog intervala, ovisno o LCG-u\nDetaljnije: http://fly.cc.fer.hr/~mrki/random/index.html\nBrojeva: %i\nNajmanji: 0\nNajveci: %.0f\nPodaci zapisani u file-u 'rand.out'",n,m); //najvaznija petlja for(i=0;i100000) { pom-=100000; y0+=pomy0*100000; while(y0>m*100000) y0-=m*100000; while(y0>m*10000) y0-=m*10000; while(y0>m*1000) y0-=m*1000; while(y0>m*100) y0-=m*100; while(y0>m*10) y0-=m*10; while(y0>m) y0-=m; } while(pom>1000) { pom-=1000; y0+=pomy0*1000; while(y0>m*100000) y0-=m*100000; while(y0>m*10000) y0-=m*10000; while(y0>m*1000) y0-=m*1000; while(y0>m*100) y0-=m*100; while(y0>m*10) y0-=m*10; while(y0>m) y0-=m; } while(pom-->0) { y0+=pomy0; while(y0>m*100000) y0-=m*100000; while(y0>m*10000) y0-=m*10000; while(y0>m*1000) y0-=m*1000; while(y0>m*100) y0-=m*100; while(y0>m*10) y0-=m*10; while(y0>m) y0-=m; } //y0=(a*y0+b)(mod m) // printf("%Lu\n",y0); // ovo je samo za internu provjeru fprintf(fizlaz,"%.0f\n",y0);printf("*"); } close(fizlaz); close(fizlaz2); printf("\nPodaci zapisani u file 'rand.out'"); return 1; } //Glavni program void main() { double y,a,b,m,y0; int kejs; clrscr(); printf("Program za generiranje pseudoslucajnih brojeva\nhttp://fly.cc.fer.hr/~mrki/random/index.html\n\nUnesite vas odabir generatora pseudoslucajnih brojeva:\n1 ANSIC\n2 APPLE\n3 Vlastiti odabir\n\n"); //skeniranje odgovora: scanf("%i",&kejs); //printf("%i",kejs);//ovo je samo za internu provjeru //ovdje je provjera koji je odgovor korisnik upisao. //puno lakse bi se rijesilo sa CASE ali ne da mi se sad prepravljati if (kejs==1) LCG(2147483648,1103515245,12345,12345); else { if (kejs==2) LCG(3435973836,1220703125,0,1); else { if (kejs!=3) printf("\n\nERROR!!!!!!!!!!!!!!\n"); else { printf("Unesite potrebne parametre za LCG\nOblik LCG(m,a,b,yo)\n"); scanf("\nUnesite m : %f",&m); scanf("\nUnesite a : %f",&a); scanf("\nUnesite b : %f",&b); scanf("\nUnesite yo : %f",&y0); LCG(m,a,b,y0); }}} //kraj, ceka se korisnik da pritisne bilo koju tipku getch(); }