ページ 1 / 1
fortranのwrite文について
Posted: 2012年9月14日(金) 21:14
by 長い
WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),fx(I),fy(I),NAT(I),I=1,NP)
600 format(I8,2E20.10,2F20.10,I5)
上のように書いたんですが、実行したら
WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),fx(I),fy(I),NAT(I)
1
Error: Expected PARAMETER synbol in complex constant at (1)
のようなメッセージがでたので、出来る方は教えて直してくれませんか。
Re: fortranのwrite文について
Posted: 2012年9月14日(金) 21:42
by box
長い さんが書きました:WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),fx(I),fy(I),NAT(I),I=1,NP)
600 format(I8,2E20.10,2F20.10,I5)
I を I8 で。
X(I), Y(I) を 2E20.10 で。
vvx(i), vvy(i) を 2F20.10 で。
fx(I) を I5 で。
fy(I), NAT(I) に関する書式指定はどうなるんでしょうか。
変数名の大文字と小文字の区別は、FORTRANではどうなっていたでしょうか。同一視するんでしたっけ?
Re: fortranのwrite文について
Posted: 2012年9月14日(金) 21:47
by 長い
すみませんが
WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),Fsurfx(I),Fsurfy(I),MAT(I),I=1,NP)
600 format(I8,2E20.10,2F20.10,2F15.10,I5)
このように書いても同じメッセージが出ました。
Re: fortranのwrite文について
Posted: 2012年9月14日(金) 22:07
by box
長い さんが書きました:すみませんが
WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),Fsurfx(I),Fsurfy(I),MAT(I),I=1,NP)
600 format(I8,2E20.10,2F20.10,2F15.10,I5)
このように書いても同じメッセージが出ました。
えっと、そもそも、WRITE文のWやformat文のfを7カラム目以降に書いていて、
かつ、format文の番号600は1~5カラムに書く、ということはできているんですよね。
「そんなことは知っている!」ということでしたら、失礼いたしました。
Re: fortranのwrite文について
Posted: 2012年9月14日(金) 22:17
by 長い
7カラム目以降に書くなどのことはちゃんとしました。
Re: fortranのwrite文について
Posted: 2012年9月14日(金) 22:22
by box
長い さんが書きました:
上のように書いたんですが、実行したら
WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),fx(I),fy(I),NAT(I)
1
Error: Expected PARAMETER synbol in complex constant at (1)
codeタグを使うなどの方法で、Error:の上の行の「1」という文字が
どの位置にあるかを正しく教えていただけますでしょうか。
Re: fortranのwrite文について
Posted: 2012年9月14日(金) 22:55
by 長い
WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),fx(I),fy(I),NAT(I),I=1,NP)
c
600 format(I8,2E20.10,2F20.10,2F15.10,I5)
上のように書いてありますが、 別のところに(1)は書いてありません。でもメッセージは
Error: Expected PARAMETER synbol in complex constant at (1)
ようです。よろしくお願いします。
Re: fortranのwrite文について
Posted: 2012年9月14日(金) 23:02
by box
長い さんが書きました:
1
Error: Expected PARAMETER synbol in complex constant at (1)
のようなメッセージがでたので、出来る方は教えて直してくれませんか。
このようなメッセージが出たんですよね。
Error:の行にある単独の「1」については、
たぶんコンパイラーが「ここにエラーがあるよ」と教えてくれているような気がするのです。
質問者さんが書かれていないことは承知しています。
そもそも、synbolのスペルからして正しくありませんので、ここは一つ、
コンパイラーが吐き出したエラーメッセージを、正確に、カラムをきれいにそろえて
書いていただく必要がありそうです。
codeタグの使い方はおわかりですか?
Re: fortranのwrite文について
Posted: 2012年9月14日(金) 23:18
by 長い
すみませんが、
fortranは途中から勉強している所なんですから、codeタグの使い方あまり分かりませんね。
よろしくお願いします。
Re: fortranのwrite文について
Posted: 2012年9月14日(金) 23:54
by box
このページの上の方に、コードの貼り付け方が書いてあります。
codeタグの使い方について書いてありますので、参照なさってください。
ちなみに、codeタグの使い方と、Fortran言語の経験の長短とは関係ありません。
Re: fortranのwrite文について
Posted: 2012年9月15日(土) 00:48
by へにっくす
長い さんが書きました: すみませんが、
fortranは途中から勉強している所なんですから、codeタグの使い方あまり分かりませんね。
よろしくお願いします。
FORTRANのスキル全然関係ないよ。
このページの上の方にある、赤い四角で囲ったところに、
※コードを貼り付ける場合は[code] と [/code] で囲って下さい。詳しくはこちら
とあるのが見えないのでしょうか?
まあとりあえず、掲示したソースを
[code=fortran
][/code
]で囲むと、以下のようになります。
コード:
c--------1---------2---------3---------4---------5---------6---------7---------8
WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),Fsurfx(I),Fsurfy(I),MAT(I),I=1,NP)
600 format(I8,2E20.10,2F20.10,2F15.10,I5)
WRITE行の最後から2番目で l=1 とあるけどこれは?
許されている書き方か?
Re: fortranのwrite文について
Posted: 2012年9月15日(土) 14:38
by hoge
長い さんが書きました:7カラム目以降に書くなどのことはちゃんとしました。
ということは、固定書式でプログラム書いているんですね
固定書式の場合、普通は72カラムまでしかプログラムを書けなかったと思うけど
WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),Fsurfx(I),Fsurfy(I),MAT(I),I=1,NP)
が72カラムまでに収まらないけど、いいの?
Re: fortranのwrite文について
Posted: 2012年9月16日(日) 01:15
by かずま
Linux (Ubuntu 10.04) に gfortran をインストールして試してみました。
コード:
integer I, NP, NAT(3)
real X(3), Y(3), vvx(3), vvy(3), Fsurfx(3), Fsurfy(3)
NP = 3
do 10 I = 1, NP
X(I) = I + 2
Y(I) = I + 3
vvx(I) = I + 4
vvy(I) = I + 5
Fsurfx(I) = I + 6
Fsurfy(I) = I + 7
10 NAT(I) = I + 8
c--------1---------2---------3---------4---------5---------6---------7---------8
WRITE(26,600)
* (I,X(I),Y(I),vvx(i),vvy(i),Fsurfx(I),Fsurfy(I),NAT(I),I=1,NP)
600 format(I8,2E20.10,2F20.10,2F15.10,I5)
end
実行結果
コード:
1 0.3000000000E+01 0.4000000000E+01 5.0000000000 6.0000000000 7.0000000000 8.0000000000 9
2 0.4000000000E+01 0.5000000000E+01 6.0000000000 7.0000000000 8.0000000000 9.0000000000 10
3 0.5000000000E+01 0.6000000000E+01 7.0000000000 8.0000000000 9.0000000000 10.0000000000 11
なお、write文を次のように 1行で書くと、次のようなコンパイルエラーになりました。
コード:
c--------1---------2---------3---------4---------5---------6---------7---------8
WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),Fsurfx(I),Fsurfy(I),NAT(I),I=1,NP)
コード:
kazuma@ubuntu-vm:~/tmp$ gfortran a4.f
a4.f:13.21:
WRITE(26,600)(I,X(I),Y(I),vvx(i),vvy(i),Fsurfx(I),Fsurfy(I),NAT(I)
1
Error: Expected PARAMETER symbol in complex constant at (1)
Re: fortranのwrite文について
Posted: 2012年9月20日(木) 00:51
by かずま
hoge さんの指摘で疑問が解決したはずなのに、どうして
最初の質問者は何の反応もしないのでしょうか?
私は、エラーメッセージが疑問だったのでちょっと調べてみました。
まず、73カラム以降の ,I=1,NP) が無視されなければ、これは、(xxx,I=1,NP) と
いう「DO型並び」となり、「xxx」が NP回繰り返されるはずでした。
しかし、それがないので「(xxx」は、単なる出力並びとなります。
問題は最初の「(」です。出力並びは、変数だけでなく定数でも式でもよいので
「(」は式の始まりと解釈されるのでしょう。
ところが、「(I,」まで来たところで、式が破綻します。
Fortran の式では、数値が来るところに「(定数,定数)」が来ると、
それは複素数定数だと解釈します。
定数は、数字以外に PARAMETER宣言されたシンボルでも構わないので、コンパイラは
「(I,」 の「,」で破綻しないように、「I」は PARAMETERシンボルであることを要求して、
「Error: Expected PARAMETER symbol in complex constant at (1)」とメッセージを
出しているのだろうと推察されます。