設問1のa、b
問われている内容は?
分岐先(LOOP12・LOOP13)・分岐条件(JUMP・JMI・JPL・JZE)は?
|
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
IEND LD
GR3,=9
LD
GR0,=#7FFF ;最大値
L00P12 LD
GR2,GR0
LD
GR4,=9
L00P13 CPA
GR2,T0TAL,GR4
JPL
CHANGE
JUMP NEXT
CHANGE LD
GR2,T0TAL,GR4 ;GR2←新たなタイムの最小値
LD
GR1,GR4 ;GR1←そのチーム番号
NEXT SUBA GR4,=1
[
a ]
SRL
GR2,3 ;平均タイム
CALL 0UTPUT
ST
GR0,T0TAL,GR1 ;処理済みとして最大値を設定
SUBA GR3,=1
[
b ]
|
ア
|
JMI LOOP12
|
イ
|
JMI LOOP13
|
ウ
|
JPL LOOP12
|
エ
|
JPL LOOP13
|
オ
|
JUMP LOOP12
|
カ
|
JUMP LOOP13
|
キ
|
JZE LOOP12
|
ク
|
JZE LOOP13
|
分岐先と分岐条件は?
[
a ]と[ b ]に、「JUMP」が入ると、[
a ]と[ b ]の次の行が実施されなくなるので、「JUMP」は除外されます。
LOOP13へ分岐する選択肢は、「イ JMI LOOP13」「エ JPL LOOP13」「イ
JZE LOOP13」が残ります。
LOOP12へ分岐する選択肢は、「ア JMI LOOP12」「ウ JPL LOOP12」「キ
JZE LOOP12」が残ります。
[
a ]の分岐先および分岐条件は?
[
a ]は、前行(「SUBA
GR4,=1」)の演算結果により分岐していますので、GR4の用途を確認します。
行番号11で初期値9(9チーム)を設定し、行番号17で1ずつ減算しています。
[
a ]の分岐先は、行番号12(LOOP13)と考えられます。
9チーム分の処理を行うので、GR4が正の間ループを繰り返します。
よって、正解は「エ
JPL LOOP13」となります。
[
b ]の分岐先は?
[ b ]は、前行(「SUBA GR3,=1」)の演算結果により分岐していますので、GR3の用途を確認します。
行番号8で初期値9(9チーム)を設定し、行番号22で1ずつ減算しています。
[ b ]の分岐先は、行番号10(LOOP12)と考えられます。
9チーム分の処理を行うので、GR3が正の間ループを繰り返します。
よって、正解は「ウ
JPL LOOP12」となります。
講評
設問1では、a、bの正答率は平均的で、おおむね理解されていた。
|
設問2のc
問われている内容は?
プログラムの実行結果
|
20
|
CALL 0UTPUT
|
ア
|
チーム番号の昇順に出力される
|
イ
|
チーム番号の降順に出力される
|
ウ
|
どのチームが先に出力されるかは時々である
|
プログラムをトレースする
1
2
3
4
5
6
7
|
RACE START
L00P11 CALL INPUT ;GR0(0:OK,-1:EOF), GR1:チーム番号, GR2:タイム
LD
GR0,GR0 ;EOF?
JMI
IEND
ADDA GR2,T0TAL,GR1 ;GR2←GR2+TOTAL[GR1]
ST
GR2,T0TAL,GR1 ;TOTAL[GR1]←GR2
JUMP L00P11
|
チーム毎の合計タイムをTOTAL(配列)に格納
|
|
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
IEND LD
GR3,=9 ;LOOPの初期値設定
LD
GR0,=#7FFF;最小値の初期値(7FFFより小さい値検出したら更新)
L00P12 LD
GR2,GR0 ;GR2=GR0=検出済最小値
LD
GR4,=9 ;LOOPの初期値設定
L00P13 CPA
GR2,T0TAL,GR4 ; 検出済最小値とチーム別合計値を比較
JPL
CHANGE ;チームの合計値の方が小さいなら最小値更新
JUMP NEXT ;次のチーム
CHANGE LD
GR2,T0TAL,GR4 ;GR2←新たなタイムの最小値
LD
GR1,GR4 ;GR1←そのチーム番号
NEXT SUBA GR4,=1
[JPL
LOOP13]
SRL
GR2,3 ;平均タイム
CALL 0UTPUT ;最小値から順に出力
ST
GR0,T0TAL,GR1 ;最小値を取り出したチームの合計値に
SUBA GR3,=1 ;処理済みとして最大値(#7FFF)を設定
[JPL
LOOP12]
RET
T0TAL DC 0,0,0,0,0,0,0,0,0,0 ;(チーム数+1)個の領域
END
|
全チームの合計値を9周チェック
全チームの合計値をNo.9~No.1へと順にチェック
順に検索し小さい方のタイムを記録
全チームチェック終了
得られた最も小さいタイムを出力
最も小さいタイムを#7FFFで上書きして消す
9つのチームタイム出力まで継続
|
昇順って?
図2の出力結果は、昇順に出力された結果であると記載されている。
時間が同じである場合、行番号15~行番号16が実行されないので、チーム番号が大きい方が先に出力される。大きい方が先に出力されるので、「イ チーム番号の降順に出力される」が正解となります。
講評
設問2の正答率は低く、あまり理解されていなかった。アと誤って解答した受験者が多く見受けられた。領域を後ろから検査しているので、チーム番号の降順に出力されることに気がつけば、正答できた。
|
設問3のd
問われている内容は?
分岐先(LOOP21・LOOP22)・分岐条件(JUMP・JMI・JPL・JZE)は?
|
7
8
9
10
11
12
13
14
|
LD
GR5,=3 ;ループ回数
L00P21 LD
GR6,DIVIS0R,GR4 ;GR6←除数
LD
GR7,=0 ;GR7←商
L00P22 CPA
GR2,GR6
JMI
SETTIME
SUBA GR2,GR6
ADDA GR7,=1
[
d ]
|
ア
|
JMI LOOP21
|
イ
|
JMI LOOP22
|
ウ
|
JPL LOOP21
|
エ
|
JUMP LOOP21
|
オ
|
JUMP LOOP22
|
カ
|
JZE LOOP22
|
[
d ]の分岐先および分岐条件は?
[ d ]は、前行(「ADDA GR7,=1」)の演算結果により分岐していますので、GR7の用途を確認します。
行番号9で初期値0を設定し、行番号13で1ずつ加算しています。
演算結果は常に正なので、JMI,JPL,JZEの命令は不適です。
「エ JUMP LOOP21」「オ JUMP
LOOP22」のいずれかとなります。
初期値は行番号9で設定しているので、行番号10に分岐する「オ JUMP LOOP22」が正解となります。
講評
設問3では、d、eの正答率は平均的で、おおむね理解されていた。
|
設問3のd
問われている内容は?
分岐先(LOOP21・LOOP22)・分岐条件(JUMP・JMI・JPL・JZE)は?
|
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
LD
GR5,=3 ;ループ回数
L00P21 LD
GR6,DIVIS0R,GR4 ;GR6←除数
LD
GR7,=0
;GR7←商
L00P22 CPA
GR2,GR6
JMI
SETTIME
SUBA GR2,GR6
ADDA GR7,=1
[
d ]
SETTIME 0R GR7,=#0030
ST
GR7,0,GR3
ADDA GR4,=1
ADDA GR3,=1
SUBA GR5,=1
[
e ]
0R
GR2,=#0030
|
ア
|
JMI LOOP21
|
イ
|
JPL LOOP21
|
ウ
|
JPL LOOP22
|
エ
|
JUMP LOOP22
|
オ
|
JZE LOOP21
|
カ
|
JZE LOOP22
|
[
e ]の分岐先および分岐条件は?
[ e ]は、前行(「SUBA GR5,=1」)の演算結果により分岐していますので、GR5の用途を確認します。
行番号7で初期値3を設定し、行番号19で1ずつ減算しています。
JUMP命令ですと行番号21が実行されなくなるので除外されます。
初めて[ e ]が実行された時に、分岐したいので、分岐条件は「JPL」に絞り込まれます。
「イ JPL
LOOP21」「ウ JPL
LOOP22」のいずれかとなります。
初期値は行番号7で設定しているので、行番号8に分岐する「イ JPL LOOP21」が正解となります。
講評
設問3では、d、eの正答率は平均的で、おおむね理解されていた。
|
設問4
問われている内容は?
分岐先(LOOP21・LOOP22)・分岐条件(JUMP・JMI・JPL・JZE)は?
|
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
LD
GR5,=3 ;ループ回数
L00P21 LD
GR6,DIVIS0R,GR4 ;GR6←除数
LD
GR7,=0
;GR7←商
L00P22 CPA
GR2,GR6
JMI
SETTIME
SUBA GR2,GR6
ADDA GR7,=1
[JUMP LOOP22]
SETTIME 0R GR7,=#0030
ST
GR7,0,GR3
ADDA GR4,=1
ADDA GR3,=1
SUBA GR5,=1
[JPL LOOP21]
0R
GR2,=#0030
|
7
|
△
|
2
|
7
|
0
|
8
|
ア
|
9
|
イ
|
17
|
ウ
|
20
|
エ
|
270
|
オ
|
299
|
DIVISORの構造は?
行番号8で除数が格納されたテーブル(DIVISOR)をアクセスしています。
除数が格納されたテーブルには、600と60と10が格納されています。
「2708」は、「2×600+7×60+0×10」+「余り8」を意味します。
除算回数は、2+7+0=9となります。正解は「ア 9」となります。
講評
設問4の正答率は低く、あまり理解されていなかった。イ又はウと誤って解答した受験者が見受けられた。
2708のうちの、2と7を求めるためには、2+7=9回実行する必要があることに気がつけば、正答できた。
|
0 件のコメント:
コメントを投稿