旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2011年度 特別試験 午後の概要
機械語命令のアドレス指定と実行トレース
ハードウェア · 機械語命令 / 実効アドレス / 指標レジスタ修飾 / 間接アドレス指定
1語が16ビットのCPUにおいて、1語命令と2語命令からなる機械語の仕様が与えられている。命令語のフォーマットは、命令コードop(8ビット)、レジスタr1(2ビット)、r2または指標レジスタX(2ビット)、未使用領域(2ビット)、語長フラグD(1ビット:1なら1語命令、0なら2語命令)、間接指定フラグI(1ビット:1なら間接指定、0なら直接指定)で構成される。2語命令の場合は2語目に番地adr(16ビット)が続く。実効アドレスの算出方法は、(D, I)が(0, 0)のとき「adr + [X]」、(0, 1)のとき「[adr + [X]]」、(1, 1)のとき「[r2]」、ソースレジスタ指定は(1, 0)のとき「r2」である([ ]はそのレジスタまたは番地に格納された内容を表す)。この仕様に基づいて、プログラム実行後の各レジスタの値(設問1 a, b, c)を求め、さらにレジスタ1に100を設定する命令語として誤っているもの(設問2)を選べ。
- ア
- 設問2: op=20h, r1=1, r2/X=2, D=0, I=1, adr=0000h(実効アドレス[0+[GR2]]の内容を設定)
- イ
- 設問2: op=20h, r1=1, r2/X=2, D=1, I=0(ソースレジスタGR2の内容を設定)
- ウ
- 設問2: op=20h, r1=1, r2/X=3, D=0, I=0, adr=0000h(実効アドレス0+[GR3]の内容を設定)
- エ
- 設問2: op=20h, r1=1, r2/X=3, D=0, I=1, adr=0000h(実効アドレス[0+[GR3]]の内容を設定)
- オ
- 設問2: op=20h, r1=1, r2/X=3, D=1, I=1(実効アドレス[GR3]の内容を設定)
解答・解説を表示
解答
設問1: a: ア, b: エ, c: オ; 設問2: エ
解説
まず要点:命令の中のフラグ(DとI)の組み合わせで、アドレスの決め方が変わる。この2つは、直接アドレス指定・間接アドレス指定・レジスタ直接指定を切り替えるスイッチのようなものだ。[ ]は「その中身を取り出す」という意味で、参照の段数を1つずつ順にたどって目的のアドレスと値を見つける。
解き方
- 16進数の命令語を2進数に直し、opやr1、r2/X、D、Iの各フィールドの値を正確に取り出す。
- 表2と表3の規則に従って実効アドレスやソースレジスタを決め、レジスタと主記憶の値の移り変わりを1歩ずつ追う。
- 設問2の各選択肢について、与えられた初期値(GR2=100、GR3=101、[100]=101、[101]=100)を当てはめてGR1の最終的な値を求める。
小問ごとの答え
- 小問 設問1 a:ア
- 命令語1(2042h:D=1, I=0, r1=1, r2=0)によりGR0の内容100がGR1に代入されます。命令語2(10D2h:D=1, I=0, r1=3, r2=1)はGR1の内容をGR3に加算する命令であり、GR1自身の値は100のまま変化しません。
- 小問 設問1 b:エ
- 命令語3でGR2の内容300が番地100(adr:0 + [GR1]:100)に格納され、命令語4で番地100の内容300がGR0に加算されてGR0=400となります。命令語5(2042h)でGR0の内容400がGR1に代入されるため、GR1の値は400となります。
- 小問 設問1 c:オ
- 命令語2でGR3の初期値400にGR1の値100が足し込まれて500になり、その後の命令語3〜5ではGR3を対象とする変更処理は行われないため、GR3の内容は500を維持します。
- 小問 設問2:エ
- D=0, I=1より実効アドレスは[adr + [X]] = [0 + [GR3]] = [101番地] = 100番地となり、この100番地に格納されている内容101がGR1に設定されるため、目的の100にはならず誤りです。
覚えるポイント
- 間接アドレス指定では「指定された番地に格納されている値」が次のアドレスとして使われます。
- 指標レジスタ修飾は基準アドレスにレジスタ値を加算してアドレスを動的に決定します。
間違えやすいところ
- 間接アドレス指定(I=1)のとき、メモリを見る回数を1回少なく数えて、直接アドレスの中身を取ってしまう間違いが多い。
- 16進数の命令語を2進数に直すとき、2ビットの未使用領域を飛ばし忘れて位取りがずれる間違いに注意する。
出題の前提:平成23年度特別 基本情報技術者試験 午後問題 問1
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.5 ↗(www.ipa.go.jp) / 公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp) / 公式問題冊子 p.8 ↗(www.ipa.go.jp)
CPUスケジューリング方式とターンアラウンドタイム
ソフトウェア · CPUスケジューリング / 到着順方式 / ラウンドロビン方式 / 優先度順方式 / ターンアラウンドタイム
プロセスへのCPU割当て方式(到着順方式、ラウンドロビン方式、優先度順方式)に関する問題である。プロセスA(到着0ms, 処理180ms)、B(到着10ms, 処理80ms)、C(到着30ms, 処理40ms)、D(到着50ms, 処理20ms)が与えられたとき、到着順方式およびタイムクウォンタム20msのラウンドロビン方式における平均ターンアラウンドタイム(設問1 a, b)を求めよ。また、あらかじめ優先度(1〜10、大きいほど高優先度)が設定され、20ms実行ごとに優先度が1下がり、実行可能状態の最高優先度より低くなった場合に中断される優先度順方式において、プロセスA(処理60ms, 優先度6)、B(処理70ms, 優先度8)、C(処理100ms, 優先度5)の終了順序(設問2 c)と、B終了時のBの優先度(設問2 d)を求めよ。
- ア
- 設問1 a, b: 80.0 / 設問2 c: A, B, C / 設問2 d: 1
- イ
- 設問1 a, b: 102.5 / 設問2 c: A, C, B / 設問2 d: 2
- ウ
- 設問1 a, b: 182.5 / 設問2 c: B, A, C / 設問2 d: 3
- エ
- 設問1 a, b: 192.5 / 設問2 c: B, C, A / 設問2 d: 4
- オ
- 設問1 a, b: 242.5 / 設問2 c: C, A, B / 設問2 d: 5
- カ
- 設問2 c: C, B, A / 設問2 d: 6
解答・解説を表示
解答
設問1: a: オ, b: ウ; 設問2: c: ウ, d: オ
解説
まず要点:ターンアラウンドタイム(TAT)は「プロセスの終了時刻-到着時刻」で求める。CPUの割り当て方(スケジューリング方式)が変わると、実行の順番や待ち時間が変わる。短い処理を先に終わらせるラウンドロビン方式などは、平均のTATを良くする効果がある。優先度が下がる条件や中断の条件(厳密に低くなったときだけ中断し、同じ値なら続ける)を正しく当てはめることが大切だ。
解き方
- 各プロセスの到着時刻と処理時間をもとに、時間の経過に伴う待ち行列の変化とCPUの割り当てをタイムチャートに整理する。
- 到着順方式とラウンドロビン方式について各プロセスの終了時刻を求め、終了時刻から到着時刻を引いてTATを計算し、平均を出す。
- 優先度順方式について、20msごとに優先度が1下がる規則と、実行可能な最高優先度より厳密に低くなったときだけ中断する条件を順に当てはめ、終了順序と終了時の優先度を求める。
小問ごとの答え
- 小問 設問1 a:オ
- 到着順方式では、終了時刻はA:180、B:260、C:300、D:320となり、各TATはA:180、B:250、C:270、D:270です。平均TATは(180+250+270+270)/4 = 970/4 = 242.5ミリ秒となります。
- 小問 設問1 b:ウ
- ラウンドロビン方式(クウォンタム20ms)でトレースすると、Dは120ms(TAT:70)、Cは160ms(TAT:130)、Bは220ms(TAT:210)、Aは320ms(TAT:320)で終了します。平均TATは(320+210+130+70)/4 = 730/4 = 182.5ミリ秒となります。
- 小問 設問2 c:ウ
- 優先度順でトレースすると、Bが60ms実行後に優先度5となりA(6)に交代、Aが40ms実行後に優先度4となり待ち行列のB(5)に交代し、Bが残り10msを実行して最初に終了します。続いてAが残り20msを実行して終了し、最後にCが終了するため、順序はB, A, Cとなります。
- 小問 設問2 d:オ
- Bは初期優先度8から20ms経過で7、40ms経過で6、60ms経過で5に低下して中断しました。再実行時は残り10ms(20ms未満)で完了するため優先度は下がらず、終了時の優先度は5のままです。
覚えるポイント
- ターンアラウンドタイム=終了時刻 − 到着時刻(待ち時間+処理時間)。
- ラウンドロビン方式では、クウォンタム満了時に新規到着プロセスがある場合、通常は新規到着プロセスの後ろに再登録されます。
間違えやすいところ
- 到着時刻が0でないプロセスについて、TATを単なる終了時刻としてしまい、到着時刻を引くのを忘れる間違いが多い。
- 優先度が「他より低くなった場合」に中断する条件で、同じ値になった時点で中断してしまう間違いに注意する。
出題の前提:平成23年度特別 基本情報技術者試験 午後問題 問2
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.9 ↗(www.ipa.go.jp) / 公式問題冊子 p.10 ↗(www.ipa.go.jp) / 公式問題冊子 p.11 ↗(www.ipa.go.jp) / 公式問題冊子 p.12 ↗(www.ipa.go.jp)
トランザクション管理と排他制御
データベース · トランザクション / 排他制御 / ロック / デッドロック
画材をインターネット販売するWebサイトの在庫管理データベースにおける、トランザクション管理および排他制御に関する次の設問に答えよ。 〔設問1〕 白絵の具の在庫数が50であった場合、出荷トランザクションT1(白絵の具5本出荷)と入荷トランザクションT2(白絵の具10本入荷)が同時に実行されたとき、排他制御を行わないと実行後の在庫数は55とならず、在庫数が [ a ] 又は [ b ] となってしまう可能性がある。空欄に入る数値を解答群から選べ(順不同)。 〔設問2〕 DBMSにおいて共有ロック中のデータに対し、他のトランザクションからの共有ロック要求は成功するが、占有ロック要求は共有ロックが解除されるまで待ち状態となる。照合T3(共有ロック要求)、入荷T4(占有ロック要求)、出荷T5(占有ロック要求)、照合T6(共有ロック要求)が順次実行・ロック要求されたとき、それぞれの状態として正しい記述を選べ。 〔設問3〕 出荷トランザクションT7(白絵の具5本と赤絵の具3本の出荷)において、データをロックしている時間を最短にするため、“赤絵の具の在庫数データをロックする。”を挿入すべき位置 [ c ] と、“白絵の具の在庫数データのロックを解除する。”を挿入すべき位置 [ d ] を選べ。 〔設問4〕 トランザクションT8〜T11(T8: 白5本・赤5本出荷、T9: 赤10本・青10本入荷、T10: 青2本・白5本出荷、T11: 青10本・黒10本入荷)のうち、同時に処理された場合にデッドロックが発生する可能性のある組合せを選べ。
- 設問1 ア
- 40
- 設問1 イ
- 45
- 設問1 ウ
- 50
- 設問1 エ
- 60
- 設問1 オ
- 65
- 設問2 ア
- T4, T5, T6とも待ち状態となる。
- 設問2 イ
- T4, T5, T6とも待ち状態とならない。
- 設問2 ウ
- T4, T5は待ち状態となるが, T6は待ち状態とならない。
- 設問2 エ
- T4は待ち状態となるが, T5, T6は待ち状態とならない。
- 設問2 オ
- T6は待ち状態となるが, T4, T5は待ち状態とならない。
- 設問3 ア
- α
- 設問3 イ
- β
- 設問3 ウ
- γ
- 設問3 エ
- δ
- 設問3 オ
- ε
- 設問4 ア
- T8, T9
- 設問4 イ
- T8, T9, T10
- 設問4 ウ
- T9, T10, T11
- 設問4 エ
- T10, T11
解答・解説を表示
解答
設問1 a: イ, b: エ (順不同); 設問2: ウ; 設問3 c: イ, d: エ; 設問4: イ
解説
まず要点:複数のトランザクション(一まとまりの処理)を同時に動かしてもデータが壊れないよう、排他制御でロックをかける。参照するときは共有ロック、更新するときは占有ロックを使い、共有ロックどうしだけが同時に持てる。また、互いに相手が持つ資源のロック解除を待ち続けて先に進めなくなる状態をデッドロックと呼ぶ。
解き方
- 設問1:2つのトランザクションが初期値50を読み込んだ後、片方の書き込み結果をもう片方が上書きする場合(50-5=45または50+10=60)を求める。
- 設問2:先に共有ロックを取ったT3に対し、後からの占有ロック要求(T4、T5)は待機し、共有ロック要求(T6)はすぐ許可されることを判定する。
- 設問3:各データを使う直前にロックを取り、最後の更新の直後にロックを外す位置(βとδ)を探す。
- 設問4:トランザクション間で共有する資源の関係を図にし、輪(白→赤→青→白)ができる組合せを見つける。
小問ごとの答え
- 小問 設問1 a:イ
- T1が読み込んだ初期値50から5を引いた45で、後からT2の更新を上書きしてしまうと在庫数は45になります。
- 小問 設問1 b:エ
- T2が読み込んだ初期値50に10を加えた60で、後からT1の更新を上書きしてしまうと在庫数は60になります。
- 小問 設問2:ウ
- 共有ロック中のデータに対し、T4とT5の占有ロック要求は待ち状態となりますが、T6の共有ロック要求は両立するため待ち状態になりません。
- 小問 設問3 c:イ
- 赤絵の具データを読み込む直前の位置βでロックをかけることで、ロック時間を必要最小限に短縮できます。
- 小問 設問3 d:エ
- 白絵の具データの書き込み処理が完了した直後の位置δでロックを解除することで、ロック保持時間を最も短くできます。
- 小問 設問4:イ
- T8(白・赤)、T9(赤・青)、T10(青・白)の間で3つの資源に対する循環待ちが発生し、デッドロックとなる可能性があります。
覚えるポイント
- 共有ロック同士は競合しないが、占有ロックは共有ロックおよび他の占有ロックと競合する。
- デッドロックが発生するには、複数トランザクション間に2つ以上の共有資源を巡る循環待ちが必要である。
間違えやすいところ
- 共有ロック中でも、後からの共有ロック要求は待たされると勘違いしてしまう。
- 共通の資源が1つしかない組合せでもデッドロックが起きると誤って判断してしまう。
出題の前提:基本情報技術者試験 午後問題におけるデータベース・トランザクション管理の出題基準
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.13 ↗(www.ipa.go.jp) / 公式問題冊子 p.14 ↗(www.ipa.go.jp) / 公式問題冊子 p.15 ↗(www.ipa.go.jp) / 公式問題冊子 p.16 ↗(www.ipa.go.jp) / 公式問題冊子 p.17 ↗(www.ipa.go.jp)
ルータの経路制御テーブルの更新
ネットワーク · ルーティング / 距離ベクトル型 / 経路制御テーブル / ブロードキャスト
ルータ1, 2, 3が順に直接接続されたネットワーク(A-ルータ1-B-ルータ2-C-ルータ3-D)において、各ルータは起動直後および30秒間隔で経路情報をブロードキャスト送信する。ルータ1, 2, 3を順に5秒間隔で起動した場合の経路制御テーブルの更新に関する次の記述中の空欄 [ a ] 〜 [ e ] に入る適切な答えを選べ。 ・ルータ1にネットワークDのための経路制御情報が反映されるのは、ルータ1の起動から [ a ] 秒後である。 ・ルータ2にネットワークAのための経路制御情報が反映されるのは、ルータ1の起動から [ b ] 秒後であり、そのときのルータ2のテーブルは [ c ] となる。 ・ルータ1の起動から20秒後には、ルータ3のテーブルに [ d ] のための経路制御情報が保持され、40秒後には [ e ] のための経路制御情報が保持されている。
- a, b ア
- 5
- a, b イ
- 10
- a, b ウ
- 30
- a, b エ
- 35
- a, b オ
- 40
- c ア
- 10.0.0.0/24(10.0.1.1, 1), 10.0.1.0/24(-, 0), 10.0.2.0/24(-, 0)
- c イ
- 10.0.0.0/24(10.0.1.1, 1), 10.0.1.0/24(-, 0), 10.0.2.0/24(-, 0), 10.0.3.0/24(10.0.2.2, 1)
- c ウ
- 10.0.0.0/24(10.0.2.2, 1), 10.0.1.0/24(-, 0), 10.0.2.0/24(-, 0), 10.0.3.0/24(10.0.1.2, 1)
- c エ
- 10.0.0.0/24(10.0.2.2, 2), 10.0.1.0/24(-, 0), 10.0.2.0/24(-, 0), 10.0.3.0/24(10.0.2.2, 1)
- d, e ア
- ネットワークA, B, C及びD
- d, e イ
- ネットワークA, B及びC
- d, e ウ
- ネットワークA, B及びD
- d, e エ
- ネットワークA, C及びD
- d, e オ
- ネットワークB, C及びD
- d, e カ
- ネットワークC及びD
解答・解説を表示
解答
a: エ, b: ウ, c: イ, d: カ, e: ア
解説
まず要点:距離ベクトル型ルーティング(経路を距離で管理する方式)では、直接つながったネットワークを距離0の初期値として持つ。隣のルータから定期的に送られてくる経路表を受け取り、距離に1を足す。まだ無いネットワークを追加するか、今ある経路より距離が短いときだけ更新する。
解き方
- 各ルータの起動時刻(ルータ1は0秒、ルータ2は5秒、ルータ3は10秒)と送信のタイミング(初回は起動直後、以降は30秒ごと)を時間軸に並べる。
- 0秒・5秒・10秒の起動直後の送信で情報が隣のルータへどう伝わるかを紙の上で追う(5秒にルータ1がCを取得、10秒にルータ2がDを取得)。
- 空欄a・b:ルータ1の2回目の送信は30秒、ルータ2の2回目の送信は35秒なので、Aがルータ2へ届く時刻(30秒)とDがルータ1へ届く時刻(35秒)を導く。
- 空欄c:30秒直後にルータ2が持つ、各ネットワーク宛の転送先IPと距離を照合する。
- 空欄d・e:20秒時点と40秒時点でルータ3が受け取った履歴を確かめ、持っているネットワークの組を特定する。
小問ごとの答え
- 小問 a:エ
- ルータ3からルータ2へDの情報が渡るのが10秒後、ルータ2が次回定期送信(起動後30秒=全体35秒)でルータ1へDの情報を送るため、35秒後となります。
- 小問 b:ウ
- ルータ1の初回送信(0秒)はルータ2未起動のため届かず、ルータ1の次回送信である30秒後にルータ2に届いて反映されます。
- 小問 c:イ
- 30秒時点のルータ2は直接接続のB, Cに加え、10秒時点で得たD(次ホップ10.0.2.2, 距離1)と、30秒時点で得たA(次ホップ10.0.1.1, 距離1)を持ちます。
- 小問 d:カ
- 20秒時点ではルータ3は起動直後(10秒)以降新たな情報を受信していないため、直接接続しているネットワークC及びDのみを保持しています。
- 小問 e:ア
- 35秒時点でルータ2がルータ3へ全経路情報(A, B, C, D)を送信するため、40秒時点のルータ3は全ネットワーク(A, B, C, D)の情報を保持しています。
覚えるポイント
- ブロードキャストパケットは異なるネットワーク(ルータを越えて)には転送されない。
- 経路情報の更新タイミングは起動直後および以降一定周期(本問では30秒間隔)で行われる。
間違えやすいところ
- ルータの起動時に他のルータからすぐ情報を受け取れると勘違いし、送信の周期を考えに入れ忘れてしまう。
- ブロードキャスト送信がルータを越えてそのまま中継されて届くと勘違いしてしまう。
出題の前提:基本情報技術者試験 午後問題におけるネットワーク・ルーティングアルゴリズムの出題基準
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.18 ↗(www.ipa.go.jp) / 公式問題冊子 p.19 ↗(www.ipa.go.jp) / 公式問題冊子 p.20 ↗(www.ipa.go.jp) / 公式問題冊子 p.21 ↗(www.ipa.go.jp)
あて先作成プログラムの処理設計とテストデータ検証
ソフトウェア設計 · コントロールブレイク処理 / データ集計 / プログラム設計
通信販売会社Z社におけるキャンペーンのあて先作成プログラムに関する問題である。顧客ごとの応募券・招待券の付与判定ロジック、集計処理における変数更新、および提示されたテストデータに基づく合計表の出力結果について問う。
- ア
- 設問1 a: A001≦商品コード≦A199 / b: 応募券枚数>0、設問2: [作業ファイルレコードの購入金額/50000]、設問3 c: 1 / d: 3
- イ
- 設問1 a: A001≦商品コード≦A199 又は 購入金額合計≧50000 / b: A001≦商品コード≦A199 かつ 購入金額≧50000、設問2: 1、設問3 c: 2 / d: 4
- ウ
- 設問1 a: 購入金額合計≧50000 / b: A001≦商品コード≦A199 又は 購入金額≧50000、設問2: 応募券枚数+[作業ファイルレコードの購入金額/50000]、設問3 c: 3 / d: 5
- エ
- 設問1 a: 作業ファイルレコードの購入個数>0 / b: 応募券枚数>0、設問2: 応募券枚数+1、設問3 c: 4 / d: 7
- オ
- 設問1 a: 招待券枚数>0 / b: 応募券枚数>0 かつ 招待券枚数>0、設問2: 応募券枚数+作業ファイルレコードの購入個数、設問3 c: 5 / d: 9
- カ
- 設問1 b: 応募券枚数>0 又は 招待券枚数>0、設問2: 作業ファイルレコードの購入個数、設問3 c: 6 / d: 10
解答・解説を表示
解答
設問1 a: ウ, b: カ; 設問2: オ; 設問3 c: ウ, d: ウ
解説
まず要点:キー順に並べたファイルを読んで顧客ごとに集計するコントロールブレイク処理では、判定する場面ごとに条件を使い分ける。顧客キーが切り替わる時点で、その顧客全体の条件(招待券を付けるか、あて先に出力するか)を判定する。個々の明細行を処理するときは、明細ごとの条件(対象商品なら応募券を足すか)を判定する。
解き方
- 顧客ごとの集計処理(繰り返し2)の後に招待券の判定aとあて先出力の判定bが置かれている構造を確かめ、仕様に基づく判定条件を特定する。
- 応募券の処理では同じ顧客の中で複数行が該当したときに足し合わせる必要があるため、自分自身に足す形の加算式を選ぶ。
- テストデータの購入日付がキャンペーン期間(2011/5/10〜6/20)の中にあるかを絞り込み、顧客ごとに応募券枚数と購入金額合計を集計して、招待券総枚数とあて先件数を求める。
小問ごとの答え
- 小問 設問1 a:ウ
- 催物招待券は期間中の全商品購入金額合計が5万円以上の顧客に付与するため、判定条件 a は「購入金額合計 ≧ 50000」となります。
- 小問 設問1 b:カ
- あて先ファイルは応募券または招待券の少なくとも一方を送る顧客に出力するため、判定条件 b は「応募券枚数 > 0 又は 招待券枚数 > 0」となります。
- 小問 設問2:オ
- 1顧客に同一対象商品の複数回購入レコードが存在する場合があるため、既存の応募券枚数に対象レコードの購入個数を加算する「応募券枚数 + 作業ファイルレコードの購入個数」とします。
- 小問 設問3 c:ウ
- テストデータのうち期間内の購入金額合計が5万円以上となる顧客は、005(50,000円)、010(60,000円)、081(132,000円)の3名であるため、催物招待券総枚数は3枚です。
- 小問 設問3 d:ウ
- 応募券または招待券の対象となる顧客は、001(応募券8)、005(応募券1・招待券1)、010(招待券1)、081(応募券2・招待券1)、386(応募券3)の5名であるため、あて先レコード件数は5件です。
覚えるポイント
- コントロールブレイク処理では明細単位の処理とグループ集約後の処理の位置関係を正確に把握する。
- キャンペーン期間外のデータは前処理や読み込み段階で確実に除外して集計する。
間違えやすいところ
- 同じ顧客に対象商品の行が複数あるとき、応募券枚数を購入個数で上書きしてしまう誤り。
- キャンペーン期間外(5/8、4/29、6/21、7/16など)のレコードを集計に入れてしまう間違い。
出題の前提:平成23年度特別試験午後問題の仕様規定
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.22 ↗(www.ipa.go.jp) / 公式問題冊子 p.23 ↗(www.ipa.go.jp) / 公式問題冊子 p.24 ↗(www.ipa.go.jp) / 公式問題冊子 p.25 ↗(www.ipa.go.jp) / 公式問題冊子 p.26 ↗(www.ipa.go.jp)
EVM手法によるプロジェクトの進捗・コスト管理
プロジェクトマネジメント · EVM / 進捗管理 / コスト管理 / CPI / SPI
Webアプリケーション開発プロジェクトPにおける、EVM(Earned Value Management)を用いた進捗・コストの分析および完了時予測に関する問題である。PV、EV、AC、SV、CV、CPIの計算および各工程の工数実績に基づく将来コスト予測を問う。
- ア
- 設問1 a: 1,000 / b: 1,200、設問2 c: 外部設計と実装はSVがともに0で計画どおり進捗 / d: 外部設計 / f: 1.01、設問3 g: 775 / h: 5,320
- イ
- 設問1 a: 1,050 / b: 1,400、設問2 c: 外部設計と実装はSVがともに正 / d: 内部設計 / f: 1.02、設問3 g: 795 / h: 5,480
- ウ
- 設問1 a: 1,200 / b: 1,600、設問2 c: 外部設計はSV負で実装はSV0 / e: 実装 / f: 1.03、設問3 g: 850 / h: 5,560
- エ
- 設問1 a: 1,400 / b: 1,800、設問2 c: 外部設計はSV負で実装はSV正 / f: 1.04、設問3 g: 870 / h: 5,600
- オ
- 設問2 c: 外部設計はSV0で実装はSV正
解答・解説を表示
解答
設問1 a: ウ, b: ウ; 設問2 c: ア, d: イ, e: ウ, f: イ; 設問3 g: イ, h: イ
解説
まず要点:EVM(アーンドバリュー・マネジメント)では、できた作業を金額や工数に換算して進み具合を数値で見る。計画の価値(PV)と出来高の価値(EV)の差がSV(進捗の差)、実際にかかったコスト(AC)との差がCV(コストの差)だ。効率を表す指数CPIやSPIを使い、プロジェクトの状態を客観的に把握して将来を予測する。
解き方
- 各工程の完了した機能数に標準工数を掛けてEVを求め、月ごとの計画工数を積み上げてPVを求める。
- SV=EV-PV、CV=EV-AC、CPI=EV÷ACをそれぞれ計算し、各工程とプロジェクト全体の状況を分析する。
- 1〜3月の実績工数を完了機能数で割って、各工程の1機能当たりの実際の生産性を求め、4月の残り機能数に当てはめて4月の工数を出す。
- 3月末までのAC合計に、4月の内部設計・実装の予測工数と、4月・5月のテスト計画工数を足して、総コストの予測値を求める。
小問ごとの答え
- 小問 設問1 a:ウ
- 2月末時点の外部設計完了機能数は25+5=30機能であり、EV=30機能×標準工数40=1,200工数となります。
- 小問 設問1 b:ウ
- 内部設計の3月末計画値PVは、2月計画(1,000工数)+3月計画(600工数)=1,600工数となります。
- 小問 設問2 c:ア
- 3月末時点で外部設計はEV=1,600、PV=1,600よりSV=0、実装はEV=750、PV=750よりSV=0であり、両工程とも計画どおりのスケジュールで進捗しています。
- 小問 設問2 d:イ
- CV=EV-ACを計算すると、内部設計は1,200-1,260=-60と負になり、コスト超過となっています。
- 小問 設問2 e:ウ
- 実装のCVは750-625=+125と正であり、計画よりも低コストで推移しています。
- 小問 設問2 f:イ
- 3月末時点のプロジェクト全体では、EV合計=1,600+1,200+750=3,550、AC合計=1,600+1,260+625=3,485となり、CPI=3,550÷3,485≒1.0186(小数第3位四捨五入で1.02)となります。
- 小問 設問3 g:イ
- 1機能当たり実績工数は内部設計が1,260÷30=42工数、実装が625÷25=25工数です。4月の残作業は内部設計10機能、実装15機能なので、10×42+15×25=420+375=795工数となります。
- 小問 設問3 h:イ
- 総工数予測値は、3月末までのAC(3,485)+4月の内部設計・実装実績(795)+4月のテスト計画(600)+5月のテスト計画(600)=5,480工数となります。
覚えるポイント
- EV(出来高)は常に「完了機能数 × 標準工数(計画単価)」で計算する。
- 将来工数の予測時は、標準工数ではなくこれまでに判明した実績生産性(1機能当たり実績工数)を用いる。
間違えやすいところ
- EVを計算するときに、実際にかかった工数(AC)や計画工数(PV)と混同してしまう間違い。
- 設問3の残作業の工数計算で、実際の単価ではなく標準工数の40や30をそのまま掛けてしまう誤り。
出題の前提:平成23年度特別試験午後問題の仕様規定
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.27 ↗(www.ipa.go.jp) / 公式問題冊子 p.28 ↗(www.ipa.go.jp) / 公式問題冊子 p.29 ↗(www.ipa.go.jp) / 公式問題冊子 p.30 ↗(www.ipa.go.jp) / 公式問題冊子 p.31 ↗(www.ipa.go.jp)
ゲーム理論を活用した出店戦略
経営・関連法規 · ゲーム理論 / 利得行列 / 支配戦略 / ナッシュ均衡
地方都市X市のY地区へのドラッグストア出店を計画しているA社とライバルB社の競合状況に基づき、ゲーム理論を活用した出店戦略に関する設問に答えよ。 〔市場環境〕 ドラッグストアを利用する消費者を4つのセグメントに区分した。各セグメントに対する月間売上見込み及び利用する店舗の種類は以下のとおりである。 ・セグメント1(月間売上見込み: 2,000万円): 駅ビル内店舗 ・セグメント2(月間売上見込み: 1,000万円): 駅ビル内店舗,駅前商店街店舗 ・セグメント3(月間売上見込み: 1,000万円): 駅前商店街店舗,郊外ショッピングモール内店舗 ・セグメント4(月間売上見込み: 1,000万円): 郊外ショッピングモール内店舗 〔競合環境〕 ・A社の出店方針: 「駅ビル内店舗」又は「郊外ショッピングモール内店舗」のいずれか1店舗。 ・B社: 「駅ビル内店舗」又は「駅前商店街店舗」のいずれか1店舗を出店する可能性が高いが、出店しない可能性もある。 ・両社が同じセグメントを対象として競合する場合、売上は50%ずつ分け合う。 設問1 次の記述中の[ a ],[ b ]に入れる正しい答えを,解答群の中から選べ。 (1) [ a ]出店した場合,セグメント1及びセグメント2で見込まれる売上はB社が,セグメント3及びセグメント4で見込まれる売上はA社が独占して獲得する。 (2) [ b ]出店した場合,セグメント1及びセグメント2で見込まれる売上の合計額を,両社が50%ずつ獲得する。 設問2 市場環境及び競合環境の記述に基づいて作成された,表4の利得行列の中,及び次の記述中の[ c ]〜[ g ]に入れる正しい答えを,解答群の中から選べ。 表4 Y地区のA社並びにB社の月間売上高予測の利得行列(単位: 百万円) [表の構成: (A社利得, B社利得)] ・A社 駅ビル内店舗、B社 駅ビル内店舗: (15, 15) ・A社 駅ビル内店舗、B社 駅前商店街店舗: ([ c ], 15) ・A社 駅ビル内店舗、B社 出店しない: ([ d ], 0) ・A社 郊外ショッピングモール内店舗、B社 駅ビル内店舗: (20, 30) ・A社 郊外ショッピングモール内店舗、B社 駅前商店街店舗: ([ e ], 15) ・A社 郊外ショッピングモール内店舗、B社 出店しない: (20, 0) ゲーム理論では,相手がどのような戦略を採ったとしても,自分にとって最も有利となる戦略を支配戦略と呼ぶ。表4で予測した利得行列をB社の立場からみると,A社がどの戦略を採った場合でも,B社は[ f ]ことによって自社の売上を最大とすることができる。 そこで,B社が自社の売上を最大とすることができる戦略である[ f ]ことを仮定した場合,A社として自社の売上を最大とすることができる戦略は[ g ]であることが分かる。
- ア
- 設問1 a, b: A社が駅ビル内店舗を,B社が駅前商店街店舗を/設問2 c〜e: 0/設問2 f, g: 駅ビル内店舗を出店する
- イ
- 設問1 a, b: A社が郊外ショッピングモール内店舗を,B社が駅ビル内店舗を/設問2 c〜e: 5/設問2 f, g: 駅前商店街店舗を出店する
- ウ
- 設問1 a, b: A社が郊外ショッピングモール内店舗を,B社が駅前商店街店舗を/設問2 c〜e: 10/設問2 f, g: 郊外ショッピングモール内店舗を出店する
- エ
- 設問1 a, b: A社,B社ともに駅ビル内店舗を/設問2 c〜e: 15/設問2 f, g: Y地区への出店を見送る
- オ
- 設問2 c〜e: 20
- カ
- 設問2 c〜e: 25
- キ
- 設問2 c〜e: 30
解答・解説を表示
解答
設問1: a: イ, b: エ; 設問2: c: カ, d: キ, e: エ, f: ア, g: ウ
解説
まず要点:ゲーム理論の利得行列では、各主体の行動の組み合わせごとに得られる利得(この問題では売上高)を一覧にする。相手がどの戦略を選んでも、自分の利得がいつも最も高くなる選択肢を支配戦略と呼ぶ。
解き方
- 各出店パターンの組み合わせで、各セグメントの需要がどこに帰属するか(単独独占か50%ずつか)を整理し、売上高を計算する。
- 求めた利得行列からB社の支配戦略を特定し、その戦略に対してA社が利得を最大にできる最適反応の戦略を選ぶ。
小問ごとの答え
- 小問 設問1 a:イ
- セグメント1・2を利用可能なのは「駅ビル内店舗」、セグメント3・4を利用可能なのは「郊外ショッピングモール内店舗」であるため、A社が郊外店舗、B社が駅ビル店舗を出店した場合に該当する。
- 小問 設問1 b:エ
- セグメント1と2の売上を両社で50%ずつ分け合うには、両社ともにセグメント1・2に対応する「駅ビル内店舗」を出店する必要がある。
- 小問 設問2 c:カ
- A社が駅ビル、B社が駅前商店街の場合、セグメント1(2000万円)はA社独占、セグメント2(1000万円)は両社で折半(各500万円)となり、A社売上は2500万円(25百万円)となる。
- 小問 設問2 d:キ
- A社が駅ビル、B社が出店しない場合、セグメント1(2000万円)とセグメント2(1000万円)をA社が単独で獲得するため、3000万円(30百万円)となる。
- 小問 設問2 e:エ
- A社が郊外モール、B社が駅前商店街の場合、セグメント3(1000万円)を折半(500万円)、セグメント4(1000万円)をA社独占するため、A社売上は1500万円(15百万円)となる。
- 小問 設問2 f:ア
- A社が駅ビルのときB社売上は駅ビル15・商店街15、A社が郊外モールのときB社売上は駅ビル30・商店街15となり、駅ビル出店がB社の支配戦略となる。
- 小問 設問2 g:ウ
- B社が支配戦略である「駅ビル内店舗を出店」した場合、A社は駅ビルなら15百万円、郊外モールなら20百万円となるため、郊外ショッピングモール内店舗を出店するのが最適である。
覚えるポイント
- 競合セグメントは売上を折半し、競合しないセグメントは該当店舗を持つ企業が全額獲得する。
- 相手のいかなる行動に対しても自己の利得を最大化できる戦略が支配戦略である。
間違えやすいところ
- セグメント2や3のように複数の店舗タイプにまたがる需要を、半分に分ける計算を忘れてしまうこと。
- 利得行列の行(A社)と列(B社)の利得の対応を取り違えて数値を読み取ること。
出題の前提:問題文中に提示されたセグメント別売上見込み表および競合環境のルールに基づく。
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.32 ↗(www.ipa.go.jp) / 公式問題冊子 p.33 ↗(www.ipa.go.jp) / 公式問題冊子 p.34 ↗(www.ipa.go.jp) / 公式問題冊子 p.35 ↗(www.ipa.go.jp)
組合せを求めるアルゴリズム
データ構造及びアルゴリズム · 組合せ生成 / 辞書式順序 / ビット配列 / トレース
N個の要素中からK個の要素を選ぶ組合せをすべて求めるプログラム及び説明を読んで、設問に答えよ。 〔プログラムの説明〕 N個の要素中からK個の要素を選ぶ組合せを配列S(要素番号1〜N)で表現する。K個の要素には1を、残りのN-K個の要素には0を設定する。 主プログラムMainでは、N=5, K=3として10通りの組合せを順次求めて配列Sに設定する。 関数Init(S, N, K)は、1≦K≦Nの場合に配列Sの先頭からK個の要素に1を、続くN-K個の要素に0を設定し、返却値0を返す。それ以外は配列Sに値を設定せず、返却値-1を返す。 関数Next(S, N)は、配列Sの先頭からN個の要素について、直前に求めた組合せの状態から次の組合せの状態を求めて配列Sに設定し、返却値0を返す。最終形の場合は値を設定せず返却値-1を返す。 設問 次の記述中の[ a ]〜[ g ]に入れる正しい答えを,解答群の中から選べ。 (1) 主プログラムMainで,配列Sに組合せの一つの状態が得られるたびに印字したい。印字用の副プログラムDump(S, N)を用いる場合、Mainのαの部分を[ a ]に示す部分と入れ替えればよい。 (2) 関数Nextは,受け取った配列Sを要素番号の小さい方から検査し,連続する2要素の値が[ b ]に見つかったものについて,その内容を入れ替える。続いて,配列Sの一部でその2要素[ c ]の部分について関数Initを呼ぶ。例えば,関数Nextの実行開始時点で,配列Sの要素番号1〜5の内容が 1, 0, 1, 0, 1 であったとき,実行終了時点での配列Sの要素番号1〜5の内容は[ d ]となる。 (3) このプログラムを実行して,関数Initが関数Nextから呼ばれるとき,関数Initが受け取るNの値の範囲は[ e ],Kの値の範囲は[ f ]である。したがって,関数Initが受け取るNとKの値は,1≦K≦Nを満たさない場合がある。 (4) 主プログラムMainの実行終了時点において,配列Sの要素番号1〜5の内容は[ g ]となっている。
- ア
- a: Init実行後、R=0の間DumpしてからNextを呼ぶループ構造/b: 0, 1で最後/c: 及びその後/d: 0, 1, 1, 0, 1/e, f: 0〜2/g: 0, 0, 0, 0, 0
- イ
- a: Init実行後、R=0の間Nextを呼んでからDumpするループ構造/b: 0, 1で最初/c: 及びその前/d: 1, 0, 0, 1, 1/e, f: 0〜3/g: 0, 0, 1, 1, 1
- ウ
- a: Init直後にDumpし、ループ内でNext後にDumpする構造/b: 1, 0で最後/c: より後/d: 1, 0, 1, 1, 0/e, f: 1〜3/g: 1, 1, 1, 0, 0
- エ
- a: Init直後とNext直後にそれぞれDumpする構造/b: 1, 0で最初/c: より前/d: 1, 1, 0, 0, 1/e, f: 1〜4/g: 1, 1, 1, 1, 1
- オ
- e, f: 2〜4
- カ
- e, f: 2〜5
解答・解説を表示
解答
a: ア, b: エ, c: エ, d: ア, e: イ, f: ア, g: イ
解説
まず要点:組合せを順に列挙するアルゴリズムでは、隣り合う「1, 0」を「0, 1」に入れ替え、その前のビットのまとまりを左端に詰め直して、次の組合せを作る。
解き方
- プログラムの各関数の引数と戻り値の仕様を把握し、ループの構造と呼び出しの順序を追う。
- 具体的な配列の状態について、Next関数の条件分岐と値の書き換えを紙の上で実行する。
小問ごとの答え
- 小問 a:ア
- 初期状態(Init後)から各組合せを印字するため、R=0の間、Dump(S, N)を呼び出してからNext(S, N)で次状態を求めるループにする。
- 小問 b:エ
- Nextのプログラムコードでは、Lを1から増やしながら S[L]=1 かつ S[L+1]=0 となる箇所を先頭から探すため、「1, 0で最初」となる。
- 小問 c:エ
- 反転させたLとL+1よりも前にある領域に対して Init(S, L-1, C) を呼び出しているため、「より前」が正しい。
- 小問 d:ア
- 開始時が 1, 0, 1, 0, 1 のとき、L=1 で S[1]=1, S[2]=0 が見つかり 0, 1 に反転する。L-1=0 に対する Init(S, 0, 0) は何も変更しないため、0, 1, 1, 0, 1 となる。
- 小問 e:イ
- Next内で呼び出される Init(S, L-1, C) の第一引数 N に渡る値は L-1 である。L は 1〜4 の範囲で成立し得るため、L-1 の範囲は 0〜3 となる。
- 小問 f:ア
- Initに渡る第二引数 K は C(Lより前にある1の個数)である。全体の1の個数は3個で、位置Lに1つあるため、それより前の1の個数Cは 0〜2 の範囲をとる。
- 小問 g:イ
- 10通りの組合せの最後は1が後方に寄せられた 0, 0, 1, 1, 1 である。この状態からNextが呼ばれると更新されず-1を返すため、配列には最後の組合せがそのまま残る。
覚えるポイント
- 組合せ生成アルゴリズムでは、最下位側から動かせる要素(1, 0の並び)を探して進める。
- Init(S, L-1, C) のように引数が 0 になるエッジケース(K ≦ N を満たさない)の戻り値と振る舞いに注意する。
間違えやすいところ
- Next関数を呼んだ直後に印字すると、最初の状態が飛ばされてしまう誤り。
- Init(S, L-1, C)でCを更新するタイミングがLを増やすときであることを見落とし、CにL位置の1を含めてしまうこと。
出題の前提:問題文に示された擬似言語プログラムおよび仕様記述に基づく。
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.36 ↗(www.ipa.go.jp) / 公式問題冊子 p.37 ↗(www.ipa.go.jp) / 公式問題冊子 p.38 ↗(www.ipa.go.jp) / 公式問題冊子 p.39 ↗(www.ipa.go.jp)
劇場の空き座席確認プログラム
ソフトウェア開発 · C言語 / 配列探索 / 2次元データ構造
劇場の座席予約システムにおいて、希望する座席種別と座席数を指定して連続した未予約の空き座席を検索するプログラムおよび、希望種別の空きがない場合に他の種別を検索するプログラムに関する記述を読んで、設問1・2に答えよ。
- ア
- 設問1 a,b: cnt = 0 / 設問1 c,d: no / 設問2 e: より料金の高いすべての座席種別 / 設問2 f,g: 高い
- イ
- 設問1 a,b: cnt-- / 設問1 c,d: no - num / 設問2 e: より料金の安いすべての座席種別 / 設問2 f,g: 安い
- ウ
- 設問1 a,b: cnt++ / 設問1 c,d: no - num + 1 / 設問2 e: より一つ料金の高い座席種別
- エ
- 設問1 a,b: found = 0 / 設問1 c,d: no - num + 2 / 設問2 e: より一つ料金の安い座席種別
- オ
- 設問1 a,b: found = 1 / 設問1 c,d: row / 設問2 e: を除くすべての座席種別
- カ
- 設問1 c,d: row + 1
- キ
- 設問1 c,d: row_s[row]
- ク
- 設問1 c,d: row_s[row + 1]
解答・解説を表示
解答
設問1: a: オ, b: ア, c: キ, d: エ; 設問2: e: オ, f: ア, g: イ
解説
まず要点:連続した空き座席を探すときは、条件が続く間はカウンタを1ずつ増やし、途切れたらカウンタを0に戻します。カウンタ(いくつ連続しているかを数える変数)は、連続の長さを数えるためのものです。見つけた座席の開始位置は、配列の添字(何番目かを表す番号)から計算し、人が使う1始まりの座席番号に直す必要があります。
解き方
- 設問1のループで、条件が成り立たないときのカウンタ初期化と、条件が成り立ったときのフラグ設定・ループ脱出を探す。
- 連続席の左端の配列添字(no - num + 1)を、1始まりの座席番号にするための+1の式を導く。
- 設問2で、配列class_s(SABC)の添字の進め方(正順・逆順)と除外条件(class != c)から動きを読み取る。
小問ごとの答え
- 小問 設問1 a:オ
- 連続した空き座席数が希望数numに達したとき、探索成功を示すフラグ変数foundに1を代入してループを抜けます。
- 小問 設問1 b:ア
- 希望する座席種別ではない座席または予約済みの座席が現れた場合、連続席のカウントをリセットするためcnt = 0を実行します。
- 小問 設問1 c:キ
- 列の添字rowに対応する列名文字を取得するため、文字列配列からrow_s[row]を参照して代入します。
- 小問 設問1 d:エ
- 連続空き座席の左端の配列添字はno - num + 1であり、座席の番は添字+1で表されるため、pos->seat_noにはno - num + 2を設定します。
- 小問 設問2 e:オ
- プログラム2では、希望種別classと一致しない座席種別cを順次探索するため、希望座席種別「を除くすべての座席種別」が対象となります。
- 小問 設問2 f:ア
- optが0のときはclass_s[i](iは0から昇順)で参照され、定義順「SABC」により料金の「高い」順に探索が行われます。
- 小問 設問2 g:イ
- optが0以外のときはclass_s[CLSNUM - i - 1]により末尾から逆順(C, B, A, S)で参照されるため、料金の「安い」順に探索されます。
覚えるポイント
- 0始まりの配列添字から1始まりの物理番号を求めるときは添字に1を加算する。
間違えやすいところ
- 連続席の開始位置の添字(no - num + 1)をそのまま座席番号だと思って答えてしまうミス。
出題の前提:平成23年度特別試験午後問題の仕様および採点講評に基づく。
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.40 ↗(www.ipa.go.jp) / 公式問題冊子 p.41 ↗(www.ipa.go.jp) / 公式問題冊子 p.42 ↗(www.ipa.go.jp) / 公式問題冊子 p.43 ↗(www.ipa.go.jp) / 公式問題冊子 p.44 ↗(www.ipa.go.jp) / 公式問題冊子 p.45 ↗(www.ipa.go.jp)
株主優待処理と株の保有傾向分析
ソフトウェア開発 · COBOL / 決定表 / EVALUATE文 / 配列添字
株主優待としての商品券発行額の算出および保有期間傾向のグラフ表示に関するCOBOLプログラムの説明及びプログラムを読んで、設問1・2に答えよ。
- ア
- 設問1 a,b: 1 / 設問1 c〜e: 0 / 設問1 f,g: 1000
- イ
- 設問1 a,b: 9 / 設問1 c〜e: 1 / 設問1 f,g: 3000
- ウ
- 設問1 a,b: 10 / 設問1 c〜e: 4 / 設問1 f,g: 5000
- エ
- 設問1 a,b: 99 / 設問1 c〜e: 5 / 設問1 f,g: 9999
- オ
- 設問1 a,b: 999 / 設問1 c〜e: 9 / 設問1 f,g: 10000 / 設問2 h,i: オの記述
- カ
- 設問1 a,b: 1000 / 設問1 c〜e: 10 / 設問1 f,g: 20000
- キ
- 設問1 a,b: ANY / 設問1 c〜e: ANY / 設問1 f,g: ANY
- ク
- 設問1 a,b: OTHER / 設問1 c〜e: OTHER / 設問1 f,g: OTHER
解答・解説を表示
解答
設問1: a: ア, b: オ, c: ア, d: ウ, e: キ, f: ア, g: エ; 設問2: h: オ, i: オ
解説
まず要点:COBOLのEVALUATE文は条件を上から順に見ていくので、先に細かい範囲を判定しておき、残りを後のWHEN句でANYと書けば「それ以上すべて」を表せます。またCOBOLの配列(TABLE)の添字は1から始まるため、0から数えた値は+1して補正します。
解き方
- 決定表の条件(株数の区分・保有期間の区分)とEVALUATE文の各WHEN句を対応づけ、a〜gの範囲とANYの役割を導く。
- 保有期間0〜20年を21個の要素を持つ配列CNT-HLDに集計するとき、COBOLは添字が1始まりなので、TERM+1とCNT+1に補正する。
小問ごとの答え
- 小問 設問1 a:ア
- 「999株以下」の株数範囲の下限値として1を指定します。
- 小問 設問1 b:オ
- 「999株以下」の株数範囲の上限値として999を指定します。
- 小問 設問1 c:ア
- 保有期間「5年未満」の範囲の下限値として0を指定します。
- 小問 設問1 d:ウ
- 保有期間「5年未満」の範囲の上限値(整数年数)として4を指定します。
- 小問 設問1 e:キ
- 先行するWHEN句で5年未満が判定済みであるため、任意の保有期間を表す予約語ANYを指定することで5年以上を表現します。
- 小問 設問1 f:ア
- 「1,000〜9,999株」の株数範囲の下限値として1000を指定します。
- 小問 設問1 g:エ
- 「1,000〜9,999株」の株数範囲の上限値として9999を指定します。
- 小問 設問2 h:オ
- 保有期間TERMは0〜20ですがCOBOLの配列添字は1から始まるため、ADD 1 TO CNT-HLD(TERM + 1)と記述します。
- 小問 設問2 i:オ
- ループ変数CNT(0〜20)に対応する度数配列の要素はCNT + 1番目となるため、COMPUTE RATIO = (CNT-HLD(CNT + 1) * 100 / CNT-ALL) / 2とします。
覚えるポイント
- COBOLの配列添字は1から始まるため、0値の添字化には必ず+1の補正が必要である。
間違えやすいところ
- EVALUATE文の選択対象にOTHERを書けると思い込んでしまうミス。
- COBOLの添字が1始まりだと忘れ、CNT-HLD(TERM)としてしまうミス。
出題の前提:平成23年度特別試験午後問題の仕様および採点講評に基づく。
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.46 ↗(www.ipa.go.jp) / 公式問題冊子 p.47 ↗(www.ipa.go.jp) / 公式問題冊子 p.48 ↗(www.ipa.go.jp) / 公式問題冊子 p.49 ↗(www.ipa.go.jp) / 公式問題冊子 p.50 ↗(www.ipa.go.jp)
追加可能な文字列インタフェースの2種類の実装
ソフトウェア開発 · Java / 配列 / 連結リスト / 性能改善
文字の並びを表現するインタフェース AppendableCharSequence を、配列を用いたクラス ArrayAppendableCharSequence と、連結リストを用いたクラス ListAppendableCharSequence の2種類で実装した。各クラスにおける文字の参照・追加・文字列表現の生成処理、テストプログラムの引数型、および連結リスト末尾への参照(last フィールド)を追加して追加処理の性能を改善する実装について、空欄 a〜g に当てはまる適切な字句を選択せよ。
- ア
- 設問1 a: data.length + length / b: index / c: length / d: len / e: AppendableCharSequence; 設問2 f: bucketList / g: bucketList
- イ
- 設問1 a: data.length + temp.length / b: index % EXT_SIZE / c: length + 1 / d: len % EXT_SIZE / e: ArrayAppendableCharSequence; 設問2 f: bucketList.next / g: bucketList.next
- ウ
- 設問1 a: length / b: index / EXT_SIZE / c: length - 1 / d: len - length / e: ListAppendableCharSequence; 設問2 f: last / g: last
- エ
- 設問1 a: length + EXT_SIZE / b: length / c: offset / d: length / e: ListAppendableCharSequence.Bucket; 設問2 f: last.next / g: last.next
- オ
- 設問1 a: temp.length / b: length % EXT_SIZE / c: offset + 1 / d: length % EXT_SIZE / e: Object; 設問2 f: new Bucket() / g: new Bucket()
- カ
- 設問1 b: length / EXT_SIZE / c: offset - 1 / d: length - len / e: String; 設問2 f: null / g: null
解答・解説を表示
解答
設問1: a: ウ, b: イ, c: ウ, d: カ, e: ア; 設問2: f: ア, g: エ
解説
まず要点:同じインタフェース(共通の約束事)を配列と連結リストという別のデータ構造で実装すると、好きな位置をすぐ読めるか、要素を追加するときの手間が違ってきます。連結リストに末尾への参照(ポインタ)を持たせると、末尾を探す時間をO(N)からO(1)に減らせます。
解き方
- 各クラスのフィールド(length、EXT_SIZEなど)の役割と、添字の対応関係を整理する。
- 設問1の各メソッド(配列の拡張、バケット内の参照、文字列の結合、ポリモーフィズム)の処理に合う式を導く。
- 設問2で、末尾参照フィールドlastの初期化と更新を追いかけて正解を決める。
小問ごとの答え
- 小問 設問1 a:ウ
- 配列の拡張時に既存データをコピーするループの上限は、現在格納されている文字数である length 回となります。
- 小問 設問1 b:イ
- 各バケットは EXT_SIZE(10文字)ずつ保持するため、対象バケット内の配列添字は index % EXT_SIZE で求まります。
- 小問 設問1 c:ウ
- 末尾に文字を追加する際、既存の末尾文字が存在するバケットを特定するため、直前の文字のインデックスである length - 1 を渡します。
- 小問 設問1 d:カ
- 全体の文字数 length から残り処理文字数 len を減算した length - len が、書き込み先配列 data の開始インデックス j となります。
- 小問 設問1 e:ア
- ArrayAppendableCharSequence と ListAppendableCharSequence の両方を受け取ってメソッドを呼び出すため、共通のインタフェース型である AppendableCharSequence を指定します。
- 小問 設問2 f:ア
- インスタンス生成時にはバケットが1つだけ存在するため、末尾バケットを参照する last には初期バケット bucketList を代入します。
- 小問 設問2 g:エ
- 新しいバケットを末尾に連結した直後、last が常に最後のバケットを指すように、新しく追加した last.next を last に設定します。
覚えるポイント
- 連結リストの末尾追加を高速化するには、末尾ノードへのポインタ(参照)を保持する。
間違えやすいところ
- バケット分割の添字計算で、商(/)と余り(%)を取り違えてしまうミスに注意する。
出題の前提:平成23年度特別 基本情報技術者試験 午後 問11
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.51 ↗(www.ipa.go.jp) / 公式問題冊子 p.52 ↗(www.ipa.go.jp) / 公式問題冊子 p.53 ↗(www.ipa.go.jp) / 公式問題冊子 p.54 ↗(www.ipa.go.jp) / 公式問題冊子 p.55 ↗(www.ipa.go.jp) / 公式問題冊子 p.56 ↗(www.ipa.go.jp)
図形の回転(アセンブラ言語 CASL II)
ソフトウェア開発 · CASL II / アセンブラ / ビット演算 / 画像処理
16×16ドットの白黒図形(各語16ビット、16語で構成)を時計回りに90度回転する副プログラム ROTATE および部分回転を行うプログラム2に関する問題である。プログラム1の空欄 a・b を埋める命令、行番号9のシフト方向を変更した際の実行結果図形、および左上 n×n ドットのみを回転させるプログラム2の空欄 c・d に入る適切な命令を選択せよ。
- ア
- 設問1 a: LAD GR1,-1,GR1 / b: LAD GR1,-1,GR1; 設問2: 図形ア; 設問3 c: SLL GR0,-1,GR3 / d: JMI LOOP1
- イ
- 設問1 a: LAD GR1,1,GR1 / b: LAD GR1,1,GR1; 設問2: 図形イ; 設問3 c: SLL GR0,0,GR3 / d: JNZ LOOP1
- ウ
- 設問1 a: LAD GR2,-1,GR2 / b: LAD GR2,-1,GR2; 設問2: 図形ウ; 設問3 c: SRL GR0,-1,GR3 / d: JPL LOOP1
- エ
- 設問1 a: LAD GR2,1,GR2 / b: LAD GR2,1,GR2; 設問2: 図形エ; 設問3 c: SRL GR0,0,GR3 / d: JZE LOOP1
- オ
- 設問1 a: LAD GR5,-1,GR5 / b: LAD GR5,-1,GR5
- カ
- 設問1 a: LAD GR5,1,GR5 / b: LAD GR5,1,GR5
解答・解説を表示
解答
設問1: a: カ, b: イ; 設問2: ウ; 設問3: c: イ, d: ア
解説
まず要点:16×16ビットの図形を回転するには、元図形の行データをビット単位でずらし、はみ出したビットを取り出して、結果側の各行の最上位ビットに順に入れてからまたずらす操作を繰り返します。シフトの向きを逆にするとビットを取り出す順番が逆になり、結果の図形が軸に対して反転します。
解き方
- 内側ループ(列の展開)と外側ループ(行の進行)で更新するポインタ(GR5とGR1)を特定して設問1を解く。
- 行番号9のシフトの向きを変えるとビットを取り出す順番(最上位からか最下位からか)がどう変わるかを追い、設問2の反転した形を特定する。
- 部分回転で回転しない領域の初期配置(左シフト量)と、複写の終了判定(カウンタが負になったときの分岐)を判断して設問3を解く。
小問ごとの答え
- 小問 設問1 a:カ
- 内側ループ LOOP2 では、結果領域の各語(GR5で指すアドレス)を1語ずつ進めるため、LAD GR5,1,GR5 を実行します。
- 小問 設問1 b:イ
- 外側ループ LOOP1 では、元図形の参照行アドレス(GR1で指すアドレス)を1語進めるため、LAD GR1,1,GR1 を実行します。
- 小問 設問2:ウ
- 行番号9を SLL(左シフト)から SRL(右シフト)に変更すると、元図形のビットが最下位(右端)から順に取り出されるため、回転後の図形が上下反転した状態(点が右縦棒の上側にある図形ウ)になります。
- 小問 設問3 c:イ
- 上 n 語の右 (16-n) ビットを、回転処理での右シフト n 回後に正しい位置に合わせるため、あらかじめ左に n ビットシフトする SLL GR0,0,GR3 を実行します。
- 小問 設問3 d:ア
- COPY ループでは SUBA GR7,=1 で残りの語数を減算し、16-n語の複写が完了して GR7 が負になった時点で LOOP1 へ抜けるため、JMI LOOP1 を指定します。
覚えるポイント
- ビットシフトを用いた2次元画像回転では、シフト方向を変えると鏡像(反転)が生じる。
間違えやすいところ
- 引き算の直後の終了判定でJNZやJZEを選び、0回処理(16-n=0)のときに無限ループや回数のずれを起こすミスに注意する。
出題の前提:平成23年度特別 基本情報技術者試験 午後 問12
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.57 ↗(www.ipa.go.jp) / 公式問題冊子 p.58 ↗(www.ipa.go.jp) / 公式問題冊子 p.59 ↗(www.ipa.go.jp) / 公式問題冊子 p.60 ↗(www.ipa.go.jp)
与信管理と表計算ワークシートの設計
ソフトウェア開発 · 表計算 / 垂直照合関数 / 表引き関数 / 照合一致関数 / 条件付合計関数
企業における取引先への与信管理に関するワークシートの作成について、設問1及び設問2の空欄[ a ]〜[ h ]に入る適切な式や値を選択せよ。取引先の信用度は基準1(流動比率)と基準2(自己資本比率)で評価され、各基準に応じた与信枠計算式および支払いサイト(回収月数)が決定される。これらに基づき、前月売掛残の算出や当月注文に対する受注可否の判定を行う。
- a
- D3, 信用度評価基準!$D$2〜$E$6, 2, 1
- b
- G3, 信用度評価基準!$D$7〜$E$11, 2, 1
- c
- (B3-C3)*垂直照合(D3, 信用度評価基準!$D$2〜$F$6, 3, 1)
- d
- E3*垂直照合(G3, 信用度評価基準!$D$7〜$F$11, 3, 1)
- e
- IF(最小(J3〜K3)<0, 0, 最小(J3〜K3))
- f
- 表引き(支払いサイト!$B$2〜$F$6, 照合一致(H3, 支払いサイト!$A$2〜$A$6, 0), 照合一致(I3, 支払いサイト!$B$1〜$F$1, 0))
- g
- 条件付合計(N$2〜P$2, '<=M3', N3〜P3)
- h
- IF(論理和((Q3+R3)>L3, L3=0), '×', '○')
解答・解説を表示
解答
設問1: a: ア, b: キ, c: ウ, d: ケ, e: ア; 設問2: f: オ, g: ク, h: ケ
解説
まず要点:表計算では、参照の関数(垂直照合・表引き・照合一致)のしくみを正しく理解し、条件分岐(IF)や条件付集計と組み合わせて業務の決まりを式で表します。どの範囲から何列目を取り、一致のしかた(完全一致か近似値か)をどう指定するかが重要です。
解き方
- 信用度評価基準シートの構造(下限値・信用度・与信枠係数)を確認し、垂直照合関数の検索値・範囲・列番号・検索指定(0:完全一致、1:近似値)を特定する。
- 与信枠の算出規則(2基準の小さい方、負なら0)をIF関数と最小関数で組み立てる。
- 2次元のマトリクス表から値を引くため、表引き関数と照合一致関数を行と列それぞれに対応させる。
- 未回収の売掛残の条件(支払いサイト月数以下の売上月を集計)を条件付合計関数で表し、受注可否を判定する論理式を導く。
小問ごとの答え
- 小問 設問1 a:ア
- セルH3では流動比率D3を検索値として、基準1の範囲($D$2〜$E$6)の2列目(信用度)を参照します。下限値以下の最大値を検索するため検索の指定は1とし、アが正解となります。
- 小問 設問1 b:キ
- セルI3では自己資本比率G3を検索値として、基準2の範囲($D$7〜$E$11)の2列目(信用度)を参照します。下限値以下の最大値を検索するため検索の指定は1となり、キが正解です。
- 小問 設問1 c:ウ
- 基準1の計算式は(流動資産-流動負債)×係数です。流動資産B3、流動負債C3、係数は垂直照合で範囲$D$2〜$F$6の3列目から取得するため、式は(B3-C3)*垂直照合(D3, 信用度評価基準!$D$2〜$F$6, 3, 1)となります。
- 小問 設問1 d:ケ
- 基準2の計算式は自己資本×係数です。自己資本E3に、垂直照合で範囲$D$7〜$F$11の3列目から取得した係数を掛けるため、E3*垂直照合(G3, 信用度評価基準!$D$7〜$F$11, 3, 1)が正解です。
- 小問 設問1 e:ア
- 与信枠は二つの計算値J3とK3の小さい方とし、負の場合は0とします。最小(J3〜K3)が0未満であれば0、そうでなければ最小(J3〜K3)を返すIF関数を記述するため、アが適切です。
- 小問 設問2 f:オ
- 表引き関数で範囲$B$2〜$F$6の値を参照します。行番号は基準1の信用度H3を$A$2〜$A$6から、列番号は基準2の信用度I3を$B$1〜$F$1から完全一致(検索指定0)の照合一致関数で求めるため、オが正解です。
- 小問 設問2 g:ク
- 支払いサイトM3か月以内の売上(N$2〜P$2の値がM3以下の列)が未回収の売掛金となります。条件付合計を用いて検索範囲N$2〜P$2、検索条件'<=M3'、合計範囲N3〜P3を指定したクが正解です。
- 小問 設問2 h:ケ
- 前月売掛残Q3と当月注文額R3の合計が与信枠L3を超える場合、または与信枠L3が0の場合は受注不可'×'、それ以外は'○'とします。二つの不可条件を論理和で結ぶため、ケが正解です。
覚えるポイント
- 垂直照合で検索指定1(近似値検索)を使う場合、左端列は昇順にソートされている必要があります。
- 表引き関数と照合一致関数を組み合わせることで、行と列の2次元マトリクス検索を実現できます。
間違えやすいところ
- 垂直照合の近似値検索(指定1)と完全一致検索(指定0)を混同して引数を間違えるミスが多い。
- 前月売掛残の計算で、当月注文額R3を誤って足してしまうミスに注意が必要。
出題の前提:基本情報技術者試験 2011年度特別試験 午後 問13
出典:IPA『2011年度 特別試験 午後』
公式問題冊子 p.61 ↗(www.ipa.go.jp) / 公式問題冊子 p.62 ↗(www.ipa.go.jp) / 公式問題冊子 p.63 ↗(www.ipa.go.jp) / 公式問題冊子 p.64 ↗(www.ipa.go.jp) / 公式問題冊子 p.65 ↗(www.ipa.go.jp) / 公式問題冊子 p.66 ↗(www.ipa.go.jp) / 公式問題冊子 p.67 ↗(www.ipa.go.jp) / 公式問題冊子 p.68 ↗(www.ipa.go.jp) / 公式問題冊子 p.69 ↗(www.ipa.go.jp)
2011年度 特別試験 午後
参照した公式資料
IPAが公開した2011年度 特別試験 午後の問題・解答資料です。

