• 締切済み

FORTRAN95でハフモデルの計算をしようと思っています。

FORTRAN95でハフモデルの計算をしようと思っています。 ハフモデルをちょっと拡張して計算を行いたく、なかなかプログラムを組めていません。 一番苦戦しているのが、配列に数字を入れる方法です。 縦5、横9からなる配列Bを定義して、(Bの左上の要素はB11とします) 1列目の2~5行目に1~4の数字を入れ, 1行目の2列目から後ろには1~9を入れて、Bを表示したいです。 ほかの要素は実数なのでBは実数型で定義します。 Bの完成イメージとしては 0 1 2 3 4 5 6 7 8 9 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 です。スペース部分はコンマですが。 プログラムを REAL,DIMENSION(5,9)::B B=0 DO I4=1,4 B(2:5,1)=I4 DO IXW=10,80,10 XWEI=REAL(IXW)/10.0 B(1,2:9)=XWEI END DO END DO DO I5=1,5 WRITE(*,100) (B(I5,J5),J5=1,9) 100 FORMAT(20(',',F3.1)) END DO STOP END こうかくと、 ,0.0,8.0,8.0,8.0,8.0,8.0,8.0,8.0,8.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, のように表示されます。DO文の対になるEND DOよりしたではDOの最後の値しか使えないようです。 しかし、WRITE文をEND DOより中に入れると5×9ではなくもっと縦長の15×9のような配列が表示されてしまいます。 どなたか教えてください。お願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

人に聞くだけじゃなくって, 自分で考えるとか自力で調べるとかしてください. 少なくとも, forall を使う方は想像できるでしょ? もう一方も「なぜ i が 2回出てくるのか」を考えればそれなりに思い付くんではないかな.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「なぜそうなるのか」は自分できちんと調べてくださいとうち捨ててっと. Fortran95 だったら, わざわざ do をこんな風に使わなくてもいいじゃないの? B = 0 B(2:5, 1) = (/ (i, i=1, 4) /) B(1, 2:9) = (/ (i, i=1, 8) /) なり B = 0 forall(i=2:5) B(i, 1) = i-1 forall(i=2:9) B(1, i) = i-1 なりで終わってると思う. ああ, サイズが間違ってないか?

made_in_cue
質問者

補足

回答ありがとうございます。 シンプルに書く事ができました。 なぜDOを使ったかは、FORTRAN77の資料が多かったためです。便利な方法を知りませんでした。 次に横方向を0.5,1.0,1.5,と実数にしたいのですが、どうしたら良いのでしょうか? よろしくお願いします。