教えて!goo限定 1000名様に電子コミック1000円分が当たる!!

fortranを勉強していたのですがエラーがでてしまい、何時間かけても理解できなかったので質問させてください。

以下プログラム
program test

!ここからメインルーチン

!前準備 配列の用意

implicit none
integer N
integer,dimension(0:N,0:N) :: A
integer :: i,j,k

read * ,N

!初期状態の代入

do i=0,N
do j=0,N
A(i,j)=0
end do
end do


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

!サブルーチン 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


call insert


!サブルーチン 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 do

end program test

これでコンパイラすると

In file test.f90:48

subroutine visualize
1
Error: Unclassifiable statement at (1)
In file test.f90:69

subroutine insert
1
Error: Unclassifiable statement at (1)

とでます
いろいろ調べたのですが全くわかりませんでした
できればよろしくお願いします

このQ&Aに関連する最新のQ&A

配列 FORTRAN」に関するQ&A: fortran 配列実行結果

A 回答 (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
    • good
    • 0
この回答へのお礼

ありがとうございます^^

お礼日時:2012/01/25 12:15

しかもサブルーチン副プログラムの終わりが書いてないというおまけつき.

    • good
    • 0

program test


から
end program test
までが一つのプログラム単位になっているんだけど,あなたの書いたものだと,その中に
subroutine visualize
とか
subroutine insert
とかわけのわからない文が書かれている。いったいどういう意図なんだろう?
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QfortranでのNaNについて

お忙しい所、NaNについて回答お願い致します。

fortranでプログラムを使用して数値計算を行っていますが、計算途中で結果がNaNとなり困っています。
NaNは、0で除算を行なったり、負の数の指数を求めようとした時に出る無限大や定義できない値のようなのですが、式を見ても0で除算を行なったり、負の数の指数を求めようとしている所はありません。

もし同じような経験をされて見事解決された方、居られましたらその時の対処法をお聞かせ願えないでしょうか。
何卒よろしくお願い致します。

Aベストアンサー

環境(OSとコンパイラ)がわからないのでできるとは断言できないのですが、
浮動小数点レジスタの制御フラグをいじって、NaNが生成されたときに
例外が起きるようにしておけば、どこでNaNになるのかが絞れるのではないでしょうか?

いずれにしろ、注意深く値の変化を追っていくよりないと思います。

参考URL:http://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/pg/pg22.htm

QFortranについて教えてください

Fortran90で書かれた、又はこれから書く、プログラム実行したく
GCCのgfortranをインストールしました。OSは、Windows XPです。

ところが、コンパイルのところで、つまずいてなかなか進みません。
(gfortranは動いてますので、インストールに問題はないと思います。)

そこで、gfortranについて(オプション等)、解説しているサイトや文献を教えて頂きたいと思います。
英語力があまり無いので、日本語のものを紹介いただけると助かります。

また、十数年ぶりのフォートランですので(現在はVBAしか触っていません)、初学者向けだと、なお助かります。

どうか、よろしくお願いします。

Aベストアンサー

#3です。確認しました。確かに Fortran 95コンパイラのようですね。ただ、

GNU Fortran 95 (GCC) 4.2.0 20060504 (experimental)
Copyright (C) 2006 Free Software Foundation, Inc.

とありますし、webページを見てもまだ開発段階の初期のものとみなされて
いるようなので誰もが問題なく使えるものではなく、ドキュメントも整備されている途上ですから、この時点で日本語に訳したものとか初学者向けを期待するのは少々無理があるかと。
ただ、他の f95という名のコンパイラと同じように使えるようなのでそれ向けの解説を見たりすると良いかもしれません。

ところでgfortran はコンパイル対象のファイルの拡張子が .for だと、それは Fortran 77で書かれたものとしてみなすようですがそれは大丈夫なのですか?
COMMONブロックが、includeされる方のファイル(f2.fi)に記述されているのなら、include自体はできているようです。

コンパイルしようとしているのが無償公開されているものとのことですので、エラーを起こしている最初の部分のソース数行を貼り付たりファイルの場所を教えてもらうとかは可能ですか?

参考URL:http://www.scl.kyoto-u.ac.jp/scl/appli/appli_manual/SUNWspro/WS6U2/ja/mr/man1/f95.1.html

#3です。確認しました。確かに Fortran 95コンパイラのようですね。ただ、

GNU Fortran 95 (GCC) 4.2.0 20060504 (experimental)
Copyright (C) 2006 Free Software Foundation, Inc.

とありますし、webページを見てもまだ開発段階の初期のものとみなされて
いるようなので誰もが問題なく使えるものではなく、ドキュメントも整備されている途上ですから、この時点で日本語に訳したものとか初学者向けを期待するのは少々無理があるかと。
ただ、他の f95という名のコンパイラと同じように使えるようなので...続きを読む

QFortran コンパイルエラーについて

Fortranでコンパイルを行ったところ下記のエラーが発生し、原因がわからずにいます。
Fortranに関しては全くの初心者です。

コマンドプロンプト -----------------

C:\>g95 aaa.f90
Warning(115):Line 100 of aaa.f90 is being truncated
In file aaa.f90:100

 else if(hnum(mnum(ic-1,jc-1)) .eq. 45 .and. basin_num(nr) .eq. anum(mnum(ic-1,jc-1)) .and. znum(mnum(ic-1,jc-1)) .eq. 'obs') then
1
Error:Unexpected junk after ELSE statement at (1)

aaa.f90ファイルは他の方が作成したものでそのaaa.exeもあるので、見よう見まねで
Fortranをインストールし、試みましたがエラーでEXEが作成されませんでした。

Fortranはv4.1.2(g95 0.93)、使用しているOSはWindows7Professional(32ビット)です。

エラーがでている行のコードしか記述できず申し訳ないのですが、エラーの意味だけでも教えていただけますでしょうか。

ご教示頂きますようよろしくお願いします。

Fortranでコンパイルを行ったところ下記のエラーが発生し、原因がわからずにいます。
Fortranに関しては全くの初心者です。

コマンドプロンプト -----------------

C:\>g95 aaa.f90
Warning(115):Line 100 of aaa.f90 is being truncated
In file aaa.f90:100

 else if(hnum(mnum(ic-1,jc-1)) .eq. 45 .and. basin_num(nr) .eq. anum(mnum(ic-1,jc-1)) .and. znum(mnum(ic-1,jc-1)) .eq. 'obs') then
1
Error:Unexpected junk after ELSE statement at (1)

aaa.f90ファイルは他の方が作成したものでそのaa...続きを読む

Aベストアンサー

Line 100 of aaa.f90 is being truncated

ということは100行目が途中(132カラム)までしか読み込まれていません。
したがってelse if文が完結せずにわけのわからない文になっているわけです。

else if(hnum(mnum(ic-1,jc-1)) .eq. 45 .and. basin_num(nr) .eq. anum(mnum(ic-1,jc-1)) .and. znum(mnum(ic-1,jc-1)) .eq. 'obs') then

これをたとえば

else if(hnum(mnum(ic-1,jc-1)) .eq. 45 .and. basin_num(nr) .eq. anum(mnum(ic-1,jc-1)) &
& .and. znum(mnum(ic-1,jc-1)) .eq. 'obs') then

と2行に分ければうまくいくでしょう。

QFortran90についての質問です。

Fortran90に関する問題です。
「正の整数mを正の整数nで割った余りrを求める手順を、組み込み関数MOD(m,n)を用いずに、単一の算術式で表せ」
このプログラム文を以下のように作成しました。ファイル名は「amari.f90」にしました。
INTEGER::m,n,f,r
REAL::a,k
PRINT*,'Input 正の整数'
READ*,m,n
a=REAL(m)
k=a/n
f=INT(k)
IF(m>0,n>0) THEN
r=m-(f*n)
PRINT*,'余り=',r
END IF
END
そして、Cygwin画面上で
gfortran -o amari.exe amari.f90と打って、コンパイルしようとしたら以下のようなエラー文が出ました。

amari.f90:8.6:

IF(m>0,n>0) THEN
1
Error: Syntax error in IF-expression at (1)
amari.f90:11.3:

END IF
1
Error: Expecting END PROGRAM statement at (1)
プログラム文のどこの箇所が間違っているのかを教えていただけませんか?お願いします。

Fortran90に関する問題です。
「正の整数mを正の整数nで割った余りrを求める手順を、組み込み関数MOD(m,n)を用いずに、単一の算術式で表せ」
このプログラム文を以下のように作成しました。ファイル名は「amari.f90」にしました。
INTEGER::m,n,f,r
REAL::a,k
PRINT*,'Input 正の整数'
READ*,m,n
a=REAL(m)
k=a/n
f=INT(k)
IF(m>0,n>0) THEN
r=m-(f*n)
PRINT*,'余り=',r
END IF
END
そして、Cygwin画面上で
gfortran -o amari.exe amari.f90と打って、コンパイルしようとしたら以下のようなエラ...続きを読む

Aベストアンサー

FORTRAN77で終わってしまったものなので、FORTRAN90仁対しては不正確な知識で回答しますが

IF(m>0,n>0) THEN
この文、比較式の結合条件がわかりませんね、m>0かつn>0なのか、m>0またはn>0んのかコンパイラは判断できません。

普通は、if(m>0 .and. n>0)など、論理演算子を使って条件式を結合するように書きます。

ところで、このプログラム、ちゃんと動きませんよ、nに0がセットされたら、k=a/nで除算例外が発生します。
それに、わざわざrealに変換する意味が不明(というより不要)です。すべて、整数の演算で処理すればいいはずです。

QfortranのコンパイラでInvalid first characterとは!?

フォートランのコンパイラが欲しくて、cygwinをhttp://www.cygwin.com/からもらってきてインストールしました。簡単なプログラム

REAL a,b
a=10.0
b=a+5.0
WRITE(*,*) b
END


を作って動作確認しようとしたのですが、以下のようなメッセージがでました!exeファイルが出来てくれません。何をすべきかどなたか教えて下さい!環境はXPで、
http://www.ktokai-u.ac.jp/~center/ktnetwrk/vol31/pdf/vol31.pdf
この初学者向けに易しく書いてあるページを頼りに、この通りにインストールしました。




Administrator@PC ~
$ g77 test.for
test.for:1:
REAL a,b
^
Invalid first character at (^) [info -f g77 M LEX]
test.for:2:
a=10.0
^
Invalid first character at (^) [info -f g77 M LEX]
test.for:3:
b=a+5.0
^
Invalid first character at (^) [info -f g77 M LEX]
test.for:4:
WRITE(*,*) b
^
Invalid first character at (^) [info -f g77 M LEX]
test.for:5:
END
^
Invalid first character at (^) [info -f g77 M LEX]

フォートランのコンパイラが欲しくて、cygwinをhttp://www.cygwin.com/からもらってきてインストールしました。簡単なプログラム

REAL a,b
a=10.0
b=a+5.0
WRITE(*,*) b
END


を作って動作確認しようとしたのですが、以下のようなメッセージがでました!exeファイルが出来てくれません。何をすべきかどなたか教えて下さい!環境はXPで、
http://www.ktokai-u.ac.jp/~center/ktnetwrk/vol31/pdf/vol31.pdf
この初学者向けに易しく書いてあるページを頼りに、この通りにインストールしました。



...続きを読む

Aベストアンサー

行頭に6文字の空白(スペース)を入れないといけないですが、
そうされてますでしょうか?

Q衝撃波について

超音速で運動する物体が生じる衝撃波についてなのですが、以下の各点について詳しく知りたいと思います。
物理に詳しい方にお答えいただけると幸いです。

1. 無音で運動する物体は衝撃波を生じるのでしょうか?それとも物体自体が「音源」でないと衝撃波は生じないのでしょうか。(もちろん物体自体は超音速で運動しているという前提で)

2. 物体が音速を超える瞬間に、物体の中にいる人はなんらかの衝撃を感じるのでしょうか?

3. そもそも衝撃波とは何の波なんでしょうか。通常の音波と同じように空気の密・粗の波でしょうか?

4. 爆弾等が爆発したときに、周囲の空気の膨張する速度が音速を超えていたとすると、その「音速を超えた空気という物体」からは衝撃波が生じるのでしょうか?
また、仮に衝撃波が生じるとすると、それはいわゆる「爆風」と同じものなのでしょうか?

原理をちゃんと勉強すればいいのでしょうが、数式が苦手でどうしても…なので質問させていただきました。
いずれか1点についてのご回答でも大歓迎です。
よろしくお願いします。

Aベストアンサー

>物理に詳しい方にお答えいただけると幸いです。

衝撃波については、機械工学科や航空学科、
航空宇宙学科の授業にある、流体力学という
分野で詳しく学びます。

>1. 無音で運動する物体は衝撃波を生じるのでしょうか?

 生じます。音速(秒速約340m/秒)を超える
速度で飛行する航空機の周囲には衝撃波が生じて
います。

 空気や水などのように流れる物体を、流体といいます。
流体の性質は、その流れる速度、圧力、粘性(粘っこさ
というイメージです)などで決まりますが、
音速(マッハ1)を超えると、これら物理的性質が
大きく変化します。

 音速を超える速度で飛行する物体の周囲には
音速を超える空気の流れが生じます。この流れと
音速以下の空気の流れの間に★薄い空気の層が
でき、ここで圧力等の流体の物理的性質が
不連続(緩やかではなく、どっと変わるということです)
に変化します。

>3. そもそも衝撃波とは何の波なんでしょうか。通常の音波と同じように空気の密・粗の波でしょうか?

 ★この薄い空気の層を衝撃波というのです。
つまりこの層を境に、圧力が変化するので、
音速以下の空気の流れから、この衝撃波に
突っ込むと、大きな圧力の変化、つまり衝撃を
感じるわけです。

>2. 物体が音速を超える瞬間に、物体の中にいる人はなんらかの衝撃を感じるのでしょうか?

 瞬間的に大きな圧力の変化感じます。
昔、車にジェットエンジンをつけて
地上で音速を超えた速度を出した
人がいたのですが、その人の体験談
によると、音速を超えた瞬間に、大きな
爆発音が聞こえたそうです。
 圧力が瞬間的に大きくなるので、鼓膜が
大きく振動し、それが爆発音として聞こえた
ものと思います。

>4. 爆弾等が爆発したときに、周囲の空気の膨張する速度が音速を超えていたとすると、その「音速を超えた空気という物体」からは衝撃波が生じるのでしょうか?

 上の説明のとおり、音速を超えた速度を持つ
空気の流れと、音速以下の空気の流れに
生じる層が衝撃波ですから、そのとおり
衝撃波が生じます。

>また、仮に衝撃波が生じるとすると、それはいわゆる「爆風」と同じものなのでしょうか?

 爆風が音速を超えていないと衝撃波は生じません。
音速を超えた空気の流れを生じさせるには、
1気圧以上の圧力差が必要です。空気がすでに
1気圧あるわけですから、ここでさらに1気圧の圧力差
を生み出すのはかなり大変です。

 昭和の初期に、音速の空気の流れを発生させる
実験装置が作られ、この現物が今でも神奈川県
相模原市にある宇宙科学研究所に保存されて
いるのですが、その原理は2つの部屋を
小さな扉で仕切り、片方の部屋の空気を抜いて
真空にしておき、真ん中にあるこの小さな扉
を急に開くというもので、大気圧と真空という差で
1気圧の圧力差を作っていました。
 

>物理に詳しい方にお答えいただけると幸いです。

衝撃波については、機械工学科や航空学科、
航空宇宙学科の授業にある、流体力学という
分野で詳しく学びます。

>1. 無音で運動する物体は衝撃波を生じるのでしょうか?

 生じます。音速(秒速約340m/秒)を超える
速度で飛行する航空機の周囲には衝撃波が生じて
います。

 空気や水などのように流れる物体を、流体といいます。
流体の性質は、その流れる速度、圧力、粘性(粘っこさ
というイメージです)などで決まりますが、
音速(...続きを読む

Qfortranでのcsvファイルを出力する方法

fortranでコンマ切りテキストファイル(CSVファイル)を
出力する方法をご存知の方、いらっしゃいませんでしょうか?


私が使用した処理系(intel fortran 8.0 for Windows)で

write(600,*)1.4,',',2.33,',',30.11

というコードを実行させると
fort.600 というファイル名のテキストファイルが生成されて
中身は

___1.400000_____,___2.330000_____,___30.11000____

となります。( _ は半角空白を意味します。)
私が欲しいのは余計な空白の入っていない

1.4,2.33,3.11

または

1.400000,2.330000,30.11000

という出力なのですが、どのような書式指定をすれば
これが可能なのでしょうか?

全くのfortran初心者です。よろしくご教示ください。

Aベストアンサー

汎用的な方法は、#2さんのように文字列として書き出して、adjustlやtrimを使って空白を取るのでしょうが、Intel Fortran8.0ならば以下のようなformatでできます。
write(600,10) 1.4,',',2.33,',',30.11
10 format(f0.6,a1,f0.6,a1,f0.6)
マイナス記号があっても問題ないです。書式幅が0の指定はIとFに使えます。なかなか便利ですよ。ちなみにConpaq Visual Fortranでも使えます。

Qエクセルで計算すると2.43E-19などと表示される。Eとは何ですか?

よろしくお願いします。
エクセルの回帰分析をすると有意水準で2.43E-19などと表示されますが
Eとは何でしょうか?

また、回帰分析の数字の意味が良く分からないのですが、
皆さんは独学されましたか?それとも講座などをうけたのでしょうか?

回帰分析でR2(決定係数)しかみていないのですが
どうすれば回帰分析が分かるようになるのでしょうか?
本を読んだのですがいまいち難しくて分かりません。
教えてください。
よろしくお願いします。

Aベストアンサー

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるための指数表記のことですよ。
・よって、『2.43E-19』とは?
 2.43×1/(10の19乗)で、
 2.43×1/10000000000000000000となり、
 2.43×0.0000000000000000001だから、
 0.000000000000000000243という数値を意味します。

補足:
・E+数値は 10、100、1000 という大きい数を表します。
・E-数値は 0.1、0.01、0.001 という小さい数を表します。
・数学では『2.43×10』の次に、小さい数字で上に『19』と表示します。→http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E8%A1%A8%E8%A8%98
・最後に『回帰分析』とは何?下の『参考URL』をどうぞ。→『数学』カテゴリで質問してみては?

参考URL:http://ja.wikipedia.org/wiki/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるた...続きを読む

Q2変数の2次導関数の離散化(差分)

関数f(x,y)の2次導関数である∂f(x,y)/∂x∂yを数値計算により,
より高精度で計算したいと考えているのですが,∂f(x,y)/∂x∂x
のように同じ変数に対する偏導関数の離散化方法しか見つけることが
できませんでした.

そこで,ご存じの方がいらっしゃいましたら,∂f(x,y)/∂x∂yのような2変数の導関数の高次計算法をご教示頂けないでしょうか.
宜しくお願い致します.

またそれらについて詳細に記述された文献等もあれば,教えて頂ければ幸いです.

Aベストアンサー

2階偏微分方程式を差分法を用いて離散化する時は境界内をx方向にh、y方向にkのメッシュを掛けて、その交点(i,j)における値f(i,j)と隣接する点との関係に書きなおす必要があります。ご質問の,∂f(x,y)/∂x∂yは
  ∂f(x,y)/∂x∂y=(f(i+1,j+1)-f(i+1,j-1)-f(i-1,j+1)+f(i-1,j-1))/(4hk)
で与えられます。さらに隣までの関係を取り入れれば差分式としての精度は上がりますが、私の経験では面倒なだけで上式が扱いやすく、メッシュの切り方が適切ならば非線形の場合も収束もが早かったように思います。
境界条件も差分化して適切に処理すれば数値解としての正解に辿りつくはずです。

Qintel fortranのエラーで困ってます.

character chrc*49・・・
real Tmom,Mw,H0・・・
・・・
・・
write(chrc,'(a7,e12.3,a5,f7.2,a12,f6.1)') 'Mo[Nm]=',Tmom*1.e18,' Mw=', Mw,' Depth[km]=', H0
・・・
・・

をコンパイルすると,以下のようなエラーが出ます.

Main/graphics.f(93): error #5082: 構文エラー、END-OF-STATEMENT が見つかりました、 ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT> ... の 1 つを指定してください。
write(chrc,'(a7,e12.3,a5,f7.2,a12,f6.1)') 'Mo[Nm]=',Tmom*1.e18,' Mw=', Mw,' Depth[km]=', H0
----------------------------------------------------------------------------------^
コンパイルは Main/graphics.f で異常終了しました (コード 1)。
(矢印の位置はH0の一文字後)

原因がイマイチよく分かりません...
考えられる原因・解決法を教えて頂けると幸いです.
よろしくお願いします.

character chrc*49・・・
real Tmom,Mw,H0・・・
・・・
・・
write(chrc,'(a7,e12.3,a5,f7.2,a12,f6.1)') 'Mo[Nm]=',Tmom*1.e18,' Mw=', Mw,' Depth[km]=', H0
・・・
・・

をコンパイルすると,以下のようなエラーが出ます.

Main/graphics.f(93): error #5082: 構文エラー、END-OF-STATEMENT が見つかりました、 ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT> ... の 1 つを指定してください。
write(chrc,'(a7,e12.3,a5,f7.2,a12,f6.1)'...続きを読む

Aベストアンサー

ファイルの拡張子が.fであるからfixed-formatだと判断されて,1行あたりの最大文字数が72になっている。
継続行を使って2行に分割するのが吉。


人気Q&Aランキング