• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Fortran77のプログラム実行時にエラー)

Fortran77プログラム実行時のエラー

このQ&Aのポイント
  • Windows98でCPad for Salford FTN77を使用してFortran77のプログラミングをしていますが、実行時にエラーが発生しました。
  • エラーメッセージは「The instruction at address 0373f5b0 attempted to read from an illegal location」です。
  • プログラムは生徒50人の成績を読み込み、平均点などの計算結果をファイルに書き込むものです。しかし、何も書き込まれていません。どうすれば正常に動作させることができるでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • necomimi
  • ベストアンサー率41% (633/1540)
回答No.1

ちらっと見た限りだとSUMって1~50の配列ですよね? なのに DO 70 J=0,9 JL=10*J JH=JL+9 CALL STR(SUM(J),CN) WRITE(2,400)JL,JH,CN 70 CONTINUE でSUM(0)はまずいんじゃ? ほかにも突っ込みどころはあるけど…

maydraft
質問者

お礼

サブルーチンSORTの引数は(R,T)ではなく(P,N)でした。訂正しておきます。

maydraft
質問者

補足

なるほど。一応修正してみたのですが、今度は、コンパイルに失敗してしまいました。英語の点数の並べ替えをサブルーチンにしてみたのですが、そこがどうもおかしいみたいです。 エラーの文 0010) OPEN(1,FILE=FNAME) WARNING - PRINT * and READ * will be affected by this OPEN statement NO ERRORS,1 WARNINGS [<GOKAMOKUHEIKIN>FTN77 Ver 4.03] NO ERRORS [<AVEETC>FTN77 Ver 4.03] NO ERRORS [<STR>FTN77 Ver 4.03] 0102) INTEGER P(1;50),N(1:50),M,K,L,Q *** Bracket or comma expected 0105) IF(P(K).LT.P(L))THEN *** P is followed by an unexpected "(" *** Invalid IF or ELSEIF statement 0106) M=P(L) *** P is followed by an unexpected "(" 0107) P(L)=P(K) *** P is followed by an unexpected "(" 0108) P(K)=M *** P is followed by an unexpected "(" 0110) N(L)=N(K) *** The left hand side of this assignment is invalid 0111) N(K)=M *** The left hand side of this assignment is invalid 8 ERRORS [<SORT>FTN77 Ver 4.03] *** Compilation failed プログラム(必要な所を抜き出しました) *生徒50人の成績を読み込み平均点などを計算し、ファイルに書き込む PROGRAM GOKAMOKU HEIKIN INTEGER N(1:50),EP(1:50),MP(1:50),JP(1:50),SP(1:50),CP(1:50) INTEGER SUM(1:50),JL,JH,K,J REAL PAV(1:50),PVX(1:50),PSD(1:50),EAV,ESD,MAV,MSD,JAV,JSD REAL SAV,SSD,CAV,CSD CHARACTER FNAME*30,SHUTURYOKU*20,CN*50 READ(5,*)FNAME READ(5,*)SHUTURYOKU OPEN(1,FILE=FNAME) DO 10 K=1,50 READ(1,*)N(K),EP(K),MP(K),JP(K),SP(K),CP(K) 10 CONTINUE CLOSE(1) *合計点のヒストグラムを書く JL=0 JH=0 WRITE(2,*)'各生徒合計点のヒストグラム' DO 70 J=0,4 IF(J.EQ.4)THEN JL=400 JH=500 ELSE JL=100*J JH=JL+99 END IF CALL STR(SUM(J+1),CN) WRITE(2,400)JL,JH,CN 70 CONTINUE 400 FORMAT(1X,I3,'-',I3,'I',A50) *英語の点数順に並べ変え CALL SORT(EP,N) WRITE(2,*)'英語の成績高い順' WRITE(2,*)'番号 点数' DO 40 J=1,50 WRITE(2,100)N(J),EP(J) 40 CONTINUE 100 FORMAT(I2,I3) END SUBROUTINE STR(SUM,C) INTEGER SUM(1:50) CHARACTER C*50 DO 10 K=1,50 IF(SUM(K).LT.K*100)THEN C(K:K)='*' ELSE C(K:K)=' ' END IF 10 CONTINUE END SUBROUTINE SORT(R,T) INTEGER P(1;50),N(1:50),M,K,L,Q DO 10 K=1,49 DO 20 L=K+1,50 IF(P(K).LT.P(L))THEN M=P(L) P(L)=P(K) P(K)=M Q=N(L) N(L)=N(K) N(K)=M END IF 20 CONTINUE 10 CONTINUE END

関連するQ&A