第13回目の演習

第13回目の演習で説明すること

第13回目に課したレポートの課題(subject: report No. 14


課題

収束判定をするプログラムとして教科書112ページに記載されている例題を配列を使って書き直せ.配列の要素数は適宜定めよ.113ページのプログラムの変数をそのまま配列に置き換えたものは解答と見なしません.あくまでも112ページのアルゴリズムに従ってプログラムを作成してください. また次の事項も組み込むこと.

  1. 何回繰り返して計算したのか,繰返した数を表示.
  2. DO文の中で計算する際,akの値がどのように変化するのかを表示.
  3. 組み込み関数(教科書32ページ)との結果を比較し表示.
注意:教科書と同じ変数を使うならば,一番最後の実行結果の表示はA(K)を使うことになります.

指示が守れていない場合は減点します.


課題の解答

Kに関するDOループ文を如何に書き換えるかがポイントとなりますが,以下のように考えると良いと思います.

青色で示した部分がポイントです.それ以外の部分は教科書通りですね.また今回提出してもらったプログラムで,赤字で示した部分が抜けていた人は減点されています.

緑色の字はプログラムの解説です(この字の部分をプログラムの中に書き込んではいけない).


PROGRAM REPORT0129
IMPLICIT NONE
INTEGER :: K
REAL A, B, EPS, X, 
   DIMENSION A(100),B(100)
   EPS=0.00001
   WRITE(*,*) 'X = '
   READ(*,*) X
   A(1)=X
   B(1)=X/A(1)
   K=1
   DO WHILE(ABS((A(K)-B(K))/A(K)) > EPS)    この部分で計算の精度が決まる.
     A(K+1)=(A(K)+B(K))/2.0   A(K)とB(K)でXの平方根の値を見積もる部分
     B(K+1)=X/A(K+1)   つまりはX=A(K+1)*B(K+1)であるから...
     WRITE(*,*) A(K)   ここで表示されるA(K)の値を観察すれば,このプログラムの意味がわかると思います.
     K=K+1   配列の要素をひとつずらす部分.この部分をDO WHILE文の直後においている人が数名いました.
   END DO
C
   WRITE(*,*) K
   WRITE(*,*) 'Xの平方根は', A(K)
   WRITE(*,*) '組み込み関数による値は', SQRT(X)
STOP
END PROGRAM FILE0129


Click 前のページへ戻る.
Copyright. 2020, Kazuya Sato

All rights reserved.