- ベストアンサー
fortran errorについて
- fortranを勉強していたのですがエラーがでてしまい、何時間かけても理解できなかったので質問させてください。
- 以下のプログラムをコンパイラするとエラーが出ます。
- いろいろ調べたのですが全くわかりませんでした。どなたか助けていただけると幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
以下のような感じで良いかと思います。参考になれば幸いです。 program test ! ここからメインルーチン ! 前準備 配列の用意 implicit none integer n ! ★nのサイズは実行時までわからないのでallocatableとして実行時に決定する integer, allocatable, dimension (:, :) :: a integer :: i, j, k read *, n allocate (a(0:n,0:n)) ! ★nの値を読み込んでから配列領域を確保する ! 初期状態の代入 ! do i = 0, n ! do j = 0, n ! a(i, j) = 0 ! end do ! end do ! ★上記は以下のようにより簡単に書けます a = 0 do i = n/2, n - 1 a(n/2, i) = 1 end do do i = n/2, n - 1 a(n/2+1, i) = -1 end do ! ループ 50回ループさせる do k = 0, 50 ! 状態の表示 call visualize call insert end do contains !★サブルーチンはまとめてcontainsの後ろに書く ! サブルーチン visualize subroutine visualize do i = 0, n do j = 0, n if (a(i,j)==1) write (*, '(A1)', advance='NO') '*' if (a(i,j)==0) write (*, '(A1)', advance='NO') ' ' if (a(i,j)==-1) write (*, '(A1)', advance='NO') '+' end do write (*, *) end do end subroutine visualize ! サブルーチン insert subroutine insert do i = 0, n do j = 0, n if (a(i,j)==1) a(i, j) = -1 if (a(i,j)==0) a(i, j) = max(0, a(i-1,j), a(i,j-1), a(i,j+1), & a(i+1,j)) if (a(i,j)==-1) a(i, j) = 0 end do end do end subroutine insert end program test
お礼
ありがとうございます^^