質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

Q&A

解決済

1回答

13494閲覧

Fortranの問題で解答を作ったのですがエラーが出ます

Fujbgyutf

総合スコア22

FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

0グッド

0クリップ

投稿2019/07/31 08:01

### 前提・実現したいこと ここに質問の内容を詳しく書いてください。 問題 F(x)=3x^2+4x-5+x^2cos(x) に対して定積分W=∫[1,3]F(x)dxを計算する。シンプソンの公式S(N)=Δx/3(f(A)+f(B)+2Σ[i=1,N/2-1]F(A+2iΔx)+4Σ[i=1,N/2]F(A+(2i-1)Δx)を使い福プログラムまたは文関数を利用してプログラムを作成せよ。 という課題が出ていて 僕の作った回答は program task1   real E,G,S   FUNCTION F(T)     REAL T     F(A)=3*T*T+4*T-5+T*T*COS(T)   END FUNCTION F   E=0.0   READ(5,*) N,A,B   DO 100 I=1,N/2-1      E=E+2F(A+2I(B-A)/N) 100  CONTINUE   END DO   G=0.0   DO 200 J=1,N/2      G=G+4F(A+(2J-1)/((B-A)/N)) 200  CONTINUE   END DO   S=(B-A)/(3*N)(F(A)+F(B)+E+G)   WRITE(6,*)   STOP END program task1 これをcmdでコンパイルして実行しようとしたところエラーが出るのですがどこの構文がおかしいですか?どう直せばいいですか?

でたエラーメッセージが
task1.f90:3:2:
FUNCTION F(T)
1
Error: unclassifiable statement at (1)
task1.f90:6:5:

END FUNCTION F
1
Error: Expecting END PROGRAM statesment at (1)
task1.f90:10:5:

 E=E+2F(A+2I(B-A)/N)
1
Error: unclassifiable statement at (1)
task1.f90:12:5:

END DO
1
Error: Expecting END PROGRAM statesment at (1)
task1.f90:15:5:

G=G+4F(A+(2J-1)/((B-A)/N))
1
Error: unclassifiable statement at (1)
task1.f90:17:5:

END DO
1
Error: Expecting END PROGRAM statesment at (1)
task1.f90:18:2:

S=(B-A)/(3*N)(F(A)+F(B)+E+G)
1
Error: unclassifiable statement at (1)

どこを直せば解答にたどり着きますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

FORTRAN77 として答えると、
文法上の誤り
・FUNCTION の定義は外に出す必要がある。
・行番号付き DO LOOP になっているので、END DO は要らない。
・G=G+4F(A+(2J-1)/((B-A)/N)) <--- 4F(...) は 4 * F(...) : FORTRAN では積の演算子も省略できない。同様の誤りが複数。

意味的誤り
・G=G+4F(A+(2J-1)/((B-A)/N)) <--- 式が間違ってる。割り算じゃなく掛け算。(2J-1)((B-A)/N
・WRITE(6,
) のあと結果出力を忘れている。WRITE(6,*) S

参考例:FORTRAN77
(B-A) / H は何度も出てくるし、元の式では⊿xになっているので、DX とでもまとめておくと、元の式とプログラムの対応がつけやすくなって、間違いも見つけやすくなる。

改良して module , do..end do, implicit none などをつけて 90 に寄せてみるのもよいかと。

fortran

1 FUNCTION F(T) 2 REAL T 3 F=3*T*T+4*T-5+T*T*COS(T) 4 END FUNCTION F 5 6 PROGRAM TASK1 7 READ(5,*) N, A, B 8 DX = (B - A) / N 9 10 E = 0.0 11 DO 100 I=1, N / 2 - 1 12 E = E + 2 * F(A + 2 * I * DX) 13100 CONTINUE 14 15 G = 0.0 16 DO 200 J = 1, N / 2 17 G = G + 4 * F(A + (2 * J - 1) * DX) 18200 CONTINUE 19 20 S = DX / 3 * (F(A) + F(B) + E + G) 21 22 WRITE(6,*) S 23 STOP 24 END

N として偶数を入れないと駄目だが、入力チェックなどはしていない。

投稿2019/07/31 15:32

curehoney

総合スコア249

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問