+++ /dev/null
-;;; 平成20年 秋期 基本情報技術者 午後 問13
-;;; アンケートに対するn人分の回答を集計し、集計結果をグラフで出力する副プログラム
-SUMMARY START
- RPUSH
-; カウンタ領域と出力バッファを初期化
- LD GR2,=0
- LD GR3,=' '
- LD GR4,=0 ; ループカウンタ
- LAD GR5,PBUF ; 出力バッファのポインタ
-LOOP1 ST GR2,COUNTR,GR4 ; カウンタ領域を初期化
- ST GR3,0,GR5 ; 出力バッファを空白で初期化
- ST GR3,1,GR5
- ST GR3,2,GR5
- LAD GR5,3,GR5 ; 出力バッファのポインタを更新
- LAD GR4,1,GR4 ; ループカウンタを更新
- CPA GR4,=16
- JMI LOOP1
-; 項目ごとに "はい" と答えた人数を集計
- LD GR5,=0 ; GR5: "はい" の人数の最大値
-LOOP2 LD GR4,=0 ; カウンタ領域のポインタ
- LD GR2,0,GR1 ; GR2 ←1人分の回答
-LOOP3 SLL GR2,1 ; 回答は "はい" ?
- JOV ON
- JZE NEXTW ; 残りの項目はすべて "いいえ"
- JUMP OFF
-ON LD GR3,COUNTR,GR4 ; カウンタに1を加算
- ADDA GR3,=1
- ST GR3,COUNTR,GR4
- CPA GR3,GR5 ; 最大値と比較
- JPL CHANGE
- JUMP OFF
-CHANGE LD GR5,GR3 ; 最大値を入替え
-OFF LAD GR4,1,GR4 ; 次の項目
- JUMP LOOP3
-NEXTW LAD GR1,1,GR1
- SUBA GR0,=1 ; 全回答処理済?
- JPL LOOP2
-; 集計結果を棒グラフで出力
- LD GR5,GR5
- JZE FIN
- LD GR0,='*'
-LOOP4 LD GR3,=1 ; 出力バッファのポインタ
- LD GR4,=0 ; カウンタ領域のポインタ
-LOOP5 CPA GR5,COUNTR,GR4 ; "はい" の人数と比較
- JNZ NOTSET
- ST GR0,PBUF,GR3 ; 出力バッファに "*" を設定
-NOTSET LAD GR3,3,GR3 ; 出力バッファのポインタを更新
- LAD GR4,1,GR4 ; カウンタ領域のポインタを更新
- CPA GR4,=16
- JMI LOOP5
- OUT PBUF,PLEN
- SUBA GR5,=1
- JPL LOOP4
-FIN OUT FOOTER,PLEN
- RPOP
- RET
-COUNTR DS 16 ; カウンタ領域
-PLEN DC 48
-PBUF DS 48 ; 出力バッファ
-FOOTER DC '01 02 03 04 05 06 07 08 09 10 11 12 13 '
- DC '14 15 16 '
- END