平成25年度 秋期 応用情報技術者試験 問1−20 解答編




このページは

応用情報

(応用情報技術者試験)

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

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




問1 会員を4桁の会員番号で管理している小売店がある。会員の中には4と9の数字を嫌う人がいるとの理由で、会員番号は、0001,0002,0003,0005,・・・のように、この二つの数値を使わないように連番で発行している。会員番号を0001から00528まで発行したとき、会員番号を付与した会員数は何人か。
279
344
422
427
解答
解説 利用できる数値は、0,1,2,3,5,6,7,8なので、変則的な8進数であるとみなせます。528は4以上である5,8は値を詰めるため、通常の8進数とすると427となります。
よって、4×8×8+2×8+7=4×64+2×8+7=256+16+7=279となります。

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

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

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

問3 負の整数を表現する代表的な方法として、次の3種類がある。

a 1の補数による表現
b 2の補数による表現
c 絶対値に符号を付けた表現(左端ビットが0の場合は正、1の場合は負)

4ビットのパターン1101をa〜cの方法で表現したものと解釈したとき、値が小さい順になるように三つの方法を並べたものはどれか。
a,c,b
b,a,c
b,c,a
c,b,a
解答
解説 順番に評価していきます。

まず、補数とは、A+B=0となるようなAとBの関係です。つまり、2回補数をとると元の値にもどります。

a:1101のビット反転0010なので、−2
b:1101のビット反転をして1を加えると0011なので、−3
c:1は負数で101は5なので、−5

よって、c、b、aとなります。

問4 論理式P、Qがいずれも真であるとき、論理式Rの真偽にかかわらず真になる式はどれか。ここで、“ ”は否定、“∨”は論理和、“∧”は論理積、“→”は含意(“真”→“偽”となるときに限り偽となる演算)を表す。
画像(問4ans)を表示できません
解答
解説 まず、P=真、Q=真を代入して、各選択肢を簡略化します。

選択肢ア:((真→真)∧(真→真))→(R→偽)=真→(R→偽)
選択肢イ:((真→真)∧(真→偽))→(真→R)=(真∧偽)→(真→R)=真→(真→R)
選択肢ウ:((真→偽)∨(真→真))→(R→偽)=真→(R→偽)
選択肢エ:((真→偽)∨(真→偽))→(真→R)=偽→(真→R)

偽→○の場合は、どんな状態でも真になるので、選択肢エはRの値に係らず(真→Rの値に係らず)真になるといえます。

問5 通信回線を使用したデータ伝送システムにM/M/1の待ち行列モデルを適用すると、平均回線待ち時間、平均伝送時間、回線利用率の関係は、次の式で表すことができる。

平均回線待ち時間 = 平均伝送時間 × 回線利用率/(1-回線利用率)

回線利用率が0%から徐々に上がっていく場合、平均回線待ち時間が平均伝送時間よりも最初に長くなるのは、回線利用率が何%を超えたときか。
40
50
60
70
解答
解説 まずは、待ち行列モデルのイメージを以下に図示します。

待ち行列を表示できません

それでは問題に戻ります。この式は、a=b×α (0≦α)という形をしています。このとき、αがどんな値ならa≧bになるかという風に変換することができます。
αが1ならばa=bとなるので、回線使用率/(1−回線使用率)=1となる値を計算します。

X/(1−X)=1
1−X=X
1=2X
X=0.5
よって、回線使用率が50%のときに等しくなるといえます。

問6 葉以外の節点は全て二つの子をもち、根から葉までの深さが全て等しい木を考える。この木に関する記述のうち、適切なものはどれか。ここで、深さとは根から葉に至るまでの枝の個数を表す。また、節点には根及び葉も含まれる。
枝の個数がnならば、節点の個数もnである。
木の深さがnならば、葉の個数は2n-1である。
節点の個数がnならば、深さはlog2nである。
葉の個数がnならば、葉以外の節点の個数はn-1である。
解答
解説 まず、木構造を以下にまとめます。今回は完全二分木の問題です。

