• 締切済み

FORTRANのプログラムについて

program dat real x(100), y(100) s2=0 read(*,*) m,h open(7,file='test2.txt') do i=1,m read(7,*,end=200) x(i),y(i) s1=h/2*(y(1)+y(m)) s2=s2+h*(y(i)) s3=h*y(1) end do 200 close(7) sum=s1+s2-s3 write(*,*) 'sum=',sum end 台形公式を求めるプログラムを書いています。 テキスト形式でまずデータを取り込みます。 刻み幅はhです。ただしデータ数は未知数です。 上のようにプログラムを書いたのですが、うまく働きません。どうすればよろしいでしょうか? ご教授お願いします

みんなの回答

  • KanjistX
  • ベストアンサー率55% (48/86)
回答No.2

補足ありがとうございます。 どのような意図でs1とs3を別々に置いたのかよくわからなかったので、一部改変したものを示します。 ・s1=h/2*(y(1)+y(m))をs1=h/2*(y(1)+y(i))に変更 ・s3=h*y(1)の行を削除 ・sum=s1+s2-s3をsum=s2-s1に変更 台形公式 Σ{i=1,n-1}{h/2*(y(i)+y(i+1))} =Σ{i=1,n}{h*y(i)} - h/2*(y(1)+y(n)) という式変形をもとに組み替えました。

  • KanjistX
  • ベストアンサー率55% (48/86)
回答No.1

「うまく働きません」の内容を教えていただけますでしょうか。 コンパイル・実行は確認しました。 計算結果が合わないというご質問でよろしいでしょうか。 たぶんですが、do文のi=1,mはi=1,m-1にすべきだと思います。 展開すればわかりますが、お示しのプログラムでは、h*y(m)だけ余計に加えています。

merco222222
質問者

補足

御回答ありがとうございました。 失礼しました。 コンパイルは通るみたいですが、計算結果があいません。 よろしくお願いいたします

関連するQ&A