- ベストアンサー
FORTRANのOPEN分について
私は、プログラミングに関して全くの初心者です。 これを考慮にいれてお答え下さい。お願いします。 FORTRANの入門の本を買って勉強しているのですが、OPEN文の ところがいまいちよく分りません。 integer l,u,h parameter (l=0,u=50,h=2) real x,y open(10,file='SUHYO.TXT'.status='new') write(10,200) 200 format(' '<3x,'X',8x,'Y') do 10 i=l,u,h x=real(i)/10.0 y=10x-9 write(10,210) x,y 210 format(' ',f5.1,f10.2) 10 continue close(10) end というプログラムがあり、私のパソコンで実際にやってみたいのですが どうもうまくいきません。 おそらくOPEN文のFILEが原因だとおもうのですが どのようにFILEを用意すればいいんでしょうか? ちなみにコンパイルはできています。 関係ないかもしれませんが、OSはWinXPでソフトはF90です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問に出ているプログラムは、SUHYO.TXTとというファイルを新しく作って(STATUS='NEW')そのファイルにデータを書きだすものです。ファイルを用意する必要は有りません。 コンパイルが、うまく行っていることですので、書式に問題(ラベルの桁数や行の最初に必要なスペースなど)が、ないと思います。(気になるのは、 200 format(' '<3x,'X',8x,'Y') の部分で、3xの前の < が , ではないかと思うのですが) どのようにうまく行っていないのかわからないので、確認できることだけ以下にあげます。 ・リンクを行って実行モジュール(*.EXE)が出来ている。 ・実行モジュールを確実に実行している。(勘違いで別のモジュールを動かしている場合が有る) ・実行モジュールを動かすディレクトリのディスクがロックされていない。(このプログラムは、ファイルを作成するので、ロックされているディスク(例えば、CD-ROMやプロテクトノッチのかかったフロッピーディスク)上では動作できません。) 以上がうまく行っていれば、基本的に問題ないと思います。試してみて下さい。
その他の回答 (3)
- yfujii
- ベストアンサー率17% (14/80)
これはstatus='new'に問題があると思います。(過去に使用したFORTRAN77で経験済み)status='new'の場合ファイルが有るとエラーになります。ですから一度実行すると次から必ずエラーになります。これを回避する為にはその前にファイル(この場合'SUHYO.TXT')を消してやる必要があった事を覚えています。 あとstatusの前に付いているピリオッドに見える物は、カンマの間違いですよね。
FOTRANは6(昭和45年頃)なので.かなり文法が変っているので.間違っている可能性があります。 .status='new' の「.」は文法上間違っていませんね(私の場合には空白を使用).これは 新規ファイルの場合に限って実行を続けるといういみ なのか. 新規のファイルを作成するように指示する のか.わかりません。前者の場合には.既にファイルが存在する場合にランタイムエラーを発生します。 200 format(' '<3x,'X',8x,'Y') は1の方が指摘するように、の間違いだとすると.言語系によっては実行時にしか検査をしないというとんでもない仕様があるので.このような場合にopen文でえらーが発生する処理系があります。 y=10x-9 は.変数10xから9を引くという意味でしょうか. 異常思い付く程度の内容です。
- terra5
- ベストアンサー率34% (574/1662)
やはり「うまくいかない」ではほとんど状況になっていませんので、 質問する場合は可能な限り詳しく具体的に書く事が大切です。 >おそらくOPEN文のFILEが原因だとおもうのですが なぜそう判断したのでしょうか。 >どのようにFILEを用意すればいいんでしょうか? このプログラムがどういうプログラムか判っていますか。 なぜ、FILEを用意するという考えが思いついたのですか. >関係ないかもしれませんが、OSはWinXPでソフトはF90です。 なぜ関係しないと思ったのでしょうか。 たいていは関係があります。 ところで、プログラムの実行前に"SUHYO.TXT"ってファイルは既にありますか? 実行前に削除してから,プログラムを実行してみてください。 あ、FORTRANの経験は77までです(^^;;