第7回目の演習

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

これまではある個数のデータを入力して,その合計を求める場合は以下のようにプログラムを組んでいた.


	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に逐次足していく,という構成である.

しかしこの方法では

という問題点がある.たとえば,入力した個々の数値と平均点との差などを計算することは出来ない.

では,入力する数値ごとに変数名を割り当てれば良いではないか?と考えるかも知れないが,データが多くなるととてもそんなことはやっていられない.

そこで,配列という手法を導入する.

以下のプログラムを各自作成してみよう.



	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 14738 10259

つまり,入力するごとに各々変数を定義するのではなく,A(I)という変数(ただし括弧内のIが異なれば違う変数を意味する)に逐次値を代入している,と考えればよい.

このA(I)を配列といい,プログラムの一番はじめで

   DIMENSION A(100)

とした部分は100個分の変数をしまう箱を1次元的に用意しますよと理解してもらえればいいでしょう.


第7回目に課したレポート課題(件名: 学籍番号 report_no7

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


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

All rights reserved.