![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
大学で卒論のために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'を入力しても同じ結果が出ません。わかりにくい文章で申し訳ないですがどなたかご教授お願いします。
No.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
で終わり... じゃないかな.
回答ありがとうございます。
なるほど…
私は根本的に配列について勘違いしていたようです。
そのようにして作ってみます。
たびたびのご回答、ありがとうございました。
また、何かあったらよろしくお願いします。
No.2
- 回答日時:
よく考えたら, 「最終的にできるパターン」はわかっているんだよなぁ.
そのパターンができるようにプログラムを作る方が簡単かもしれない.
回答ありがとうございます。
そうなんです。
最終的にどんなパターンになるかは分かっているんですが…
そのように考えてみます。
アドバイスありがとうございます。
もし具体的にプログラミングがお分かりでしたらまたご教授お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vba GetAsyncKeyState関数について 1 2023/08/24 12:08
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:13
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
- Ruby VBA 2 2023/01/14 14:14
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
不具合が発生(API・C言語)
-
fortran77 自宅ではコンパイル...
-
fortran if文
-
変数の値が勝手に変化する原因
-
ProC 固定SQLでNULLってどう表...
-
C言語 バッファについて。
-
Fortran90のプログラムについて
-
Fortran90についての質問です。
-
4桁の数値を逆に表示されるプ...
-
乱数を扱いたい
-
HeapDestroyを安全に行う方法
-
プログラミング(自由課題)
-
ROBOTC の bSoundActive 変数
-
CGIを作成していて不明な記号が
-
C言語のプログラムについてです...
-
C#でボタンを押したら入力され...
-
バグが分かりません。
-
BASICプログラム入門 副書名 プ...
-
N88basicを用いたGPIB制御
-
ruby for文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
プログラミング
-
ruby
-
変数の値が勝手に変化する原因
-
JCLの基本について教えてください
-
Fortran90についての質問です。
-
fortran if文
-
3つの整数のうち奇数のみを表示...
-
Sublime Text 3でのFortranプロ...
-
Matlabについて質問2
-
ProC 固定SQLでNULLってどう表...
-
COBOLのピリオド
-
360度を超える角度
-
main関数終了時のreturnの意味は?
-
Visual Basic 三辺の長さ? ...
-
c言語です
-
C言語 バッファについて。
-
c言語のプログラミング 2つの整...
-
_dupenv_s関数でメモリリーク
-
N88basicを用いたGPIB制御
おすすめ情報