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




このページは

ソフ開

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

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

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



問1 ゼロでない整数の10進数表示のけた数Dと2進数表示のけた数Bとの関係を表す式はどれか。
D≒2log10
D≒10log2
D≒Blog210
D≒Blog10
解答
解説 二つの式の関係は10D=2Bとなります。
両辺の対数(底は10)をとって、log1010D=log1010
指数部は積にできるので、D×log1010=B×log10
底と値が同じ場合は1なので、D=B×log10

しかし、桁数は整数ですが、このままでは実数になるので、近似解として、D≒B×log102が正解となります。

問2 規格IEEE754(IEC 60559)による単精度の浮動小数点表示法は、次のとおりである。10進数14.75をこの規格に従って表示したときの指数部Eのビット列はどれか。
画像(問2)を表示できません


たとえば、2進数(0.011)2は、(−1)0×2125-127×(1+0.1)2なので、S=0、E=125、F=(0.1)2となる。ここで、( )2内の数は2進数を表す。
00000010
00000011
10000010
10000011
解答
解説 例があるので、これと照らし合わせながら14.75を変換していきます。まずは、14.75を2進数に変換します。整数部と小数点以下を分けて計算します。すると(14.75)10=(1110.11)2となります。

次に、これを(1+○)2×2の形にします。まず、シフトして(1.11011)2×23

よって、正数なのでS=1、F=は11011、E=3=130−127なので、10000010となります。

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

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

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

問4 関数f(x)は、引数も戻り値も実数型である。この関数を使った、@〜Dから成る手続を考える。手続の実行を開始してから十分な回数を繰り返した後に、Bで表示されるyの値に変化がなくなった。このとき成立する関係式はどれか。

@ x←a
A y←f(x)
B yの値を表示する。
C x←y
D Aに戻る
f(a)=y
f(y)=0
f(y)=a
f(y)=y
解答
解説 y←f(x)、x←yを十分繰り返して値が変化しなくなったということは、f(x)が同じ値を返すようになったということです。このとき、x←yも一定となるので、x=yが成立します。つまり、f(y)=yが成立します。

問5 A,B,C,Dを論理変数とするとき、次のカルノー図と等価な論理式はどれか。

画像(問5)を表示できません
A・B・D+
A・B・
+B・D
+B・D
解答
解説 カルノー図とは、多変数の論理式を簡単化するのに用いられる図で、変数が多くなるとベン図では表現しにくくなり、カルノー図が用いられることが多いです。

例として、AC+BC+ABC+ABが与えられたとします。真を1、偽を0に対応させると以下のようになります。

カルノー図を表示できません

そこで、隣り合うもの同士をまとめると、緑の部分がAC、青の部分がBC、赤の部分がABとなります。

よって、AC+BC+ABとなり、元の式の簡約化ができました。

それでは、問題のカルノー図を考えます。以下のように色分けをします。端同士がつながっていることや、グループ化は2の倍数個で行われることに注意してください。

5ansを表示できません

赤い線の部分が、B・D。青い部分がとなり、これを+でつないだものが等しい論理式となります。

問6 8ビットのレジスタがある。このレジスタの各ビットの値をd0、d1、・・・d7とし、パリティビットの値をpとする。奇数パリティの場合、常に成立する関係式はどれか。
画像(問6ans)を表示できません
解答
解説 いくつかの例をためしてみるのも手ですが、確実ではなく、偶然成立してしまう可能性も捨てきれないので論理的に考えてます。

まず、排他的論理和の性質ですが、1と0、0と1のとき1。1と1、0と0のとき0になります。つまり、1が奇数個の場合に限り1を出力するといえます。つまり、最後に1の個数が奇数個になるようにパリティを調整すると出力は1になることがわかります。

問7 次のBNFで定義される<DNA>に合致するものはどれか。

