fortranのwrite文について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
長い

fortranのwrite文について

#1

投稿記事 by 長い » 13年前

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)

のようなメッセージがでたので、出来る方は教えて直してくれませんか。

box
記事: 2002
登録日時: 15年前

Re: fortranのwrite文について

#2

投稿記事 by box » 13年前

長い さんが書きました: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文について

#3

投稿記事 by 長い » 13年前

すみませんが
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)
このように書いても同じメッセージが出ました。

box
記事: 2002
登録日時: 15年前

Re: fortranのwrite文について

#4

投稿記事 by box » 13年前

長い さんが書きました:すみませんが
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文について

#5

投稿記事 by 長い » 13年前

7カラム目以降に書くなどのことはちゃんとしました。

box
記事: 2002
登録日時: 15年前

Re: fortranのwrite文について

#6

投稿記事 by box » 13年前

長い さんが書きました: 上のように書いたんですが、実行したら

   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文について

#7

投稿記事 by 長い » 13年前

    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)

ようです。よろしくお願いします。

box
記事: 2002
登録日時: 15年前

Re: fortranのwrite文について

#8

投稿記事 by box » 13年前

長い さんが書きました: 1
Error: Expected PARAMETER synbol in complex constant at (1)

のようなメッセージがでたので、出来る方は教えて直してくれませんか。
このようなメッセージが出たんですよね。
Error:の行にある単独の「1」については、
たぶんコンパイラーが「ここにエラーがあるよ」と教えてくれているような気がするのです。
質問者さんが書かれていないことは承知しています。

そもそも、synbolのスペルからして正しくありませんので、ここは一つ、
コンパイラーが吐き出したエラーメッセージを、正確に、カラムをきれいにそろえて
書いていただく必要がありそうです。

codeタグの使い方はおわかりですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

長い

Re: fortranのwrite文について

#9

投稿記事 by 長い » 13年前

 すみませんが、
 fortranは途中から勉強している所なんですから、codeタグの使い方あまり分かりませんね。
 よろしくお願いします。

box
記事: 2002
登録日時: 15年前

Re: fortranのwrite文について

#10

投稿記事 by box » 13年前

このページの上の方に、コードの貼り付け方が書いてあります。
codeタグの使い方について書いてありますので、参照なさってください。
ちなみに、codeタグの使い方と、Fortran言語の経験の長短とは関係ありません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: fortranのwrite文について

#11

投稿記事 by へにっくす » 13年前

長い さんが書きました: すみませんが、
 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 とあるけどこれは?
許されている書き方か?
written by へにっくす

hoge

Re: fortranのwrite文について

#12

投稿記事 by hoge » 13年前

長い さんが書きました: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文について

#13

投稿記事 by かずま » 13年前

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文について

#14

投稿記事 by かずま » 13年前

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)」とメッセージを
出しているのだろうと推察されます。

閉鎖

“C言語何でも質問掲示板” へ戻る