CASLファイルのフォルダを変更
[YACASL2.git] / as / fe_tests / 2008_10 / Q13 / summary.casl
1 ;;; 平成20年 秋期 基本情報技術者 午後 問13
2 ;;; アンケートに対するn人分の回答を集計し、集計結果をグラフで出力する副プログラム
3 SUMMARY START
4         RPUSH
5 ; カウンタ領域と出力バッファを初期化
6         LD    GR2,=0
7         LD    GR3,=' '
8         LD    GR4,=0          ; ループカウンタ
9         LAD   GR5,PBUF        ; 出力バッファのポインタ
10 LOOP1   ST    GR2,COUNTR,GR4  ; カウンタ領域を初期化
11         ST    GR3,0,GR5       ; 出力バッファを空白で初期化
12         ST    GR3,1,GR5
13         ST    GR3,2,GR5
14         LAD   GR5,3,GR5       ; 出力バッファのポインタを更新
15         LAD   GR4,1,GR4       ; ループカウンタを更新
16         CPA   GR4,=16
17         JMI   LOOP1
18 ; 項目ごとに "はい" と答えた人数を集計
19         LD    GR5,=0          ; GR5: "はい" の人数の最大値
20 LOOP2   LD    GR4,=0          ; カウンタ領域のポインタ
21         LD    GR2,0,GR1       ; GR2 ←1人分の回答
22 LOOP3   SLL   GR2,1           ; 回答は "はい" ?
23         JOV   ON
24         JZE   NEXTW           ; 残りの項目はすべて "いいえ"
25         JUMP  OFF
26 ON      LD    GR3,COUNTR,GR4  ; カウンタに1を加算
27         ADDA  GR3,=1
28         ST    GR3,COUNTR,GR4
29         CPA   GR3,GR5         ; 最大値と比較
30         JPL   CHANGE
31         JUMP  OFF
32 CHANGE  LD    GR5,GR3         ; 最大値を入替え
33 OFF     LAD   GR4,1,GR4       ; 次の項目
34         JUMP  LOOP3
35 NEXTW   LAD   GR1,1,GR1
36         SUBA  GR0,=1          ; 全回答処理済?
37         JPL   LOOP2
38 ; 集計結果を棒グラフで出力
39         LD    GR5,GR5
40         JZE   FIN
41         LD    GR0,='*'
42 LOOP4   LD    GR3,=1          ; 出力バッファのポインタ
43         LD    GR4,=0          ; カウンタ領域のポインタ
44 LOOP5   CPA   GR5,COUNTR,GR4  ; "はい" の人数と比較
45         JNZ   NOTSET
46         ST    GR0,PBUF,GR3    ; 出力バッファに "*" を設定
47 NOTSET  LAD   GR3,3,GR3       ; 出力バッファのポインタを更新
48         LAD   GR4,1,GR4       ; カウンタ領域のポインタを更新
49         CPA   GR4,=16
50         JMI   LOOP5
51         OUT   PBUF,PLEN
52         SUBA  GR5,=1
53         JPL   LOOP4
54 FIN     OUT   FOOTER,PLEN
55         RPOP
56         RET
57 COUNTR  DS    16              ; カウンタ領域
58 PLEN    DC    48
59 PBUF    DS    48              ; 出力バッファ
60 FOOTER  DC    '01 02 03 04 05 06 07 08 09 10 11 12 13 '
61         DC    '14 15 16 '
62         END