<DNA>::=<コドン>|<DNA><コドン>
<コドン>::=<塩基><塩基><塩基>
<塩基>::=A|T|G|C
AC
ACGCG
AGC
ATGC
解答
解説 BNF(Backus Naur Form)とは文脈自由言語を定義する言語で、正規表現などを記述するのに用いられています。式の意味は、左式を右式で置き換えることができるという意味です。「|」はオアをあらわしています。<DNA>の右式に<DNA>が含まれていますが、これは再帰的な表現です。

式は<DNA>は必ず、<コドン>を含みます。そして、<コドン>は<塩基>の3つによってあらわされます。<塩基>は一つの英文字で表されるので、<コドン>は3つの英文字になります。よって、3の倍数の英文字列になることがわかります。

問8 終端記号の集合T={0,1}、非終端記号の集合N={A,B,C,S}及び書換え規則の集合P={S→ε,S→0A,S→1B,A→0S,A→1C,B→1S,B→0C,C→1A,C→0B}を考える。ここで、εは空列を表す記号とする。
G={T,N,P,S}で定義される文法Gによる導出として、正しいものはどれか。
S ⇒ 0A ⇒ 00C ⇒ 000A ⇒ 0000S ⇒ 0000
S ⇒ 0A ⇒ 01C ⇒ 011B ⇒ 0111S ⇒ 0111
S ⇒ 1B ⇒ 10C ⇒ 101A ⇒ 1010S ⇒ 1010
S ⇒ 1B ⇒ 10C ⇒ 101A ⇒ 1011S ⇒ 1011
解答
解説 それぞれの選択肢を検証していきます。

選択肢ア:S⇒0A(S→0Aを適用)⇒00C(C→0Aがないので不可能)
選択肢イ:S⇒0A(S→0Aを適用)⇒01C(C→1Aを適用)⇒011B(C→1Bがないので不可能)
選択肢ウ:S⇒1B(S→1Bを適用)⇒10C(B→0Cを適用)⇒101A(C→1Aを適用)⇒1010S(A→0Sを適用)⇒1010(S→εを適用):正しい
選択肢ウ:S⇒1B(S→1Bを適用)⇒10C(B→0Cを適用)⇒101A(C→1Aを適用)⇒1011S(A→1Sがないので不可能)

問9 次の2分探索木からルートノード7を削除し、そのあと再び7を追加した2分探索木はどれか。

画像(問9)を表示できません
画像(問9ans)を表示できません
解答
解説 まず、木の基本的な事項について以下に図示します。

木を表示できません

次に、2分探索木(2分木)とは、すべてのノードについて、左の子の値≦親の値≦右の子の値(あるいは大小が逆)の値となっているものを指します。そして、木からルート(根)のノードを取り除く場合は、末端の葉と入れ替えて削除します。つまり、新しいルートは6になります。

そして、あたらしいルートになった時点で再構築が行われますが、左の子の値≦親の値≦右の子が守られているので、そのままになります。最後に7を再度追加するわけですが、6<7により右、7<9により左、7<8により左なので、ルートから右、左、左に進んだ選択肢イの木となります。

問10 配列A[1]、A[2]、・・・、A[7]で、A[1]を根とし、A[i]の左側の子をA[2i]、右側の子をA[2i+1]とみなすことによって、2分木を表現する。このとき、配列の線形探索は2分木の探索のどれに当たるか。
行きがけ(先行順)深さ優先探索
帰りがけ(後行順)深さ優先探索
通りがけ(中間順)深さ優先探索
幅優先探索
解答
解説 木と配列の関係をまとめると以下のようになります。

木と配列を表示できません

つまり、これは、1段目をさがし、2段目をさがし、3段目をさがし・・・となるので、幅優先探索となります。

問11 キューの実装のうち、キューへの追加と取出しの手間が最少のものはどれか。ここで、キューの要素数は可変とし、図中の矢印は、ポインタの指示を表す。
画像(問11ans)を表示できません
解答
解説 実装するのはキュー、つまり先入先出のデータ構造になります。よって、データの先頭と末尾に高速にアクセスすることができれば、手間が最少になるといえます。ここでは、先頭と末尾へのポインタをもっている選択肢ウのような構造が望ましいといえます。