木構造を表示できません

深さをnとした時の枝、葉、節点の個数を確認していきます。
n=1 → 枝:2、葉:2、節点:1+2=3
n=2 → 枝:2+4=6、葉4、節点:1+2+4=7
n=3 → 枝:2+4+8=14、葉:8、節点:1+2+4+8=15

これを元に各選択肢を調べていきます。
選択肢ア:枝がnならば、節点はn+1となります。
選択肢イ:木の深さがnならば、葉の個数は2nとなります。
選択肢ウ:節点の個数がnならば、深さは、(log2(n+1))−1となります。
選択肢エ:葉の個数がnならば、葉以外の節点の数はn−1となります。

よって、選択肢エが正解となります。

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

h(x) = x mod n

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

ハッシュ

ハッシュのイメージがつかめたところで計算に移ります。

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

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

問8 再帰的に定義された手続procで、porc(5)を実行したとき、印字される数字を順番に並べたものはどれか。

画像(問8)を表示できません
543212345
5432112345
54321012345
543210012345
解答
解説 順番に追いかけていくと以下のようになります。

proc(5)
n=0でないので、5を印字する
 proc(4)をを呼び出す
 n=0でないので、4を印字する
  proc(3)をを呼び出す
   n=0でないので、3を印字する
   proc(2)をを呼び出す
   n=0でないので、2を印字する
    proc(1)をを呼び出す
    n=0ではないので、1を印字する
     proc(0)を呼び出す
     n=0なので、戻る
    proc(1)に戻って1を印字する
   proc(2)に戻って2を印字する
  proc(3)に戻って3を印字する
 proc(4)に戻って4を印字する
proc(5)に戻って5を印字する

よって、5,4,3,2,1、と印字し、1,2,3,4,5と印字するので、選択肢イのようになります。

問9 未整列の配列a[i](i=1,2,3...,n)を、流れ図で示すアルゴリズムによって昇順に整列する。n=6でa[1]〜a[6]の値がそれぞれ、21,5,53,71,3,17の場合、流れ図において、a[j-1]とa[j]の値の入替えは何回行われるか。

画像(問9)を表示できません
3
6
8
15
解答
解説 順番にトレースしていきます。

ループ1:i=1
  ループ2:j=6 3<17なので入れ替えない(21,5,53,71,3,17)
  ループ2:j=5 71>3なので1回目の入れ替えを行う(21,5,53,3,71,17)
  ループ2:j=4 53>3なので2回目の入れ替えを行う(21,5,3,53,71,17)
  ループ2:j=3 5>3なので3回目の入れ替えを行う(21,3,5,53,71,17)
  ループ2:j=2 21>3なので4回目の入れ替えを行う(3,21,5,53,71,17)
ループ1:i=2
  ループ2:j=6 71>17なので5回目の入れ替えを行う(3,21,5,53,17,71)
  ループ2:j=5 53>17なので6回目の入れ替えを行う(3,21,5,17,53,71)
  ループ2:j=4 5<17なので入れ替えない(3,21,5,17,53,71)
  ループ2:j=3 21>5なので7回目の入れ替えを行う(3,5,21,17,53,71)
ループ1:i=3
  ループ2:j=6 53<71なので入れ替えない(3,5,21,17,53,71)
  ループ2:j=5 17<71なので入れ替えない(3,5,21,17,53,71)
  ループ3:j=4 21>17なので8回目の入れ替えを行う(3,5,17,21,53,71)

この段階で整列が終わったため、入替え処理は実施されせん。
よって、8回が正解となります。

問10 メモリインタリーブの説明として、適切なものはどれか。
新しい情報をキャッシュメモリに取り出すとき、キャッシュ上では不要になった情報を主記憶に書き込む。
主記憶のアクセス時間と磁気ディスクのアクセス時間とのギャップを補う。
主記憶の更新と同時にキャッシュメモリの更新を行う。
主記憶を幾つかの区画に分割し、連続したメモリアドレスへのアクセスを高速化する。
解答
解説 メモリインタリーブとは、複数のバンクと呼ばれる単位に分けておくことで、高速にアクセスできます。アクセス幅が1の場合は3語分、アクセス幅が2の場合は6語分に同時にアクセスできます。

