Fortran90のプログラムについて
大学で卒論のためにFortran90でランダムウォークのプログラムを作ってるんですが…2週間悩んでるんですが、できないところがあります。
「1次元のランダムウォークにおいて、ステップ数Nとxの値を与えたときのすべての可能な歩行を数え上げるプログラムを書け」というものです。
直接ステップ数を書き込んだプログラムを基にして任意のステップ数を入力するプログラムを作ってみたんですが、うまくいきません。
integer :: a(100,20), x, i1, i2, i3
x = 0
do i1 = -1, 1, 2;do i2 = -1, 1, 2;do i3 = -1, 1, 2
x = x + 1
a(x, 1) = i1;a(x, 2) = i2;a(x, 3) = i3
end do;end do;end do
end
が基にしたプログラムです。これはステップ数が'3'なので実行結果は「-1-1-1,-1-11,-11-1,-11-1,-111,1-1-1,11-1,111」というxの変位の仕方が出ます。
integer, allocatable :: a(:,:)
integer :: i, n, x, l
print *, 'ステップ数を入力:'; read *, n
allocate(a(n, 2**n))
do l = 1, n
do i = -1, 1, 2
x = x + 1
a(x, l) = i
end do
end do
end
という風に作ってみたんですが、'3'を入力しても同じ結果が出ません。わかりにくい文章で申し訳ないですがどなたかご教授お願いします。
補足
150000では走りました。 200000にすると以下のようなエラーが出ました。 This problem is probably due to using incompatible versions of the cygwin DLL. Search for cygwin1.dll using the Windows Start->Find/Search facility and delete all but the most recent version. The most recent version *should* reside in x:\cygwin\bin, where 'x' is the drive on which you have installed the cygwin distribution. Rebooting is also suggested if you 250000では同じようにsegmentation faultが出て止まりました。 言い忘れたのですが、このプログラムはmainと複数のsubroutineで構成されています。問題の配列が書かれているファイルがmainに最初にincludeされていて、該当の配列部分が全て変更されるようになっています。 cygwinの限界なんですかね…。