2016年11月22日火曜日

[平成28年度秋] 午後 問11 解説

[問題文・解答]


平成28年度10月に実施された基本情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)

[問題概要]


この問題は、選択問題で問9〜問13のうち1問を選択する必要があります。
問題の題材は、電卓プログラム(Java)です。
Javaで実装された整数値の加減乗除をする電卓プログラムのについて問われます。

[設問1]


a) プログラム1で作成されたインタフェースKeyをプログラム2では数字キー、プログラム3では演算キーとして実装しているため、aには「イ」の「implements」が当てはまります。

b,c) b,cの行では、入力された数値に従ってスタックを更新する処理を実装しています。P.52(2)の部分の処理に該当します。現在スタックの先頭に格納されている数値は、0(初期値)またはこれまでに入力中の数値であるため、続いて数値が入力された場合は、現在のスタックの先頭を桁上げして入力された数値を加えればよいです。従って、bには「ウ」の「stack.pop()」、cには「ア」の「ordinal()」が当てはまります。

d) メソッドcalculateは、入力された演算キーに対応する演算を2つの引数に対して行い、演算結果を返します。従って、dは入力された演算キーを示す「this」が適切です。

e) 文字とインタフェースKeyの対応付けを作成し、その後文字とそれに対応する演算キーや数字キーを割り当てています。従って、eには「Key」が入ります。

[答] a) イ b) ウ c) ア d) エ e) オ

[設問2]


主にプログラム4の記述を基に入力文字列の処理の流れを順に追えば解答が求められます。

f) "2*4"の後の"C"でスタックとpendingKeyの値が初期化され、次の"2"でスタックに2が格納されます。そして、"="が入力された時にpendingKeyはnullのままなのでスタックの先頭に格納された"2"が表示されます。よって、正解は「イ」となります。

g) "8/2"が入力された時点で、スタックには先頭から順に2,8が格納されており、pendingKey=DIVIDEとなっています。次に"/"が入力される事で8/2の演算が実行され、スタックは先頭から0,4となり、pendingKey=DIVIDEとなります。その後、"="が入力されると4/0の演算を実行しようとしますが、これはArithmeticExceptionとなるため、エラーメッセージとして"Error"が表示されます。従って、正解は「ケ」となります。

[答] f) イ g) ケ

上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。


0 件のコメント:

コメントを投稿