メモリインタリーブ

他の選択肢は以下のとおりです。
選択肢ア:キャッシュメモリと主記憶の同期方式の1つであるライトバック方式
選択肢イ:ディスクキャッシュ
選択肢ウ:キャッシュメモリと主記憶の同期方式の1つであるライトスルー方式


問11 容量がaMバイトでアクセス時間がxナノ秒のキャッシュメモリと、容量がbMバイトでアクセス時間がyナノ秒の主記憶をもつシステムにおいて、CPUからみた、主記憶とキャッシュメモリとを合わせた兵器なくセス時間を表す式はどれか。ここで、読み込みたいデータがキャッシュメモリに存在しない確率をrとし、キャッシュメモリ管理に関するオーバヘッドは無視できるものとする。
画像(問11ans)を表示できません
解答
解説 キャッシュメモリは、主記憶装置(=メインメモリ)とCPUのレジスタとの処理速度の差を埋めるために用いられるメモリです。メインメモリはまず、キャッシュメモリにデータを探しに行き、そのデータがある場合は、キャッシュメモリから、ない場合はメインメモリからデータを読み出します。よって、存在しない確率 ×メインメモリの読み込み速度+存在する確率×キャッシュメモリの読み込み速度となります。両者の容量はアクセス速度には関係がありません。

問12 DMAの説明として、適切なものはどれか。
CPUが磁気ディスク装置と主記憶とのデータの受渡しを行う転送方式である。
主記憶の入出力専用アドレス空間に入出力装置のレジスタを割り当てる方式である。
専用の制御回路が入出力装置、主記憶などの間のデータ転送を行う方式である。
複数の命令の実行ステージを部分的にオーバラップさせて同時に処理し、全体としての処理時間を短くする方式である。
解答
解説 DMA(Direct Memory Access)とは、CPUを介さず、メモリ間、メモリとI/Oデバイス間で直接データを転送することで、DMAコントローラは、DMAを制御するものをいいます。CPUの指示を待つ時間等を高速化でき、アクセス速度の向上につながります。

問13 80Gバイトの磁気ディスク8台を使用して、RAID0の機能とRAID1の機能の両方の機能を同時に満たす構成にした場合、実効データ容量は何Gバイトか。
320
480
560
640
解答
解説 RAID(Redundant Arrays of Inexpensive Disks あるいはRedundant Arrays of Independent Disks)とは、複数のHDDを1台の高信頼性のHDDとして利用する技術のことです。RAID1〜6は冗長ビットをどこに配置するかで決まります。代表的なRAIDの例を下に示します。

RAID0(ストライピング):複数のHDDに分散してデータを書き込む(冗長性はない)
RAID1(ミラーリング):複数のHDDに同じデータを書き込む
RAID2:ビット単位での専用誤り訂正符号ドライブをもつ
RAID3:ビット/バイト単位での専用パリティドライブをもつ
RAID4:ブロック単位での専用パリティドライブをもつ
RAID5:ブロック単位で冗長データをもつが、特定のドライブに冗長データを書き込むということはしない
RAID6:ブロック単位・複数パリティを分散して書き込む

今回は、ストライピングとミラーリングを組み合わせた、RAID1+0、RAID0+1という技術の容量について出題されています。
ストライピングでは、冗長化を行わないため実効データ容量は減りません。
ミラーリングでは、同じデータを2台のHDDに書き込むため実効データ容量は半分になります。

よって、80Gバイト×8台=640Gバイトの半分である320Gバイトが実行データ容量となります。

