• 締切済み

Fortran のエラー

9002700385647,2,0,1,0,915110373,20050524,0,2,4911 9004300501590,1,0,1,0,910410489,20050630,-1,1,4527 このようなデータ1万人分必要なところだけ読み取って 書き出そうとするのですがうまくいきません。  This application has requested the Runtime to terminate it in an unusual way. とエラーメッセージが出ます。なぜでしょうか。 ――――――――――――――――――――――――――――――― OPEN (1,FILE='OKAMOTODA.TXT',STATUS='OLD') OPEN (2,FILE='NEWNEW.TXT',STATUS='NEW', 1 FORM='FORMATTED') II=0 31 READ(1,*,END=900)K1,K2,K3,K4,K5,K6,K7,K8,K9,K10 II=II+1 WRITE(2,991) II,K1,K2,K3,K4,K5 991 FORMAT(2X,I3,5I20) IF(II .LT. 10000) THEN GOTO 31 ELSE GOTO 900 ENDIF 900 CLOSE(1) CLOSE(2) END ―――――――――――――――――――――――――――――――

みんなの回答

  • nagare
  • ベストアンサー率33% (280/831)
回答No.2

コンパイラも実行環境もないですが integer(整数型)の範囲は「-2147483648~2147483647」なので、変数K1がOVERFLOWしていると思います 変数K1はcharacter型かdouble precision型でないとダメだと思います。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

K1とK6が32bit整数だからとか。

iwamotof
質問者

お礼

数値の大きさまでは全く気にしないで居ました。 今度改めて参考書を見ると基礎の基礎でした。 ご指摘ありがとうございました。 定年になり昔取り組んだプログラムを引っ張り出して 勉強始めたところです。 今後ともよろしくお願いいたします。

iwamotof
質問者

補足

32bitだとどんな影響があるのですか。

