旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2009年度 春期 午後の概要
画像データの符号化(ランレングス符号化)
ハードウェア · データ圧縮 / ランレングス符号化 / 可変長符号
8×8画素の白(0)と黒(1)からなる2値画像のランレングス符号化に関する次の記述を読み、設問1〜3に答えよ。 [符号化方式の規則] (1) ビット列は同じ値が連続する部分(ラン)ごとに区切り、その連続する個数(ランレングス n)で表す。 (2) 1番上の行の左端の画素は白で始まるものとし、左端が黒の場合は先頭に0個の白があるものとして符号化を行う。 (3) ランレングス n を2進数で表現したときのけた数を m とする。ただし常に m ≧ 2 となるように、n = 0 の2進数表現を 00、n = 1 の2進数表現を 01 とする。 (4) n ビットのランは、(a) けた数情報(m-2個の連続する1。m=2のときは0個)、(b) 区切り(1個の0)、(c) ランレングス情報(nの2進数表現 mビット)の順に並べて書き換える。 〔設問1〕表中の空欄 a、b に入る正しい答えをそれぞれ選べ。 ・n = 4 のときの符号化後のビット列 [ a ] ・符号化後のビット列が 1101111 のときの n の値 [ b ] 〔設問2〕図2の例(白が27個、黒が27個、白が10個)の64ビット列をこの方式で符号化すると、何ビットで表現できるか。 〔設問3〕ランレングス符号化後のビット列が「000111011111111011111010」であったとき、このビット列を復号した2値画像として正しいものを図中のア〜エから選べ。
- 設問1 a群 ア
- 100
- 設問1 a群 イ
- 0100
- 設問1 a群 ウ
- 10100
- 設問1 a群 エ
- 110100
- 設問1 b群 ア
- 14
- 設問1 b群 イ
- 15
- 設問1 b群 ウ
- 16
- 設問1 b群 エ
- 17
- 設問2 ア
- 22ビット
- 設問2 イ
- 23ビット
- 設問2 ウ
- 24ビット
- 設問2 エ
- 25ビット
- 設問3 ア
- 上から黒が順に連続し、途中に白と黒が交互に含まれる画像パターン
- 設問3 イ
- 白が連続した後に黒が連続する画像パターン
- 設問3 ウ
- 先頭から白が31画素続き、その後黒が連続する画像パターン
- 設問3 エ
- 先頭から黒が31画素連続し、続いて白が31画素連続し、末尾に黒が2画素ある画像パターン
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: イ, 設問2: エ, 設問3: エ
解説
まず要点:ランレングス符号化は、同じ値が続く長さ(ラン)を数えて記録する圧縮方法です。この問題では、連続する個数 n を2進数にしたときのけた数 m を使い、(m-2)個の「1」、区切り「0」、mビットの2進数を順に並べます。画像はいつも白のランから始まると決めているので、左端が黒のときは「白が0個」と考えて符号化を始めます。
解き方
- 設問1(a): n=4 を2進数で100と表し、けた数 m=3 なので1を1個、区切り0、値100を続けて10100にします。
- 設問1(b): 1101111 の区切り0の位置から m=4 と分かり、後ろの4ビット1111を10進数にして15を求めます。
- 設問2: 白27と黒27はそれぞれ9ビット、白10は7ビットなので、9+9+7=25ビットになります。
- 設問3: 000111011111111011111010 を白0、黒31、白31、黒2と区切り、選択肢エのパターンと決めます。
小問ごとの答え
- 小問 設問1 a:ウ
- n=4 を2進数で表すと 100(けた数 m=3)です。けた数情報は m-2=1 個の「1」、区切りは「0」、ランレングス情報は「100」となるため、連結すると「10100」となります。
- 小問 設問1 b:イ
- ビット列「1101111」は、区切り「0」の前に「1」が2個あるため m-2=2 より m=4 です。区切りの後の4ビット「1111」は2進数で 15 を表すため、n=15 と求まります。
- 小問 設問2:エ
- 白27個は n=27(2進数11011、m=5)より (5-2)+1+5=9ビット、黒27個も同様に9ビット、白10個は n=10(2進数1010、m=4)より (4-2)+1+4=7ビットとなり、合計は 9+9+7=25ビットです。
- 小問 設問3:エ
- ビット列「000111011111111011111010」を復号すると、白0個(000)、黒31個(111011111)、白31個(111011111)、黒2個(010)の計64画素となり、選択肢エの画像と一致します。
覚えるポイント
- ランレングス符号化では先頭の色が決まっている場合、逆の色で始まる際に長さ0のランを置くルールがある。
- 可変長符号のビット長は (m - 2) + 1 + m = 2m - 1 ビットとなる。
間違えやすいところ
- 先頭の000を白0個ではなく白3個などと読み違えてしまう誤りです。
- 先頭が黒で始まるとき、白0個を表す000が入ることを見落とす誤りです。
出題の前提:平成21年度春期基本情報技術者試験午後問1出題条件
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp) / 公式問題冊子 p.8 ↗(www.ipa.go.jp)
ソフトウェア製品の品質特性(コードレビューにおける指摘)
ソフトウェア · ソフトウェア品質特性 / JIS X 0129-1 / コード最適化 / メモリ管理 / 移植性
JIS X 0129-1 で定められたソフトウェア製品の6つの品質特性(機能性、使用性、信頼性、効率性、保守性、移植性)に関する記述を読み、コードレビューにおける指摘の例(表2)中の空欄 a〜e に入る最も適切な答えを選べ。 [レビュー指摘の概要] 1. Ave ← Total ÷ Count において、Count > 0 の判定を追加してゼロ除算を防ぐ変更を行った。該当する主な品質特性(副特性)は [ a ] である。 2. 2重ループ内で呼び出される関数 Sub は計算時間が長いが返却値は引数 r だけに依存する。内側ループ(c のループ)の実行前に最適化を行うコードの記述として適切なものは [ b ] である。 3. 動的メモリの確保・開放において、取得範囲外や開放済み領域を誤って更新する障害を検出するため、デバッグ機能付き関数に変更を指示した。この種の障害の性質に関する説明として適切なものは [ c ] である。 4. 複数の機種で汎用的に使われるプログラムにおいて、機種の違いによって [ d ] が異なる場合があるため、整数型から明示的な「32ビット整数型」への宣言変更を指示した。該当する主な品質特性(副特性)は [ e ] である。
- a, e群 ア
- 移植性(環境適応性)
- a, e群 イ
- 効率性(資源効率性)
- a, e群 ウ
- 信頼性(成熟性)
- a, e群 エ
- 保守性(解析性)
- a, e群 オ
- 保守性(変更性)
- b群 ア
- 内側ループ内で毎回 S1 ← Sub(r) + 1 を計算する処理
- b群 イ
- 外側ループ直下(内側ループの前)で S1 ← Sub(r) + 1 を1度だけ計算し、内側ループ内では S1 を用いて比較・代入する処理
- b群 ウ
- 内側ループ内で毎回 S1 ← Sub(r) + 1 を計算し、一時変数 Xrc を用いて比較・代入する処理
- b群 エ
- 外側ループ直下で S1 ← Sub(r) + 1 を計算し、内側ループ内では一時変数 Xrc を用いて比較・代入する処理
- c群 ア
- 更新した時点で障害と分かるが、ログを記録する機能のある OS は少ない
- c群 イ
- 更新した時点で障害と分かるが、ログを記録する機能のあるハードウェアは少ない
- c群 ウ
- 更新内容を後で参照したときに障害となることが多く、原因箇所の特定が困難である
- c群 エ
- 取得可能な主記憶が残っている間は、障害を検知できない
- d群 ア
- 指定できる変数や関数の個数
- d群 イ
- 変数や関数の型宣言で省略した場合のビット数
- d群 ウ
- リンカで扱える関数のビット数
- d群 エ
- ローダで扱える関数の個数
解答・解説を表示
解答
a: ウ, b: イ, c: ウ, d: イ, e: ア
解説
まず要点:JIS X 0129-1 では、ソフトウェアの品質を機能性・信頼性・使用性・効率性・保守性・移植性の6つに分けています。不具合を未然に防ぐ工夫は信頼性、無駄な計算を減らす工夫は効率性、不具合の原因を調べやすくする工夫は保守性、機種の違いに対応する工夫は移植性を高めます。
解き方
- 空欄a: ゼロで割るのを防ぐコードは、異常終了を防いで安定させるので信頼性(成熟性)のウを選びます。
- 空欄b: 計算の重いSub(r)+1は内側のcで変わらないので、cのループの外で1度だけS1に入れ、内側では配列X[r,c]を直接更新するイを選びます。
- 空欄c: 動的メモリの不正書き込みは書いた時点では気づかず、後で別の場所から使って初めて障害になるのでウを選びます。
- 空欄d: 整数型のビット数は機種によって違うので、型宣言で省略したときのビット数を示すイを選びます。
- 空欄e: 機種の違いによる不具合を防ぎ、いろいろな環境でそのまま使えるようにするので移植性(環境適応性)のアを選びます。
小問ごとの答え
- 小問 a:ウ
- ゼロ除算による異常終了を未然に防ぐ修正は、ソフトウェアのフォールトを回避して指定水準を維持する能力である「信頼性(成熟性)」に対応します。
- 小問 b:イ
- Sub(r)+1 の値は外側ループ変数 r のみに依存し内側ループ変数 c に依存しないため、内側ループの外で一度だけ計算して S1 に保持し、内側ループ内で配列要素 X[r, c] と直接比較・代入する形式が最も効率的です。
- 小問 c:ウ
- 動的メモリの不正更新は書き込んだ瞬間には異常終了せず、後からその領域を別の処理が読み出した際に値の破壊として表面化するため、原因箇所の特定が困難になります。
- 小問 d:イ
- 単に「整数型」と宣言した場合の割当てビット数はCPUアーキテクチャやコンパイラ等の機種環境によって16ビットや32ビットなど異なるため、型宣言で省略した場合のビット数が該当します。
- 小問 e:ア
- 機種の違いによる動作の差異を排除し、異なる機種環境でも正しく動作するように改善することは「移植性(環境適応性)」に対応します。
覚えるポイント
- ループ不変式(内側ループで値が変わらない計算)は内側ループの外側へ追い出すことで時間効率性を向上させる。
- メモリ不正アクセスは破壊時ではなく後々の参照時に異常となるため潜伏しやすい。
間違えやすいところ
- ゼロ除算を防ぐチェックを、信頼性ではなく機能性や効率性と混同してしまう誤りです。
- 空欄bで、一時変数Xrcに入れるだけで配列を更新しない選択肢エを選んでしまう誤りです。
出題の前提:JIS X 0129-1(ソフトウェア製品の品質特性)および平成21年度春期基本情報技術者試験午後問2出題条件
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.9 ↗(www.ipa.go.jp) / 公式問題冊子 p.10 ↗(www.ipa.go.jp) / 公式問題冊子 p.11 ↗(www.ipa.go.jp)
関係データベースの設計と操作
データベース · E-R図 / 第1正規化 / SQL / 表の結合 / 副問合せ
あるスーパーマーケットで導入するレシピ表示端末のデータベース設計およびSQL文に関する記述を読み、設問1〜4に答えよ。 【表の構成】 ・料理表: 料理ID(主キー), 料理名, 作り方 ・商品表: 商品ID(主キー), 商品名, 種別 ・分量表: 料理ID(主キー), 商品ID(主キー), 分量 〔設問1〕図1の構成におけるエンティティ間の関係を表すE-R図として適切なものを解答群から選べ。 〔設問2〕料理ごとに作り方や使用する食材とその分量を記録した非正規形の表から図1の表構造を得るために、第1正規化に基づいて実施した処置を選べ。 〔設問3〕来店客が“じゃがいも”を選択したときに、それを使用する料理名をすべて抽出するSQL文の空欄に入る条件式を選べ。 〔設問4〕食材の在庫状態を管理する属性「在庫(1:あり, 0:なし)」を追加した商品表(図2)に基づき、使用する食材すべてに在庫がある料理名だけを表示するSQL文の空欄に入る条件式を選べ。
- 設問1 ア
- 分量 -(料理)-> 商品(分量から商品へ向けた1対多の関連)
- 設問1 イ
- 料理 <-(分量)-> 商品(料理と商品の間の多対多の関連、関連名は分量)
- 設問1 ウ
- 料理 -(商品)-> 分量(料理から分量へ向けた1対多の関連)
- 設問2 ア
- 実行性能の向上を図り,料理表と分量表に分けた。
- 設問2 イ
- 主キーを一意にするため,料理名に料理IDを割り振った。
- 設問2 ウ
- 商品とその分量という繰返しの要素を排除した。
- 設問2 エ
- 情報の独立性を高めるため,商品名に商品IDを割り振った。
- 設問3 ア
- 料理表.料理ID = (SELECT 分量表.料理ID FROM 分量表, 商品表 WHERE 商品表.商品名 = 'じゃがいも')
- 設問3 イ
- 料理表.料理ID = 分量表.料理ID AND 分量表.商品ID = 商品表.商品ID AND 商品表.商品名 = 'じゃがいも'
- 設問3 ウ
- 料理表.料理ID = 分量表.料理ID AND 分量表.商品ID = 商品表.商品ID OR 商品表.商品名 = 'じゃがいも'
- 設問3 エ
- 料理表.料理ID IN (SELECT 分量表.料理ID FROM 分量表, 商品表 WHERE 商品表.商品名 = 'じゃがいも')
- 設問4 ア
- 商品表.在庫 != 0 AND 商品表.商品名 = 'じゃがいも'
- 設問4 イ
- 商品表.在庫 != 0 OR 商品表.商品名 = 'じゃがいも'
- 設問4 ウ
- 料理表.料理ID IN (SELECT 分量表.料理ID FROM 分量表 JOIN 商品表 ON 分量表.商品ID = 商品表.商品ID WHERE 商品表.在庫 = 0) AND 商品表.商品名 = 'じゃがいも'
- 設問4 エ
- 料理表.料理ID NOT IN (SELECT 分量表.料理ID FROM 分量表 JOIN 商品表 ON 分量表.商品ID = 商品表.商品ID WHERE 商品表.在庫 = 0) AND 商品表.商品名 = 'じゃがいも'
解答・解説を表示
解答
設問1: イ, 設問2: ウ, 設問3: イ, 設問4: エ
解説
まず要点:多対多の関係には、間をつなぐ表(連関エンティティ)を置きます。第1正規化では、1つの欄に繰り返し入っている項目を別の表に分けて取り除きます。「すべての材料に在庫がある」のような全称条件は、「在庫なしの材料を1つでも含むものをNOT INで除く」と考えます。
解き方
- エンティティ同士の対応が1対多か多対多かを見分け、E-R図の書き方に当てはめます。
- 第1正規化の定義である繰り返し項目の排除に当てはまる選択肢を選びます。
- FROM句に並べた複数の表を正しく結ぶ結合条件と、絞り込み条件を組み立てます。
- 全称条件を満たす行を取るため、在庫切れを含む対象を副問合せで出し、NOT INで除きます。
小問ごとの答え
- 小問 設問1:イ
- 1つの料理には複数の商品(材料)が使われ、1つの商品は複数の料理に使われるため、料理と商品は多対多の関連になります。共通表記ルールに基づき多対多は両方向矢印で示し、関連の属性である「分量」を線の上に記載しているイが適切です。
- 小問 設問2:ウ
- 第1正規化とは、レコード内の繰り返し項目を排除して個別の行・表に分離する作業です。1つの料理に対して複数存在する商品とその分量の繰り返し要素を排除して分量表として独立させたため、ウが正解です。
- 小問 設問3:イ
- FROM句で料理表、分量表、商品表の3表が指定されているため、WHERE句には3表の結合条件(料理表.料理ID = 分量表.料理ID AND 分量表.商品ID = 商品表.商品ID)と、抽出条件(商品名 = 'じゃがいも')をANDで結ぶ必要があります。
- 小問 設問4:エ
- 「使用する食材すべてに在庫がある料理」を抽出するためには、「在庫が0の食材を1つでも使用している料理」を除外する必要があります。副問合せで在庫=0の食材を含む料理IDを求め、料理表.料理ID NOT IN で除外し、じゃがいもを含む条件とANDで結合します。
覚えるポイント
- 第1正規化は「繰り返し項目の排除」である。
- 全称条件(すべて〜である)は、否定条件を用いた「NOT IN (1つでも〜でないもの)」で抽出する。
間違えやすいところ
- 副問合せが複数の行を返すときに、INではなく「=」を使ってしまうミスです。
- 全称条件で、その行だけの在庫を見て済ませ、他の材料の欠品を見落とすミスです。
出題の前提:出題時の基本情報技術者試験シラバス(関係データベースの正規化・SQLの基本構文)に基づく。
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.12 ↗(www.ipa.go.jp) / 公式問題冊子 p.13 ↗(www.ipa.go.jp) / 公式問題冊子 p.14 ↗(www.ipa.go.jp)
パケットフィルタリング
情報セキュリティ · ファイアウォール / パケットフィルタリング / DMZ / ネットワークセキュリティ
X社におけるインターネット接続ネットワークの構成およびファイアウォールの設定に関する記述を読み、設問1,2に答えよ。 【ネットワーク構成と要件】 ・インターネットとDMZの間にファイアウォールA、DMZと社内LANの間にファイアウォールBを配置。 ・Webサーバ(公開・HTTP/80)とメールサーバ(送受信・SMTP/25)はDMZに配置。 ・DBサーバは社内LANに配置し、WebサーバおよびメールサーバからDBアクセス(ポート1999)を受ける。 ・社内LANの管理用PCからは、SSH(ポート22)で各サーバへログイン可能であり、メールサーバを介したメール送受信(送信:SMTP/25, 受信:POP3/110)が可能。また自社Webサーバ(80)の参照は許可されているが、社外Webの利用は不許可。 ・フィルタリングは上から順に判定し、最初に合致した行の動作を実行。応答パケットは動的フィルタリングで自動許可。 〔設問1〕ファイアウォールAの設定表(表2)の空欄 a, b、およびファイアウォールBの設定表(表3)の空欄 c, d に入る適切な字句を答えよ。 〔設問2〕パケットフィルタリングによって防ぐことができるセキュリティ上のリスクを解答群の中から二つ選べ。
- 設問1 a ア
- DBサーバ
- 設問1 a イ
- Webサーバ
- 設問1 a ウ
- 管理用PC
- 設問1 a エ
- メールサーバ
- 設問1 a オ
- 任意
- 設問1 b ア
- 22
- 設問1 b イ
- 25
- 設問1 b ウ
- 80
- 設問1 b エ
- 110
- 設問1 b オ
- 1999
- 設問1 c ア
- DBサーバ
- 設問1 c イ
- Webサーバ
- 設問1 c ウ
- 管理用PC
- 設問1 c エ
- メールサーバ
- 設問1 c オ
- 任意
- 設問1 d ア
- 22
- 設問1 d イ
- 25
- 設問1 d ウ
- 80
- 設問1 d エ
- 110
- 設問1 d オ
- 1999
- 設問2 ア
- Webサイトとやり取りされるデータの盗聴や改ざん
- 設問2 イ
- WebサイトへのSQLインジェクション攻撃
- 設問2 ウ
- インターネットからDMZ内のサーバへの許可されていないポートでの接続
- 設問2 エ
- インターネットから社内LANへの不正アクセスによる攻撃
- 設問2 オ
- メールによる社内からのファイル流出
解答・解説を表示
解答
設問1 a: エ, 設問1 b: イ, 設問1 c: エ, 設問1 d: エ, 設問2: ウ, エ
解説
まず要点:パケットフィルタリング型ファイアウォールは、IPアドレスとポート番号を見て通信を通すか決めます。メールの送信(SMTP)はポート25、メールの受信(POP3)はポート110を使います。通信の向きと送信元・宛先を正確に決めることが大切です。
解き方
- DMZのメールサーバが社外へメールを送る要件から、送信元をメールサーバ、宛先ポートをSMTPの25と決めます。
- 管理用PCの要件のうち、表3にないメール受信(POP3)を探し、あて先をメールサーバ、ポートを110と決めます。
- IPアドレスやポート番号で防げるリスク(ウ・エ)と、上の層で対処が要るリスク(ア・イ・オ)を分けます。
小問ごとの答え
- 小問 設問1 a:エ
- ファイアウォールAにおいて、外部へのメール配信および社外へのメール転送を行うため、送信元は「メールサーバ」となります。
- 小問 設問1 b:イ
- メールサーバから外部のメールサーバへメールを送信(転送)する際の宛先ポート番号はSMTPの「25」です。
- 小問 設問1 c:エ
- 管理用PCからメールサーバを介したメール受信(POP3)を行うため、あて先は「メールサーバ」となります。
- 小問 設問1 d:エ
- 管理用PCからメールサーバに届いたメールを受信するためのプロトコルはPOP3であり、ポート番号は「110」です。
- 小問 設問2:ウ, エ
- パケットフィルタリングはIPアドレスやポート番号に基づき通信を制御するため、未許可ポートへの接続遮断(ウ)や、社内LANへの外部からの直接接続遮断(エ)を防御できます。
覚えるポイント
- SMTP(ポート25)はメール送信・転送、POP3(ポート110)はメール受信に用いられる。
- パケットフィルタリングはIPアドレスとポート番号の制御であり、データペイロード(SQLインジェクションや盗聴)の防御はできない。
間違えやすいところ
- メールサーバが外部へ送るときの宛先ポート25を、受信用のPOP3と混同するミスです。
- SQLインジェクションのようなアプリ層の攻撃を、パケットフィルタリングで防げると誤解するミスです。
出題の前提:出題時の基本情報技術者試験シラバス(ネットワークセキュリティ・ファイアウォールの設定と限界)に基づく。
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.15 ↗(www.ipa.go.jp) / 公式問題冊子 p.16 ↗(www.ipa.go.jp) / 公式問題冊子 p.17 ↗(www.ipa.go.jp)
銀行口座の管理におけるトランザクション設計と処理順序
ソフトウェア設計 · トランザクション設計 / 排他制御 / 業務モジュール設計 / データ整合性
銀行口座の管理に関する次の記述を読んで、各空欄 [ a ] 〜 [ f ] に当てはまる最も適切な答えを選べ。 [口座管理の仕様要約] ・口座ごとに「口座管理手数料」「ATM使用手数料」「残高」「手数料マーク」を管理する。 ・手数料マークは、前月末日時点の残高が10万円未満の場合に“真”、10万円以上の場合に“偽”となる。 ・口座管理手数料:前月末日時点の残高が10万円未満なら当月分が発生し、月末処理で残高から引き落とされる。 ・ATM使用手数料:前月末日時点の残高が10万円未満なら操作時に残高から引き落とされる(10万円以上なら不要)。 ・同一口座に対しては預入れ・引出しの操作が完了するまで他の操作を行えない。 [預払トランザクション構成モジュール] ・処理A: 預払操作に対応してDB更新命令を作成し、DB更新モジュールに送る。 ・処理B: 残高不足となる場合は利用者にメッセージで伝え、預払処理を行わない。 ・処理C: DB更新命令1件に対し、ATM使用手数料を引き落とす命令を作成しDB更新モジュールに送る。 [月末処理モジュール] ・月末日のATM受付終了後に実行。 ・処理D: 翌月のために手数料マークを設定する命令を作成しDB更新モジュールに送る。 ・処理E: 所定の口座管理手数料を残高から引き落とした新たな残高を計算し、書き戻す命令を作成してDB更新モジュールに送る(結果が負になる場合もある)。
- ア
- a〜c: 処理A / d,e: 所定の口座管理手数料 / f: 処理Dの次に処理E
- イ
- a〜c: 処理B / d,e: 所定の口座管理手数料,その口座の残高 / f: 処理Eの次に処理D
- ウ
- a〜c: データベースの検索 / d,e: 所定の口座管理手数料,その口座の残高,その口座の手数料マークの値 / f: 任意
- エ
- a〜c: データベースの項目内容変更 / d,e: その口座の残高
- オ
- a〜c: データベースのレコード削除 / d,e: その口座の手数料マークの値
解答・解説を表示
解答
a: ウ, b: イ, c: ア, d: エ, e: ウ, f: イ
解説
まず要点:口座処理のプログラムは、データを見る・確かめる・書き換える順番を正しく決めることが大切です。順番を間違えると、更新前の値を使ってしまったり、条件の確認が抜けたりします。
解き方
- 預払処理では、残高の確認(検索)→残高不足の判定と中断→預払の更新命令作成→手数料の更新命令作成、の順になると考えます。
- 月末処理では、翌月の判定に使う残高を確定させるため、当月の手数料引落し(処理E)をしてからマーク設定(処理D)を行う順にします。
小問ごとの答え
- 小問 a:ウ
- 預払処理を行うためには、まず現在の預金残高や手数料マークの有無を確認する必要があるため、最初に「データベースの検索」を行います。
- 小問 b:イ
- 引出額が残高を超えていないか等の判定を行い、残高不足の場合は中断してメッセージを返す必要があるため、検索直後に「処理B」を実行します。
- 小問 c:ア
- 残高不足でないことが確認された後、実際の預払操作に応じた残高変更を行うため、「処理A」で更新命令を作成します。その後必要に応じて手数料引落し(処理C)が行われます。
- 小問 d:エ
- 処理Dは翌月の手数料マーク(前月末日時点の残高が10万円未満なら真、以上なら偽)を設定するため、「その口座の残高」のみが最低限必要です。
- 小問 e:ウ
- 処理Eは当月分の引落しであり、手数料が掛かるかどうかの判定に「その口座の手数料マークの値」、引落計算に「所定の口座管理手数料」と「その口座の残高」の全3項目が必要です。
- 小問 f:イ
- 処理Eで当月分の手数料を引き落とした後の最終残高を元にして、処理Dで翌月の手数料マークを判定・設定しなければならないため、「処理Eの次に処理D」の順で実行します。
覚えるポイント
- 更新前には必ず最新データの検索と整合性バリデーション(残高不足等の検証)を先行させる必要があります。
- バッチ処理の順序決定では、入力として参照する値が他方の処理の更新結果に依存していないかを必ず確認します。
間違えやすいところ
- 月末処理で先にマークを判定してから残高を引くと、当月の引落し後の残高が翌月の判定に反映されないバグになります。
- 預払処理で、残高不足の確認より先に更新命令を作って送ってしまう誤りに注意します。
出題の前提:平成21年度春期 基本情報技術者試験 午後 問5 の問題文および公式解答・採点講評に基づく。
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.18 ↗(www.ipa.go.jp) / 公式問題冊子 p.19 ↗(www.ipa.go.jp) / 公式問題冊子 p.20 ↗(www.ipa.go.jp)
プロジェクトのスケジュール管理と3点見積法によるリスク分析
プロジェクトマネジメント · 進捗管理 / 変更管理 / リスク管理 / 3点見積法 / 正規分布
スケジュール管理に関する次の記述を読んで、設問1〜3に答えよ。 [第I期プロジェクトの経緯] A社は経営管理システムの開発をB社に委託した。サブシステムM1(データ集計・分析)とM2(経営幹部向けナビゲーション)から成り、B社は概略機能説明後に3か月の請負契約を結んだ。要件定義完了後に開発を開始したが、2か月経過時にM1の開発遅延が判明しメンバを増強した。しかし2週間後に遅れを取り戻せず2週間の納期延長を申請・了承された。最終的にはさらに遅れて当初予定より1か月遅延で完了した。遅延理由は「M1が予想以上に複雑」「M2の操作性を自社判断で一層高めたことで開発規模が当初見積りの1.5倍になった」ことであった。 [第II期プロジェクトと3点見積法] 1年後、M3新規開発とM2改造をB社が請け負い、3点見積法を実施した。 作業期間の平均=(悲観値+4×最頻値+楽観値) / 6 分散=((悲観値-楽観値) / 6)^2 開発全体の標準偏差=√(分散の合計) プロジェクトの作業日数は正規分布(平均μ, 分散σ^2)に近似でき、μ±1σに収まる確率は0.68、μ±2σに収まる確率は0.95である。 表2のデータ: M3新規開発:悲観20, 最頻12, 楽観8 → 平均12.7, 分散4, 標準偏差2 M2の改造:悲観16, 最頻12, 楽観10 → 平均12.3, 分散1, 標準偏差1 開発全体:分散5, 標準偏差2.2
- ア
- 設問1: 開発担当者の技術力不足 / 設問2: 開発メンバを増強する / 設問3 e: 24 / 設問3 f: 2
- イ
- 設問1: A社との調整を行わず勝手に機能を広げた / 設問2: 要求機能が複雑であったM1の納期遅延 / 設問3 e: 25 / 設問3 f: 2.2
- ウ
- 設問1: 要件定義書受領時点で概算見積りを見直さなかった / 設問2: 操作性を一層高めたことによるM2の納期遅延 / 設問3 e: 27 / 設問3 f: 4
- エ
- 設問1: 業務理解不足と仕様解釈誤解 / 設問2: 納期を2週間延ばした後の更なる遅れの発生 / 設問3 e: 29 / 設問3 f: 4.4
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: イ, 設問2 c: エ, 設問2 d: ウ, 設問3 e: イ, 設問3 f: エ
解説
まず要点:プロジェクトでは、要件が固まった時点で見積りをやり直し、変更をきちんと管理することが大切です。3点見積法では3つの値から平均を出し、全体の標準偏差は各作業の分散を足してから平方根で求めます。作業日数は正規分布とみなせ、平均±2σに約95%が収まります。
解き方
- 第I期の遅延原因(要件定義後の見積り見直し不足、無断の仕様変更)と、対策(定量分析と変更管理)を結び付けます。
- 全体の平均作業日数は、各作業の平均の合計として 12.7+12.3=25日 と計算します。
- 全体の標準偏差2.2に対し、確率95%の上限となる2σ(2×2.2=4.4日)を求めます。
小問ごとの答え
- 小問 設問1 a:ウ
- M1が予想以上に複雑だった原因は、概略機能による概算見積りのまま進め、確定した要件定義書を受け取った際に見積りを見直さなかったことにあります。
- 小問 設問1 b:イ
- M2の操作性を高めた原因は、受託側の自社判断で発注者(A社)との事前調整や変更手続きを行わずに勝手に機能を拡張してしまったことにあります。
- 小問 設問2 c:エ
- 定量データ(生産量・進捗度・差異分析)によりリカバリの実現可能性を正確に把握することで、「納期を2週間延ばした後の更なる遅れの発生」を未然に防ぐことができます。
- 小問 設問2 d:ウ
- 仕様やスコープの変更管理を進捗会議で行うルールを設けることで、勝手な機能拡張による「操作性を一層高めたことによるM2の納期遅延」を回避できます。
- 小問 設問3 e:イ
- 全体の平均作業日数は各作業の平均作業日数の和となるため、12.7 + 12.3 = 25.0日(選択肢イ)となります。
- 小問 設問3 f:エ
- 確率0.95で完了する日数はμ+2σの範囲上限です。開発全体の標準偏差σは2.2なので、加える日数は 2 × σ = 2 × 2.2 = 4.4日(選択肢エ)となります。
覚えるポイント
- 正規分布における確率0.68はμ±1σ、確率0.95はμ±2σの区間に対応します。
- 全体の平均は「各作業の平均の合計」、全体の標準偏差は「各作業の分散の合計の平方根」で計算します。
間違えやすいところ
- 全体の標準偏差を出すとき、各作業の標準偏差をそのまま足してしまう誤りです(足すのは分散です)。
- 確率0.95の日数として1σ(2.2日)を足してしまうミスです(正しくは2σ=4.4日)。
出題の前提:平成21年度春期 基本情報技術者試験 午後 問6 の問題文および公式解答・採点講評に基づく。
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.21 ↗(www.ipa.go.jp) / 公式問題冊子 p.22 ↗(www.ipa.go.jp) / 公式問題冊子 p.23 ↗(www.ipa.go.jp) / 公式問題冊子 p.24 ↗(www.ipa.go.jp)
時系列分析による需要予測
経営・関連法規 · 需要予測 / 時系列分析 / 移動平均法 / 指数平滑法
精密機器メーカーC社における製品の需要予測システムの構築に関する記述を読み、設問1〜3に答えよ。 〔ヒアリングの結果〕 (1) 製造工程の事情により製品の生産台数は月単位で計画するため、需要予測も月単位で提供されることが望まれる。 (2) 月単位でみた需要の増減パターンが毎年繰り返される製品がある。 (3) 製品の世代交代などの影響で、需要が徐々に増えていく製品と徐々に減っていく製品がある。 (4) (2), (3)以外の製品は小幅な需要の増減が不規則に発生している。 (5) 製品のモデルチェンジのサイクルは5〜10年であり、新製品を除いて時系列分析に必要な需要実績データは保管されている。 設問1 需要予測システムに必要な次の3つの機能について、[ a ] 〜 [ c ] に入る適切な字句を選べ。 ① 製品ごとの需要実績データに含まれる、需要の [ a ] 傾向変動を把握して、予測値に反映させる機能 ② 製品ごとの需要実績データに含まれる、需要の [ b ] 季節変動を把握して、予測値に反映させる機能 ③ 製品ごとの需要実績データに含まれる、[ c ] である不規則変動の影響を取り除き、予測値を平滑化させる機能 設問2 過去3年間の需要実績(図)を基に、製品X、製品Y、製品Zの需要実績に適用すべき予測手法の適切な組合せを選べ。 ・製品X:全体として右肩上がりに需要が増加している。 ・製品Y:毎年特定の時期に山と谷が規則正しく現れている。 ・製品Z:一定の水準(約100個)を中心に小幅に上下している。 設問3 製品Zの需要実績に対し、移動平均法および指数平滑法の適合度を検証する。表の過去7か月の需要実績(6月:100, 7月:95, 8月:93, 9月:92, 10月:105, 11月:115, 12月:110)に基づき、[ d ], [ e ] に入る値を求めよ。 ・過去3か月の実績(9月〜11月)を用いた移動平均法による12月の予測値:[ d ] ・平滑化定数α=0.6、11月の予測値100とした場合の指数平滑法による12月の予測値:[ e ]
- 設問1 a, b ア
- 増加と減少のパターンが1年ごとに繰り返される
- 設問1 a, b イ
- 増加と減少のパターンが5か月ごとに繰り返される
- 設問1 a, b ウ
- 増加と減少のパターンが不定期に繰り返される
- 設問1 a, b エ
- 増加又は減少が間欠的に発生する
- 設問1 a, b オ
- 長期的な増加又は減少が継続する
- 設問1 c ア
- 傾向変動や季節変動では説明できない部分
- 設問1 c イ
- 人為的な影響による需要の増減部分
- 設問1 c ウ
- 定常的に発生する需要の部分
- 設問1 c エ
- 天候や気象の影響による需要の増減部分
- 設問2 ア
- 製品X: 季節変動と不規則変動, 製品Y: 傾向変動と不規則変動, 製品Z: 不規則変動だけ
- 設問2 イ
- 製品X: 季節変動と不規則変動, 製品Y: 不規則変動だけ, 製品Z: 傾向変動と不規則変動
- 設問2 ウ
- 製品X: 傾向変動と不規則変動, 製品Y: 季節変動と不規則変動, 製品Z: 不規則変動だけ
- 設問2 エ
- 製品X: 傾向変動と不規則変動, 製品Y: 不規則変動だけ, 製品Z: 季節変動と不規則変動
- 設問2 オ
- 製品X: 不規則変動だけ, 製品Y: 季節変動と不規則変動, 製品Z: 傾向変動と不規則変動
- 設問3 d, e ア
- 98
- 設問3 d, e イ
- 101
- 設問3 d, e ウ
- 104
- 設問3 d, e エ
- 106
- 設問3 d, e オ
- 109
- 設問3 d, e カ
- 110
解答・解説を表示
解答
設問1 a: オ, 設問1 b: ア, 設問1 c: ア, 設問2: ウ, 設問3 d: ウ, 設問3 e: オ
解説
まず要点:時系列データは、長期的な増減(傾向変動)、1年ごとの繰り返し(季節変動)、それ以外の偶発的な変化(不規則変動)に分けて考えます。データの特徴に合わせて移動平均法や指数平滑法を選ぶことが大切です。
解き方
- ヒアリングの内容と、時系列分析の構成要素(傾向変動・季節変動・不規則変動)の定義を対応付けます。
- 需要実績のグラフから、製品X(右肩上がり)、製品Y(1年周期の山)、製品Z(平均の周りでばらつく)の特徴を見分けます。
- 移動平均法と指数平滑法の式に、与えられた実績値と設定値を入れて予測値を計算します。
小問ごとの答え
- 小問 設問1 a:オ
- 傾向変動(トレンド)とは、製品の世代交代などにより長期的・持続的に需要が増加または減少する変動のことです。
- 小問 設問1 b:ア
- 季節変動とは、年間を通じて1年周期などの一定期間ごとに規則正しく増減パターンが繰り返される変動のことです。
- 小問 設問1 c:ア
- 不規則変動(偶発変動・残差変動)とは、傾向変動や季節変動などの体系的な要因では説明がつかない突発的・小幅な変動のことです。
- 小問 設問2:ウ
- 製品Xは年々需要が増加しており「傾向変動と不規則変動」、製品Yは1年周期で増減を繰り返しており「季節変動と不規則変動」、製品Zは基準値付近で微変動しており「不規則変動だけ」が適切です。
- 小問 設問3 d:ウ
- 直近3か月(9月:92、10月:105、11月:115)の実績平均を計算すると、(92 + 105 + 115) ÷ 3 = 312 ÷ 3 = 104 となります。
- 小問 設問3 e:オ
- 指数平滑法の計算式より、0.6 × (11月実績115) + (1 - 0.6) × (11月予測100) = 69 + 40 = 109 となります。
覚えるポイント
- 時系列データの4成分:傾向変動(T)、季節変動(S)、循環変動(C)、不規則変動(I)
- 指数平滑法の公式:当期予測値 = α × 前期実績値 + (1 - α) × 前期予測値
間違えやすいところ
- 移動平均法で使う期間(直近何か月分か)を間違えてしまうミスです。
- 指数平滑法で、平滑化定数αを掛ける相手(実績値か予測値か)を逆にしてしまうミスです。
出題の前提:平成21年度春期 基本情報技術者試験 午後 問7
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.25 ↗(www.ipa.go.jp) / 公式問題冊子 p.26 ↗(www.ipa.go.jp) / 公式問題冊子 p.27 ↗(www.ipa.go.jp) / 公式問題冊子 p.28 ↗(www.ipa.go.jp)
図形の塗替えアルゴリズム
データ構造及びアルゴリズム · 深さ優先探索 / シードフィル / スタック / 番兵
表示領域中の指定した画素を含む同色領域を別の指定色で塗り替えるプログラムに関する記述を読み、[ a ] 〜 [ f ] に入る適切な答えを選べ。 〔プログラムの説明〕 ・表示領域は8×8画素であり、10×10の2次元配列 Image に保持される。有効な画素の添字範囲は1〜8である。 ・色は黒(1)、灰(2)、白(3)の3色で表される。 ・塗り替える開始画素を (VS, HS)、塗り替える色を NC とする。 ・開始画素の現在の色 CC を取得し、上下左右に隣接する同色画素を順次スタック(VPos, HPos, More)を用いて探索し塗り替える。 ・配列 Image の最外周(行0, 9および列0, 9)にはあらかじめ値 Wall が設定される。 設問 (1) 図1のデータ(VS=5, HS=3, NC=1:黒)で実行したとき、最初に塗り替えられる5つの画素の順序として正しいものを [ a ] より選べ。 (2) 最外周の配列要素に値0を設定する目的として適切なものを [ b ] より選べ。 (3) 一般に m×n 画素からなる表示領域において、最外周に値を設定する要素数を表す式を [ c ] より選べ。 (4) 画素の色として 0〜255 の値がすべて使われる可能性がある場合、行番号15の「Wall ← 0」を変更する記述として適切なものを [ d ] より選べ。 (5) 行番号12〜14の「CC == NC のとき Return」を省略した場合、1画素からなる領域に対して同じ色で塗り替えようとしたときの動作 [ e ]、および2画素からなる領域に対して同じ色で塗り替えようとしたときの動作 [ f ] を選べ。
- a ア
- 開始画素(5,3)から左下方向へ一直線に塗り進める順序
- a イ
- 1:(5,3), 2:(4,3), 3:(5,2), 4:(4,2), 5:(6,2) の順序
- a ウ
- 開始画素(5,3)から下方向を優先して塗り進める順序
- a エ
- 上方向へ優先して一直線に塗り進める順序
- b ア
- これらの要素が参照されることはないが、添字から表示領域内かどうかが分かる
- b イ
- これらの要素も色NCでの塗替えの対象とすることで、処理を簡素化できる
- b ウ
- 配列Imageの各添字の範囲チェックを省略できる
- b エ
- 配列VPosとHPosの各添字の範囲チェックを省略できる
- c ア
- 2(m + 1)(n + 1)
- c イ
- 2(m + n)
- c ウ
- 2(m + n + 2)
- c エ
- 2(m + n - 2)
- d ア
- Wall ← CC
- d イ
- Wall ← NC
- d ウ
- Wall ← 256 - CC
- d エ
- Wall ← 255 - NC
- e, f ア
- 仕様どおりに同じ色で塗り替えて正しく終了する。
- e, f イ
- 塗替えは一度も実行せずに終了する。
- e, f ウ
- 塗り替えるべき領域に含まれない周辺の画素まで塗り替えて終了する。
- e, f エ
- 変数Moreの値が増加していき配列の添字の上限を超える。
- e, f オ
- 変数Moreの値は一定値以下であるが処理が無限にループする。
解答・解説を表示
解答
a: イ, b: ウ, c: イ, d: イ, e: ア, f: オ
解説
まず要点:指定した画素と同じ色のつながった領域を塗り替えるとき、境界の判定を簡単にするために外周へ壁(番兵)を置きます。探索した印として色を書き換えるので、塗る前と後の色が同じだと終わらない場合があり、最初に同じ色なら何もせず戻る処理が欠かせません。
解き方
- CheckAndStack副プログラムの色判定・塗替え・スタックへ積む順(上、左、下、右)と、後入れ先出しでの取り出しを順に追います。
- 外周ループ(V:1〜m、H:1〜n)の回数から、壁として設定するセルの総数を計算します。
- 同じ色で塗るときの例外について、1画素の領域と2画素以上の領域でのMoreの変化と終了条件を調べます。
小問ごとの答え
- 小問 a:イ
- スタック(LIFO)動作を追跡すると、(5,3)塗替え後、上(4,3)と左(5,2)がスタックに積まれ、後から積まれた左(5,2)から上(4,2)と下(6,2)が塗られます。
- 小問 b:ウ
- 最外周に領域内の色(1〜3)と異なる値0(番兵)を配置することで、探索時の添字が領域外(1〜8の範囲外)か判定する処理を省略できます。
- 小問 c:イ
- プログラムのループでは行16〜19で左右の列に2m個、行20〜23で上下の行に2n個設定するため、合計要素数は 2m + 2n = 2(m + n) となります。
- 小問 d:イ
- CC == NC の除外処理を通過した後は CC ≠ NC が保証されるため、WallにNCを設定すれば確実にCCと異なる色になり壁として機能します。
- 小問 e:ア
- 1画素のみの場合、開始画素を塗り替えた後の隣接4方向は全て別色であるためスタックに積まれず、More=0となって正しく1回で終了します。
- 小問 f:オ
- 2画素の場合、互いに色がCCのままであると判定されてスタックへの出し入れを交互に無限に繰り返しますが、Moreは高々1〜2のまま増加しません。
覚えるポイント
- 境界チェックの省略手法としての「番兵(センチネル)」の活用
- 再帰やスタックを用いた探索における「訪問済み(更新済み)フラグ」と無限ループの防止
間違えやすいところ
- CheckAndStackの呼び出し順(上→左→下→右)と、スタックから取り出す順(後入れ先出し)を混同するミスです。
- 四隅を含む外周の数(2m+2n+4)と、実際に設定する数2(m+n)を取り違えるミスです。
出題の前提:平成21年度春期 基本情報技術者試験 午後 問8
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.29 ↗(www.ipa.go.jp) / 公式問題冊子 p.30 ↗(www.ipa.go.jp) / 公式問題冊子 p.31 ↗(www.ipa.go.jp) / 公式問題冊子 p.32 ↗(www.ipa.go.jp) / 公式問題冊子 p.33 ↗(www.ipa.go.jp)
相対パスから絶対パスへの変換プログラム
ソフトウェア開発 · C言語 / ポインタ演算 / パス文字列解析 / 文字列操作関数
階層構造をもつファイルシステムにおいて、与えられた相対パスまたは絶対パスを基準となるカレントディレクトリの絶対パス(base)に基づいて正規の絶対パス(result)に変換するC言語プログラムに関する問題である。プログラム中の空欄 a〜d、および表2の引数列に対する実行結果を表す空欄 e〜g に当てはまる適切な語句を選択せよ。
- 設問1 a, b ア
- strcpy(base, path)
- 設問1 a, b イ
- strcpy(base, result)
- 設問1 a, b ウ
- strcpy(path, base)
- 設問1 a, b エ
- strcpy(path, result)
- 設問1 a, b オ
- strcpy(result, base)
- 設問1 a, b カ
- strcpy(result, path)
- 設問1 c ア
- bp - base
- 設問1 c イ
- bp - path
- 設問1 c ウ
- pp - base
- 設問1 c エ
- pp - path
- 設問1 d ア
- base + length
- 設問1 d イ
- bp + length
- 設問1 d ウ
- path + length
- 設問1 d エ
- pp + length
- 設問1 d オ
- result + length
- 設問2 e ア
- ../d/
- 設問2 e イ
- ../../../d/
- 設問2 e ウ
- /
- 設問2 e エ
- /../d/
- 設問2 e オ
- /d/
- 設問2 e カ
- d/
- 設問2 f, g ア
- /a/b/c/d
- 設問2 f, g イ
- /a/b/c/d/
- 設問2 f, g ウ
- /a/b/cd
- 設問2 f, g エ
- /a/b/cd/
- 設問2 f, g オ
- d
- 設問2 f, g カ
- d/
解答・解説を表示
解答
設問1 a: カ, 設問1 b: オ, 設問1 c: ア, 設問1 d: オ, 設問2 e: オ, 設問2 f: イ, 設問2 g: ア
解説
まず要点:C言語の文字列は終端文字'\0'で終わりを表し、ポインタを使うと文字の位置や長さを計算できる。標準ライブラリ関数strcpy(dest, src)は、2番目の文字列を1番目の領域へ複写する。同じ配列の中を指す2つのポインタを引くと、その間にある文字数を求められる。
解き方
- 関数の仕様を読み、pathが絶対パスの場合とカレントディレクトリの場合の早期終了処理、およびstrcpyの引数の順序を確認する。
- ポインタbpがbase内をたどる動きから、ポインタの差bp - baseで共通部分の長さlengthを求める式を導く。
- 共通部分を複写した後、result配列へ続けて書き込む位置がresult + lengthであることを特定する。
- 表2の引数の組をプログラムの流れに沿って追い、末尾の'/'の有無や「../」による階層の遡りを反映した最終文字列を求める。
小問ごとの答え
- 小問 設問1 a:カ
- 引数pathの先頭文字が'/'の場合、絶対パス指定であるため、関数の仕様に従いbaseに関係なくpath文字列をresultにそのまま複写して終了します。したがってstrcpy(result, path)が適切です。
- 小問 設問1 b:オ
- 引数pathがカレントディレクトリ("."または"./")の場合、基準となるカレントディレクトリの絶対パスbaseをそのままresultに複写して終了します。したがってstrcpy(result, base)が適切です。
- 小問 設問1 c:ア
- base文字列の先頭アドレスbaseから、相対パスの".."によって遡った最終位置ポインタbpまでの文字数を計算するため、ポインタ同士の差である bp - base をlengthに設定します。
- 小問 設問1 d:オ
- 共通部分としてresultの先頭からlength文字分複写した後、末尾に区切り文字'/'を付加して残りのpathを連結するため、ポインタrpを複写先末尾位置 result + length に合わせます。
- 小問 設問2 e:オ
- base="/a/b/c/"に対してpath="../../../d/"が与えられた場合、3組の"../"によってbaseの階層がルートディレクトリ(文字数0の位置)まで遡られ、そこに"/d/"が付加されるため、結果は"/d/"となります。
- 小問 設問2 f:イ
- base="/a/b/c"でpath="d/"の場合、pathの先頭に'.'がないためbaseは削られず全体が保持され、区切り文字'/'を介して"d/"が連結されるため、結果は"/a/b/c/d/"となります。
- 小問 設問2 g:ア
- base="/a/b/c/"でpath="d"の場合、base末尾の'/'はポインタbp初期化時に除外されて"/a/b/c"となり、区切り文字'/'を付加した後に"d"が連結されるため、結果は"/a/b/c/d"となります。
覚えるポイント
- strcpyの引数は(複写先, 複写元)の順序であること
- 同一配列内のポインタ減算により要素間の距離が得られること
間違えやすいところ
- strcpy関数の第1引数と第2引数を取り違えて逆にしてしまう間違い。
- 相対パスの末尾に'/'があるかどうかが結果にそのまま反映される仕様を見落とす間違い。
出題の前提:平成21年度春期基本情報技術者試験午後問9の仕様・プログラムに基づく
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.34 ↗(www.ipa.go.jp) / 公式問題冊子 p.35 ↗(www.ipa.go.jp) / 公式問題冊子 p.36 ↗(www.ipa.go.jp) / 公式問題冊子 p.37 ↗(www.ipa.go.jp) / 公式問題冊子 p.38 ↗(www.ipa.go.jp)
COBOLによる売上分析表の集計・印刷プログラム
ソフトウェア開発 · COBOL / 整列(SORT文) / コントロールブレーク処理 / OCCURS句による配列定義
売上ファイルを読み込み、指定された集計キー(販売店コード等)で集計を行って売上分析表を印刷するCOBOLプログラムに関する問題である。プログラム中の空欄 a〜e、および集計キーを可変にする拡張処置の空欄 f, g に当てはまる適切な語句を選択せよ。
- 設問1 a, b ア
- ASCENDING KEY SORT-CD
- 設問1 a, b イ
- ASCENDING KEY SORT-SALES
- 設問1 a, b ウ
- DESCENDING KEY SORT-SALES
- 設問1 a, b エ
- DESCENDING KEY TEMP-CD
- 設問1 c〜e ア
- ADD TEMP-SALES TO GROSS-SUM
- 設問1 c〜e イ
- ADD TEMP-SALES TO INTERIM-SUM
- 設問1 c〜e ウ
- ADD TEMP-SALES TO SORT-SALES
- 設問1 c〜e エ
- MOVE TEMP-SALES TO GROSS-SUM
- 設問1 c〜e オ
- MOVE TEMP-SALES TO INTERIM-SUM
- 設問1 c〜e カ
- MOVE TEMP-SALES TO SORT-SALES
- 設問2 f ア
- S-CD PIC X(10)
- 設問2 f イ
- S-CD PIC X(10) OCCURS 3
- 設問2 f ウ
- S-CD PIC X(10) OCCURS 3 INDEXED BY SUM-CD
- 設問2 f エ
- S-CD PIC X(20)
- 設問2 f オ
- S-CD PIC X(30)
- 設問2 g ア
- 行番号50と51の間
- 設問2 g イ
- 行番号51と52の間
- 設問2 g ウ
- 行番号66と67の間
- 設問2 g エ
- 行番号78と79の間
解答・解説を表示
解答
設問1 a: ア, 設問1 b: ウ, 設問1 c: カ, 設問1 d: ウ, 設問1 e: ア, 設問2 f: イ, 設問2 g: イ
解説
まず要点:COBOLのSORT文は、指定したキーでレコードを並べ替え、集計単位ごとに小計を求めるときに使う。INPUT PROCEDUREでレコードを1件ずつRELEASEし、ASCENDING KEYやDESCENDING KEYで並び順を決める。キーが変わったことを検知するコントロールブレーク処理で、グループごとの小計を求める。OCCURS句で同じ項目を繰り返し定義すると、添字で項目を切り替えられる。
解き方
- 第1と第2の並べ替えの目的(集計用のキー昇順、帳票出力用の金額降順)を理解し、SORT文のキー指定を決める。
- SORT-2-INPUTのコントロールブレーク処理を追い、キー切り替え時の初期化、キー継続時の加算、全件共通の総合計加算の命令をそれぞれ特定する。
- 設問2のレコード構造を分析し、10文字×3個の繰り返し項目としてS-CDをOCCURS 3で定義する。
- 集計キーの値を整列用レコードに反映させる適切なタイミング(転記直後かつ引渡し直前)を行番号から特定する。
小問ごとの答え
- 小問 設問1 a:ア
- 第1のSORT処理では、後続のキーブレーク集計処理に備えて販売店コードごとにまとめる必要があるため、昇順キーとして ASCENDING KEY SORT-CD を指定します。
- 小問 設問1 b:ウ
- 問題文の仕様「集計された売上金額の多い順に整列し、印刷する」に従い、第2のSORT処理では売上金額の降順キーとして DESCENDING KEY SORT-SALES を指定します。
- 小問 設問1 c:カ
- キーブレーク発生時(初回またはキー値の変化時)には、新しいグループの売上金額の集計を開始するため、MOVE TEMP-SALES TO SORT-SALES によって最初のレコードの売上金額を代入して初期化します。
- 小問 設問1 d:ウ
- 同一キーが継続している間はグループの売上金額を加算していくため、ADD TEMP-SALES TO SORT-SALES を実行します。
- 小問 設問1 e:ア
- キーの一致不一致にかかわらず、読み込んだすべてのレコードの売上金額を全体の総合計に累積する必要があるため、ADD TEMP-SALES TO GROSS-SUM を実行します。
- 小問 設問2 f:イ
- 販売店コード・商品コード・顧客コードはいずれも各10文字で連続して配置されているため、添字SUM-CD(1〜3)で参照できるように S-CD PIC X(10) OCCURS 3 と定義します。SUM-CDは通常の数値データ項目であるためINDEXED BY指定は不要です。
- 小問 設問2 g:イ
- SORT-1-INPUTにおいて、SALES-R全体をSORT-Rへ転記(行51)した後、整列キーSORT-CDにパラメータに応じたコードをMOVE S-CD(SUM-CD) TO SORT-CDで上書きしてからRELEASE SORT-R(行52)を呼ぶ必要があるため、行番号51と52の間に追加します。
覚えるポイント
- コントロールブレークではキー切り替え時の小計退避・初期化と継続時の加算を明確に区別すること
- COBOLのOCCURS句は表(配列)構造を定義し添字参照を可能にすること
間違えやすいところ
- 総合計GROSS-SUMへの加算をIF文の中に書いてしまい、一部しか累積されない間違い。
- 指標名(INDEXED BY)と通常のデータ項目による添字付けを混同する間違い。
出題の前提:平成21年度春期基本情報技術者試験午後問10の仕様・プログラムに基づく
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.39 ↗(www.ipa.go.jp) / 公式問題冊子 p.40 ↗(www.ipa.go.jp) / 公式問題冊子 p.41 ↗(www.ipa.go.jp) / 公式問題冊子 p.42 ↗(www.ipa.go.jp) / 公式問題冊子 p.43 ↗(www.ipa.go.jp)
ギャップバッファを利用した簡易テキストエディタの実装
ソフトウェア開発 · データ構造 / Java / ギャップバッファ / テキストエディタ
テキストエディタにおいて編集箇所の文字列変更を効率化するギャップバッファ構造を実装したJavaプログラムに関する次の記述を読み、プログラム中の空欄 [ a ] ~ [ f ] に当てはまる最も適切なものを各解答群から選べ。
- a-ア
- gapSize--
- a-イ
- gapSize++
- a-ウ
- gapSize - 1
- a-エ
- gapSize + 1
- b-ア
- buffer.length
- b-イ
- gapOffset
- b-ウ
- gapSize
- b-エ
- length()
- c-ア
- buffer.length
- c-イ
- buffer.length - gapOffset
- c-ウ
- buffer.length - gapSize
- c-エ
- buffer.length - INITIAL_GAP_SIZE
- d-ア
- CharReader
- d-イ
- Display
- d-ウ
- Editor
- d-エ
- GapBuffer
- d-オ
- Object
- d-カ
- StringBuffer
- e-ア
- --cursor
- e-イ
- ++cursor
- e-ウ
- cursor
- e-エ
- cursor--
- e-オ
- cursor++
- f-ア
- --cursor
- f-イ
- ++cursor
- f-ウ
- cursor
- f-エ
- cursor--
- f-オ
- cursor++
解答・解説を表示
解答
a: ア, b: ウ, c: ウ, d: エ, e: ウ, f: オ
解説
まず要点:ギャップバッファは、編集する位置に空き領域(ギャップ)を用意して、文字の挿入や削除を速くするデータ構造。空きがあるので、挿入や削除のたびに配列全体をずらす必要がなくなる。外から見た文字の位置と、配列上の実際の位置は、ギャップの長さで調整する。
解き方
- GapBufferの内部変数gapOffset(開始位置)とgapSize(空き長)の関係から、挿入・削除でのサイズの増減と物理的な添字の変換式を導く。
- Editorクラスのカーソル管理とCharReaderの仕様を追い、文字の削除時・挿入時にcursorをどう渡し、どう増減するかを判断する。
小問ごとの答え
- 小問 a:ア
- insertメソッドで1文字を挿入するとギャップの空き領域が1文字分減少するため、gapSizeをデクリメントする gapSize-- が適切です。
- 小問 b:ウ
- 仮想的なoffsetがギャップ先頭gapOffset以降にある場合、物理配列上ではギャップの大きさgapSize分だけ後ろにずれているため、offsetにgapSizeを加算します。
- 小問 c:ウ
- テキスト全体の文字数は、物理バッファ全体の長さbuffer.lengthから未割当の空き領域gapSizeを差し引いた差分になります。
- 小問 d:エ
- Editorクラスのコンストラクタで new GapBuffer(text) により生成したオブジェクトを代入するフィールドであるため、型はGapBufferです。
- 小問 e:ウ
- DELETE操作ではカーソルの直後にある文字を削除するため、削除対象のオフセット値として現在のcursorをそのまま指定します。
- 小問 f:オ
- 通常文字の入力では、現在のカーソル位置に文字を挿入した後にカーソルを1文字進める必要があるため、評価後にインクリメントされる後置インクリメント cursor++ を指定します。
覚えるポイント
- ギャップバッファでは仮想インデックスにギャップサイズを加算して物理位置を算出する。
間違えやすいところ
- 文字を挿入した後にカーソルを1つ進める処理で、後置インクリメントでなくそのままcursorを渡してしまう間違い。
出題の前提:平成21年度春期 基本情報技術者試験 午後 問11
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.44 ↗(www.ipa.go.jp) / 公式問題冊子 p.45 ↗(www.ipa.go.jp) / 公式問題冊子 p.46 ↗(www.ipa.go.jp) / 公式問題冊子 p.47 ↗(www.ipa.go.jp) / 公式問題冊子 p.48 ↗(www.ipa.go.jp) / 公式問題冊子 p.49 ↗(www.ipa.go.jp)
CASL IIによる32ビット乗算副プログラムの実装
ソフトウェア開発 · アセンブラ / CASL II / COMET II / 多倍長計算 / 乗算アルゴリズム
32ビットの符号なし整数乗算を行うアセンブラプログラム(副プログラムMULSおよびMUL)に関する次の記述を読み、設問1・設問2の空欄 [ a ] ~ [ e ] に当てはまる最も適切なものを各解答群から選べ。
- a-ア
- JMI ADD32
- a-イ
- JMI LP
- a-ウ
- JOV ADD32
- a-エ
- JOV LP
- a-オ
- JPL ADD32
- a-カ
- JPL LP
- b-ア
- JMI ADJ1
- b-イ
- JMI ADJ2
- b-ウ
- JOV ADJ1
- b-エ
- JOV ADJ2
- b-オ
- JPL ADJ1
- b-カ
- JPL ADJ2
- c-ア
- JNZ LP
- c-イ
- JPL LP
- c-ウ
- JZE LP
- c-エ
- SLL GR5,1
- c-オ
- SRA GR5,1
- c-カ
- SRL GR5,1
- d-ア
- LD GR1,0,GR1
- d-イ
- LD GR1,0,GR2
- d-ウ
- LD GR1,1,GR1
- d-エ
- LD GR2,0,GR1
- d-オ
- LD GR2,0,GR2
- d-カ
- LD GR2,1,GR1
- e-ア
- LD GR6,0,GR1
- e-イ
- LD GR6,0,GR2
- e-ウ
- LD GR6,0,GR3
- e-エ
- LD GR6,1,GR1
- e-オ
- LD GR6,1,GR2
- e-カ
- LD GR6,1,GR3
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: ウ, 設問1 c: エ, 設問2 d: オ, 設問2 e: カ
解説
まず要点:COMET IIで32ビットの整数を掛けるときは、ビットをずらしながら足す処理を繰り返す。論理右シフトや論理左シフトで押し出されたビット、論理加算(ADDL)の桁上げはOF(あふれを示すフラグ)に入る。そのためJOV命令で桁上げの分岐を制御する。
解き方
- プログラム1で、SRLで乗数の各ビットを走査し、OF=1の判定(JOV)で積への加算と下位語からの桁上げ判定を行う流れを確認する。
- 被乗数の32ビットシフトで、下位語をSLLしたときのOFを上位語の最下位ビットにORでつなぐ処理から、入れる命令を特定する。
- プログラム2で32ビット×32ビットの乗算を展開し、被乗数×乗数下位語と被乗数×乗数上位語の結果を組み合わせるレジスタの退避とロードを追う。
小問ごとの答え
- 小問 設問1 a:ウ
- 乗数GR2をSRLで右シフトした際、最下位ビットがOF(オーバーフローフラグ)に入ります。ビットが1のときに加算を行うため、JOV ADD32 により分岐します。
- 小問 設問1 b:ウ
- 被乗数と積の下位語同士を加算(ADDL GR7, GR5)した際に桁上げが生じるとOFが1に設定されるため、JOV ADJ1 で上位語の桁上げ処理へ分岐します。
- 小問 設問1 c:エ
- 32ビットの被乗数を左シフトするため、上位語(GR4)に続いて下位語を SLL GR5,1 で左シフトし、あふれた最上位ビット(OF)を次の命令群で上位語へ繰り込みます。
- 小問 設問2 d:オ
- 乗数の上位語を取り出してGR2に設定するため、GR2が指す乗数領域のオフセット0からロードする LD GR2,0,GR2 が正解です。
- 小問 設問2 e:カ
- 作業領域SV(GR3が指す領域)に格納された積(B)の下位語(オフセット1)を作業レジスタGR6に取り出すため、LD GR6,1,GR3 を実行します。
覚えるポイント
- COMET IIでは、論理シフトで押し出されたビットや論理加算の桁上げはOF(オーバーフローフラグ)に入る。
間違えやすいところ
- シフト後のビットのチェックに、符号フラグ(SF)を見るJMIやJPLを使ってしまう間違い。
出題の前提:平成21年度春期 基本情報技術者試験 午後 問12
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.50 ↗(www.ipa.go.jp) / 公式問題冊子 p.51 ↗(www.ipa.go.jp) / 公式問題冊子 p.52 ↗(www.ipa.go.jp) / 公式問題冊子 p.53 ↗(www.ipa.go.jp)
表計算ソフトを用いた月別生産計画の作成
ソフトウェア開発 · 表計算 / 生産計画 / 照合合計 / 絶対参照・相対参照 / 条件判定
E社における商品M1〜M3の月別販売計画(4〜9月)を記録したワークシート“販売計画”を基に、各商品の月別生産計画(3〜8月)を計算するワークシート“生産計画”を作成する。与えられた業務ルールおよび計算仕様に基づき、ワークシート“生産計画”の説明中の空欄[ a ]〜[ g ]に当てはまる適切な式・条件を選択群から選べ。
- a-ア
- B2〜B10
- a-イ
- C2〜C10
- a-ウ
- H2〜H10
- a-エ
- $B$2〜$B$10
- a-オ
- $C$2〜$C$10
- a-カ
- $H$2〜$H$10
- b-ア
- B2〜B10
- b-イ
- C2〜C10
- b-ウ
- H2〜H10
- b-エ
- $B$2〜$B$10
- b-オ
- $C$2〜$C$10
- b-カ
- $H$2〜$H$10
- c-ア
- 切上げ(E2) * 0.2
- c-イ
- 切上げ(E2) * 1.2
- c-ウ
- 切上げ(E2 * 0.2)
- c-エ
- 切上げ(E2 * 1.2)
- d-ア
- D3 + D4 - D5
- d-イ
- D3 + D4 - E2
- d-ウ
- D3 + D5 - D4
- d-エ
- D3 + D5 - E2
- d-オ
- D4 + D5 - D3
- d-カ
- D4 + D5 - E2
- e-ア
- D3 ≦ D4
- e-イ
- D3 ≧ D4
- e-ウ
- D3 < 0
- e-エ
- D3 ≧ 0
- e-オ
- D4 < 0
- e-カ
- D4 ≧ 0
- f-ア
- I5 + J6
- f-イ
- I5 + J6 - I7
- f-ウ
- I7 + J6
- f-エ
- I7 + J6 - I5
- g-ア
- I5 + J6 ≦ $B2
- g-イ
- I5 + J6 > $B2
- g-ウ
- I5 ≦ $B2
- g-エ
- I5 > $B2
- g-オ
- J6 ≦ $B2
- g-カ
- J6 > $B2
解答・解説を表示
解答
a: エ, b: イ, c: エ, d: カ, e: ア, f: イ, g: ア
解説
まず要点:表計算では、複写しても動かしたくない参照は絶対参照($付き)にし、動かしたい参照は相対参照にする。業務のルール(在庫・繰越・繰上)をIF関数や照合合計関数で正しく式にする。複写する向きによって、固定すべき範囲と動かす範囲を使い分ける。
解き方
- 販売計画シートから月別計画量を照合合計関数で集計するとき、固定する商品名の範囲は絶対参照、月に連動させる数量の範囲は相対参照にする(a, b)。
- 必要在庫量・繰越在庫量・必要生産量・繰上生産量・計画生産量の定義を各月のセル位置に置き換え、それぞれの式を導く(c, d, e, f, g)。
小問ごとの答え
- 小問 a:エ
- 照合合計関数の照合範囲として販売計画シートの商品名列を指定する。右方向のセルF2〜J2へ複写しても参照列が移動しないよう、列・行ともに絶対参照である$B$2〜$B$10を指定する必要がある。
- 小問 b:イ
- セルE2における対応範囲は4月計画量の列であるC列(C2〜C10)である。右方向のセルF2〜J2へ複写した際に5月(D列)、6月(E列)と自動追従させるため、相対参照のC2〜C10を指定する。
- 小問 c:エ
- 3月の必要在庫量は翌月(4月)の販売計画量E2の120%であり、小数点以下切上げとなるため、式は切上げ(E2 * 1.2)となる。
- 小問 d:カ
- 繰越在庫量は「前月の繰越在庫量+必要生産量-当月の販売計画量」で計算される。4月の場合は前月3月の繰越在庫量D4、必要生産量D5、当月4月の販売計画量E2を用いてD4 + D5 - E2となる。
- 小問 e:ア
- 繰越在庫量が必要在庫量以上ある場合は生産不要で0となる。IF関数の真のときの戻り値が0なので、条件式は繰越在庫量D4が必要在庫量D3以上、すなわちD3 ≦ D4となる。
- 小問 f:イ
- 繰上生産量は「当月の必要生産量+翌月の繰上生産量-当月の計画生産量」である。8月(セルI6)の場合はI5 + J6 - I7となる。
- 小問 g:ア
- 当月の必要生産量と翌月の繰上生産量の合計(I5 + J6)が最大月産量($B2)以下であればその合計を計画生産量とし、超えれば最大月産量とするため、真のときにI5 + J6を返す条件式はI5 + J6 ≦ $B2となる。
覚えるポイント
- 照合合計関数:照合範囲は絶対参照、対応範囲は複写方向に応じて相対参照とする。
- 表計算のセル複写:行方向に固定するなら行番号に$、列方向に固定するなら列文字に$を付ける。
間違えやすいところ
- 照合合計の対応範囲(b)で絶対参照を付けてしまい、複写先で次月の計画量が集計されなくなる間違い。
- IF関数の第2引数が0であることから、条件式(e)の不等号の向きを逆にしてしまう間違い。
出題の前提:平成21年度春期基本情報技術者試験 午後問題 問13
出典:IPA『2009年度 春期 午後』
公式問題冊子 p.54 ↗(www.ipa.go.jp) / 公式問題冊子 p.55 ↗(www.ipa.go.jp) / 公式問題冊子 p.56 ↗(www.ipa.go.jp) / 公式問題冊子 p.57 ↗(www.ipa.go.jp)
2009年度 春期 午後
参照した公式資料
IPAが公開した2009年度 春期 午後の問題・解答資料です。

