平成20年度 秋期 ソフトウェア開発技術者試験 問1−20 解答編




このページは

ソフ開

(ソフトウェア開発技術者試験)

解答と解説のページです。

問題だけで勉強したい方は目次へ戻ってください



問1 基数変換に関する記述のうち、適切なものはどれか。
2進数の有限小数は、10進数にしても必ず有限小数になる。
8進数の有限小数は、2進数にすると有限小数にならないこともある。
8進数の有限小数は、10進数にすると有限小数にならないこともある。
10進数の有限小数は、8進数にしても必ず有限小数になる。
解答
解説 まず、2進数3桁を1桁にまとめたものが8進数で、2進数4桁を1桁にまとめたものが16進数です。よって、2進数で表現できるものは、必ず8進数、16進数でも表現できます。逆に8進数、16進数で表現で表現できるものは、必ず2進数で表現できます。

次に、10進数との関係を考えます。
2進数を10進数に変換することを考えると、2-1、2-2・・・2-nのようになっているので、これらの和で表現できます。よって、2進数で表現できることは10進数で表現できます。

しかし、10進数の0.3のようなものは、2-1=0.5と2-2=0.25の間にあるので、厳密な表現はできないということがわかります。

問2 けた落ちによる誤差の説明として、適切なものはどれか。
値がほぼ等しい二つの数値の差を求めたとき、有効けた数が減ることによって発生する誤差
指定された有効けた数で演算結果を表すために、切捨て、切上げ、四捨五入などで下位のけたを削除することによって発生する誤差
絶対値の非常に大きな数値と小さな数値の足し算や引き算を行ったとき、小さい数値が計算結果に反映されないことによって発生する誤差
無限級数で表される数値の計算処理を有限項で打ち切ったことによって発生する誤差
解答
解説 誤差について下にまとめます。

アンダーフロー:演算結果が、扱える数値の最小値を超えることによって生じる誤差
オーバーフロー:演算結果が、扱える数値の最大値を超えることによって生じる誤差
打切り誤差:数表現のけた数に限度があるときに、計算を途中でやめることで起きる誤差
丸め誤差:数表現のけた数に限度があるとき、最小のけたより小さい部分について四捨五入、切上げ又は切捨てを行うことによって生じる誤差
けた落ち:値がほぼ等しい浮動小数点同士の減算において、有効けた数が大幅に減ってしまうことで起きる誤差
情報落ち:浮動小数点の加算において、一方の数値の下位のけたが欠落することで起きる誤差

情報落ちは絶対値の小さいものから計算することで回避できます。
けた落ちは式を変形するなどで回避することができます。
そのほかは、誤差が許容できるほどに大きな計算桁数を準備することで軽減できます。

問3 関数y=f(x)上の点(x0,f(x0)における接線とx軸との交点のx座標をx1とする。x0とx1の関係式はどれか。ここで、f'(x)はf(x)の導関数である。

画像(問3)を表示できません
画像(問3ans)を表示できません
解答
解説 まず、関数y=f(x0)の地点において、接線の傾きは、導関数であるf’(x0)になります。
つまり、直線の方程式y=ax+bに代入すると、y=f’(x0)x+bとなります。

この式に(f(x0),x0)を代入すると、f(x0)=f’(x0)x0+bとなります。
この式に(f(x1),x1)を代入すると、f(x1)=f’(x0)x1+bとなります。

下の式から上の式を引くとf(x1)−f(x0)=f’(x0))(x1−x0)となります。

このとき、f(x1)はx軸との接点なので、y=0です。つまり、−f(x0)=f’(x0))(x1−x0)となります。

最後に、x1ついて解くと、x1=x0−f(x0)/f’(x0)となります。

問4 Random(n)は0以上n未満の整数を一様な確率で返す関数である。整数型の変数A,B及びCに対して次の一連の手続を実行したとき、Cの値が0になる確率はどれか。

A=Random(10)
B=Random(10)
C=A−B
1/100
1/20
1/10
1/5
解答
解説 A、Bがそれぞれ持ちうる値は0〜9です。つまり、10種類×10種類=100種類が生成可能です。Cが0ということは、A=Bなので、0と0、1と1・・・9と9のように10種類あります。つまり、10/100=1/10となります。

問5 図の線上を、点Pから点Rを通って、点Qに至る最短経路は何通りあるか。