問12 キー値が等しい要素同士について、整列前の要素の順序(前後関係)を保つアルゴリズムを、安定な整列アルゴリズムという。次の二つの整列アルゴリズムに対して、安定にできるかどうかを考える。正しい組合せはどれか。

[アルゴリズムとその特徴]
選択ソート
未整列の並びに対して、最小のキー値をもつ要素と先頭の要素とを入れ替える。
同様の操作を未整列の並びの長さを一つずつ減らしながら繰り返す。

挿入ソート
未整列要素の並びの先頭の要素を取り出し、その要素を整列済みの要素の正しい位置に挿入する。
画像(問12ans)を表示できません
解答
解説 つまり、安定な整列アルゴリズムとは、5,3',2,3'',4があったときに、確実に2,3',3'',4,5になるアルゴリズムのことです。

選択ソート: 3',5,3'',2があったとすると
1つ目まで確定:2,5,3'',3'
2つ目まで確定:2,3'',5,3'
ソート完了:2,3'',3',5

以上のように、値を入れ替える際に前にある値が後ろに移動する可能性があるので安定な整列アルゴリズムにはなりません。

挿入ソート:
3',5,3'',2があったとすると
1つめまで確定:2,3',5,3''
2つめまで確定:2,3',5,3''
ソート完了:2,3',3'',5

以上のように、同じ値が合った場合には後ろに追加するというルールを決めておけば安定な整列アルゴリズムにすることができます。

問13 自然数をキーとするデータを、ハッシュ表を用いて管理する。キーxのハッシュ関数h(x)を

h(x)=x mod n


とする。ここで、nはハッシュ表の大きさであり、x mod nはxをnで割った余りを表す。キーaであるデータと、キーがbであるデータの間で、衝突が起きる条件はどれか。
a+bがnの倍数
a−bがnの倍数
nがa+bの倍数
nがa−bの倍数
解答
解説 まず、実際に値を入れて計算してみたハッシュの例を下に示します。

ハッシュ

上の図からもわかるように、二つの値の差がnの倍数であれば衝突が起こることがわかります。

なお、整数論においては、『mod n』のことを『nを法とする』などといいます。

問14 探索表の3種類の構成法を例とともにa〜cに示す。これらの構成法にふさわしい探索手法の組合せはどれか。ここで、探索表のコードの空欄は表の空きを示す。

画像(問14)を表示できません
画像(問14ans)を表示できません
解答
解説 まず、3つの探索法についてまとめます。データ量をnとしたときのオーダ(検索時間)もあわせてまとめます。

2分探索:ソートされているデータに対して、中間値と目的とを比較することで、大きいグループと小さいグループに分け、1回の検索で探索範囲を半分にしていく。オーダはlog2
線形探索:上から一つずつ比較していく方法。オーダはn
ハッシュ検索:ハッシュ関数を使って、格納場所を決める方法。ハッシュ値が同じになる衝突(シノニム)などがなければ、1度で検索場所が決まります。オーダは1

それでは、それぞれの表に適した検索法を考えます。
表a:コードが順番にならんでいる(ソートされている)ので、線形探索よりも2分探索のほうが高速に検索ができるので、2分探索を利用します。
表b:コードに規則性がないが、使用頻度順にならんでいるということは、上にあるものほど発見しやすいので、線形探索を利用します。
表c:ハッシュにより場所を決めているので、同じ関数を利用して求めるのが一番よいので、ハッシュ表探索を利用します。

問15 関数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)
31
248
527
解答
解説 順番に追いかけていきます。

f(775,527):Y≠0なので、f(527,248)
f(527,248):Y≠0なので、f(248,31)
f(248,31 ):Y≠0なので、f(31,0)
f(31 ,0  ):Y=0なので、X=31が戻り値になる。

問16 CPUのパイプライン処理を有効に機能させるプログラミング方法はどれか。
CASE文を多くする。
関数の個数をできるだけ多くする。
分岐命令を少なくする。
メモリアクセス命令を少なくする。
解答
解説 まず、パイプラインの例を下に示します。

