第12回目の演習

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

第12回目に課したレポートの課題(subject: 学籍番号 report_no13


課題

正の整数を2つ入力し,その最大公約数を求めるプログラムを作成し,プログラムと実行結果をTEAMSに提出してください.

ただしEXIT文を必ず使うこと.(使っていない場合は当然減点します)
ユークリッドの互除法を用いればよい.その手順は以下の通り(ただし,入力する2つの数をI,Jとし,最大公約数をKとする).
  1. IとJを比較し,大きい方をM,小さい方をNとする.
  2. MをNで割った余りKを求める.
  3. K=0かどうかを調べる.
    1. 余りが0ならばNを最大公約数として計算終了
    2. 余りが0でなければ新たにM=N,N=Kとして手順2に戻る.

注意

課題の解答

上記アルゴリズム通りに組めばよいですね.以下の解答例が分かりやすいと思います.


	PROGRAM REPORT0122
	IMPLICIT NONE
	INTEGER :: I, J, M, N, K
C     データ入力
	WRITE(*,*) 'I, J ='
	READ(*,*) I, J
C 入力した数値の大小比較
	IF (I < J) THEN
		M=J
		N=I
	ELSE
		M=I
		N=J
	END IF

C    繰り返し.条件が合えばDO文から脱出
	DO
		K=MOD(M,N)
		IF (K == 0) EXIT
			M=N
			N=K
	END DO
C 結果表示
	WRITE(*,*) '最大公約数は', N
	STOP
	END PROGRAM REPORT0122

注意

大半の人は正しくプログラミングできていましたが,

	READ(*,*)M,N
C     変数の初期化

	I=0
	J=0
	X=0

C     IF文始め(入力した数の大小を判断)

	IF (M>N) THEN
		I=M
		J=N
	ELSE
		J=M
		I=N
	END IF

としてプログラムを作成している人が10名弱いました.計算結果は間違っていませんでしたが,指示された変数を使ってプログラムが作成できるようになって欲しいものです(理由は後に説明します).たいていの人はレポートの説明通りの変数を使ってプログラムを作成していました.


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

All rights reserved.