画像(問5)を表示できません
16
24
32
60
解答
解説 P〜RとR〜Qに分けて考えます。とりうる値は右と上の二つです。

P〜Rの場合は、上に2つ右に2つあるので、この組み合わせを考えると42=4!/(2!(4−2)!)=6
R〜Qの場合は、上に2つ右に3つあるので、この組み合わせを考えると52=5!/(2!(5−2)!)=10

よって、6×10で60通りとなります。

問6 7ビットのコードと1ビットのパリティからなる8ビットのデータで発生した誤りに関する記述として、適切なものはどれか。
1ビットが誤っているときだけ、誤りが復元できる。
誤りが復元できるかどうかは、不明である。
誤りを復元することは、不可能である。
奇数個のビットが誤っているときだけ、誤りが復元できる。
解答
解説 1ビットのパリティでは、誤りの場所を特定することができないので、誤りを復元することはできません。1の個数を偶数や奇数になるように、パリティを調節することで誤りの発見をすることはできます。(ただし同時に複数誤りが発生した場合はできない場合があります)

問7 次のBNFにおいて非終端記号<A>から生成される文字列はどれか。

<R0>::=0|3|6|9
<R1>::=1|4|7
<R2>::=2|5|8
<A>::=<R0>|<A><R0>|<B><R2>|<C><R1
<B>::=<R1>|<A><R1>|<B><R0>|<C><R2
<C>::=<R2>|<A><R2>|<B><R1>|<C><R0
123
124
127
128
解答
解説 BNF(Backus Naur Form)とは文脈自由言語を定義する言語で、正規表現などを記述するのに用いられています。

実際にそれぞれの値を生成できるかを調べていきます。生成規則を見ると後ろの値から確定させているので、これにあわせて考えます。
選択肢ア:3を作るために<A><R0>にします。2を作るために<B><R2><R0>にします。1を作るために<R1><R2><R2>とすることで123を作れます。
選択肢イ:4を作るために<C><R1>にします。2を作るために<A><R2><R1>にします。<A>から1をつくることができないので、124を作れません。
選択肢ウ:7を作るために<C><R1>にします。2を作るために<A><R2><R1>にします。<A>から1をつくることができないので、127を作れません。
選択肢エ:8を作るために<B><R2>にします。2を作るために<C><R2><R2>にします。<C>から1をつくることができないので、128を作れません。

意味から考えることもできます。<R0>、<R1>、<R2>はそれぞれ3で割った余りが0になる集合といえます。再帰的に考えると<A>は、3で割った余りが0になるように調節され、<B>は、3で割った余りが1になるように調節され、<C>は、3で割った余りが2になるように調節されています。

つまり、<A>から生成できるのは、それぞれの桁を足し合わせて3で割り切れる文字列といえます。(例:1+2+3=6 6%3=0なので作れる。1+2+4=7 7%3=1なので作れない)

問8 逆ポーランド表記法で表された式を評価する場合、途中の結果を格納するためのスタックを用意し、式の項や演算子を左から右に順に入力し処理する。スタックが図の状態のとき、入力が演算子となった。このときに行われる演算はどれか。ここで、演算は中置表記法で記述するものとする。

画像(問8)を表示できません
A 演算子 B
B 演算子 A
C 演算子 D
D 演算子 C
解答
解説 スタックは、後入先出法によるデータ構造です。また、逆ポーランド記法とは、スタックを使うことで表現でき、括弧を使わないで計算の順序を指定できるため、コンパイラなどで用いられています。たとえば、((E−F)÷G)+((C−D)÷(A+B))は、EF−G÷CD−AB+÷+のように表記されます。

問題のスタックは、C、Dの順に入力が行われ、演算子が来ているので、『C D 演算子』という状態なので、これを中置記法にすると『C 演算子 D』となります。

問9 B木に関する記述として、適切なものはどれか。
階層の深さが同じになるように、ノードの分割と併合を行う。
キー値からある関数によって、データの格納位置を決める。
先頭データから順次アクセスだけが可能である。
登録簿とメンバに分かれ、メンバは順編成ファイルである。
解答
解説 B木とは、索引部の各ノードのキー値を中心にして、小さい側のレコード数と大きい側のレコード数の比率が、ある範囲内に収まるように動的に再配置しながら格納するものです。

選択肢イは、ハッシュテーブルの説明です。
選択肢ウは、順編成ファイルの説明です。
選択肢エは、区分編成ファイルの説明です。