パイプラインを表示できません

なお、分かれた段階の個数をパイプラインの深さといい、1つの段階にかかる時間をパイプラインピッチといいます。

見てわかるとおり、パイプラインは、きれいに各段階が1つずつずれているのが理想的ですが、実際はこのようにきれいにはなりません。それは、依存関係や分岐命令によって、順番どおりに処理できない場合が生じるからです。逆に言えば、依存関係や分岐命令を極力減らすことでパイプラインを効果的に利用することができるといえます。

依存関係や分岐命令などによってパイプラインの順番どおりに処理されないような状況をパイプラインハザードといいます。

問17 RISCアーキテクチャのMPUの特徴として、適切なものはどれか。
固定長の命令だけでなく、可変長の命令がある。
ハードウェア回路とパイプラインの技術を使い、1命令当たりおおよそ1クロックで実行できる。
命令の形式には、レジスタ−レジスタ間の操作をする形式だけでなく、レジスタ−メモリ間の形式及びメモリ−メモリ間の形式がある。
命令の実行は、マイクロプログラムというファームウェアで行う。
解答
解説 代表的な2つの命令セットアーキテクチャについてまとめます。

RISC(Reduced Instruction Set Computer:縮小命令セットコンピュータ):時間のかからない単純な命令を利用する実行する方式
CISC(Complex Instruction Set Computer:複合命令セットコンピュータ):時間はかかるが複雑なことができる命令を利用する方式

RISCは、固定長の命令とパイプラインを有効に利用し高速化を実現しています。また、演算対象は主にレジスタでハードウェアの制御はワイヤードロジック(結線論理)によって行われています。

問18 キャッシュメモリのアクセス時間及びヒット率と、主記憶のアクセス時間の組合せのうち、主記憶の実効アクセス時間が最も短くなるのはどれか。
画像(問18ans)を表示できません
解答
解説 すべてを計算してもよいのですが、今回はアクセス時間が同じでヒット率が低いという理由で、選択肢イとくらべて選択肢アを除外。選択肢エとくらべて選択肢ウを除外できます。よって、選択肢イと選択肢エだけを計算すれば十分です。

選択肢イ:10×0.7+70×0.3=7+21=28
選択肢エ:20×0.8+50×0.2=16+10=26

よって、26ナノ秒で選択肢エが最も高速だといえます。

問19 メモリの誤り制御方式で、2ビットの誤り検出機能と、1ビットの誤り訂正機能をもたせるのに用いられるものはどれか。
奇数パリティ
水平パリティ
チェックサム
ハミング符号
解答
解説 代表的な誤り制御方式を下にまとめます。

奇数パリティ:1(あるいは0)の個数が奇数個になるように、1ビットを付加するもの
奇数パリティ:1(あるいは0)の個数が偶数個になるように、1ビットを付加するもの
水平パリティ:転送を2次元の配列とみなしたときに、水平方向へのパリティを付加するもの。垂直パリティと合わせて利用されることが多い。
チェックサム:送信データを数値に対応させ、その合計を計算し付加するもの。
ハミング符号:2ビットの誤り検出と、1ビットの誤り訂正機能を持つ
巡回冗長検査(CRC):送信列から生成多項式とよばれる式をつくり、受信側で計算式の余りが0かどうかを調べる。

問20 記録媒体の記録層として有機色素を使い、レーザ光によってピットと呼ばれる焦げ跡を作ってデータを記録する光ディスクはどれか。
CD−R
CD−RW
DVD−RAM
DVD−ROM
解答
解説 CD−Rは、レーザ光によって、表面にビットと呼ばれる焦げ跡を作ることでデータを記録します。俗に、CD−Rにデータを入れることを『焼く』といいますが、実際に焦げ跡を作って焼いているところからきています。よって、書き換えはできません。

CD−RW、DVD−RAMは書き換えが可能です。
DVD−ROMは、書き込むことができません。