関連するQ&A

  • FORTRANのプログラム

    今、実験の解析を行っています。 読み込みたいテキストファイルには -1,0.4 0,0,233 -1,0.9 ・・など左側には-1か0のどちらかがあります。 これを -1,0.4 -1,0.9 を含むファイルと 0,0.0233 を含むファイルの二つに分けたいのです。 今プログラムを作っているのですがどうしてもできません。 どうしたらいいのでしょうか? program dat real x(10), y(10) open(7,file='test.txt') do i=1,10 read(7,*,end=200) x(i),y(i) end do do j=1,10 if(x(j).eq.0.0) then open(8,file='aftest1.txt') write(8,*) y(j) else open(9,file='aftest2.txt') write(9,*) y(j) end do close(8) close(9) 200 close(7) end

  • FORTRANの質問です

    今、実験の解析を行っています。 読み込みたいテキストファイルには -1,0.4 0,0,233 -1,0.9 ・・など左側には-1か0のどちらかがあります。 これを -1,0.4 -1,0.9 を含むファイルと 0,0.0233 を含むファイルの二つに分けたいのです。 今プログラムを作っているのですがどうしてもできません。 どうしたらいいのでしょうか? と質問しました。説明不足気味だったので、追加で説明させていただきます。 データの数はかわります。5個だったり、900個だったりします。 この数はわかりません。 program dat real n(10), y(10) write(*,*)'k=' read(*,*)k open(7,file='test.txt') do i=1,k read(7,*,end=200) n(i),y(i) end do 200 close(7) open(8,file='aftest1.txt') open(9,file='aftest2.txt') do j=1,k if(n(j).eq.0) then write(8,*) y(j) else if(n(j).eq.-1) then write(9,*) y(j) end if end do close(8) close(9) end と書いたのですがデータの数と繰り返しの数が一致しないと、出力されません。 いちいちファイルをみるのは面倒なので、なんとか したいのですが

  • fortran77で複数のファイルの読み込み

    fortran77で複数のファイルの読み込み 現在fortran77のプログラムを勉強しております。 ファイルが複数あり、すべてのファイルを読み込みたいのですが、ファイルの数がたくさんあるため、プログラムの行数が多くなってしまいます。 do ループで次々とファイルを開くプログラムを考えているのですが、思いつきません。 どなたか考え方でもいいので、教えてください。 ちなみに私が考えたプログラムは、 open(10,file='C:\FORTRAN\100.txt',status='old') open(11,file='C:\FORTRAN\121.txt',status='old') open(12,file='C:\FORTRAN\144.txt',status='old') open(13,file='C:\FORTRAN\169.txt',status='old') open(14,file='C:\FORTRAN\196.txt',status='old') open(15,file='C:\FORTRAN\225.txt',status='old') ・・・。 これを do ループで次々に開くことを考えると、 character*3 A(10) do 100 i=1,10 A=i*i open(i,file='C:\FORTRAN\A.txt',status='old') 100 continue ・・・ みたいな感じです。 ' 'の中の一部だけを変えたい場合のcharacter 文の使い方がいまいちよく分かりません。

  • fortranのプログラミングについてです。

    フォートランで任意のデータの総和を求めるプログラムを書きたいのですが 例えばデータファイルに2,3,6,8とあればその和19が出てくる感じです。 よくやりかたがわかりません。 始めにこのようにファイル形式でデータを取り込みます。 INTEGER n OPEN(5,FILE='test.txt') 100 READ(5,*,END=110) n WRITE(*,*) n GO TO 100 110 CONTINUE CLOSE(5) END 次に総和をはじきだしたいのですが。ここのところがよくわかりません。 どうか教えていただきたいのですが。

  • fortran エラーについて

    fortranで、副プログラムを使ってデータを昇順または降順に並べ替えるプログラムを入力して実行しようとしたところ、 ・Unexpected junk in formal argument list at (1) ・Two main PROGRAMs at (1) and (2) という2つのエラーが出ました。 これらの改善方法を教えて頂きたいです。 初心者ですので簡単なところで間違えている可能性もありますが、ご指摘いただければ幸いです。 以下、実際に入力したプログラムです。 ------------------------------ implicit none integer::i,n real::x(1000),a(1000),b(1000) n=1000 open(10,file='input-data-1.txt') do i=1,n read(10,*) x(i) end do close(10) open(10,file='output-data-1.txt') do i=1,n call koukan(i,x(i),a(i),b(i)) write(10,'(i4,2f10.3)') i,a(i),b(i) end do close(10) stop end subroutine koukan(i,x(i),shoujun,koujun) implicit none integer::i,n,made real::x(1000),w,shoujun,koujun do made=n-1,1,-1 do i=1,made if(x(i)>x(i+1)) then w=x(i) x(i)=x(i+1) x(i+1)=w end if end do end do shoujun=x(i) do made=n-1,1,-1 do i=1,made if(x(i)<x(i+1)) then w=x(i) x(i)=x(i+1) x(i+1)=w end if end do end do koujun=x(i) return end ------------------------------

  • FORTRANのプログラミングについて

    たびたび申し訳ありません。 またFORTRANに関しての質問です。 x y z 0 0 30 1 0 45 2 0 60 3 0 43 4 0 51 5 0 32 0 1 43 1 1 90 2 1 32 3 1 85 4 1 65 5 1 90 0 2 32 1 2 32 と続くファイルがあります。これをFORTRANをで書き換えて、 0 0 30 0 1 43 0 2 32 1 0 45 1 1 90 1 2 32 と続くデータにしたいのです。(これを以下目的のファイルという) 今のところ、次のようなプログラムを書き、特定のXに対しては、結果を吐き出すことに成功しています。 program dat real x1(100),h,y2(100),y1(100),z1(100) integer i,n,j,k,l,m,a(100) open(7,file='test.txt') open(9,file='af-test.dat') do i=1,100 read(7,*,end=200) x1(i),y1(i),z1(i) if(x1(i).eq.90)then write(9,*) x1(i),y1(i),z1(i) end if end do 200 close(7) close(9) end ここまではうまくいくのですが、これでは90以外の場合は出力されません。(あたりまえですが) 特定のXに限らずに例えばXを0から100まで吐き出されるような目的のファイル作るにはをどのようにしてプログラムを書けばいいかご教授ください。

  • fortran90 ファイル出力の名前

    ファイル出力の仕方なのですが do j=1,step ・ ・ ・ OPEN(3, FILE = "nucsig12.txt", STATUS = "old", ACTION = "WRITE") DO i=1,nucnum WRITE(3,*) i,nucsig12(i) END DO CLOSE(3) ・ ・ のようにstepごとにファイルの出力をしたいのですが テキスト名をstepごとに変えたいのですがどうしたらよいのでしょうか?? OPEN(3, FILE = "nucsig12.txt", STATUS = "old", ACTION = "WRITE") の部分をどう修正したらいいのか・・・ 理想としては "nucsig12[step].txt"(stepには数字をいれたい) というようにstepと同じ数のテキストファイルを作りたいです こういうことはできるのでしょうか?? もしできるなら教えてください お願いしますm(__)m

  • FORTRANのプログラムです。

    FORTRANのプログラムです。 下に記載したプログラムを、行列値の計算にするプログラムに改良するにはどうすればよいでしょうか? アドバイスお願いします。 c *************************** if(root.LT.x0) GOTO 11 x0=root; x1=xs0; x2=xs1 GOTO 99 11 x0=root; x1=xs0; x2=xs2 GOTO 99 c c *************************** OPEN(6,FILE='sum.dat') 1002 FORMAT(E12.5,3x,4(E12.5,4x)) CLOSE(6) STOP 100 END c ************************* SUBROUTINE FRES(x,F) DOUBLE PRECISION x,F c f=3.*x+DSIN(x)-DEXP(x) f=(x-1.)*(x-2.)*(x-3.)*(x-4.)*(x-5.)*(x-6.) RETURN END よろしくお願いいたします。

  • 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です。

  • fortran90/95における計算結果の書き出し

    初心者です。 簡単にするため以下のようなコードを書きます。 real d do 100 d=0,0.4,0.001 write(*,*)'d=',d OPEN(10, FILE='delta.txt', action='write') write(10,*) d close(10) 100 continue end このコードだと、TextFileにはなぜか一つの値しか書かれません。dの値を0から0.4まで0.001刻みで、すべての値を書き出すにはどうすればよいのでしょうか? なにとぞよろしくお願いします。

専門家に質問してみよう