問10 節点の集合{1,2,・・・,n}である木を表現するために、大きさnの整数型配列A[1],A[2],・・・,A[n],を用意して、節点iの根の節点をA[i]に格納する。節点kが根の場合はA[k]=0とする。表に示す配列が表す木の葉の数は、幾つか。

画像(問10)を表示できません
解答
解説 まず、木というデータ構造について下図にまとめます。

木を表示できません

つぎに、配列と木構造の対応を図示すると以下のようになります。

木を表示できません

最後に、問題文のA[i]が親を指し、iが自分の番号であることを順番に繰り返していくと以下のような図になります。

6aを表示できません

葉は、一番末端にあるデータなので、今回は{2、4、6、7、8}の5つとなります。

問11 整列済みの列の末尾から比較して、次の要素の挿入位置を決める単純挿入整列法について考える。昇順に整列済みの大きさnのデータ列を、改めて昇順に整列する処理を行う場合の比較回数のオーダは、どれか。
2
log n
n log n
解答
解説 [1,2,3,4,5]のようなデータで比較回数を考えて見ます。

1はそのまま配列に入れます。[1]
2を末尾のデータと比較して、1<2のため末尾に入れます。[1,2]
3を末尾のデータと比較して、2<3のため末尾に入れます。[1,2,3]
4を末尾のデータと比較して、3<4のため末尾に入れます。[1,2,3,4]
5を末尾のデータと比較して、4<5のため末尾に入れます。[1,2,3,4,5]

通常の単純挿入整列法はO(n2)ですが、すでに整列済みであることと、後ろから比較することが決まっていれば、上のようにn回の比較と代入で終わります。

問12 従業員番号と氏名の対がn件格納されている表に線形探索法を用いて、与えられた従業員番号から氏名を検索する。この処理における平均比較回数を求める式はどれか。ここで、検索する従業員番号はランダムに出現し、探索は常に表の先頭から行う。また、与えられた従業員番号がこの表に存在しない確率をaとする。
(n+1)/2+na/2
(n+1)(1−a)/2
(n+1)(1−a)/2+n/2
(n+1)(1−a)/2+na
解答
解説 まず、表の中にある場合の平均探索回数は(n+1)/2です。次に表の中にない場合はすべてを調べる必要があるので、n回探索します。今存在しない確率がaなので、存在する確率は1−aとなります。

つまり、全体としては、(n+1)/2×(1−a)+n×a=(n+1)(1−a)/2+naとなります。

問13 次の関数g(x)の定義に従ってg(4)を再帰的に求めるとき、必要な加算の回数は幾らか。

g(x)=if x<2 then 1 else g(x−1) + g(x−2)
解答
解説 再帰は本来性質を考え、回数を見積もりますが、値が小さいので順番に追いかけていきます。

x=0から考えていきます
g(0)=0→加算は0回
g(1)=1→加算は0回
g(2)=g(1)+g(0)→加算は1回
g(3)=g(2)+g(1)→加算はg(2)が1回とこの関数で1回=2回
g(4)=g(3)+g(2)→加算はg(3)が2回とg(2)が1回、この関数で1回=4回、


問14 次に示すユークリッドの互除法(方法1、方法2)で、正の整数a,bの最大公約数は、それぞれmとnのどちらの変数に求まるか。ここで、m mod nはmをnで割った余りを表す。

画像(問14)を表示できません
画像(問14ans)を表示できません
解答
解説 m mod n=rが0になったときのnが最大公約数となります。方法1では、ループの最後でrを計算し、終了条件でr=0を調べているので、nに最大公約数が求まります。一方方法2では、rを計算した後に、n→m、r→nの代入を行い、r=0を調べています。つまり、最大公約数nはmに移されているため、mに最大公約数が求まります。

問15 変数xの初期値がある正の整数であるとき、次の流れ図で表される手続きを実行したところ、xの値はxの初期値と等しくなり終了した。xの初期値として考えられるものは全部で幾つあるか。

画像(問15)を表示できません
解答
解説 まず、このアルゴリズムをみると、入力値xを90より大きくなるまで2倍し続けています。90より大きくなったら90を引いて終了するという流れです。
つまり、x=2n−90が成立する整数が求めるべき初期値といえます。

