;Exam2013H25秋Prg3 平均時間　数字列を数値に変換.txt
;-----------------------
MAIN START
	LAD GR1,RUNNER1
	LAD GR2,RUNNER2
	LAD GR3,RUNNER3
	LAD GR4,RUNNER4
	ST GR1,ADR1
	ST GR2,ADR2
	ST GR3,ADR3
	ST GR4,ADR4
	LAD GR1,TBL
	CALL AVERAGE
	RET
RUNNER1 DC '2238'
RUNNER2 DC '2310'
RUNNER3 DC '2458'
RUNNER4 DC '2720'
;２２分３８秒、２３分１０秒、・・・の意味です。
TBL DS 0 ;選手のタイムのアドレステーブル
ADR1 DS 1
ADR2 DS 1
ADR3 DS 1
ADR4 DS 1
	END
;------------------
AVERAGE START
	RPUSH
	LD GR2,=4;
	LD GR3,GR1
	LD GR4,=0
LOOP5 LD GR1,0,GR3  ;選手のタイムの先頭アドレス
	CALL TOSEC;
	ADDA GR4,GR0   ;各選手のタイムの小合計値（秒）　答　ア
	LAD GR3,1,GR3
	SUBA GR2,=1    ;カウンタ１減算
	JNZ LOOP5      ;ゼロで全員の時間合計作業終了
	SRL GR4,2 ;４で割り平均を求める：２回右シフト
	LD GR0,GR4
	LAD GR1,RESULT
	CALL TOTIME
	OUT RESULT,LEN4
	RPOP
	RET
LEN4 DC 4
RESULT DS 4
	END
;-------------------------------------
;例えば１２３８秒を２０分３８秒に変換する。
TOTIME START
	RPUSH
	LD GR2,=3       ;ループ回数
	LAD GR3,VALUE2
LOOP3 LD GR4,0,GR3  ;ＧＲ４＜−−割る値
	LD GR5,=0
LOOP4 CPA GR0,GR4   ;ＧＲ０割るＧＲ４
	JMI NEXT
	ADDA GR5,=1
	SUBA GR0,GR4
	JUMP LOOP4
NEXT OR GR5,='0'    ;割り算結果の商を数値から数字に変換　
	;文字コードの規則性を利用している。参照：文字コード表
	ST GR5,0,GR1    ;答　カ
	LAD GR3,1,GR3
	LAD GR1,1,GR1
	SUBA GR2,=1
	JNZ LOOP3
	OR GR0,='0'    ; GR0の中に割り切れずに残った値
	;数値から数字に変換　参照：文字コード表
	ST GR0,0,GR1   ;　　　答　ア
	RPOP
	RET
VALUE2 DC 600,60,10
	END
;--------------------------------
;例えば２０分３８秒を１２３８秒に変換する。
TOSEC START
	RPUSH
	LD GR5,=0
	LD GR2,=4      ;ループ回数
	LAD GR3,VALUE1
LOOP1 LD GR0,0,GR1  ;ＧＲ０＜−−−時間の一桁
	AND GR0,=#000F  ;数値を取り出す
	ADDA GR0,GR5
	SUBA GR2,=1
	JZE FIN
	LD GR4,0,GR3  ;ＧＲ４＜−−−掛ける値
	LD GR5,=0
LOOP2 SRL GR4,1   ;以下でＧＲ０ＸＧＲ４を行う
	JOV INCR
	JNZ CONT   ;ゼロならば次の行を実行する　答え　イ
	LAD GR3,1,GR3
	LAD GR1,1,GR1
	JUMP LOOP1
INCR ADDA GR5,GR0
CONT SLL GR0,1
	JUMP LOOP2
FIN RPOP
	RET
VALUE1 DC 10,6,10
	END
;-------------------------
