2012年8月22日水曜日

=== 平成23年春 問7 ===


平成23年春目次  前の問題  次の問題

問7

次の流れ図は,1から100までの整数の総和を求め,結果を変数xに代入するアルゴリズムを示したものであるが,一部誤りがある。どのように訂正すればよいか。


ア ①の処理を "0 → x"にする。
イ ②の条件判定を " i : 99"にする。
ウ ③の処理を "x + i → i"にする。
エ ④の処理を "x + 1→ x"にする。



解説

この流れ図で変数xに入れているのは総和である。
また、変数iには1から100までの数字を順にいれている。
繰り返しの部分は、iをxに足しては、iを増やしを、繰り返す。

こう考えると、最初にxには0を入れておかないと、それに、1~100を足したときに、正しい結果にならない。
そのため、①の部分でxには0を入れる必要がある。





=== 平成23年春 問6 ===


平成23年春目次  前の問題  次の問題

問6

関数 f(x,y)が次のように定義されているとき,f(775,527)の値は幾らか。ここで,x mod yはxをyで割った余りを返す。

f(x, y): if y = 0 then return x else return f(y, x mod y)

ア 0    イ 31    ウ 248    エ 527



解説

これは、自分自身を呼び出す再帰関数である。

■1回目の前半
f(775,527)つまり、x=775,y=527で呼び出される。
yは0でないので第1引数にはy(527)、第2引数にはxをyで割った余り248を指定してもう1回、fを呼び出す。
つまり、f(527,248)で呼出してそれがreturnした値を返そうとする。
まだ1回目の呼び出しは終わっていないことに注意

■2回目の前半
f(527,248)つまり、x=527,y=248で呼び出される。
yは0でないので第1引数にはy(248)、第2引数にはxをyで割った余り31を指定してもう1回、fを呼び出す。
つまり、f(248,31)で呼出してそれがreturnした値を返そうとする。

■3回目の前半
f(248,31)つまり、x=248,y=31で呼び出される。
yは0でないので第1引数にはy(31)、第2引数にはxをyで割った余り0を指定してもう1回、fを呼び出す。
つまり、f(31,0)で呼出してそれがreturnした値を返そうとする。

■4回目
f(31,0)つまり、x=31,y=0で呼び出される。
yは0なので、31を返す。
ここで、4回目に呼ばれたfは終了して、3回目の呼出しに戻る。


■3回目の後半
f(31,0)が返した値(31)を呼び出し元に返し、終了。

■2回目の後半
f(248,31)が返した値(31)を呼び出し元に返し、終了。

■1回目の後半
f(527,248)が返した値(31)を呼び出し元に返し、終了。

これで結局 f(775,527)の呼び出しは31を返したことになる。





=== 平成23年春 問5 ===


平成23年春目次  前の問題  次の問題

問5

空の2分探索木に,8,12,5,3,10, 7,6の順にデータを与えたときにできる2分探索木はどれか。




解説

2分探索木とは 左の子≦親≦右の子 の条件を満たすようにした2分木である。
そのため、与えられたデータを、ルートからすでにある各ノードと比較し、小さければ左、大きければ右に格納していく。

8,12,5,3,10, 7,6 の順にデータを格納するには次のようになる。

正解はエとなるので、エの図を見ながら確認

8 :まだデータが入っていないので、ルートになる。

12:まずルートと比較する。8より大きいので、右に進む。そこにはまだ子がないので、そこに登録。

5 :ルートより小さいので左に進む。そこにはまだ子がないので、そこに登録。

3 :ルートより小さいので左に進む。そこに、5が登録されているので、それと比較。5より小さいのでさらに左に進み、そこに登録。

10:ルートより大きいので右に進む。そこに、12が登録されているので、それと比較。12より小さいので左に進み、そこに登録。

7 :ルートより小さいので左に進む。そこに、5が登録されているので、それと比較。5より大きいので右に進み、そこに登録。

6 :ルートより小さいので左に進む。そこに、5が登録されているので、それと比較。5より大きいので右に進むがそこにまだ7があるのでそれと比較。7より小さいので、左に進みそこに登録。





2012年8月21日火曜日

=== 平成23年春 問4 ===


平成23年春目次  前の問題  次の問題

問4

次の表は,文字列を検査するための状態遷移表である。検査では,初期状態を aとし,文字列の検査中に状態が eになれば不合格とする。
解答群で示される文字列のうち,不合格となるものはどれか。ここで,文字列は左端から検査し,解答群中の△は空白を表す。


ア +0010    イ -1    ウ 12.2    エ 9.△



解説

アについて考えると次のようになる。
最初の文字を検査する時の状態は(初期状態がaであるので)a。
現在の状態がaの時に、最初の文字が+(符号)であるので、状態はcとなる。
現在の状態がcの時に、次の文字が0(数字)であるので、状態はbとなる。
現在の状態がbの時に、次の文字が0(数字)であるので、状態はb。
また、現在の状態がbの時に、次の文字が1(数字)であるので、状態はb。
また、現在の状態がbの時に、次の文字が0(数字)であるので、状態はb。
結局最後まで文字を検査したがeの状態にならないため、不合格にはならない。

同様に、他の選択肢を調べてみると、次のようになるので、答えはウとなる。







2012年8月20日月曜日

=== 平成23年春 問3 ===


平成23年春目次  前の問題  次の問題

問3

表は,文字A~Eを符号化したときのピット表記と,それぞれの文字の出現確率を表したものである。1文字当たりの平均ピット数は幾らになるか。


ア 1.6    イ 1.8    ウ 2.5    エ 2.8



解説

1ビットである確率が0.5、2ビットである確率が0.3、3ビットである確率が0.1、4ビットである確率が0.05+0.05=0.1、となっているので、
1×0.5+2×0.3+3×0.1+4×0.1=1.8
となり、平均1.8ビットとなる





2012年8月5日日曜日

=== 平成23年春 問2 ===


平成23年春目次  前の問題  次の問題

問2

三つの実数X~Zとそれぞれの近似値が次の場合,相対誤差の小さい順に並べたものはどれか。


ア X,Y,Z    イ Y,Z,X    ウ Z,X,Y    エ Z,Y,X




解説

相対誤差は誤差が真の値に対してどのくらいの比率になっているかであるので |真の値-近似値|÷真の値 で計算すればよい

Xの誤差は1.02-1=0.02 これが真の値に対してどのくらいの割合になっているか計算してみると0.02÷1.02≒0.020
同様にYの相対誤差は(2-1.97)÷1.97=0.015
Zの相対誤差は(5.05-5)÷5.05=0.010

よって Z<Y<X





2012年8月2日木曜日