Witam!
Chciałabym prosić o pomoc w wyjaśnieniu problemu z niżej zamieszczonym programem. W woli wprowadzenia program ten liczy średni kwadrat przemieszczenia błądzącej cząsteczki w przestrzeni dwuwymiarowej. Dodatkowo ma za zadanie wypisanie grupy zmiwnnych x i y w postaci tablic, a następnie wydrukowanie ich w pliku o rozszerzeniu .dat. I tu wlaśnie pojawia się problem, ponieważ w stworzonym pliku program wypisuje mi same zera, choć podczas kompilacji wylicza prawidłowo wartości x i wartości y przy zadanej liczbie prób. Przypuszczam,że jest gdzieś błąd przy zapisie tablic(aczkolwiek są to tylko moje przypuszczenia), jednak ze względu na brak doświadczenia w programowaniu nie jestem w stanie go samodzielnie odnaleźć.
# include <stdio.h>
# include <math.h>
# include <stdlib.h>
main()
{
int ll,i, proba, Np, Nk;
long int zmiana, k, ile_zmian, SEED, SEED_0, x, y, xt[601], yt[601];
float MaxInt, RMaxInt,xi;
float sumar2,r2,A;
//DANE
Np=10; // ile powtórzen/prób błądzenia
k=50; // czas blądzenia = calkowita ilosc kroków
ile_zmian= (int) k;
SEED_0=12347;
MaxInt=32768.0; // 2^15
//OBLICZENIA
RMaxInt=1.0/MaxInt;
for (proba=1; proba<=Np; ++proba) {
x=0; // początkowe położenie
y=0;
SEED=SEED_0+2*proba;
srand(SEED); //inicjalizacja generatora z ziarnem SEED
for (zmiana=0; zmiana<=ile_zmian; ++zmiana) {
xi=rand()*RMaxInt; // rzeczywista liczba losowa z przedziału (0,1)
ll=(int)(4*xi+1); // naturalna liczba losowa z przedziału <1,5>
switch (ll){
case 1:
x=x+1;
break;
case 2:
x=x-1;
break;
case 3:
y=y+1;
break;
case 4:
y=y-1;
break;
//zapamietaj x i y jako xt[] i yt[]
xt[zmiana]=x;
yt[zmiana]=y;
}
}
r2=x*x+y*y;
sumar2=sumar2+r2;
// oblicz kwadrat odleglości po K krokach
printf("proba=%4d zmiana= %4d x=%4d y=%4d r2=%8.1f sumar2=%8.1f\n ", proba,zmiana, x, y, r2,sumar2);
}
A=sumar2/Np;
printf("A=%8.1f\n ", A);
FILE *wyniki = fopen("XYtoru.dat", "a");
for (i=1; i<=ile_zmian; ++i) {
fprintf(wyniki,"%4d %8.1f %5.2f\n", i, xt[i], yt[i]);
fclose(wyniki);
}
system("Pause");
}