report_no4において,小数点以下が不必要に表示されたり,また読みにくい表示にならないようにするために書式を設定した.
様々な設定が考えられるが,たとえば
WRITE(*,'(1X, I3, 2X, 4F10.5)') I, S, C, T, P
とできる.意味は以下の通りである.
1X
:先頭に一つ空白
I3
:3文字分確保して整数Iの値を表示
2X
:2文字分の空白
4F10.5
:4つの実数S
,C
,T
,P
をそれぞれ10文字分確保して小数点以下5桁の精度で表示
READ(*,*) N
DO I=1,N
READ(*,*) A
…
END DO
とすれば,たとえば生徒数(N
)を与えてから各生徒の点数(A
)を順次読み込み,平均点と標準偏差を求めるプログラムを作成することが出来る.プログラムを作成し,実行結果と共にTEAMSに送って下さい.生徒の人数と点数はつぎの通り.
生徒1 | 生徒2 | 生徒3 | 生徒4 | 生徒5 | 生徒6 | 生徒7 | 生徒8 | 生徒9 | 生徒10 |
80 | 90 | 100 | 70 | 60 | 80 | 100 | 60 | 80 | 90 |
標準偏差の求め方はつぎのとおりです.
「各点の2乗の合計を人数で割ったものから平均点の2乗を引いたものを分散とすると,分散の平方根が標準偏差である」
色文字はプログラムの解説です.実際のプログラムとは無関係ですし,これをプログラム中に書き込んではいけません.
PROGRAM REPORT_NO5
IMPLICIT NONE
INTEGER :: N
REAL :: X, WX, ZX,AX,SX
N=0 使用する変数の初期化
X=0.0
WX=0.0
ZX=0.0
AX=0.0
SX=0.0
WRITE(*,*) '生徒数を入力して下さい。'
READ(*,*) N
DO I=1,N,1
WRITE(*,*) ,I, '人目の点数を入力して下さい'
READ(*,*) X
WX=WX+X 点数の総計を求める部分
ZX=ZX+X**2.0 点数の2乗の総計を求める部分
END DO
AX=WX/REAL(N) 平均点を求める部分
SX=SQRT(ZX/REAL(N)-AX**2.0) 標準偏差を求める部分
WRITE(*,*) '平均点は'
WRITE(*,*) AX
WRITE(*,*) '標準偏差は'
WRITE(*,*) SX
STOP
END PROGRAM REPORT_NO5
X
を使い,さらに変数X
に平均点を計算した結果を代入するプログラムを作成していました(プログラム解答例でいえばX=WX/N
とすること).
All rights reserved.