これまではある個数のデータを入力して,その合計を求める場合は以下のようにプログラムを組んでいた.
PROGRAM FILE_add
IMPLICIT NONE
INTEGER :: I, N
REAL :: X, WX
N=0.0
X=0.0
READ(*,*) N
DO I=1,N
READ(*,*) X
WX=WX+X
END DO
WRITE(*,*) '合計点は', WX
STOP
END PROGRAM FILE_add
この方法は,変数X
に入力した数値を代入し,合計点を表す変数WX
に逐次足していく,という構成である.
しかしこの方法では
DO
文を終えた後,入力した個々の数値を利用
することが出来ない
という問題点がある.たとえば,入力した個々の数値と平均点との差などを計算することは出来ない.
では,入力する数値ごとに変数名を割り当てれば良いではないか?と考えるかも知れないが,データが多くなるととてもそんなことはやっていられない.
そこで,配列という手法を導入する.
以下のプログラムを各自作成してみよう.
PROGRAM FILE_no7
IMPLICIT NONE
INTEGER :: I, N
REAL :: WA
REAL, DIMENSION (100) :: A
WRITE(*,*) 'データ数を入力して下さい(ただし100個以下)'
READ(*,*) N
WRITE(*,*) 'データを入力していきます'
DO I = 1,N
WRITE(*,*) I, '個目のデータは?'
READ(*,*) A(I)
END DO
WA=0.0
DO I=1,N
WA=WA+A(I)
END DO
WRITE(*,*) '入力したデータは以下です。'
DO I=1,N,1
WRITE(*,*) I,'個目のデータ:',A(I)
END DO
WRITE(*,*) '入力した', N, '個のデータの合計は', WA, 'です。'
STOP
END PROGRAM FILE_no7
要は以下のようなイメージを持ってもらえればいい(上記プログラムでN=10
として,適当に数値を入力した).
A(1) | A(2) | A(3) | A(4) | A(5) | A(6) | A(7) | A(8) | A(9) | A(10) |
6 | 1 | 4 | 7 | 3 | 8 | 10 | 2 | 5 | 9 |
つまり,入力するごとに各々変数を定義するのではなく,A(I)という変数(ただし括弧内のIが異なれば違う変数を意味する)に逐次値を代入している,と考えればよい.
このA(I)を配列といい,プログラムの一番はじめで
DIMENSION A(100)
とした部分は100個分の変数をしまう箱を1次元的に用意しますよと理解してもらえればいいでしょう.
N個のデータを入力し,平均値,平均値と入力データの差,標準偏差を計算した後,入力したデータと共に計算結果を全て表示するプログラムを作成し,実行結果と共にTEAMSに送って下さい.各自,結果表示やデータを入力する部分を工夫すること.
データは1,2,3,4,5,6,7,8,9,10としてください.その場合
PROGRAM REPORT_NO7
IMPLICIT NONE
INTEGER :: I, N
REAL :: X, WX, VX, SX, AV
REAL, DIMENSION (100) :: A
N=0.0
X=0.0
WX=0.0
VX=0.0
SX=0.0
WRITE(*,*) '入力する生徒数を入力して下さい(ただし100人以下)'
READ(*,*) N
DO I=1,N
WRITE(*,*) I, '人目の生徒の点数を入力してください。'
READ(*,*) A(I)
END DO
DO I=1,N
WX=WX+A(I)
VX=VX+A(I)**2.0
END DO
AV=WX/REAL(N)
SX=SQRT(VX/REAL(N)-AV**2.0)
WRITE(*,*) '平均点は'
WRITE(*,*) AV
WRITE(*,*) '標準偏差は'
WRITE(*,*) SD
DO I=1,N
WRITE(*,*) I, '人目の点数は', A(I),'です。'
WRITE(*,*) '平均点との差は', A(I)-AV, 'です。'
END DO
STOP
END PROGRAM REPORT_NO7
All rights reserved.