プロが教える店舗&オフィスのセキュリティ対策術

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のような配列が表示されてしまいます。

どなたか教えてください。お願いします。

A 回答 (2件)

「なぜそうなるのか」は自分できちんと調べてくださいとうち捨ててっと.



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
なりで終わってると思う. ああ, サイズが間違ってないか?

この回答への補足

回答ありがとうございます。
シンプルに書く事ができました。
なぜDOを使ったかは、FORTRAN77の資料が多かったためです。便利な方法を知りませんでした。

次に横方向を0.5,1.0,1.5,と実数にしたいのですが、どうしたら良いのでしょうか?

よろしくお願いします。

補足日時:2010/09/25 09:44
    • good
    • 0

人に聞くだけじゃなくって, 自分で考えるとか自力で調べるとかしてください.


少なくとも, forall を使う方は想像できるでしょ?
もう一方も「なぜ i が 2回出てくるのか」を考えればそれなりに思い付くんではないかな.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!