問14 分散処理システムに関する記述のうち、アクセス透過性を説明したものはどれか。
遠隔地にある資源を、遠隔地での処理方式を知らなくても、手元にある資源と同じ操作で利用できる。
システムの運用と管理をそれぞれの組織で個別に行うことによって、その組織の実態に合ったサービスを提供することができる。
集中して処理せずに、データの発生場所やサービスの要求場所を処理することによって、通信コストを削減できる。
対等な関係のコンピュータが複数あるので、一部が故障しても他のコンピュータによる処理が可能となり、システム全体の信頼性を向上させることができる。
解答
解説 透過性とは、ユーザから内部の構造を隠しあたかもそこに存在しているかのようにして、存在を意識させない性質をいいます。透過性も細かくわけると、【位置透過性、アクセス透過性、規模透過性、セキュリティ透過性』などがあります。アクセス透過性とは、地理的な影響を考慮せずにアクセスできる特性をいいます。

問15 1件のデータを処理する際に、読取りには40ミリ秒、CPU処理には30ミリ秒、書込みには50ミリ秒掛かるプログラムがある。このプログラムで、n件目の書込みと並行してn+1件目のCPU処理とn+2件目の読取りを実行すると、1分当たりの最大データ処理件数は幾つか。ここで、OSのオーバヘッドは考慮しないものとする。
500
666
750
1,200
解答
解説 この問題は、パイプラインに関する問題です。まず、パイプラインの概念を以下にまとめます。

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

つぎに、処理の流れを少し書き出してみます。
1.1件目の読み出し
2.1件目のCPU処理
3.1件目の書き込み、2件目の読み出し
4.2件目の書き込み、3件目のCPU処理、4件目の読み出し
5.3件目の書き込み、4件目のCPU処理、5件目の読み出し

つまり、40ミリ秒+30ミリ秒+50ミリ秒×nが1分(60000ミリ秒)以下になるようにnをできるだけ大きくしたいということです。
また、40、30は60000に比べて十分小さいので無視して計算しても大丈夫です。
60000/50=1,200となります。

問16 フェールセーフの考え方として、適切なものはどれか。
システムに障害が発生したときでも、常に安全側にシステムを制御する。
システムの機能に異常が発生したときに、すぐにシステムを停止しないで機能を縮退させて運用を継続する。
システムを構成する要素のうち、信頼性に大きく影響するものを複数備えることによって、システムの信頼性を高める。
不特定多数の人が操作しても、誤動作が起こりにくいように設計する。
解答
解説 まず、重要な高信頼システム設計法についてまとめておきます。

フォールトトレラント:障害時に全体が停止するということなく、動作し続けるようなシステムを設計すること。
フォールトアボイダンス:システムの構成要素の信頼性を高め, 元から故障が極力発生しないように設計すること。
フォールトマスキング:障害が発生したときに、その部分を他の機器から隠蔽したり、自律回復するように設計すること。
フェールセーフ:障害が発生した場合、常に安全側に制御・停止すること。
フェールソフト:障害が発生した場合、故障した個所を切り離すなどして、稼動を続けること。
フェールオーバ:障害が発生した場合、ユーザに切り替えを意識させないように、別のシステムに引き継がせること。
フールプルーフ:ユーザが誤った操作をした場合、危険に晒されることがないように、事前に安全策を行うこと。

他の選択肢を順に見ていきます。
選択肢イ:フェールソフト
選択肢ウ:フォールトトレラント
選択肢エ:フールプルーフ

問17 稼働率がα(0<a<1)の装置を三つ用いて図のようにシステムを設計するとき、システムの稼働率が装置単体の稼働率を上回るものはどれか。ここで、並列に接続されている部分は、いずれの経路が稼働していればシステムは稼働しているものとする。

画像(問17)を表示できません
AとB
AとC
BとC
全て
解答
解説 順番に稼働率を計算していきます。便宜上稼働率を0.9として計算します。
A:3台のうち1台以上が動作している確率=1−(3台とも故障している確率)=1−(1−0.9)3=1−0.001=0.999
B:0.9×並列部=0.9×(1−(1−0.9)2)=0.9×0.99=0.891
C:0.9と(直列部)の並列=0.9と(0.9×0.9)の並列=1−(1−0.9)×(1−0.81)=1−0.1×0.19=0.981

