旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2015年度 秋期 午後の概要
ログ管理システムの設計とセキュリティ要件
情報セキュリティ · アクセスログ管理 / 時刻同期 / 暗号化 / ディジタル署名 / 公開鍵暗号 / アクセス制御
中堅製造業のB社における、4つの業務システム(勤務管理、販売管理、生産管理、品質管理)からログを収集・一元管理するログ管理システムの設計に関する記述を読み、設問1〜5に答えよ。
- 設問1 a群 ア
- 各業務システムの稼働状況を監視する
- 設問1 a群 イ
- 各業務システムの時刻を同期させる
- 設問1 a群 ウ
- 検知処理のログ管理システムへのアクセスを監視する
- 設問1 a群 エ
- ログ集積ファイルへのアクセスを監視する
- 設問1 a群 オ
- ログ集積ファイルを圧縮する
- 設問1 b, c群 ア
- 同一内容の複数個のログ集積ファイルを出力する
- 設問1 b, c群 イ
- ログ集積ファイルに電子署名を付加する
- 設問1 b, c群 ウ
- ログ集積ファイルの出力に当たっては、推測しにくい名称を付ける
- 設問1 b, c群 エ
- ログ集積ファイルのログ中の個人情報を削除する
- 設問1 b, c群 オ
- ログ集積ファイルを圧縮する
- 設問1 b, c群 カ
- ログ集積ファイルを暗号化する
- 設問2 ア
- 業務ID,社員ID
- 設問2 イ
- 業務システムのサーバのIPアドレス,業務ID
- 設問2 ウ
- 業務システムのサーバのIPアドレス,業務ID,社員ID
- 設問2 エ
- 端末のIPアドレス,業務ID,社員ID
- 設問2 オ
- 端末のIPアドレス,社員ID
- 設問3 ア
- d1: 可、d2: RE
- 設問3 イ
- d1: 可、d2: W
- 設問3 ウ
- d1: 不可、d2: E
- 設問3 エ
- d1: 不可、d2: RE
- 設問3 オ
- d1: 不可、d2: RW
- 設問3 カ
- d1: 不可、d2: W
- 設問4 ア
- 1
- 設問4 イ
- 4
- 設問4 ウ
- 8
- 設問4 エ
- 12
- 設問5 ア
- 1日中“参照”のログだけが書き込まれたとき
- 設問5 イ
- 1日の間に“更新”のログが1回以上、書き込まれたとき
- 設問5 ウ
- ある業務システムの連続した“更新”のログの間に、別の業務システムのログが書き込まれたとき
- 設問5 エ
- 同じ業務システムの“参照”と“更新”のログが連続して書き込まれたとき
- 設問5 オ
- 業務システムからダウンロードされたデータ量が1日で5Mバイトを超えたとき
- 設問5 カ
- 特定の業務システムの“参照”のログが15分間、書き込まれていないとき
解答・解説を表示
解答
設問1 a: イ, b: イ, c: カ (b, c 順不同); 設問2: エ; 設問3: イ; 設問4: ア; 設問5: ウ, オ (順不同)
解説
まず要点:複数の機器のログを1か所で時系列に突き合わせるには、時刻をそろえることと、改ざん・漏えいを防ぐ仕組みが必要である。各機器の時計がずれていると、どの操作が先に起きたのか分からなくなる。だから時刻を合わせる仕組み(NTPなど)が欠かせない。さらに電子署名(改ざんを見つける仕組み)や暗号化(中身を読めなくする仕組み)で、完全性と機密性を守る。
解き方
- ログを追うのに必要な情報(いつ・誰が・どこから・何を)を満たす属性を洗い出す。
- 外部に出すファイルの保護(改ざん防止は電子署名、漏えい防止は暗号化)とアクセス権の表から空欄を決める。
- 公開鍵暗号では受信側の公開鍵を送る側全員が使うことから鍵の数を数え、社内規程と照らして検知条件を選ぶ。
小問ごとの答え
- 小問 設問1 a:イ
- 複数のサーバからログを集積して「いつ」操作されたかを時系列で正確に追跡するためには、各業務システム間での時刻同期が不可欠である。
- 小問 設問1 b:イ
- 外部出力ファイルに対する「改ざん防止」対策として、ハッシュ値と秘密鍵による電子署名の付加が適切である。
- 小問 設問1 c:カ
- 外部出力ファイルに対する「漏えい防止」対策として、第三者が内容を閲覧できないように暗号化することが適切である。
- 小問 設問2:エ
- 「いつ、誰が、どの端末からどの業務システムをどのように操作したか」を追跡するため、日時・操作種別のほかに端末のIPアドレス(どの端末から)、社員ID(誰が)、業務ID(どの業務システムを)が必要である。
- 小問 設問3:イ
- 要件(2)より書き込み処理はログインを必要とするためd1は「可」となり、検知処理の役割はログファイルへの書き込みのみであるためd2は「W」となる。
- 小問 設問4:ア
- 各業務システムがログ管理サーバへ送信する通信を公開鍵暗号で暗号化する場合、受信者であるログ管理サーバの公開鍵が1個あれば全送信元で共用できる。
- 小問 設問5:ウ, オ
- 利用規程「一人の社員が同時に複数の業務システムを使わないこと」に違反するウと、「1日に5Mバイトを超えてダウンロードしないこと」に違反するオが早期検知すべき不正条件である。
覚えるポイント
- 公開鍵暗号で通信を暗号化する際は、受信者の公開鍵を用いて暗号化を行う。
間違えやすいところ
- 相手ごとに公開鍵が必要だと思い込み、送信元の台数だけ鍵が必要だと数えてしまう。
出題の前提:平成27年度秋期基本情報技術者試験午後問1の出題条件に基づく。
出典:IPA『2015年度 秋期 午後』
公式問題冊子 p.5 ↗(www.ipa.go.jp) / 公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp) / 公式問題冊子 p.8 ↗(www.ipa.go.jp) / 公式問題冊子 p.9 ↗(www.ipa.go.jp) / 公式解答例 p.1 ↗(www.ipa.go.jp) / 公式採点講評 p.1 ↗(www.ipa.go.jp)
32ビット単精度浮動小数点数の表現と演算
ハードウェア · 浮動小数点数 / 単精度表現 / 指数部バイアス / 仮数部 / 浮動小数点加算
32ビット単精度浮動小数点数形式(符号部1ビット、指数部8ビット[バイアス127]、仮数部23ビット[ケタ落ち正規化、整数部1省略])に関する記述を読み、設問1〜4に答えよ。
- 設問1 ア
- (00)16
- 設問1 イ
- (7E)16
- 設問1 ウ
- (7F)16
- 設問1 エ
- (FE)16
- 設問1 オ
- (FF)16
- 設問2 ア
- 0.125
- 設問2 イ
- 0.25
- 設問2 ウ
- 0.375
- 設問2 エ
- 0.5
- 設問2 オ
- 0.75
- 設問2 カ
- 1.5
- 設問3 a群 ア
- 0.001
- 設問3 a群 イ
- 0.01
- 設問3 a群 ウ
- 0.011
- 設問3 a群 エ
- 0.1
- 設問3 a群 オ
- 0.11
- 設問3 a群 カ
- 1.1
- 設問3 b群 ア
- 3
- 設問3 b群 イ
- 4
- 設問3 b群 ウ
- 5
- 設問3 b群 エ
- 6
- 設問3 b群 オ
- 130
- 設問3 b群 カ
- 131
- 設問3 b群 キ
- 132
- 設問4 c群 ア
- 符号0, 指数部00001000, 仮数部1110000...
- 設問4 c群 イ
- 符号0, 指数部00001000, 仮数部1111000...
- 設問4 c群 ウ
- 符号0, 指数部10000111, 仮数部1110000...
- 設問4 c群 エ
- 符号0, 指数部10000111, 仮数部1111000...
- 設問4 c群 オ
- 符号0, 指数部10001000, 仮数部1110000...
- 設問4 c群 カ
- 符号0, 指数部10001000, 仮数部1111000...
解答・解説を表示
解答
設問1: イ; 設問2: オ; 設問3 a: オ, b: イ; 設問4 c: ウ
解説
まず要点:32ビットの浮動小数点数は、符号1ビット・指数部8ビット・仮数部23ビットで実数を表す。指数部には、実際の指数に127(バイアスとよぶ下駄)を足した値を入れる。仮数部は、先頭の「1」を省いて残りだけを格納する。
解き方
- 10進数の小数を2進数の正規化した形 1.M×2^E に直し、指数部 E+127 と仮数部 M を求める。
- 浮動小数点数の足し算では、指数の小さい方を大きい方にそろえてから仮数部を足し、最後に正規化し直す。
小問ごとの答え
- 小問 設問1:イ
- 0.625 = 1.25 × 2^(-1) = (1.01)_2 × 2^(-1) より β = -1。指数部は β + 127 = 126 = (01111110)_2 = (7E)_16 となる。
- 小問 設問2:オ
- 符号0(正)、指数部01111110 (126 = -1 + 127 より β = -1)、仮数部先頭100... (値は 1 + 0.5 = 1.5)。よって 1.5 × 2^(-1) = 0.75 となる。
- 小問 設問3 a:オ
- Bは符号1(負)、指数部10000011 (131 より β = 4)、仮数部100... (値は 1.5)。よって B = -(1.1)_2 × 2^4 = -(0.11)_2 × 2^5 となり、aは0.11である。
- 小問 設問3 b:イ
- 加算結果は ((1.1)_2 - (0.11)_2) × 2^5 = (0.11)_2 × 2^5 = (1.1)_2 × 2^4 と正規化されるため、bは4となる。
- 小問 設問4 c:ウ
- A×10 = (1.1)_2 × 2^8 + (1.1)_2 × 2^6 = (1.1)_2 × 2^8 + (0.011)_2 × 2^8 = (1.111)_2 × 2^8。指数部は 8 + 127 = 135 = (10000111)_2、仮数部は先頭1を除き11100...となる。
覚えるポイント
- 単精度浮動小数点数の指数部は実指数に127(バイアス)を加算して表現する。
間違えやすいところ
- 仮数部の先頭にある整数部の「1」が、格納するときに省かれるのを見落としてしまう。
出題の前提:平成27年度秋期基本情報技術者試験午後問2の出題条件に基づく。
出典:IPA『2015年度 秋期 午後』
公式問題冊子 p.10 ↗(www.ipa.go.jp) / 公式問題冊子 p.11 ↗(www.ipa.go.jp) / 公式問題冊子 p.12 ↗(www.ipa.go.jp) / 公式解答例 p.1 ↗(www.ipa.go.jp) / 公式採点講評 p.1 ↗(www.ipa.go.jp)
電子部品の出荷データを管理する関係データベースの運用
データベース · SQL / 関係データベース / 副問合せ / データベース設計
電子部品を製造販売するC社において、製造装置の設定ミスによる不具合が発生した電子部品のリコール(無償交換・回収及び再出荷)を実施することになった。出荷情報、部品情報、パッケージ情報が関係データベースで管理されている状況下で、リコール対象データの抽出・集計を行うSQL文の穴埋め、および再出荷管理に伴うテーブル設計の変更に関する設問に答えよ。
解答・解説を表示
解答
設問1 a: ウ; 設問2 b: エ; 設問3 c: エ; 設問4 d: イ, e: ア
解説
まず要点:関係データベースでは、期間の範囲指定にBETWEEN、集合のどれかに当てはまるかの判定にANY(IN)、合計の計算にSUMを正しく使う。加えて、1対多の部品のつながり(BOM構造)を副問合せでたどる考え方や、表を作り替えるときの影響、別の表を新しく作ることの長所と短所を判断する力が要る。
解き方
- 設問1では、2015年1月10日〜20日という連続した期間を表す標準的なSQLとしてBETWEEN '20150110' AND '20150120'を選ぶ。
- 設問2では、リコール部品'007551'を含む上位パッケージを副問合せで取り出し、単品の条件とORで結ぶ。
- 設問3では、金額の合計を求める集約関数SUMを出荷表.出荷金額に使う。
- 設問4では、属性を足すべき表(出荷表)を見きわめ、分けた回収表と出荷表を組み合わせて回収分を除いて集計できると導く。
小問ごとの答え
- 小問 設問1 a:ウ
- 出荷日が2015年1月10日から2015年1月20日までという指定範囲(両端を含む)の抽出には、BETWEEN述語を用いて「出荷表.出荷日 BETWEEN '20150110' AND '20150120'」と記述するのが適切です。
- 小問 設問2 b:エ
- リコール対象部品(007551)が単品で出荷された場合だけでなく、それが同梱部品として含まれるパッケージの出荷も対象とします。副問合せで「パッケージ表.同梱部品 = '007551'」を満たすパッケージ表の「部品番号」を取得し、出荷表の部品番号がそのいずれかに一致(= ANY)するか、または単品の'007551'である条件(OR)を指定します。
- 小問 設問3 c:エ
- リコール対象となる電子部品の出荷金額の合計を求めるため、合計値を算出する集約関数である「SUM(出荷表.出荷金額)」を指定します。
- 小問 設問4 d:イ
- 出荷単位で回収日や再出荷番号の情報を追加する場合、1レコードが出荷を表している既存の「出荷表」に項目を追加するのが最も直接的です。
- 小問 設問4 e:ア
- 新たに作成された回収表には回収対象となった出荷番号が記録されているため、出荷金額を持つ「出荷表」と「回収表」を結合・突合することで、回収対象の出荷を除外した金額を集計できます。
覚えるポイント
- BETWEEN A AND B は A以上B以下の範囲検索を行う構文である。
- 列 = ANY (副問合せ) は 列 IN (副問合せ) と同等である。
間違えやすいところ
- 設問1で、2日だけを取り出すINやORを選んでしまう間違い。
- 設問2の副問合せで、「同梱部品」と「部品番号」の対応を逆にしてしまう間違い。
出題の前提:平成27年度秋期基本情報技術者試験午後問3の出題条件および標準SQL規格に基づく。
出典:IPA『2015年度 秋期 午後』
公式問題冊子 p.13 ↗(www.ipa.go.jp) / 公式問題冊子 p.14 ↗(www.ipa.go.jp) / 公式問題冊子 p.15 ↗(www.ipa.go.jp) / 公式問題冊子 p.16 ↗(www.ipa.go.jp)
Webサイトにおけるセッション管理
ネットワーク · セッション管理 / HTTP Cookie / セッションハイジャック / ドメイン属性
ショッピングサイトにおけるセッション管理の仕組み、セッションIDの生成タイミングや推測耐性、送受信方法(Cookie、URLリライティング、hiddenフィールド)の特徴比較、およびCookieのドメイン属性の有効性判定と送信動作に関する設問に答えよ。
解答・解説を表示
解答
設問1 a: エ; 設問2: ウ; 設問3 b: ウ; 設問4 c: ウ, d: ア
解説
まず要点:HTTPは前のやり取りを覚えないので、一連の操作を区別するためにセッション管理を使う。セッションIDは、当てられにくいように十分長いランダムな文字列にする。また、セッション固定化攻撃を防ぐため、ログインに成功したときに作り直す。Cookieのドメイン指定は、送信元より上位の有効な組織ドメインまで設定でき、送信先のホストが指定ドメインの後ろと一致するときだけ送られる。
解き方
- 設問1では、図1の流れから、注文や決済に必要なセッション管理が「ログインに成功したとき」に始まると特定する。
- 設問2では、セッションハイジャックを防ぐ「当てにくさ」の条件から「十分に長いランダムな文字列」を選ぶ。
- 設問3では、URL表示・ブラウザの設定・フォーム限定送信の3つの特徴を、(2)URL埋め込み、(1)クッキー、(3)hiddenにそれぞれ対応づける。
- 設問4(c)では、送信元 www.foo.example.com に対して有効な上位ドメイン(example.com、foo.example.com、www.foo.example.com)の3個を数える。
- 設問4(d)では、持っているクッキーのうち別のサブドメイン www.bar.example.com に合うのは、広く指定したc1だけだと導く。
小問ごとの答え
- 小問 設問1 a:エ
- 本文中および図1より、注文や決済など会員に紐づく一連の処理を安全に管理するため、セッションIDは「ログインに成功したとき」に新しく生成してセッションを開始するのが適切です。
- 小問 設問2:ウ
- セッションIDが第三者に推測されるとセッションハイジャックのリスクが生じるため、規則性がなく第三者が推測不可能な「十分に長いランダムな文字列」を採用する必要があります。
- 小問 設問3 b:ウ
- (A)のアドレスバーのURLにセッションIDが含まれるのはURL埋め込みの(2)、(B)のブラウザ設定(Cookie無効化)により利用できないことがあるのはCookieの(1)、(C)のリンククリックでは送信されない(フォーム送信時のみ送信される)のはhiddenフィールドの(3)であり、組合せは(2), (1), (3)のウです。
- 小問 設問4 c:ウ
- レスポンス送信元ホスト名は www.foo.example.com です。有効な送信先ドメイン指定は、送信元ホスト自身またはその上位ドメイン(comなどのトップレベル/汎用ドメインを除く)であるため、example.com(c1)、foo.example.com(c2)、www.foo.example.com(c3)の3個が管理対象となり、cは3です。
- 小問 設問4 d:ア
- ブラウザに保持された c1, c2, c3 のうち、アクセス先である http://www.bar.example.com/index.html に対して送信されるのは、指定ドメインと等しいかその下位ドメインに合致する c1 (example.com) のみです。
覚えるポイント
- セッションIDはセッション固定化攻撃を防止するためログイン時に再生成(新規発行)する。
- CookieのDomain属性は、送信元ホストと同等かその上位ドメイン(TLD等を除く)に限り設定可能である。
間違えやすいところ
- 設問2で、会員IDに通し番号を付けただけの当てやすい文字列を選んでしまう間違い。
- 設問4で、送信元と関係のない別系統のサブドメインのクッキーまでブラウザが受け入れると勘違いする間違い。
出題の前提:平成27年度秋期基本情報技術者試験午後問4の出題条件およびHTTP/Cookie仕様(RFC 6265準拠)に基づく。
出典:IPA『2015年度 秋期 午後』
公式問題冊子 p.17 ↗(www.ipa.go.jp) / 公式問題冊子 p.18 ↗(www.ipa.go.jp) / 公式問題冊子 p.19 ↗(www.ipa.go.jp) / 公式問題冊子 p.20 ↗(www.ipa.go.jp)
決定表を用いた注文機能の設計
ソフトウェア設計 · 決定表 / デシジョンテーブル / 仕様分析 / テストケース設計
スポーツ用品の小売業者T社のWebサイト注文機能における、注文確定前処理の設計に関する問題である。提示された処理概要(必須入力チェック、希望納期の補正・関連チェック、請求先区分の処理、在庫確認など)に基づき決定表を完成させる設問1と、会員区分および累計購入額に応じた割引サービス決定表から発生し得ない無効な規則の数を求める設問2に解答する。
解答・解説を表示
解答
設問1 a: ウ, b: ア, c: オ, d: キ, e: イ; 設問2: オ
解説
まず要点:決定表(デシジョンテーブル)は、複雑な条件と動作の組み合わせを、漏れや重なりなく整理して見えるようにする設計手法である。条件の全組み合わせを並べた表から、業務ルール上あり得ない条件の重なりなどの無効な規則を見つけて除く。これにより、仕様を正しく整理でき、テストケースも効率よく設計できる。
解き方
- 注文確定前処理の各ルールと決定表の条件部・動作部の対応を調べ、空欄a〜eの条件式と実行の印を特定する。
- 表5の割引サービスから、累計購入額の3条件がたがいに重ならないことを確かめ、表6の全16規則から無効な規則の数を計算する。
小問ごとの答え
- 小問 設問1 a:ウ
- 概要の(2)「希望納期が未入力の場合は、処理日の1週間後の日付を希望納期として設定する」に対応し、表3の動作部で「希望納期に処理日の1週間後の日付を設定する」が実行されるのはaがNのときであるため、aは「希望納期が入力されている」(ウ)となる。
- 小問 設問1 b:ア
- 概要の(3)「希望納期が処理日以前の場合は、項目関連エラーとする」に対応し、表3でaがYかつbがNのときに「項目関連エラーメッセージを表示する」が実行されるため、正常条件であるbは「希望納期>処理日」(ア)となる。
- 小問 設問1 c:オ
- 概要の(4)「請求先区分が”指定する”であって、請求先情報が未入力である場合は項目関連エラー」、(5)「”届け先と同じ”である場合は届け先情報と同じ値を設定」に対応する。表3でcがNのときに「届け先情報と同じ値を設定」が実行されることから、cは「請求先区分が”指定する”である」(オ)となる。
- 小問 設問1 d:キ
- 概要の(4)に基づき、請求先区分が”指定する”(cがY)のときにdがNであれば「項目関連エラーメッセージを表示する」が実行されるため、dは「請求先情報が入力されている」(キ)となる。
- 小問 設問1 e:イ
- 表3の第5列は、希望納期が未入力(aがN)で1週間後が自動設定され、請求先区分が”指定する”(cがY)かつ請求先情報が入力済(dがY)の場合である。エラーは発生しないため項目関連エラーは「-」、請求先情報は入力値を用いるため「-」、在庫取得と表4処理は実行するため「X」となる。したがって上から「-」「-」「X」の並びとなるイが正しい。
- 小問 設問2:オ
- 表6の条件部において、累計購入額に関する3条件(「10万円未満」「10万円以上20万円未満」「20万円以上」)は互いに排他的かつ網羅的であり、どのような場合でも必ずどれか1つのみがY、残りの2つがNとなる。3条件の組合せ2^3=8通りのうち有効な組合せはYが1つだけの3通りのみで、残りの5通りは発生し得ない無効な組合せである。会員区分(無料会員/有料会員)の2通りそれぞれに対して5通りずつ存在するため、削除できる規則は 5×2=10個(オ)となる。
覚えるポイント
- 排他関係にある複数の条件は同時に真(Y)または全て偽(N)になり得ないため、決定表では無効な規則として削除対象となる。
- 決定表の動作部で「X」は実行、「-」は非実行を表し、条件部の論理積(AND)で各規則が評価される。
間違えやすいところ
- 累計購入額の3条件がたがいに重ならないのを見落とし、有効な組み合わせの数や削除する規則数の計算を間違える。
- 決定表で条件が偽(N)のときにする動作と、真(Y)のときにする動作を混同する。
出題の前提:平成27年度秋期基本情報技術者試験午後問題および公式解答例・採点講評
出典:IPA『2015年度 秋期 午後』
公式問題冊子 p.21 ↗(www.ipa.go.jp) / 公式問題冊子 p.22 ↗(www.ipa.go.jp) / 公式問題冊子 p.23 ↗(www.ipa.go.jp) / 公式問題冊子 p.24 ↗(www.ipa.go.jp) / 公式問題冊子 p.25 ↗(www.ipa.go.jp)
プロジェクトの見積り
プロジェクトマネジメント · 工数見積り / 進捗管理 / 生産性指標 / リスク管理
業務システム拡張開発を受託したプロジェクトチーム(5名、40時間/週・人)を題材に、当初見積り規模100kステップからの設計工数算出、第8週末の実績・予測工数に基づく規模・総工数の再見積り(設問1)、計画工数を超過しているメンバの特定(設問2)、および設計変更リスクを考慮した第9週以降の2つの作業分担見直し案の比較評価(設問3)について解答する。
解答・解説を表示
解答
設問1 a: ウ, b: イ, c: イ; 設問2 d: イ; 設問3: ア
解説
まず要点:プロジェクト管理では「工数(人時)=開発規模(kステップ)÷生産性(kステップ/人時)」の関係が成り立つ。進捗管理では、途中の実績と残りの見込みから規模と総工数を見積り直し、メンバーごとの負荷の偏りをとらえて分担を直す。また、後の工程に先に手をつける並行開発では手戻りが増えるので、日程とリスクのバランスをよく考える必要がある。
解き方
- 規模と生産性の基準から当初の設計工数を出し、第8週までの実績と予測の合計から見積り直した規模と設計〜テストの総工数を求める。
- 当初計画の1人あたり工数(400人時)と各メンバーの予測合計を比べて超過者を見つけ、見直し2案のリスク(手戻り)と終了時期を筋道立てて比べる。
小問ごとの答え
- 小問 設問1 a:ウ
- 当初の見積り規模は100kステップであり、表1より設計工程の生産性基準値は0.05kステップ/人時である。したがって設計工程の所要工数は 100 ÷ 0.05 = 2,000人時(ウ)となる。
- 小問 設問1 b:イ
- 第8週末までに5名全員が週40時間×8週=320時間を消費したため、実績工数は 320×5=1,600人時である。表2より第9週以降の予測時間は全体で 200+160+100+20=480人時である。これより設計全体の総工数は 1,600+480=2,080人時となる。設計の生産性基準値0.05kステップ/人時を掛けると、再見積り後の開発規模は 2,080 × 0.05 = 104kステップ(イ)となる。
- 小問 設問1 c:イ
- 再見積り規模104kステップに基づき、プログラミング工数は 104 ÷ 0.1 = 1,040人時、テスト工数は 104 ÷ 0.1 = 1,040人時である。設計工数は2,080人時であるため、設計〜テスト工程の総工数は 2,080 + 1,040 + 1,040 = 4,160人時(イ)となる。
- 小問 設問2 d:イ
- 当初の計画では設計工数2,000人時を5人で均等分担したため、1人あたりの計画値は 2,000 ÷ 5 = 400人時であった。表2より各メンバの設計工数は、Aが320+80=400時間、Bが320+120=440時間、Cが320+40=360時間、Dが320+140=460時間、Eが320+100=420時間である。したがって当初計画の400人時を超えているのは B, D及びEの3人(イ)である。
- 小問 設問3:ア
- 第1案では設計終了者から順次プログラミングに入るが「全員のプログラミング終了日がそろうように分担を割り振る」とし、第2案でも残りの設計分担を再調整して設計終了日を揃えた上でプログラミングを開始し終了日を揃える。いずれの案も5名がフル稼働して設計+プログラミングの総工数3,120人時を消化するため、完了週は 3,120 ÷ (5×40) = 15.6週となり同一になる。したがって「第1案の方が第2案よりも早くなる」とするアの評価は誤りである。
覚えるポイント
- 所要工数(人時)= 開発規模(kステップ)÷ 生産性(kステップ/人時)の計算関係を確実に把握する。
- 前工程の完了を待たずに次工程へ着手する方式は、設計変更が生じた際に大きな手戻り(コスト増)を招くリスクがある。
間違えやすいところ
- 第1案でプログラミングを早く始めても、全員の終了日をそろえる条件のために、最終的な終了時期は第2案と変わらない点を見落とす。
- 第8週末の計画超過者を判断するとき、当初計画した1人あたりの均等分担値(400人時)と比べるのを忘れる。
出題の前提:平成27年度秋期基本情報技術者試験午後問題および公式解答例・採点講評
出典:IPA『2015年度 秋期 午後』
公式問題冊子 p.26 ↗(www.ipa.go.jp) / 公式問題冊子 p.27 ↗(www.ipa.go.jp) / 公式問題冊子 p.28 ↗(www.ipa.go.jp)
新システム稼働による業績改善予測と決定木による期待値計算
経営戦略・企業と法務 · 業績改善予測 / 売上高営業利益率 / 多重円グラフ / パレート図 / 決定木 / 期待値計算
消費財メーカのZ社における新システム稼働(2016年度初日稼働予定)に伴う各事業部(P〜T)の業績改善予測に関する問題である。2015年度の実績見込みと2016年度の改善計画(売上高変化、営業利益・利益率変化)を基に、売上高増加額、構成比を示す多重円グラフ、営業利益率、営業利益のパレート図を求め、さらにシステムの稼働時期と効果実現度合いの不確実性を表す決定木から生起確率および売上高合計の期待値を求める。
- ア
- 期待どおりの効果を実現する確率は50%を上回る
- イ
- 期待どおりの効果を実現する確率は70%以上である
- ウ
- 期待どおりの効果を実現する確率は期待どおりの効果が実現できない確率よりも低い
- エ
- 期待どおりの効果を実現する確率は期待の40%以下の効果しか実現しない確率よりも低い
- オ
- 期待どおりの効果を実現する確率は期待の50%以下の効果しか実現しない確率の2倍以上である
解答・解説を表示
解答
設問1 a: ウ, b: イ, c: オ, d: イ; 設問2 e: ウ, f: オ
解説
まず要点:業績の予測では、各事業部の増減率から売上高や利益を計算し、パレート図や多重円グラフで分かりやすく示す。また決定木の分析では、各分岐の確率をかけ合わせて末端の出来事の起こる確率を求め、成果の値とその確率をかけたものの合計として期待値を出す。
解き方
- 各事業部の前提から2016年度の売上高と営業利益を計算し、変化の量や比率を比べる。
- 決定木の各分岐の確率をかけ合わせて各シナリオの確率を出し、効果の期待値とベースの売上高を足す。
小問ごとの答え
- 小問 設問1 a:ウ
- 各事業部の2016年度売上高増加額は、Pが0億円、Qが100×5%=5億円、Rが60×10%=6億円、Sが0億円、Tが10×50%=5億円となり、最も増加額が大きいのは6億円増加のR事業部です。
- 小問 設問1 b:イ
- 多重円グラフの内側が2015年度、外側が2016年度です。P事業部の構成比は2015年度の45.0%から2016年度は43.3%へと外側の比率が縮小し、RやTの比率が拡大しているグラフとして「イ」が合致します。
- 小問 設問1 c:オ
- 2016年度の各事業部の営業利益率は、Pが14×1.1/180≒8.6%、Qが維持で12.0%、Rが1.0×1.2/66≒1.8%、Sが10.0%、Tが(-1+3)/15≒13.3%となり、最も大きいのはT事業部です。
- 小問 設問1 d:イ
- パレート図では棒グラフを営業利益の大きい順に降順で左から並べます。2016年度利益はP(15.4億円)>Q(12.6億円)>S(5.0億円)>T(2.0億円)>R(1.2億円)の順となり、累積構成比が上に凸の曲線を描く「イ」が適切です。
- 小問 設問2 e:ウ
- 2016年度初日から稼働し期待どおりの効果を実現する確率は0.70×0.70=0.49(49%)です。期待どおりの効果が実現できない確率は1-0.49=0.51(51%)であり、49%は51%よりも低いため「ウ」が正しい記述です。
- 小問 設問2 f:オ
- 売上高増加効果の期待割合は0.49×1.0 + 0.21×0.8 + 0.14×0.5 + 0.06×0.4 = 0.752です。売上増加期待値は16億円×0.752=12.032億円となり、2015年度の400億円に加算して四捨五入すると412億円となります。
覚えるポイント
- パレート図の棒グラフは必ず降順(大きい順)に並べ、折れ線グラフは累積比率を表す。
- 決定木における最終的な期待値計算では、ベースとなる基準値に効果の期待値を加算する。
間違えやすいところ
- 売上高合計の期待値を出すとき、改善効果額(16億円×達成率の期待値)だけを計算し、ベースの400億円を足し忘れる。
- 決定木の確率の計算で、第1段階の稼働時期の確率をかけずに、第2段階の確率だけで判断してしまう。
出題の前提:平成27年度秋期基本情報技術者試験午後問7の出題条件および採点講評に基づく。
出典:IPA『2015年度 秋期 午後』
公式問題冊子 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)
Boyer-Moore-Horspool法を用いた文字列検索アルゴリズム
データ構造及びアルゴリズム · 文字列検索 / Boyer-Moore-Horspool法 / スキップテーブル / パターントレース
Boyer-Moore-Horspool法(BM法)により、対象文字列Text[]中から検索文字列Pat[]を高速に検索する擬似言語プログラムに関する問題である。末尾から先頭に向かって文字照合を行い、不一致時に末尾文字に対応するスキップ量配列Skip[]を参照して検索位置を右にシフトする処理について、Skip[]の生成、実行トレース、ループ順序の変更による影響を考察する。
- ア
- 対象文字列中に対象文字列が含まれていないのに、1以上の値を返す場合がある
- イ
- 対象文字列中に対象文字列が含まれているのに、-1を返す場合がある
- ウ
- 正しい値を返す
解答・解説を表示
解答
設問1 a: エ, b: カ; 設問2 c: ア, d: オ, e: キ; 設問3 f: イ
解説
まず要点:Boyer-Moore-Horspool法では、検索する文字列を後ろから前に向かって照合する。合わないときは、照合している枠の最後の文字に対応する、あらかじめ計算した移動量(Skip値)だけパターンを右にずらす。同じ文字が何度も出てくる場合は、末尾に近い位置の出現をもとに移動量を決める必要がある。
解き方
- Skip配列の決め方に従い、パターンの末尾を除く文字について、末尾からの距離に応じた移動量の式を導く。
- 与えられた文字列に対してポインタPlast・PText・PPatの動きを追い、各行の実行回数と返す値を数える。
小問ごとの答え
- 小問 設問1 a:エ
- 検索文字列に含まれない文字や末尾のみに現れる文字の初期移動量は検索文字列の長さであるため、PatLenを代入します。
- 小問 設問1 b:カ
- Pat[1]からPat[PatLen-1]に現れる文字の移動量は、末尾からの文字数(PatLen-I+1)から1を引いた値であるため、PatLen - I となります。
- 小問 設問2 c:ア
- Plastは初期値4、不一致でText[4]='X'の移動量4が加算されて8、不一致でText[8]='C'の移動量4が加算されて12となり、αの処理は計3回実行されます。
- 小問 設問2 d:オ
- βの判定は照合が一致した回数分実行されます。Plast=4で0回、Plast=8で3回('C','A','B'一致)、Plast=12で4回('C','A','B','A'一致)行われるため合計7回です。
- 小問 設問2 e:キ
- Plast=12のときText[9..12]とPat[1..4]が完全に一致し、PPat=1となった時点でPTextの値である9が返却されます。
- 小問 設問3 f:イ
- γのループを逆順にすると、同一文字が複数ある場合に末尾から遠い(先頭に近い)文字の値で上書きされて移動量が本来より大きくなり、一致箇所を飛び越して-1を返す不具合が生じます。
覚えるポイント
- BM法やBMH法では、パターン照合は末尾から先頭に向かって行う。
- Skip配列の登録時に同一文字が複数ある場合、末尾に近い(右側にある)文字の移動量で最終的に確定させる必要がある。
間違えやすいところ
- 設問1 bで末尾からの距離を求める添字の計算を間違え、I-PatLenやPatLen-1などを選んでしまう。
- 設問2で、Plastの移動の基準文字を、合わなかった文字と取り違え、末尾の文字Text[Plast]のSkip値を正しく参照できない。
出題の前提:平成27年度秋期基本情報技術者試験午後問8のプログラム仕様および採点講評に基づく。
出典:IPA『2015年度 秋期 午後』
公式問題冊子 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) / 公式問題冊子 p.39 ↗(www.ipa.go.jp)
入退室管理ログの印字処理および整合性検査プログラム
ソフトウェア開発 · C言語 / 文字列処理 / ファイル入力 / 整合性検査
入退室管理システムが記録したログファイル(Access.Log)を読み込み、指定されたレイアウトに従って入退室状況を印字するC言語プログラムおよび、入退室の順序の整合性を検査・印字する変更処理に関する問題である。プログラム中の空欄 a 〜 g に入る最も適切な字句を解答群から選べ。
- a-エ
- logEOF = EOF
- b-ク
- strcpy(lastID, cardID)
- c-ア
- door[0] - '0' - 1
- d-オ
- 行⑦
- e-イ
- 行④
- f-エ
- level
- g-イ
- beforeLevel
解答・解説を表示
解答
設問1 a: エ, b: ク, c: ア; 設問2 d: オ, e: イ, f: エ, g: イ
解説
まず要点:ファイル入力の終わりを判定するときは、読み込みの戻り値EOF(データの終わりを表す特別な値)を見つけることと、ループを続けるか決める変数の更新を連動させます。表を整えて出力する場面では、区分の値から出力する文字数や空白の回数を式で計算します。状態の整合性の検査では、直前の状態(level)と今回の事象(beforeLevel)の違いを比べて、食い違いを見つけます。
解き方
- プログラムのファイル読み込みループの仕組みと、各変数の役割(EOFの判定や前の記録の保持)をつかみます。
- ドア番号の先頭の文字から制限エリアのレベルを見きわめ、字下げ出力に必要な空白の回数の式を求めます。
- 関数を追加する位置と、不整合が起きたときに出力する直前レベル(x)と期待レベル(y)の変数を筋道立てて見つけます。
小問ごとの答え
- 小問 設問1 a:エ
- fscanfがファイルの終わりに達してEOFを返した際、メイン処理のループ継続条件である「logEOF != EOF」を終了させるため、logEOFにEOFを代入します。
- 小問 設問1 b:ク
- 同一カードIDが続く場合に2行目以降のID・名前印字を抑止するため、直前のカードIDを保持する変数lastIDに現在のcardIDをstrcpy関数で複写します。
- 小問 設問1 c:ア
- レベル1〜3に応じて印字開始桁(19, 39, 59桁目)を決めるため、20桁分の空白を出力する回数を計算します。ドア番号の十の位door[0]はレベルを表す文字('1','2','3')なので、door[0] - '0' - 1によりそれぞれ0回、1回、2回の空白出力回数を求めます。
- 小問 設問2 d:オ
- putRecord()内でカードIDごとの先頭行の処理を行った直後(行⑦の直後)にcheckLevel()を呼び出すことで、不整合メッセージを正しい位置(カードID行の直後や該当レコードの前)に出力させます。
- 小問 設問2 e:イ
- main関数のwhileループ内で次のレコードをgetRecord()で読み込んだ直後(行④の直後)にclearLevel()を呼び出します。これにより、ファイル終端に達した際や異なるカードIDに切り替わった際に、未退室状態(level > 0)のLevel残余を0に戻す処理が正しく実行されます。
- 小問 設問2 f:エ
- 不整合メッセージ「***** Level x-->y」のxは直前の滞在レベルを表すため、現在の入退室者の滞在レベルを保持している変数levelを出力引数として指定します。
- 小問 設問2 g:イ
- 不整合メッセージのyは通過しようとしたドアの手前側のレベル(期待されるレベル)を表すため、ドア通過前にいるべきレベルを保持する変数beforeLevelを指定します。
覚えるポイント
- 文字型数字から'0'を減算して整数値に変換するイディオムを押さえる。
- C言語で文字列を代入・比較する際は、代入演算子ではなくstrcpyやstrcmpなどの標準ライブラリ関数を使用する。
間違えやすいところ
- 文字コードの引き算で '0' を引くのを忘れたり、桁位置を合わせる計算(-1)を見落としたりすること。
- 不整合メッセージの移動元・移動先のレベルを、直前に保った値levelと計算値beforeLevel/afterLevelの間で取り違えること。
出題の前提:平成27年度秋期基本情報技術者試験 午後問9 出題条件
出典:IPA『2015年度 秋期 午後』
公式問題冊子 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) / 公式問題冊子 p.46 ↗(www.ipa.go.jp)
アンケート集計ヒストグラム表示および整列処理
ソフトウェア開発 · COBOL / 2次元表集計 / SORT機能 / コントロールブレイク
アンケート結果ファイルから回答データを読み込み、項目別・満足度別の選択数を集計してヒストグラムを表示するプログラム、および合計満足度ごとに整列して回答ID一覧を表示する追加機能に関する問題である。プログラム中の空欄 a 〜 g に入る最も適切な字句を解答群から選べ。
- a-ウ
- Z(3)9
- b-エ
- CNT-NUM(I, J)
- c-ア
- 1:PLOT-NUM
- d-ウ
- HIST-REC
- e-イ
- SRT-REC
- f-キ
- SRT-SUM NOT = LAST-SUM OR POS > 10
- g-ウ
- SRT-SUM NOT = LAST-SUM
解答・解説を表示
解答
設問1 a: ウ, b: エ, c: ア, d: ウ; 設問2 e: イ, f: キ, g: ウ
解説
まず要点:COBOLの数字編集項目では、「Z」で先頭の余分なゼロを空白にし、「9」で数字をそのまま残すように桁の書式を決めます。部分参照(最左端位置:長さ)を使えば、文字列の決まった範囲だけを扱えます。複数のキーでの並べ替えは、まとめた集団項目を指定すれば一度に設定でき、グループごとの集計や出力では、キーの切り替えと件数の区切りの条件を論理演算子で組み合わせて制御します。
解き方
- 出力の決まりから、数字編集用のピクチャ文字列で余分なゼロをどう扱うか(値が0のときは0を表示する)を判断します。
- 2次元配列のつくりとループ変数の対応を確かめ、部分参照の範囲とDISPLAYする対象のレコードを見つけます。
- SORT文のキーの指定のしかたと、改行するタイミング(キーの切り替えか10件を超えたか)と見出しを設定する条件を整理します。
小問ごとの答え
- 小問 設問1 a:ウ
- 選択数の表示仕様「値が0の場合以外は先行する数字0を除いて、値が0の場合は1桁の数字0を、右寄せで表示する」を満たすため、上位3桁のゼロサプレスを行い最下位1桁をそのまま表示する編集用ピクチャ文字列「Z(3)9」を指定します。
- 小問 設問1 b:エ
- 集計表CNT-NUMは第1添字が項目(I=1〜3)、第2添字が満足度値(J=5 down to 1)に対応しています。ループ変数Jがそのまま該当の満足度値となっているため、参照すべき集計値は「CNT-NUM(I, J)」です。
- 小問 設問1 c:ア
- HIST-PLOT(50文字分)の先頭からPLOT-NUM文字分にアスタリスク「*」を転記するため、部分参照「1:PLOT-NUM」を用いて指定します。
- 小問 設問1 d:ウ
- 各満足度の行は、満足度値(HIST-VAL)、選択数(HIST-NUM)、横棒(HIST-PLOT)を空白で区切ったレコード全体を出力するため、親集団項目である「HIST-REC」をDISPLAYします。
- 小問 設問2 e:イ
- SORT文のASCENDING KEY句において、集計結果を総合満足度(SRT-SUM)昇順、かつ回答ID(SRT-ID)昇順で整列させる必要があります。SRT-RECの下位にSRT-SUM、SRT-IDの順で定義されているため、レコード名「SRT-REC」を指定することで両方のキーを昇順に整列できます。
- 小問 設問2 f:キ
- 表示行を確定して出力(改行)する条件は、総合満足度が切り替わった場合(SRT-SUM NOT = LAST-SUM)、または1行に収める上限の10件を超えた場合(POS > 10)のいずれかであるため、「SRT-SUM NOT = LAST-SUM OR POS > 10」となります。
- 小問 設問2 g:ウ
- 新しい総合満足度の表示行を開始する際、見出しとして総合満足度の値を設定する必要があるのは、総合満足度が切り替わったときだけです(10件超過による同一満足度内の改行では見出しを出力しない)。したがって条件は「SRT-SUM NOT = LAST-SUM」となります。
覚えるポイント
- ゼロサプレス「Z」と数値「9」の組み合わせによるゼロ出力動作を正確に理解する。
- COBOLの文字列部分参照は「一意名(最左端位置:長さ)」で指定する。
間違えやすいところ
- ゼロを消すピクチャで「Z(4)」を選ぶと、値が0のときに空白が4桁になり、0を表示する仕様に反してしまいます。
- 集団項目を並べ替えのキーに指定したとき、中の項目の定義の順に複合キーとして扱われる決まりを見落とすこと。
出題の前提:平成27年度秋期基本情報技術者試験 午後問10 出題条件
出典:IPA『2015年度 秋期 午後』
公式問題冊子 p.47 ↗(www.ipa.go.jp) / 公式問題冊子 p.48 ↗(www.ipa.go.jp) / 公式問題冊子 p.49 ↗(www.ipa.go.jp) / 公式問題冊子 p.50 ↗(www.ipa.go.jp) / 公式問題冊子 p.51 ↗(www.ipa.go.jp) / 公式問題冊子 p.52 ↗(www.ipa.go.jp)
Javaプログラムによるブロックデータのキャッシュ管理
ソフトウェア開発 · オブジェクト指向プログラミング / クラスの継承と抽象クラス / キャッシュ置換アルゴリズム(FIFO・LRU)
読取り専用ブロックデバイスに対するアクセス管理を行うJavaプログラムにおいて、抽象クラスCacheおよびListBasedCacheを継承し、FIFOおよびLRU方式のキャッシュ管理クラスを完成させるためのプログラム中の空欄 a 〜 g に当てはまる適切な字句を選択する問題。
- a-ア
- blocks
- a-イ
- blocks[]
- a-ウ
- blocks[0]
- a-エ
- blocks[][]
- a-オ
- blocks[0][]
- a-カ
- blocks[][0]
- b-ア
- Cache
- b-イ
- Cache<? extends Policy>
- b-ウ
- enum
- b-エ
- Policy
- b-オ
- Policy<? extends Cache>
- b-カ
- void
- c-ア
- !=
- c-イ
- <
- c-ウ
- <=
- c-エ
- ==
- c-オ
- >
- c-カ
- >=
- d-ア
- !entries.isEmpty()
- d-イ
- entries.isEmpty()
- d-ウ
- entries.size() != CACHE_SIZE
- d-エ
- entries.size() != index
- d-オ
- entries.size() == CACHE_SIZE
- d-カ
- entries.size() == index
- e-ア
- CACHE_SIZE
- e-イ
- CACHE_SIZE - 1
- e-ウ
- CACHE_SIZE + 1
- e-エ
- index
- e-オ
- index - 1
- e-カ
- index + 1
- f-ア
- ArrayList
- f-イ
- ArrayList<Cache>
- f-ウ
- Cache
- f-エ
- List
- f-オ
- List<Cache>
- f-カ
- ListBasedCache
- g-ア
- 0
- g-イ
- CACHE_SIZE - 1
- g-ウ
- entry
- g-エ
- entry.getIndex()
- g-オ
- entry.getIndex() - 1
- g-カ
- entry.getIndex() + 1
解答・解説を表示
解答
設問 a: ウ, b: ア, c: エ, d: オ, e: イ, f: カ, g: ウ
解説
まず要点:オブジェクト指向では、抽象クラスを継承するとき、共通の処理は親クラスに置き、クラスごとに違う動きは子クラスで上書き(オーバーライド)します。リストでキャッシュを管理するときは、要素を追加する位置(先頭)と追い出す位置(末尾)のつじつまや、参照したときに要素を並べ直す仕組みを正しく理解することが大切です。
解き方
- それぞれのクラスの役割とフィールドの定義(2次元配列blocksのつくり、リストentriesへの要素の追加のしかた)を確かめます。
- 抽象クラスCacheとListBasedCacheの継承関係、そして未実装の抽象メソッドhitの役割を整理します。
- キャッシュを追加するときの容量の確認条件、追い出す末尾のインデックス、LRUでヒットしたときの並べ直しの処理を導きます。
小問ごとの答え
- 小問 設問 a:ウ
- blocksは2次元配列byte[100][512]として宣言されており、1ブロックのサイズ(512バイト)を取得するには1行目の要素数であるblocks[0].lengthを参照します。
- 小問 設問 b:ア
- createCacheメソッドは指定されたポリシーに応じたCache実装クラスのインスタンスを生成して返すファクトリメソッドであるため、戻り値の型はCacheとなります。
- 小問 設問 c:エ
- getCachedBlockDataでは引数で渡されたブロックのindexと、キャッシュエントリの保持するインデックスが等しいか比較するため、「==」が適切です。
- 小問 設問 d:オ
- キャッシュに空きがない(要素数が上限値CACHE_SIZEに達している)場合に既存エントリを1件削除するため、条件式は「entries.size() == CACHE_SIZE」となります。
- 小問 設問 e:イ
- 新規エントリはリストの先頭(インデックス0)に追加される設計のため、最も古いエントリはリストの末尾である「CACHE_SIZE - 1」に位置し、これを削除対象とします。
- 小問 設問 f:カ
- FifoおよびLruクラスはListBasedCacheの入れ子クラスとして定義され、抽象メソッドhitを実装するため、継承すべき基底クラスはListBasedCacheです。
- 小問 設問 g:ウ
- LRU方式ではヒットしたエントリをリスト先頭へ再配置するため、Listのremove(Object)を利用して該当オブジェクト「entry」を削除した上で先頭に追加します。
覚えるポイント
- 多次元配列の各次元要素数はarray[i].lengthで取得する。
- リスト先頭への追加と末尾からの削除でFIFO/LRUを構成できる。
間違えやすいところ
- ブロックのインデックス値(識別子)と、リストの格納位置のインデックスを混同してしまうこと。
出題の前提:問題文に提示されたJavaプログラムの仕様およびAPI一覧(List, ArrayList, System.arraycopy)に基づく。
出典:IPA『2015年度 秋期 午後』
公式問題冊子 p.53 ↗(www.ipa.go.jp) / 公式問題冊子 p.54 ↗(www.ipa.go.jp) / 公式問題冊子 p.55 ↗(www.ipa.go.jp) / 公式問題冊子 p.56 ↗(www.ipa.go.jp) / 公式問題冊子 p.57 ↗(www.ipa.go.jp) / 公式問題冊子 p.58 ↗(www.ipa.go.jp)
ビット列の挿入(CASL IIアセンブラ)
ソフトウェア開発 · アセンブラ言語(CASL II) / ビット操作(論理シフト・論理和) / サブルーチン呼出しとループ制御
副プログラムBITINS(16ビット列Aを16ビット列Bの指定位置nに挿入して32ビット列Cを作成)およびBITINSL(N語のビット列Yの指定位置mに1語のビット列Xを挿入してN+1語のビット列Zを作成)について、プログラム中の空欄 a 〜 f を埋め、レジスタの推移を追跡する問題。
- 設問1-a-ア
- 0
- 設問1-a-イ
- 8
- 設問1-a-ウ
- 16
- 設問1-a-エ
- 32
- 設問1-b-ア
- SLL GR0, 0, GR2
- 設問1-b-イ
- SLL GR0, 0, GR6
- 設問1-b-ウ
- SRL GR0, 0, GR2
- 設問1-b-エ
- SRL GR0, 0, GR6
- 設問2-c,d-ア
- 0000 0000 0001 0111
- 設問2-c,d-イ
- 0000 0000 0001 1000
- 設問2-c,d-ウ
- 0000 0010 1001 0110
- 設問2-c,d-エ
- 0000 0011 1011 1100
- 設問2-c,d-オ
- 0101 1100 0000 0000
- 設問2-c,d-カ
- 0110 0000 0000 0000
- 設問2-c,d-キ
- 1010 0101 1000 0000
- 設問2-c,d-ク
- 1110 1111 0000 0000
- 設問3-e,f-ア
- e: JMI FIN, f: --
- 設問3-e,f-イ
- e: JMI INS, f: --
- 設問3-e,f-ウ
- e: JPL FIN, f: --
- 設問3-e,f-エ
- e: JPL INS, f: --
- 設問3-e,f-オ
- f: JZE FIN, e: --
- 設問3-e,f-カ
- f: JZE INS, e: --
解答・解説を表示
解答
設問1 a: ウ, b: ウ; 設問2 c: イ, d: キ; 設問3 e: イ, f: オ
解説
まず要点:アセンブラでビット列を分けたりつなげたりするときは、論理シフト命令(SLL/SRL)で不要なビットを押し出して0で埋め、論理和(OR)でビット列を合成します。複数の語にまたがるデータを扱うときは、各語の境界の値(16ビット単位)と大小を比べて、処理する対象が今の語か次の語かを判断します。
解き方
- 1語(16ビット)ごとに分けるのに必要なシフト量(nと16-n)を見つけ、合成に使うシフトの向きとレジスタの役割をたどります。
- 与えられたビットパターンについて、SLLとSRLの実行結果を1ステップずつ確かめて値を求めます。
- 複数の語を処理するループで、比較命令CPAによるフラグの変化(正・負・ゼロ)と分岐先の関係を筋道立てて導きます。
小問ごとの答え
- 小問 設問1 a:ウ
- 1語は16ビットであり、ビット列Bの左nビットと右(16-n)ビットを分割するために、GR6に16をロードしてSUBA GR6, GR2により16-nを計算します。
- 小問 設問1 b:ウ
- ビット列Cの先頭語はBの左nビットにAの左(16-n)ビットを結合するため、GR0(ビット列A)をnビット右シフト(SRL GR0, 0, GR2)して右詰めにし、OR GR1, GR0で合成します。
- 小問 設問2 c:イ
- n=10のとき、ビット列B(1110 1111 0001 1000)を左に10ビット、次に右に10ビットシフトすることで右6ビットが残り、GR4は0000 0000 0001 1000となります。
- 小問 設問2 d:キ
- ビット列A(0101 1110 1001 0110)をGR6(=6)ビット左シフト(SLL GR5, 0, GR6)すると、上位6ビットが押し出され、下位10ビットが左詰めとなって1010 0101 1000 0000となります。
- 小問 設問3 e:イ
- CPA GR2, =17により、挿入位置GR2が16以下(17未満)であれば結果が負(SF=1)となり、現在の語に挿入すべき位置となるため、JMI INSで分岐します。
- 小問 設問3 f:オ
- BITINSでの挿入後、Yの残り語数をSUBA GR4, =1で減算し、残り語数が0(ZF=1)であれば残りのコピー処理LOOP2は不要であるため、JZE FINで終了処理へ分岐します。
覚えるポイント
- SLLで左にkビット、SRLで右にkビットシフトすると上位kビットが0クリアされる。
- CPA r1, r2 は (r1 - r2) の結果に応じてSFやZFを設定する。
間違えやすいところ
- 右詰め・左詰めに必要なシフト量として、nと16-nを取り違えてしまうこと。
- CPA命令で比較する相手より小さいときにJMI(負のときの分岐)になる関係を見落とすこと。
出題の前提:問題文に示されたCASL IIおよびCOMET IIの仕様規定に基づく。
出典:IPA『2015年度 秋期 午後』
公式問題冊子 p.59 ↗(www.ipa.go.jp) / 公式問題冊子 p.60 ↗(www.ipa.go.jp) / 公式問題冊子 p.61 ↗(www.ipa.go.jp) / 公式問題冊子 p.62 ↗(www.ipa.go.jp) / 公式問題冊子 p.63 ↗(www.ipa.go.jp)
PC販売店での購入金額の計算(表計算とマクロ)
ソフトウェア開発 · 表計算ソフト / 垂直照合 / 照合検索 / マクロ / 相対参照
あるPC販売店におけるセット値引きを含む購入金額の計算処理に関する次の表計算ワークシート及びマクロの説明を読んで、設問1・設問2の空欄[ a ]〜[ g ]に入れる正しい答えを選択肢の中から選べ。
- a_ア
- 価格表!A$2:D$51, 2
- a_イ
- 価格表!A$2:D$51, 3
- a_ウ
- 価格表!A$2:D$51, 4
- a_エ
- 価格表!B$2:D$51, 2
- a_オ
- 価格表!B$2:D$51, 3
- b_ア
- セット値引き表!A3
- b_イ
- セット値引き表!A$3
- b_ウ
- セット値引き表!I3
- b_エ
- セット値引き表!I$3
- c_d_ア
- 価格表!A$2:A$51
- c_d_イ
- 価格表!B$2:B$51
- c_d_ウ
- 価格表!C$2:C$51
- c_d_エ
- 価格表!D$2:D$51
- e_ア
- 価格表!A2
- e_イ
- 価格表!B2
- e_ウ
- 価格表!C2
- e_エ
- 相対(価格表!A2, I, 0)
- e_オ
- 相対(価格表!B2, I, 0)
- e_カ
- 相対(価格表!C2, I, 0)
- f_ア
- Num < Set_Num
- f_イ
- Num > Set_Num
- f_ウ
- Num = 0
- f_エ
- Num ≠ 0
- f_オ
- Num ≠ Set_Num
- f_カ
- Set_Num = 0
- f_キ
- Set_Num ≠ 0
- g_ア
- + 1
- g_イ
- + Set_Num
- g_ウ
- - 1
- g_エ
- - Set_Num
- g_オ
- * Set_Num
- g_カ
- / Set_Num
解答・解説を表示
解答
設問1 a: オ, b: ウ; 設問2 c: ウ, d: ア, e: オ, f: ア, g: オ
解説
まず要点:表計算の関数の決まりでは、垂直照合(検索値, 範囲, 列位置, 検索指定)の範囲は、検索する列をいちばん左端にする必要があります。照合検索(検索値, 検索範囲, 抽出範囲)は対応する同じ位置の値を返し、式を複写しても参照がずれないようにするには絶対参照「$」を使います。
解き方
- 設問1 aでは、商品名(B7)から単価(D列)を取り出すために、検索範囲の先頭をB列(価格表!B$2:D$51)とし、単価のある3列目を指定します。
- 設問1 bでは、D30からD39へ縦に複写したとき行番号が連動して変わるよう、行に$を付けない相対参照「セット値引き表!I3」を選びます。
- 設問2 c, dでは、照合検索で商品コード(C3)から商品番号を取り出すため、検索範囲cをC列(C$2:C$51)、抽出範囲dをA列(A$2:A$51)とします。
- 設問2 eでは、条件付合計で商品ごとの数量を集計するため、変数Nameに価格表の商品名(B列)を「相対(価格表!B2, I, 0)」で取り出します。
- 設問2 fでは、3商品のうちいちばん小さいセット可能数を求めるため、「Num < Set_Num」のときにSet_Numを更新します。
- 設問2 gでは、各商品の必要数量(1セットあたりの数量)に成立したセット数Set_Numを掛けて引くため、「* Set_Num」とします。
小問ごとの答え
- 小問 設問1 a:オ
- 垂直照合の第1引数は商品名B7です。価格表において商品名はB列(B2:B51)、単価はD列にあります。探索対象列を左端とするセル範囲は「価格表!B$2:D$51」であり、B列から数えてD列は3列目となるため、列の位置は3、完全一致検索で0を指定します。
- 小問 設問1 b:ウ
- 購入伝票のD30に、セット値引き表のセット1の値引き額(I3)を表示し、D31〜D39へ複写します。行番号を変化させたい(相対参照にしたい)ので行番号を固定する「$」をつけず「セット値引き表!I3」とします。
- 小問 設問2 c:ウ
- 照合検索(C3, c, d)において、C3には商品コードが入っています。検索のセル範囲cは価格表の商品コード列である「価格表!C$2:C$51」を指定します。
- 小問 設問2 d:ア
- 抽出したい値は「商品番号」です。抽出のセル範囲dには価格表の商品番号列である「価格表!A$2:A$51」を指定します。
- 小問 設問2 e:オ
- マクロのループ変数I(0〜49)に対応して、配列Goods_Num[I]に商品番号I+1(価格表の行I+2)の購入数量を集計します。条件付合計の検索条件Nameには商品名を指定する必要があり、商品名は価格表のB列(B2から)なので「相対(価格表!B2, I, 0)」とします。
- 小問 設問2 f:ア
- セット化可能な数量Set_Numは、セットを構成する3種類の商品それぞれで可能なセット数(Num)のうち最小の値となります。したがって、NumがこれまでのSet_Numより小さい場合(Num < Set_Num)にSet_NumをNumに更新します。
- 小問 設問2 g:オ
- セット値引きが適用された数量Set_Numに対して、各構成商品の消費数量は「1セットあたりの必要数量 × セット数(Set_Num)」となります。必要数量「相対(セット値引き表!D3, I, J * 2)」に「* Set_Num」を乗じた値を在庫から減算します。
覚えるポイント
- 垂直照合(検索値, 範囲, 列位置, 検索指定)の範囲最左列は必ず検索値が存在する列にする。
- 数式複写時に固定したい行や列には絶対参照の「$」を付ける。
- 照合検索(検索値, 検索範囲, 抽出範囲)は指定した位置の要素を相互に対応付けて抽出する。
間違えやすいところ
- 垂直照合の範囲にA列(商品番号)を含めてしまい、商品名で検索すると一致しなくなるミス。
- 式を縦に複写するときに、連動して変えたい行番号に誤って「$」を付けてしまうミス。
- セット可能数を求めるときに、最小値ではなく最大値や最後の値で更新してしまうミス。
出題の前提:基本情報技術者試験 表計算ソフトの仕様(共通問題仕様)に基づく。
出典:IPA『2015年度 秋期 午後』
公式問題冊子 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) / 公式問題冊子 p.70 ↗(www.ipa.go.jp)
2015年度 秋期 午後
参照した公式資料
IPAが公開した2015年度 秋期 午後の問題・解答資料です。

