CASLファイルのフォルダを変更
[YACASL2.git] / as / fe_tests / 2008_10 / Q13 / summary.casl
diff --git a/as/fe_tests/2008_10/Q13/summary.casl b/as/fe_tests/2008_10/Q13/summary.casl
new file mode 100644 (file)
index 0000000..1b7dda3
--- /dev/null
@@ -0,0 +1,62 @@
+;;; 平成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