よって、AとCが単体よりも稼働率が高くなるといえます。
なお、単体と全体の稼働率については以下のようなことがいえます。
単体と機器が直列に繋がっている場合、単体よりも全体の稼働率は低下します。
単体と機器が並列に繋がっている場合、単体よりも全体の稼働率は向上します。(並列部が1台以上動作していればよい場合)

問18 記憶領域の動的な割当て及び解放を繰り返すことによって、どこからも利用できない記憶領域が発生することがある。このような記憶領域を再び利用可能にする機能はどれか。
ガーベジコレクション
スタック
ヒープ
フラグメンテーション
解答
解説 ガーベジコレクション(メモリコンパクション)は、メモリ上での割当てと解放を繰り返すことで使用されない領域が発生するため、これを解消する処理をいいます。一方デフラグメンテーションは、ハードディスクなどで、書込みと消去を繰り返すことで、断片化(フラグメンテーション)してしまった領域を連続した領域に再配置する処理をいいます。

スタックはLIFOのデータ構造、ヒープは木構造の一種です。

問19 プロセスのスケジューリングに関する記述のうち、ラウンドロビン方式の説明として、適切なものはどれか。
各プロセスの優先度が付けられていて、後に到着してもプロセスの優先度が処理中のプロセスよりも高ければ、処理中のものを中断し、到着プロセスを処理する。
各プロセスに優先度が付けられていて、イベントの発生を契機に、その時点で最優先度のプロセスを実行する。
各プロセスの処理時間に比例して、プロセスのタイムクウォンタムを変更する。
各プロセスを待ち行列の順にタイムクォンタムずつ処理し、終了しないときは、待ち行列の最後につなぐ。
解答
解説 代表的なスケジューリング方式を下にまとめます。

ラウンドロビン方式:短い時間(タイムクォンタム)を順次待っているタスクに割り当てる方式。タスクの切り替えに多少のオーバヘッドがかかりますが、すべてのタスクに順番にCPUの使用権がわたります。
到着順方式:リアルタイム性は失われますが、投入したタスクはいつかは処理してもらえます。
処理時間順方式:残りの処理時間が短いものに優先的にスケジューリングする方式
優先順位方式:単純に優先度の高いものを実行する方式で、待ち続けるタスクが発生(スタベーション)する可能性があります。待った時間に応じて優先順位を上げる(エイジング)を行うことでこれを回避しています。

他の選択肢は以下のとおりです。
選択肢ア:優先度方式の説明です。
選択肢イ:イベントドリブンプリエンプション方式の説明です。
選択肢ウ:原則として、タイムクォンタムは一定です。

問20 コンパイラにおける処理を字句解析、構文解析、意味解析、最適化の四つのフェーズに分けたとき、意味解析のフェーズで行う処理はどれか。
言語の文法に基づいてプログラムを解析し、文法誤りがないかチェックする。
プログラムを表現する文字の列を、意味のある最小の構成要素の列に変換する。
変数の宣言と使用とを対応付けたり、演算におけるデータ型の整合性をチェックする。
レジスタの有効利用を目的としたレジスタ割付けや、不要な演算を省略するためのプログラム変換を行う。
解答
解説 コンパイルとは、ソースコードを実行可能な機械語に変換する作業ですが、細かく分けると以下のような順番で行われます。

1.字句解析:プログラムを表現する文字の列を、意味のある最小の構成要素の列に変換する。
2.構文解析:言語の文法に基づいてプログラムを解析し、文法誤りがないかチェックする。
3.意味解析:変数の宣言と使用とを対応付けたり、演算におけるデータ型の整合性をチェックする。
4.最適化:レジスタの有効利用を目的としたレジスタ割付けや、不要な演算を省略するためのプログラム変換を行う。

プログラムが間違っているとコンパイルエラーとして、1〜3のいずれかの過程でコンパイルに失敗します。