// PROGRAM box // 箱の中を運動する粒子のシミュレーション #include "TrueBASIC.h" int main(); void initial(int *N, int *tmax); void move(int N, int tmax); int main() { int N, tmax; GWopen(0); initial(&N, &tmax); move(N, tmax); // 粒子が孔を通る GWquit(); return 0; } void initial(int *N, int *tmax) { char Stmp1_[_LBUFF_]; rnd(-1); printf("number of particles = "); fgets(Stmp1_, _LBUFF_, stdin); sscanf(Stmp1_, "%d", N); (*tmax) = 20*(*N); GWindow((float)(-0.01*(*tmax)), (float)(-0.01*(*N)), (float)(1.01*(*tmax)), (float)(1.01*(*N))); GWsetpen(BLACK, -1, -1, 4); GWrect(0.0f, 0.0f, (float)((*tmax)), (float)((*N))); GWsetpen(BLUE, -1, -1, -1); GWline(0.0f, (float)(0.5*(*N)), (float)((*tmax)), (float)(0.5*(*N))); // 平衡状態の値 } void move(int N, int tmax) { int nleft, r, t; nleft = N; // 最初はすべての粒子が左側の部屋にいる GWsetpen(-1, -1, -1, -1); GWsetpen(RED, -1, -1, -1); for(t = 1; t <= tmax; ++t) { // 乱数を生成し粒子を動かす r = (int)(N*rnd(0)) + 1; if(r <= nleft) --nleft; else ++nleft; GWline2((float)(t), (float)(nleft)); } }