n=0:x=x−90となるxは存在しない。
n=1:x=2x−90となるxは45(正しい)
n=2:x=4x−90となるxは30(正しい)
n=3:x=8x−90となるxは約12.86
n=4:x=16x−90となるxは6(正しい)
n=5:x=32x−90となるxは約2.90
n=6:x=64x−90となるxは約1.43
n=7:x=128x−90となるxは約0.71
これ以上は、nを大きくしてもxは1より小さいので整数にはならない。

よって、45、30、6の3つが初期値と同じになるといえます。

問16 NAND素子を用いた次の組合せ回路の出力Zを表す式はどれか。ここで、・は論理積、+は論理和、はXの否定を表す。

画像(問16)を表示できません
X・Y
X+Y
X・Y
X+Y
解答
解説 NANDに同じ値を入力すると、下にようになり、入力の否定が出力されます。

0,0 → 1
1,1 → 0

つまり全体は、のNANDであるといえます。
これをド・モルガンの定理をつかって変換すると、X+Yとなります。

問17 VLIWに関する記述として、適切なものはどれか。
同時に複数の命令が独立して実行され、どの命令が同時に実行されるのかは、ハードウェア制御で動的に決定される。
パイプラインの段数を増やすことで、高い周波数での動作を可能とし、処理を高速化する。
一つの命令語で複数の命令を同時に実行する。
命令を処理するためのフェッチ、デコード、実行などの段階を、それぞれ並列に処理する。
解答
解説 VLIW(Very Long Instruction Word)は、命令語を長く取り、一つの命令で複数の機能ユニットを同時に制御することによって高速化を図る方式です。

選択肢アは、アウト・オブ・オーダー実行の説明です。
選択肢イは、スーパーパイプラインの説明です。
選択肢エは、スーパースカラ方式の説明です。

問18 表のクロック周波数と平均CPI(Cycles Per Instruction)の組合せのうち、同一命令数のプログラムを処理するのが最も短いものはどれか。
画像(問18ans)を表示できません
解答
解説 クロック周波数は1秒間に発生できるクロック数を表した値です。平均CRIは1命令を実行するのに必要な平均クロック数を表した値です。

つまり、1命令の処理に掛かる平均時間は、平均CRI/クロック周波数で求めることができます。
選択肢ア:7/2.0GHz=3.5(ナノ秒)
選択肢ア:8/2.5GHz=3.2(ナノ秒)
選択肢ア:10/3.0GHz≒3.3(ナノ秒)
選択肢ア:12/3.5GHz≒3.4(ナノ秒)

よって、選択肢イのケースが最も処理時間が短いといえます。

問19 キャッシュメモリの書込み制御方式の一つであるライトバック方式の特徴はどれか。
キャッシュメモリからデータを追い出すとき、主記憶を更新する必要がない。
キャッシュメモリのデータとそれに対応する主記憶のデータとの間で不一致が生じない
データを書き込むとき、キャッシュメモリにあるかどうかにかかわらず、主記憶に書き込む
同一番地に繰り返して書き込む場合は、主記憶へのアクセス回数が少なくて済む。
解答
解説 キャッシュメモリと主記憶のデータの整合性の取り方には、以下の2つの種類があります。

ライトスルー方式:キャッシュメモリと主記憶の両方の書き込む方法です。
ライトバック方式:データがキャッシュメモリから追い出されるときに主記憶に書き込みます。

問20 回転速度が5,000回転/分、平均シーク時間が20ミリ秒の磁気ディスクがある。この磁気ディスクの1トラック当たりの記憶容量は、15,000バイトである。このとき、1ブロックが4,000バイトのデータを、1ブロック転送するのに必要な平均アクセス時間は何ミリ秒か。
27.6
29.2
33.6
35.2
解答
解説 アクセス時間はサーチ時間(平均回転待ち時間)+シーク時間(平均位置決め時間)+データ転送時間で求められます。

サーチ時間は、半回転するのにかかる時間です。これは、回転速度5000回転/分から60/5000(秒)=0.012。これは、1回転にかかる時間なので、この半分0.012/2=6ミリ秒となります。
シーク時間は、問題文より20ミリ秒

データ転送時間は、1トラック(=1周)あたり15000バイトなので、4000バイトは、4/15トラックとなります。これに1回転する時間をかけると、4/15×12ミリ秒=3.2ミリ秒

よって、アクセス時間は、6+20+3.2=29.2秒となります。