- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Fortran90のプログラムについて)
Fortran90で1次元のランダムウォークを数え上げるプログラムがうまくいかない
このQ&Aのポイント
- Fortran90を使って1次元のランダムウォークを数え上げるプログラムを作成していますが、うまくいきません。
- 与えられたステップ数とxの値に基づいて、すべての可能な歩行パターンをカウントするプログラムを書いています。
- 既存のプログラムを基にして任意のステップ数を入力できるプログラムを作成しましたが、期待した結果が得られません。ご教授いただけませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
元のプログラムを再現するなら allocate(a(2**n, n)) じゃないかなぁと思うのでこれでいくんだけど, 例えば a(:, 1) は 「最初の 2**(n-1) 個が 1, 次の 2**(n-1) 個が -1」 ですね. で, a(:, 2) は 「2**(n-2) 個ずつ 1 と -1 を繰り返す」 ですね. ということで, a(:, l) は 「2**(n-l) 個ずつ 1 と -1 を繰り返す」 ことになります. つまり, do l = 1, n do i = 1, 2**n, 2**(n-l+1) a(i:i+2**(n-l)-1) = 1 a(i+2**(n-l):i+2**(n-l+1)-1) = -1 end do end do で終わり... じゃないかな.
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.2
よく考えたら, 「最終的にできるパターン」はわかっているんだよなぁ. そのパターンができるようにプログラムを作る方が簡単かもしれない.
質問者
お礼
回答ありがとうございます。 そうなんです。 最終的にどんなパターンになるかは分かっているんですが… そのように考えてみます。 アドバイスありがとうございます。 もし具体的にプログラミングがお分かりでしたらまたご教授お願いします。
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
元のプログラムが「3ビットの 2進数を 000 から 1 ずつ増やすこと」と本質的に同じであることに気付けば簡単かな.
質問者
お礼
回答、ありがとうございます。 「3ビットの2進数を000から1ずつ増やすこと」ですか。 プログラミングは少し苦手でまだいまいちピンときませんが… さらに質問で申し訳ありませんが、この考えを基にステップ数を3以外にしても可能でしょうか?
お礼
回答ありがとうございます。 なるほど… 私は根本的に配列について勘違いしていたようです。 そのようにして作ってみます。 たびたびのご回答、ありがとうございました。 また、何かあったらよろしくお願いします。