旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2016年度 秋期 午後の概要
販売支援システムのネットワーク構成とセキュリティ対策
情報セキュリティ · DMZ構成 / パケットフィルタリング / 情報セキュリティの3要素
中堅商社A社における販売支援システムの導入に関する記述を読み、設問1〜3に答えよ。 〔販売支援システムの構成〕 (1) 販売支援システムは次のサーバで構成され、A社のネットワークに設置される。 ① リバースプロキシサーバ(RPサーバ)1台 ② Webサーバ 2台(クラスタリング構成) ③ データベースサーバ(DBサーバ)1台 (3) DBサーバへのアクセスの監視は、PCと同じLANにある監視サーバで行う。 (4) インターネットから販売支援システムへの通信はRPサーバを経由して行う。RPサーバはHTTPSをHTTPに変換し、他のサーバとHTTPで通信する。 図1にA社のネットワーク構成(DMZにRPサーバとサーバ群X、LANにPCとサーバ群Y)、表1に通信用プロトコルおよび宛先ポート番号、表2にファイアウォール(FW)のフィルタリング設定が示されている。 設問1: WebサーバとDBサーバについて、図1中の配置場所(サーバ群X、サーバ群Y)の組合せとして適切なものを解群(ア〜エ)から選べ。 設問2: 表2の設定ではインターネットからDBサーバに直接アクセスされるおそれがある。フィルタリングの設定を変更する内容として適切なものを解群(ア〜エ)から選べ。 設問3: 表3中の空欄[ a ]〜[ c ]に入れる適切な答えを解群(ア〜カ)から選べ。 (機密性: a、完全性: b、可用性: c)
- ア
- 設問1: Webサーバ=サーバ群X, DBサーバ=サーバ群X / 設問2: 項番1の前に送信元DBサーバ宛先Webサーバ宛先ポート80許可を追加 / 設問3: (i) DBサーバ中のデータの正規化
- イ
- 設問1: Webサーバ=サーバ群X, DBサーバ=サーバ群Y / 設問2: 項番1の前に送信元任意宛先Webサーバ宛先ポート80許可を追加 / 設問3: (ii) RPサーバとWebサーバとの間でのHTTPの利用
- ウ
- 設問1: Webサーバ=サーバ群Y, DBサーバ=サーバ群X / 設問2: 項番2の送信元をWebサーバに変更する / 設問3: (iii) Webサーバのクラスタリング
- エ
- 設問1: Webサーバ=サーバ群Y, DBサーバ=サーバ群Y / 設問2: 項番2の動作を拒否に変更する / 設問3: (iv) コンテンツが改ざんされていないことの定期的な確認
- オ
- 設問3: (v) 社員IDとパスワードによるログイン
- カ
- 設問3: (vi) タブレットの利用
解答・解説を表示
解答
設問1: イ, 設問2: ウ, 設問3 a: オ, 設問3 b: エ, 設問3 c: ウ
解説
まず要点:外部から直接届くサーバはDMZ(外部公開用の中間ネットワーク)に、大切なデータを持つDBサーバは社内LAN(社内だけのネットワーク)に置きます。ファイアウォールでは、通す通信の送信元や宛先を必要最小限に絞ります。情報セキュリティの3要素は、機密性はアクセス制限、完全性は改ざんの防止と検知、可用性は冗長化(予備を用意すること)で守ります。
解き方
- サーバ配置の検討: 外部と直接・間接に通信するWebサーバはDMZ(サーバ群X)、内部LANから監視され重要データを保持するDBサーバはLAN(サーバ群Y)に配置することを判断する。
- FWルールの検討: 表2項番2の送信元が「任意」になっていると外部からもDB専用ポートへ侵入可能になるため、送信元を正規のアクセス元である「Webサーバ」に絞り込む修正を選択する。
- セキュリティ3要素の対応付け: 認証によるアクセス制限(v)を機密性(a)、改ざん検知(iv)を完全性(b)、クラスタリングによる冗長化(iii)を可用性(c)に対応付ける。
小問ごとの答え
- 小問 設問1:イ
- WebサーバはDMZ内のRPサーバからHTTP(ポート80)でアクセスされる公開側のサーバ群Xに配置し、機密情報を保持しPCと同じLAN内の監視サーバからも監視されるDBサーバは内部ネットワークであるLANのサーバ群Yに配置するのが適切です。
- 小問 設問2:ウ
- 変更前の項番2は「送信元: 任意、宛先: DBサーバ、宛先ポート: 1552、動作: 許可」となっており、外部インターネットから直接DBサーバへのアクセスが許可されてしまいます。DBサーバへのアクセスはWebサーバからのみに限定すべきであるため、送信元を「Webサーバ」に変更します。
- 小問 設問3 a:オ
- 機密性とは認可された者のみが情報にアクセスできることを確実にすることです。「社員IDとパスワードによるログイン」(v)により正当な利用者のみにアクセスを制限するため、機密性の確保に対応します。
- 小問 設問3 b:エ
- 完全性とは情報および処理方法が正確で完全であることを保護することです。「コンテンツが改ざんされていないことの定期的な確認」(iv)は、データの改変を検知・防止して正確性を担保する対策であるため完全性に対応します。
- 小問 設問3 c:ウ
- 可用性とは認可された利用者が要求したときに情報等に確実にアクセスできることを保証することです。「Webサーバのクラスタリング」(iii)は障害発生時にもサービスを継続させる対策であるため可用性に対応します。
覚えるポイント
- 機密性=アクセス制御・認証、完全性=改ざん防止・検証、可用性=クラスタリング・二重化
間違えやすいところ
- FWルールで送信元「任意」を残したままにすると外部直接アクセスを許してしまう点を見落としやすい
出題の前提:平成28年度秋期基本情報技術者試験午後問1出題条件およびネットワーク・セキュリティ基本規格に基づく。
出典:IPA『2016年度 秋期 午後』
公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp) / 公式問題冊子 p.8 ↗(www.ipa.go.jp) / 公式問題冊子 p.9 ↗(www.ipa.go.jp)
コンパイラの字句解析と構文解析(状態遷移図と構文木)
ソフトウェア · 構文規則 / 状態遷移図 / 演算子の優先順位 / 構文木
コンパイラの字句解析と構文解析に関する記述を読んで、設問1,2に答えよ。 設問1: 構文規則で規定されている「符号なし浮動小数点定数」の状態遷移図(図1)について、空欄[ a ],[ b ]に入れる正しい答えを解群(ア〜オ)から選べ。 ・状態0から初期状態で、空欄 a により状態2に遷移、状態2から「数字」で状態3に遷移する。状態3は二重円(受理状態)。 ・また状態1(数字を受理)から「.」で状態3に遷移し、状態1から空欄 b で状態4(eの次の状態)へ遷移する。 設問2: 式の構文規則と構文木について、空欄[ c ],[ d ],[ e ]に入れる正しい答えをそれぞれの解群から選べ。 ・式の構文規則: 式 → 項 | [ c ] 項 → 因子 | 項 op1 因子 因子 → 名前 (演算子op1の優先順位はop2よりも高い) ・さらに括弧を追加した因子の構文規則: 因子 → 名前 | ( [ d ] ) ・例2「v op2 w op1 (x op2 y) op1 z」を構文解析したとき、出力される構文木として適切なものを解群[ e ](ア〜エ)から選べ。
- ア
- 設問1 a, b: . / 設問2 c: 式 / 設問2 d: 因子 / 設問2 e: 構文木ア
- イ
- 設問1 a, b: e / 設問2 c: 式 op2 因子 / 設問2 d: 項 / 設問2 e: 構文木イ
- ウ
- 設問1 a, b: 指数部 / 設問2 c: 式 op2 項 / 設問2 d: 式 / 設問2 e: 構文木ウ
- エ
- 設問1 a, b: 数字 / 設問2 c: 式 op2 名前 / 設問2 d: 名前 / 設問2 e: 構文木エ
- オ
- 設問1 a, b: 符号
解答・解説を表示
解答
設問1 a: ア, 設問1 b: イ, 設問2 c: ウ, 設問2 d: ウ, 設問2 e: ウ
解説
まず要点:演算子の優先順位が低いほど、構文木の根(一番上)に近い位置に来ます。優先順位が高い演算子ほど葉(木の先)に近い深い場所で結び付きます。左結合の規則「A → A op B | B」では、木は左に深く伸びる形になります。
解き方
- 状態遷移図の対応付け: 小数点から始まるパスと指数部へ進むパスの文法規則を確認し、aに「.」、bに「e」を導く。
- 式の文法規則の導出: op1(高優先度)が項、op2(低優先度)が式を構成することから、式 → 項 | 式 op2 項 となること、括弧内には任意の「式」が入ることを特定する。
- 構文木の導出: 式全体の最も外側の演算子が先頭の op2 であることから根を op2 とし、残りの項「w op1 (x op2 y) op1 z」の左結合規則に従って木構造を照合する。
小問ごとの答え
- 小問 設問1 a:ア
- 構文規則「小数定数 → [数字列] . 数字列 | 数字列 .」より、先頭が数字列でなく「.」から始まる場合(例: .5)は状態0から「.」を読み込んで状態2へ遷移し、その後に数字列を読んで受理状態3へと進みます。したがって a には「.」(ア)が入ります。
- 小問 設問1 b:イ
- 構文規則「符号なし浮動小数点定数 → 数字列 指数部」「指数部 → e [符号] 数字列」より、状態1(数字列を受理した状態)から直接指数部へ遷移する際の最初の文字は「e」です。したがって b には「e」(イ)が入ります。
- 小問 設問2 c:ウ
- 演算子op1が優先順位が高く項(因子 op1 因子 ...)を構成するため、優先順位の低いop2で結合される全体の式は左再帰的に「式 op2 項」として定義されます。したがって c は「式 op2 項」(ウ)となります。
- 小問 設問2 d:ウ
- 括弧の中には式全体を記述できる必要があるため、括弧で囲まれる構文要素は最上位の「式」となります。したがって「( 式 )」となるため、d は「式」(ウ)です。
- 小問 設問2 e:ウ
- 式「v op2 w op1 (x op2 y) op1 z」において、最も結合が緩い主演算子は左辺「v」と右辺「w op1 (x op2 y) op1 z」を結ぶ「op2」です(根がop2)。右部分木では結合順序が左結合「項 op1 因子」であるため、まず「w op1 (x op2 y)」が計算され、その結果に対して「op1 z」が施されます。したがって根のop2の右の子はop1(左の子がop1、右の子がz)となっている「構文木ウ」が正解です。
覚えるポイント
- 演算子の優先順位が低いものほど構文規則では上位の階層(根に近い側)に定義される
間違えやすいところ
- 左結合規則「項 → 項 op1 因子」において、木構造が右に深くなると誤認しやすい点に注意する
出題の前提:平成28年度秋期基本情報技術者試験午後問2出題条件に基づく。
出典:IPA『2016年度 秋期 午後』
公式問題冊子 p.10 ↗(www.ipa.go.jp) / 公式問題冊子 p.11 ↗(www.ipa.go.jp) / 公式問題冊子 p.12 ↗(www.ipa.go.jp) / 公式問題冊子 p.13 ↗(www.ipa.go.jp)
従業員の通勤情報を管理する関係データベースの集計・抽出
データベース · SQL / GROUP BY / LIKE演算子 / サブクエリ / NOT IN
Y社では従業員の通勤手当を管理するため、従業員表、通勤費表、交通機関表の3つの表で通勤経路や運賃データを管理している。この関係データベースに対して、通勤手当や利用者数の集計、特定条件の交通機関利用者の抽出、新設路線が影響する重複のない従業員番号の抽出、および交通安全講習会未受講者の抽出を行うSQL文や集計方法について、空欄a〜gに当てはまる適切な選択肢を答える。
- 設問1 a, c ア
- 交通機関表を交通機関コードで
- 設問1 a, c イ
- 従業員表を従業員番号で
- 設問1 a, c ウ
- 通勤費表を交通機関コードで
- 設問1 a, c エ
- 通勤費表を従業員番号で
- 設問1 b, d ア
- AVG
- 設問1 b, d イ
- COUNT
- 設問1 b, d ウ
- MAX
- 設問1 b, d エ
- SUM
- 設問2 e ア
- 通勤費表.交通機関コード IN ('B00', 'B99')
- 設問2 e イ
- 通勤費表.交通機関コード LIKE 'B%'
- 設問2 e ウ
- 通勤費表.交通機関コード LIKE 'B_'
- 設問2 e エ
- 通勤費表.交通機関コード LIKE '_B%'
- 設問3 f ア
- 通勤費表.交通機関コード = (SELECT 交通機関表.交通機関コード FROM 交通機関表 WHERE 交通機関表.交通機関名 IN ('情報都市線', '駒込バス'))
- 設問3 f イ
- 通勤費表.交通機関コード IN (SELECT 交通機関表.交通機関コード FROM 交通機関表 WHERE 交通機関表.交通機関名 IN ('情報都市線', '駒込バス'))
- 設問3 f ウ
- 通勤費表.交通機関コード IN (SELECT 交通機関表.交通機関コード FROM 交通機関表 WHERE 交通機関表.交通機関名 IN ('情報都市線', '駒込バス')) GROUP BY 通勤費表.交通機関コード
- 設問3 f エ
- 通勤費表.交通機関コード IN (SELECT 交通機関表.交通機関コード FROM 交通機関表 WHERE 交通機関表.交通機関名 IN ('情報都市線', '駒込バス')) GROUP BY 通勤費表.従業員番号
- 設問4 g ア
- 通勤費表.従業員番号 = (SELECT 講習会受講表.従業員番号 FROM 講習会受講表 WHERE 受講日 IS NULL)
- 設問4 g イ
- 通勤費表.従業員番号 IN (SELECT 講習会受講表.従業員番号 FROM 講習会受講表 WHERE 受講日 = '20160420')
- 設問4 g ウ
- 通勤費表.従業員番号 IN (SELECT 講習会受講表.従業員番号 FROM 講習会受講表 WHERE 受講日 IS NULL)
- 設問4 g エ
- 通勤費表.従業員番号 NOT IN (SELECT 講習会受講表.従業員番号 FROM 講習会受講表 WHERE 受講日 = '20160420')
解答・解説を表示
解答
設問1 a: エ, 設問1 b: エ, 設問1 c: ウ, 設問1 d: イ, 設問2 e: イ, 設問3 f: エ, 設問4 g: エ
解説
まず要点:SQLの集計では、GROUP BYでまとめる項目を決め、SUMやCOUNTなどの集計関数を使います。文字のパターン照合にはLIKEを使い、任意の長さの文字列を表す「%」と、任意の1文字を表す「_」を区別します。副問合せが複数行を返すときは「=」ではなくINを使い、含まれない行を選ぶときはNOT INを使います。
解き方
- 設問1では、集計対象の数値列(交通費)または件数を含むテーブルが通勤費表であることを見極め、従業員ごと(SUM)および交通機関ごと(COUNT)のグループ化条件を特定します。
- 設問2では、先頭1文字が'B'で始まる文字列に合致するパターンとしてLIKE 'B%'を選択します。
- 設問3では、副問合せで2件の路線コードが返るためIN述語が必要であり、かつ問題文の「同じ従業員番号は一つだけ表示する」という要件からGROUP BY 従業員番号を特定します。
- 設問4では、受講していない従業員は受講表にデータ自体が存在しない仕様を確認し、受講者リストを除外するNOT IN述語を導き出します。
小問ごとの答え
- 小問 設問1 a:エ
- 従業員ごとの通勤手当合計を求めるには、交通費列を持つ通勤費表を従業員番号でグループ化する必要があります。
- 小問 設問1 b:エ
- グループ化した従業員ごとの交通費の合計額を計算するため、合計を求める集合関数SUMを使用します。
- 小問 設問1 c:ウ
- 交通機関ごとの利用者数を集計するためには、利用データが記録されている通勤費表を交通機関コードでグループ化します。
- 小問 設問1 d:イ
- グループごとのレコード件数(利用者数)を数えるため、行数を数える集合関数COUNTを使用します。
- 小問 設問2 e:イ
- バスの交通機関コードは先頭が文字'B'で始まる3文字の文字列であるため、前方一致を表すLIKE 'B%'が適切です。
- 小問 設問3 f:エ
- 対象交通機関は2件あるためINを用い、さらに同じ従業員番号を1つだけ表示するためGROUP BY 通勤費表.従業員番号で集約します。
- 小問 設問4 g:エ
- 未受講者は講習会受講表にレコードが存在しないため、該当日に受講した従業員番号のリストに含まれないことを示すNOT INを用います。
覚えるポイント
- 複数行を返す副問合せとの比較には「=」ではなく「IN」を使用する。
- 存在しない行を抽出する際は「IS NULL」ではなく「NOT IN」や「NOT EXISTS」を用いる。
間違えやすいところ
- 受講していない従業員のレコードが存在しない仕様を見落とし、受講日 IS NULLで検索しようとしてしまうミス。
- 重複排除の要件に対してDISTINCTではなくGROUP BYによる集約が問われていることを見落とすミス。
出題の前提:問題文の記載条件および標準的なSQL規格に基づく。
出典:IPA『2016年度 秋期 午後』
公式問題冊子 p.14 ↗(www.ipa.go.jp) / 公式問題冊子 p.15 ↗(www.ipa.go.jp) / 公式問題冊子 p.16 ↗(www.ipa.go.jp) / 公式問題冊子 p.17 ↗(www.ipa.go.jp)
Web画面の表示に要するデータ転送時間の計算モデル
ネットワーク · データ転送時間 / キャッシュ / RTT / スループット
Web画面1ページを構成するデータの転送時間を5秒以内に収める設計において、与えられたデータ転送時間計算モデル(ターンアラウンドタイム t = 0.005秒、実効転送速度 e = 1×10^6 バイト/秒、キャッシュ有無および再転送要否による所要時間)に基づき、固定データ100個(平均サイズ 5×10^3 バイト)の再確認時間a、未キャッシュ時の転送時間b、および変動データを加えた総転送時間の上限式における空欄c, dを求める。
- a, b ア
- 0.005
- a, b イ
- 0.015
- a, b ウ
- 0.02
- a, b エ
- 0.5
- a, b オ
- 0.515
- a, b カ
- 1
- a, b キ
- 1.5
- a, b ク
- 2
- c, d ア
- 10^4 + 500
- c, d イ
- 10^4 + 500 × n
- c, d ウ
- 25 × 10^3
- c, d エ
- 25 × 10^3 × n
- c, d オ
- (10^4 + 500) / e
- c, d カ
- (10^4 + 500 × n) / e
- c, d キ
- (25 × 10^3) / e
- c, d ク
- (25 × 10^3 × n) / e
解答・解説を表示
解答
a: エ, b: ク, c: カ, d: キ
解説
まず要点:Webページの表示時間は、往復の待ち時間(RTT/ターンアラウンドタイム)と、データ量を実効転送速度で割った伝送時間の合計で見積もります。各データを順番に取得する条件では、個数分を足し合わせます。キャッシュが効いて再転送が不要なときはRTTの分だけで済みます。
解き方
- 空欄aの計算:再転送不要の応答時間は1データにつきt秒である。固定データ100個分が逐次処理されるため、100 × t = 100 × 0.005 = 0.5秒となる。
- 空欄bの計算:未キャッシュのデータ1個(v = 5×10^3バイト)の転送時間は3×t + v/e = 0.015 + 0.005 = 0.02秒。100個分では 0.02 × 100 = 2秒となる。
- 空欄cとdの特定:全体の所要時間式 [b] + 3×t + [c] + (3×t + [d])×n ≦ 5 において、3×t + [c] はHTML文書1個の転送時間、(3×t + [d])×n は商品画像n個の転送時間を表す。
- HTMLデータのサイズは 10^4 + 500×n バイトなので c = (10^4 + 500×n) / e。画像1個のサイズは 25×10^3 バイトなので d = (25×10^3) / e を導出する。
小問ごとの答え
- 小問 a:エ
- 固定データ100個全てがキャッシュされ再転送不要な場合、1個あたりt秒掛かるため、100 × 0.005 = 0.5秒となります。
- 小問 b:ク
- キャッシュされていない固定データ1個の転送時間は3×t + v/e = 3×0.005 + 5000/10^6 = 0.015 + 0.005 = 0.02秒であり、100個で0.02 × 100 = 2秒となります。
- 小問 c:カ
- HTML文書データの転送時間は3×t + v_html/eであり、v_html = 10^4 + 500×nであるため、cは(10^4 + 500×n) / eとなります。
- 小問 d:キ
- 商品画像1個の転送時間は3×t + v_img/eであり、n個分で(3×t + d)×nと表現されるため、dは画像1個の転送所要時間の一部である(25×10^3) / eとなります。
覚えるポイント
- 転送所要時間は「要求・応答の遅延時間 + (データ量 ÷ 転送速度)」で計算する。
- 括弧の外に変数が掛けられている数式では、括弧内に同一の変数を重複して含めないよう注意する。
間違えやすいところ
- 固定データ100個分であることを見落とし、1個分の時間(0.005秒や0.02秒)を選んでしまうミス。
- 転送時間を求める式において、データサイズを転送速度eで割ることを忘れてバイト数をそのまま代入してしまうミス。
出題の前提:問題文に提示されたデータ転送時間計算モデルおよび条件式に基づく。
出典:IPA『2016年度 秋期 午後』
公式問題冊子 p.18 ↗(www.ipa.go.jp) / 公式問題冊子 p.19 ↗(www.ipa.go.jp) / 公式問題冊子 p.20 ↗(www.ipa.go.jp)
レンタル業務システムの設計(UML・オブジェクト指向)
ソフトウェア設計 · クラス図 / 多重度 / シーケンス図 / オブジェクト指向 / カプセル化 / インヘリタンス / ポリモーフィズム
レンタル業務システムにおけるクラス図、シーケンス図、およびオブジェクト指向の基本概念(継承・多相性)に関する記述を読み、設問1〜設問3の各問いに答えよ。
- 設問1 a
- クラス図中の貸出クラスに追加すべき属性(ア: 延滞日数, イ: 延滞料金, ウ: 貸出期間, エ: 貸出料金, オ: 登録年月日)
- 設問1 b
- 貸出明細とレンタル商品の関連の多重度 b1 と b2(ア: 0, 1 / イ: 0, 1..* / ウ: 0..1, 1 / エ: 0..1, 1..* / オ: 1, 0 / カ: 1, 0..* / キ: 1..*, 1 / ク: 1..*, 1..*)
- 設問2 c
- シーケンス図中の返却予定年月日の計算メッセージの引数(ア: 貸出期間 / イ: 貸出期間, 単価 / ウ: 貸出期間, 単価, 本日日付 / エ: 貸出期間, 本日日付 / オ: 単価, 返却予定年月日 / カ: 単価, 返却予定年月日, 本日日付)
- 設問2 d
- シーケンス図中の貸出料金を取得するメッセージの引数(ア: 貸出期間 / イ: 貸出期間, 単価 / ウ: 貸出期間, 単価, 本日日付 / エ: 貸出期間, 本日日付 / オ: 単価, 返却予定年月日 / カ: 単価, 返却予定年月日, 本日日付)
- 設問3 e
- オブジェクト指向設計における空欄 e1, e2 の組合せ(ア: インヘリタンス, カプセル化 / イ: インヘリタンス, ポリモーフィズム / ウ: カプセル化, インヘリタンス / エ: カプセル化, ポリモーフィズム / オ: ポリモーフィズム, インヘリタンス / カ: ポリモーフィズム, カプセル化)
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: ウ, 設問2 c: エ, 設問2 d: ア, 設問3 e: イ
解説
まず要点:オブジェクト指向設計では、共通の親クラス(インヘリタンス=継承)で共通のきまりを決め、ポリモーフィズム(多相性:同じ命令で動きが変わる仕組み)で各オブジェクト固有の動きを切り替えます。またUMLの多重度は、実世界の「1対多」や「0個か1個か」といった制約を正しく表します。
解き方
- 業務フロー(会員登録、貸出、返却)からエンティティごとの保持属性および計算に必要なパラメータを特定する。
- エンティティ間の参照関係・インスタンスの存在条件(未貸出の商品の扱いなど)を整理し、多重度を導出する。
- オブジェクト指向の三大要素であるカプセル化・インヘリタンス・ポリモーフィズムの定義と文脈を照合する。
小問ごとの答え
- 小問 設問1 a:ウ
- 本文の貸出手順の説明において、返却予定年月日は貸出期間と本日日付から自動計算され、返却予定年月日ごとにまとめて伝票番号を割り当てるとあるため、貸出クラスが保持すべき属性は「貸出期間」となります。
- 小問 設問1 b:ウ
- 貸出明細1件は必ず1つのレンタル商品に対応するためb2は1です。一方、在庫として店舗にある商品は貸出明細に関連付けられず、貸出中であれば1件の貸出明細に関連付けられるためb1は0..1となります。
- 小問 設問2 c:エ
- 返却予定年月日は、本日日付に希望の貸出期間を加算して算出されるため、計算に必要な引数は「貸出期間, 本日日付」です。
- 小問 設問2 d:ア
- 貸出料金は商品情報ごとに設定された単価表を参照して貸出期間から取得するため、商品情報インスタンスに渡す引数は「貸出期間」となります。
- 小問 設問3 e:イ
- 汎化・特化の関係を実装する仕組みはインヘリタンス(継承)であり、同一のメッセージに対して各サブクラスが異なる処理を実行し、呼出元がその差異を意識せずに扱える性質をポリモーフィズム(多相性)と呼びます。
覚えるポイント
- UMLクラス図の多重度「0..1」は存在しない場合がある任意関連、「1」は必須関連を意味する。
- ポリモーフィズム(多相性)は同一の呼び出しインターフェースで異なる実装を透過的に実行する仕組みである。
間違えやすいところ
- 貸出明細とレンタル商品の多重度で、過去の履歴を含めた多重度と現在の貸出状態の多重度を混同してしまうミス。
- 料金計算に必要な引数として、商品情報クラス自体が保持している単価まで引数に含めてしまうミス。
出題の前提:平成28年度秋期 基本情報技術者試験 午後 問5
出典:IPA『2016年度 秋期 午後』
公式問題冊子 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) / 公式問題冊子 p.26 ↗(www.ipa.go.jp)
単体テストにおける品質管理(テスト密度とバグ摘出率)
プロジェクトマネジメント · 単体テスト / テスト密度 / バグ摘出率 / 品質管理基準 / ソフトウェアテスト
単体テスト工程におけるテスト密度およびバグ摘出率の評価基準と、サブシステムのテスト結果に対する分析・改善策に関する記述を読み、設問1・設問2の各問いに答えよ。
- 設問1 a
- 品質評価グラフの区分I〜IVにおける評価a1〜a3の組合せ(ア: 品質不良, 品質良好, テスト不足である / イ: 品質良好, 品質不良, テスト不足である / ウ: 品質不良, 品質良好, テストの内容と摘出したバグの内容から品質を評価する / エ: 品質良好, 品質不良, テストの内容と摘出したバグの内容から品質を評価する)
- 設問2 b
- プログラム1のテスト密度(件/kステップ)(ア: 7, イ: 98, ウ: 980, エ: 9,800)
- 設問2 c
- プログラム4の評価結果(ア: テスト密度は基準を満たしているが、バグ摘出率は下限に満たない / イ: テスト密度は基準を満たしているが、バグ摘出率は上限を超えている / ウ: バグ摘出率、テスト密度とも基準を満たしていない / エ: バグ摘出率、テスト密度とも基準を満たしている)
- 設問2 d
- プログラム1に対する改善策における点検内容(ア: プログラムのソースコードが詳細設計書を正確に反映していることを点検した / イ: 記述規定どおりに記述されていることを点検した / ウ: 文法上の誤りがないことを点検した)
- 設問2 e
- プログラム3で改善策不要と判断した確認事項(ア: 特定の処理の流れを重点的に確認 / イ: 全ての処理の流れを網羅的に確認できる / ウ: 実データを使用した環境で確認 / エ: 実行手順について正しく定められている)
- 設問2 f
- プログラム4に対する改善策(ア: 摘出したバグが修正されていることを確認 / イ: 不足している処理の流れに対してテストケースを追加して再度単体テストを実施 / ウ: 実施方法に問題がないことを確認 / エ: バグを摘出した処理の流れに対してテストケースを追加して再度単体テストを実施)
解答・解説を表示
解答
設問1 a: ウ, 設問2 b: イ, 設問2 c: ウ, 設問2 d: ア, 設問2 e: イ, 設問2 f: イ
解説
まず要点:ソフトウェアテストの品質管理では、テスト密度(テストをどれだけ実施したか)とバグ摘出率(どれだけバグを見つけたか)の2つの軸で工程の良し悪しを判断します。テストが十分でもバグが少ない場合は、テスト漏れの疑いを持ちます。どちらも低い場合は、テストケースを足して再テストします。
解き方
- テスト密度(テストケース数÷開発規模)とバグ摘出率(バグ数÷開発規模)の各基準範囲(標準値の80%〜120%など)を確認する。
- 表2の実績値から各プログラムの指標値を算出し、基準値と比較して評価区分を特定する。
- 問題傾向(バグ過多、テスト不足、網羅性不足)に応じて、詳細設計見直しや網羅テストケース追加などの適切な改善策を選択する。
小問ごとの答え
- 小問 設問1 a:ウ
- 区分Iはバグ摘出率が上限を超過しているため「品質不良」、区分IIIは基準内であるため「品質良好」、区分IVはテスト密度は十分だが摘出バグが少なすぎるため単に安心するのではなく「テストの内容と摘出したバグの内容から品質を評価する」必要があります。
- 小問 設問2 b:イ
- プログラム1のテスト密度は、テストケース数 980件 ÷ 開発規模 10kステップ = 98件/kステップ と計算できます。
- 小問 設問2 c:ウ
- プログラム4のテスト密度は 600÷8=75件/kステップ(基準の下限80未満)、バグ摘出率は 30÷8=3.75件/kステップ(基準の下限4未満)であるため、「バグ摘出率、テスト密度とも基準を満たしていない」となります。
- 小問 設問2 d:ア
- バグの原因が詳細設計書の曖昧な記述に起因していたため、設計書の修正後は「プログラムのソースコードが詳細設計書を正確に反映していることを点検した」とするのが適切です。
- 小問 設問2 e:イ
- バグ摘出率が低くても品質良好とみなすには、テストケースの網羅性が十分であることが前提となるため、「テストケースが全ての処理の流れを網羅的に確認できるように作成されている」ことを確認します。
- 小問 設問2 f:イ
- テスト密度・バグ摘出率ともに不足している場合はテストの網羅性不足が懸念されるため、「テストの実施が不足している処理の流れに対して、テストケースを追加して再度単体テストを実施」します。
覚えるポイント
- テスト密度 = テストケース数 ÷ 開発規模(kステップ)。
- バグ摘出率 = 摘出バグ数 ÷ 開発規模(kステップ)。
- テスト密度が高くバグ摘出率が低い領域は、テストの質・網羅性を確認する必要がある。
間違えやすいところ
- バグ摘出率が基準を下回っている場合に、単に「バグが少なくて高品質」と誤認してしまうミス。
- テストケース追加時に「バグが出た箇所」だけに限定してしまい、未実施の処理パスの追加を見落とすミス。
出題の前提:平成28年度秋期 基本情報技術者試験 午後 問6
出典:IPA『2016年度 秋期 午後』
公式問題冊子 p.27 ↗(www.ipa.go.jp) / 公式問題冊子 p.28 ↗(www.ipa.go.jp) / 公式問題冊子 p.29 ↗(www.ipa.go.jp) / 公式問題冊子 p.30 ↗(www.ipa.go.jp)
業務提携と出資の検討(財務諸表分析と企業価値評価)
経営戦略・企業と法務 · 財務諸表分析 / フリーキャッシュフロー / 現在価値 / 企業価値評価
消費財メーカB社による同業T社との物流業務提携および出資の検討に関する次の記述を読み、設問1〜3の問いに答えよ。 〔財務状況の予測(2016年度)〕 ・損益計算書予測(億円):売上高 120、売上総利益 40、営業利益 7、経常利益 9、税引き前純利益 10、税引き後純利益 7 ・貸借対照表予測(億円):流動資産 50、固定資産 100(総資産 150)、流動負債 40、固定負債 30、純資産 80 ・キャッシュフロー(CF)計算書予測(億円):営業活動によるCF 15、投資活動によるCF -5、財務活動によるCF -3 〔出資条件〕次の(1)〜(3)のうち二つ以上を満たすこと。 (1) 売上高営業利益率が5%以上である。 (2) 総資産経常利益率が5%以上である。 (3) 営業活動によるCFと投資活動によるCFの和(FCF)が負でない。 〔設問1〕 表1〜3から、T社は出資条件の [ a ] を満たしている。また、営業活動によるCFが正、投資活動・財務活動によるCFが負であることから、T社は [ b ] を進めている企業と考えられる。さらに、情報システム連携で販管費を圧縮した場合、売上高や総資産が変わらなければ [ c ] 上げられると考えられる。 〔設問2〕 各年度のFCFの現在価値(割引率r=0.1、n年後のFCF Cの現在価値は C/(1+r)^n)の合計で企業価値を算出する。提携により初年度(2017年度)にFCFは10%増加し、2018〜2020年度は年率5%で増加する。2018年度のFCF予測値 d(億円)と、2017年度FCFの2016年度末時点の現在価値 e(億円)を求めよ。また、割引率を考慮せずにFCFを合計すると、定義した企業価値よりも [ f ] 計算してしまう。 〔設問3〕 条件変更によりT社の企業価値が大きくなるものを解から選べ。
- ア
- 設問1 a: (1)と(2)の二つだけ / 設問1 b: 本業で得た利益に加えて,銀行からの借入れを増やして投資 / 設問1 c: FCFだけは / 設問2 d, e: 9.09 / 設問2 f: 大きく / 設問3: B社がT社の企業価値を算出するときに使っている割引率を0.12に上げる。
- イ
- 設問1 a: (1)と(3)の二つだけ / 設問1 b: 本業で得た利益に加えて,手持ちの資産を現金化して債務返済や株主還元 / 設問1 c: 売上高営業利益率と総資産経常利益率だけは / 設問2 d, e: 9.84 / 設問2 f: 小さく / 設問3: T社の2016年度の銀行からの借入れの予測額を減らす。
- ウ
- 設問1 a: (2)と(3)の二つだけ / 設問1 b: 本業で得た利益を投資に回すとともに,債務返済や株主還元 / 設問1 c: 売上高営業利益率,総資産経常利益率及びFCFの全て / 設問2 d, e: 10.00 / 設問3: T社の2016年度の設備投資の予測額を増やす。
- エ
- 設問1 a: (1)〜(3)の全て / 設問2 d, e: 10.03 / 設問3: T社の2016年度の販管費の予測額を減らす。
- オ
- 設問2 d, e: 10.50
- カ
- 設問2 d, e: 10.82
- キ
- 設問2 d, e: 11.00
- ク
- 設問2 d, e: 11.03
- ケ
- 設問2 d, e: 11.55
- コ
- 設問2 d, e: 12.10
解答・解説を表示
解答
設問1 a: エ, 設問1 b: ウ, 設問1 c: ウ, 設問2 d: ケ, 設問2 e: ウ, 設問2 f: ア, 設問3: エ
解説
まず要点:企業の評価では、収益性(営業利益率やROA)と現金を生み出す力(営業CFやFCF)を合わせて見ます。将来のフリーキャッシュフロー(営業CF+投資CF)を現在価値に割り引いて合計するDCF法で、資本コストを反映した企業価値を求められます。
解き方
- 財務諸表から売上高、総資産、営業利益、経常利益、各種CFの数値を正確に抽出し、出資判定基準を計算する。
- 提携効果によるFCFの成長率(初年度10%、翌年度5%)を順次乗じて各年度のFCFを導出する。
- 割引率rを適用した現在価値算定式 C/(1+r)^n に数値を代入し、割引前後の関係やパラメータ変化が企業価値に与える影響を論理的に評価する。
小問ごとの答え
- 小問 設問1 a:エ
- 売上高営業利益率は7/120=5.83%≧5%、総資産経常利益率は9/(50+100)=6.00%≧5%、FCFは15+(-5)=10億円≧0であり、(1)〜(3)の全てを満たします。
- 小問 設問1 b:ウ
- 営業CFが正で投資CF・財務CFが負である構成は、本業で創出したキャッシュを設備投資に充当し、余剰分で有利子負債の返済や配当等を進めている健全な成長・安定期の特徴を示します。
- 小問 設問1 c:ウ
- 販管費が削減されると営業利益が増加し、経常利益も増加し、営業支出減少により営業CF(ひいてはFCF)も増加するため、3指標の全てが向上します。
- 小問 設問2 d:ケ
- 2016年度FCFは10億円です。提携により2017年度FCFは10×1.1=11.00億円となり、2018年度FCFは11.00×1.05=11.55億円となります。
- 小問 設問2 e:ウ
- 2017年度末のFCF(11.00億円)を割引率r=0.1で2016年度末時点(1年後)へ割り引くと、11.00/(1+0.1)=10.00億円となります。
- 小問 設問2 f:ア
- 割引計算では将来の金額を1より大きい(1+r)^nで除算して縮小評価するため、割引計算を行わずに単純合算すると企業価値を過大(大きく)に見積もることになります。
- 小問 設問3:エ
- 販管費の予測額を減らすと本業の現金支出が抑制されて営業CFが増加し、FCFが増加するため、将来FCFの現在価値合計である企業価値が拡大します。
覚えるポイント
- フリーキャッシュフロー(FCF)= 営業活動によるCF + 投資活動によるCF
- n年後のCFの現在価値 = CF ÷ (1 + 割引率)^n
間違えやすいところ
- 総資産を計算する際に流動資産のみで計算してしまうミス
- 財務活動によるCFをFCFの計算に含めてしまう混同
- 割引率を考慮しない合算値が現在価値より小さくなると誤認する逆転ミス
出題の前提:平成28年度秋期基本情報技術者試験 午後問題 問7(出題条件に基づく)
出典:IPA『2016年度 秋期 午後』
公式問題冊子 p.31 ↗(www.ipa.go.jp) / 公式問題冊子 p.32 ↗(www.ipa.go.jp) / 公式問題冊子 p.33 ↗(www.ipa.go.jp) / 公式問題冊子 p.34 ↗(www.ipa.go.jp)
数値の編集(編集パターンと状態遷移アルゴリズム)
データ構造及びアルゴリズム · 文字列処理 / 編集パターン / 状態フラグ管理 / ゼロサプレス
指定された編集パターンに従って数値を編集・整形する関数Editに関する次の記述を読み、設問1〜3の問いに答えよ。 〔関数の概要〕 引数 Pattern[](編集パターン)、Value[](数値文字列。末尾に正または0なら'+'、負なら'-'が付加される)。 先頭文字 fill文字(初期値はPattern[0])。論理型変数 signif は初期値 off。 Pattern[]中の文字が '□' または '■' のとき、数字との対応処理を行い、それ以外の文字は signif が off のとき fill文字で置き換え、on のときそのまま残す。 〔設問1〕 表3において次の引数で関数Editを実行した後の Pattern[] の内容を求めよ。 ・Pattern: "*□□,□□□#", Value: "00000+" → 結果 [ a ] ・Pattern: "*□□□.□□#", Value: "00012-" → 結果 [ b ] ・Pattern: "*□□■.□□#", Value: "00012+" → 結果 [ c ] 〔設問2〕 表2のケース1〜7を詳細化するプログラム中の空欄 [ d ]、[ e ] に入る条件式を選べ。 ・signif が off の分岐内:IF [ d ] THEN Pattern[p]←fill ELSE Pattern[p]←Value[v] ・signif が on の分岐内:IF [ e ] THEN signif←off; Pattern[p]←Value[v] 〔設問3〕 正の数値の後に続く文字を fill文字で置き換えるために用意されたケースは [ f ] である。
- ア
- 設問1 a: "*******#" / 設問1 b, c: "*****12#" / 設問2 d, e: "1" ≦ Value[v] and Value[v] ≦ "9" / 設問3: 2, 4及び7
- イ
- 設問1 a: "********" / 設問1 b, c: "*****12*" / 設問2 d, e: Value[v] = "0" / 設問3: 3, 5及び7
- ウ
- 設問1 a: "******0#" / 設問1 b, c: "****. 12#" / 設問2 d, e: Value[v + 1] = "-" / 設問3: 4及び7
- エ
- 設問1 a: "******0*" / 設問1 b, c: "****. 12*" / 設問2 d, e: Value[v + 1] = "+" / 設問3: 5及び7
- オ
- 設問1 b, c: "***0.12#" / 設問2 d, e: Value[v + 1] ≠ "-"
- カ
- 設問1 b, c: "***0.12*" / 設問2 d, e: Value[v + 1] ≠ "+"
解答・解説を表示
解答
設問1 a: イ, 設問1 b: ア, 設問1 c: エ, 設問2 d: イ, 設問2 e: エ, 設問3 f: エ
解説
まず要点:帳票などで数値を編集するときは、意味のない上位のゼロを空白や記号で埋めます。有効な数字が現れた時点で状態フラグ(signif)を切り替え、それ以降の文字や数字の出し方を変えます。正負の符号によって、後ろの通貨記号やマイナス記号を出したり隠したりします。
解き方
- 編集パターンの各文字を走査し、制御文字(□、■)と固定文字(カンマ、ピリオド、記号)を判別する。
- 現在のsignif(有効数字検出フラグ)の値とValue[]の数字・符号を突き合わせ、表2の各ケースに従って置換文字と次状態を更新する。
- signifの反転条件(非ゼロ検出時、および正数末尾'+'検出時)に着目してプログラムの条件分岐を導出する。
小問ごとの答え
- 小問 設問1 a:イ
- Valueが"00000+"の場合、有効数字が現れず、制御文字'□'は全てfill文字'*'になり、signifはoffのままです。カンマや末尾の'#'もsignif=offのためケース8により'*'で置換され、全体で8文字すべて'*'の"********"となります。
- 小問 設問1 b:ア
- Value[3]の'1'で初めてsignifがonになります。それ以前の'.'はsignif=offのためfill文字'*'に置換されます。'1','2'が配置された後、末尾の'#'はsignif=on(負数でValue末尾が'-'のためsignifはonのまま)なのでケース9によりそのまま残り、"*****12#"となります。
- 小問 設問1 c:エ
- '■'の位置でValue[2]='0'ですがValue[3]='1'(非'+')のためケース2でsignifがonになり、続く'.'はそのまま残ります。最後の数字'2'を配置する際、Value末尾が'+'のためケース7によりsignifがoffに戻ります。このため末尾の'#'はケース8でfill文字に置換され、"****.12*"となります。
- 小問 設問2 d:イ
- signif=offのとき、ケース1〜3(Value[v]="0")ではfill文字で置換され、ケース4〜5(Value[v]="1"〜"9")ではValue[v]が設定されます。したがってfill文字を設定する条件dは「Value[v] = "0"」です。
- 小問 設問2 e:エ
- signif=onのとき、次の文字が正符号「Value[v + 1] = "+"」であるケース7の場合にのみ、signifをoffに更新します。次の文字が符号以外やマイナスの場合はonを維持します。
- 小問 設問3 f:エ
- 数値が正(最後の文字が'+')のとき、数値の後に続く文字をfill文字にするには、最後の数字の処理時にsignifをoffにする必要があります。数値が正であれば最後の数字は必ず1以上か既に有効数字内なので、該当するケースは5及び7です。
覚えるポイント
- ゼロサプレス処理では「有効数字に達したか」を保持する状態フラグが核心となる。
- 固定文字(カンマや小数点)は状態フラグがoffならfill文字に置き換わる。
間違えやすいところ
- 制御文字以外の記号(#やピリオド)を、signif=offのときにも無条件に残してしまうミス
- Value末尾の'+'の検出によるsignifのリセット処理(正数の符号非表示制御)を見落とすこと
出題の前提:平成28年度秋期基本情報技術者試験 午後問題 問8(アルゴリズム仕様に基づく)
出典:IPA『2016年度 秋期 午後』
公式問題冊子 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) / 公式問題冊子 p.40 ↗(www.ipa.go.jp)
サブシステムの開発作業順序の決定と出力
ソフトウェア開発 · C言語 / スケジューリングアルゴリズム / バブルソート応用 / 前置減分演算子
複数の対象サブシステムについて、開発作業の完了が目標作業終了日より遅れる日数(遅延日数)の合計をできるだけ少なくするための開発作業順序を決定するC言語プログラムに関する問題である。隣接するサブシステムの実施順序を入れ替えたときの遅延日数合計を比較し、改善される場合は順序を交換して前の要素へ戻り再検査を行うアルゴリズム、および決定したスケジュールを出力する処理の空欄 a ~ f を埋めよ。
- 設問1 a [ア]
- i + j
- 設問1 a [イ]
- i + j - 1
- 設問1 a [ウ]
- i - j
- 設問1 a [エ]
- i - j + 1
- 設問1 b [ア]
- i + 1
- 設問1 b [イ]
- i - 1
- 設問1 b [ウ]
- job_no
- 設問1 b [エ]
- job_no + 1
- 設問1 b [オ]
- job_no - 1
- 設問1 c [ア]
- i + 1
- 設問1 c [イ]
- i - 1
- 設問1 c [ウ]
- i++
- 設問1 c [エ]
- i--
- 設問1 c [オ]
- ++i
- 設問1 c [カ]
- --i
- 設問1 d [ア]
- =
- 設問1 d [イ]
- +=
- 設問1 d [ウ]
- -=
- 設問2 e [ア]
- 0
- 設問2 e [イ]
- 27
- 設問2 e [ウ]
- 44
- 設問2 e [エ]
- 46
- 設問2 e [オ]
- 57
- 設問2 e [カ]
- 60
- 設問2 e [キ]
- 73
- 設問2 e [ク]
- 86
- 設問2 f [ア]
- 0
- 設問2 f [イ]
- 27
- 設問2 f [ウ]
- 44
- 設問2 f [エ]
- 46
- 設問2 f [オ]
- 57
- 設問2 f [カ]
- 60
- 設問2 f [キ]
- 73
- 設問2 f [ク]
- 86
解答・解説を表示
解答
設問1 a: エ, 設問1 b: ア, 設問1 c: カ, 設問1 d: イ, 設問2 e: ウ, 設問2 f: カ
解説
まず要点:作業の順番を少しずつ入れ替えて、遅れの合計が減るなら入れ替え、また前を見直す方法です。隣り合う2つの作業の順序を逆にしたときの遅れをくらべ、よい方に並べ替えます。C言語の前置減分(--i)は、iを1つ減らした後の値で配列を指せるので、前の要素に戻って調べ直すときに役立ちます。
解き方
- 順番どおりに実行したときの遅延日数と、2つを逆にしたときの遅延日数をくらべ、逆順の添字の作り方から空欄aを求めます。
- wt_a > wt_b のとき job_sch[i] と job_sch[i+1] を入れ替える処理から空欄bを、直前の作業の完了時刻を戻す処理から前置減分を含む空欄cを決めます。
- 入れ替えが起きないときに累積日数 ft へ足し込む複合代入演算子 +=(空欄d)を導きます。
- 設問2では図1と図2の順番にそって、累積作業日数 ft、遅延日数 wt(空欄e)、遅延の累積 wt_sum(空欄f)を手で追いかけます。
小問ごとの答え
- 小問 設問1 a:エ
- 入れ替えて実施する場合(wt_bの計算)では、先にi+1番目、次にi番目のサブシステムを実行するため、ループカウンタjが0のときは添字i+1、jが1のときは添字iを指す必要があります。これを満たす式は i - j + 1 です。
- 小問 設問1 b:ア
- 隣接する2つの順序 job_sch[i] と job_sch[i + 1] を交換する典型的なバブルソート様のスワップ処理であるため、一時変数 job_no を介して job_sch[i + 1] と交換します。
- 小問 設問1 c:カ
- 順序を入れ替えた際、i > 0 ならば手前の要素との比較に戻るために i を1デクリメントし、かつ直前に完了していた作業日数分を ft から差し引く必要があります。前置減分演算子 --i を用いることで、iを1減らした上で新しい i(元の i - 1)のジョブ日数を ft から減算できます。
- 小問 設問1 d:イ
- 順序を入れ替えない(elseブロック)場合、i番目の開発作業が確定するため、その作業日数を累積作業日数 ft に加算し(+=)、後置インクリメント i++ で次の位置へ進めます。
- 小問 設問2 e:ウ
- 3行目に出力されるサブシステム(i=2)は job_sch[2]=1(GGL08001)です。累積作業日数 ft は 25 + 21 + 27 = 73 となり、目標作業期間 29 に対する遅延日数 wt は 73 - 29 = 44 日となります。
- 小問 設問2 f:カ
- 遅延日数の累積合計 wt_sum は、1番目が0、2番目(MS016101: 完了46、目標30、遅延16)が16、3番目が44であるため、累計は 16 + 44 = 60 日となります。
覚えるポイント
- 前置減分演算子(--i)は値を減算した後に式を評価し、後置(i--)は評価後に減算する。
- 隣接交換法による最適化では、交換が発生した際に前方の比較へ巻き戻す必要がある。
間違えやすいところ
- 前置と後置の演算子を評価するタイミングを混同し、空欄cで i-- を選んでしまう誤りです。
- 設問2の出力で、1つ分の遅延日数 wt と累積遅延日数 wt_sum の列を取りちがえる誤りです。
出題の前提:問題文および正誤表(平成28年10月16日実施)の記述に基づく。
出典:IPA『2016年度 秋期 午後』
公式問題冊子 p.2 ↗(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 / 整列併合 (SORT) / マスタファイル更新 / OCCURS句と配列操作
従業員の健康診断結果を記録した順ファイル(結果ファイル)を読み込み、過去10回分の履歴を保持する健康診断マスタファイルに反映・更新するCOBOLプログラムに関する問題である。結果ファイルの先頭レコード(様式1)から受診日を保持し、後続の受診結果レコード(様式2)を従業員番号で整列した上で、マスタファイルと突き合わせて履歴をシフトして最新結果を格納する。さらに、未受診者や所見のある従業員を抽出・表示する改修内容について空欄 a ~ g を埋めよ。
- 設問1 a [ア]
- MOVE RSLT-DATE TO NEW-DATE
- 設問1 a [イ]
- MOVE ZERO TO CNT
- 設問1 a [ウ]
- MOVE ZERO TO NEW-DATE
- 設問1 a [エ]
- PERFORM RET-PROC
- 設問1 a [オ]
- RELEASE SORT-REC
- 設問1 a [カ]
- RELEASE SORT-REC FROM RSLT-REC
- 設問1 b [ア]
- MOVE RSLT-DATE TO NEW-DATE
- 設問1 b [イ]
- MOVE ZERO TO CNT
- 設問1 b [ウ]
- MOVE ZERO TO NEW-DATE
- 設問1 b [エ]
- PERFORM RET-PROC
- 設問1 b [オ]
- RELEASE SORT-REC
- 設問1 b [カ]
- RELEASE SORT-REC FROM RSLT-REC
- 設問1 c [ア]
- MST-NO = SORT-NO
- 設問1 c [イ]
- MST-NO < SORT-NO
- 設問1 c [ウ]
- MST-NO > SORT-NO
- 設問1 c [エ]
- MST-NO NOT = SORT-NO
- 設問1 d [ア]
- FROM 0 BY 1
- 設問1 d [イ]
- FROM 9 BY -1
- 設問1 d [ウ]
- FROM 10 BY -1
- 設問1 d [エ]
- FROM CNT BY 1
- 設問2 e [ア]
- 行番号34と35の間
- 設問2 e [イ]
- 行番号45と46の間
- 設問2 e [ウ]
- 行番号51と52の間
- 設問2 e [エ]
- 行番号52と53の間
- 設問2 f [ア]
- MOVE 1 TO CNT
- 設問2 f [イ]
- MOVE 10 TO CNT
- 設問2 f [ウ]
- MOVE MST-DATE(1) TO NEW-DATE
- 設問2 f [エ]
- MOVE ZERO TO NEW-DATE
- 設問2 g [ア]
- MST-WEIGHT(1) >= MST-WEIGHT(2) + 4 OR MST-WEIGHT(1) <= MST-WEIGHT(2) - 4
- 設問2 g [イ]
- MST-WEIGHT(1) >= MST-WEIGHT(CNT) + 4 OR MST-WEIGHT(1) <= MST-WEIGHT(CNT) - 4
- 設問2 g [ウ]
- MST-WEIGHT(10) >= MST-WEIGHT(9) + 4 OR MST-WEIGHT(10) <= MST-WEIGHT(9) - 4
- 設問2 g [エ]
- MST-WEIGHT(10) >= MST-WEIGHT(CNT) + 4 OR MST-WEIGHT(10) <= MST-WEIGHT(CNT) - 4
解答・解説を表示
解答
設問1 a: ア, 設問1 b: カ, 設問1 c: ア, 設問1 d: イ, 設問2 e: ウ, 設問2 f: ア, 設問2 g: ア
解説
まず要点:COBOLのSORT文は、INPUT PROCEDUREでレコードを渡し、OUTPUT PROCEDUREで整列結果を取り出して突き合わせます。整列入力ではRELEASE文でレコードを整列プログラムに渡し、整列出力ではRETURN文で受け取ります。配列(OCCURS)を右にずらすときは、値を壊さないよう後ろの要素から前へ向かって順に移すのが決まりです。
解き方
- 結果ファイルの作り(先頭1件が受診日の様式1、以降が結果の様式2)を確かめ、ソート前の受診日退避(空欄a)とソート入力でのRELEASE命令(空欄b)を求めます。
- 整列した受診者とマスタを突き合わせる終了条件(空欄c)を見つけ、履歴の配列をずらす添字の開始値と増分(空欄d)を決めます。
- すべての受診者の突合せが終わった後に残ったマスタを「NO-DATA」として処理する追加箇所の行番号(空欄e)を判断します。
- 部分参照で文字列を作る開始位置の初期化(空欄f)と、今回と前回の体重をくらべる条件式(空欄g)を導きます。
小問ごとの答え
- 小問 設問1 a:ア
- 結果ファイルの先頭レコードは受診日(様式1)を保持しているため、直後のSORT処理へ入る前に受診日を変数 NEW-DATE に退避しておく必要があります(MOVE RSLT-DATE TO NEW-DATE)。
- 小問 設問1 b:カ
- 入力手続き REL-PROC 内で読み込んだ受診結果レコード(様式2)を整列用ファイルへ引き渡すには、RELEASE SORT-REC FROM RSLT-REC 命令を使用します。
- 小問 設問1 c:ア
- マスタファイルは従業員番号昇順に整列されているため、SORT-FILEから取り出した SORT-NO と等しいレコードに達するまでマスタを順読みして突き合わせます(MST-NO = SORT-NO)。
- 小問 設問1 d:イ
- 過去10回分の履歴配列に最新データを先頭(1)へ挿入するため、既存の要素を後方へシフトします。要素9を10へ、8を9へと順次コピーするため、添字CNTは FROM 9 BY -1 で CNT=0 まで繰り返します。
- 小問 設問2 e:ウ
- 未受診者の表示処理は、SORT-FILEの処理(受診者の突き合わせ)が全て完了した後に、マスタファイルの末尾までに残っている未読レコードを出力する処理です。したがって RET-PROC のループ終了直後である行番号51と52の間に配置します。
- 小問 設問2 f:ア
- 作業領域 DISP-WK に対して文字列を連結出力する際、部分参照 DISP-WK(CNT:) を用いており、文字追加ごとに文字数分(7や15)を加算しています。したがって先頭位置を示す CNT の初期値は 1(MOVE 1 TO CNT)です。
- 小問 設問2 g:ア
- 今回受診した体重は MST-WEIGHT(1)、前回の体重は直前にシフトされた MST-WEIGHT(2) に格納されています。増減が4kg以上である条件は MST-WEIGHT(1) >= MST-WEIGHT(2) + 4 OR MST-WEIGHT(1) <= MST-WEIGHT(2) - 4 です。
覚えるポイント
- COBOLのSORT文では、INPUT PROCEDUREでRELEASE、OUTPUT PROCEDUREでRETURNを用いる。
- 配列要素を右(後方)にシフトする際は、後方の要素から順にコピーしないと値が上書きされる。
間違えやすいところ
- 配列をずらすループで FROM 10 を指定し、OCCURS 10 の範囲外を参照してしまう誤りです。
- 文字列の部分参照 DISP-WK(CNT:) の初期化で、0文字目と勘違いして MOVE 0 TO CNT を選ぶ誤りです(COBOLの添字は1始まり)。
出題の前提:問題文のプログラムおよびCOBOL仕様に基づく。
出典:IPA『2016年度 秋期 午後』
公式問題冊子 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プログラム(電卓プログラムと列挙型)
ソフトウェア開発 · Java / 列挙型 / スタック / オブジェクト指向
整数値の加減乗除を行う電卓プログラムに関する次のJavaプログラム(プログラム1〜5)を読み、設問1・設問2に答えよ。 電卓は数字キー、演算キー(+,-,*,/)、イコールキー(=)、クリアキー(C)を持つ。各キーが押されたときの処理をインタフェースKeyを実装した列挙型DigitKeyおよびOperationKeyで定義し、電卓本体を表すCalculatorクラスでスタックを用いて計算を実行する。
- 設問1 a ア
- extends
- 設問1 a イ
- implements
- 設問1 a ウ
- imports
- 設問1 a エ
- inherits
- 設問1 a オ
- requires
- 設問1 a カ
- throws
- 設問1 b, c ア
- ordinal()
- 設問1 b, c イ
- stack.peek()
- 設問1 b, c ウ
- stack.pop()
- 設問1 b, c エ
- stack.push(0)
- 設問1 b, c オ
- stack.push(ordinal())
- 設問1 b, c カ
- values()
- 設問1 d ア
- DigitKey
- 設問1 d イ
- Key
- 設問1 d ウ
- stack.pop()
- 設問1 d エ
- this
- 設問1 d オ
- val1
- 設問1 d カ
- val2
- 設問1 e ア
- Calculator
- 設問1 e イ
- Character
- 設問1 e ウ
- DigitKey
- 設問1 e エ
- Integer
- 設問1 e オ
- Key
- 設問1 e カ
- OperationKey
- 設問2 f, g ア
- 0
- 設問2 f, g イ
- 2
- 設問2 f, g ウ
- 4
- 設問2 f, g エ
- 8
- 設問2 f, g オ
- 16
- 設問2 f, g カ
- 32
- 設問2 f, g キ
- 64
- 設問2 f, g ク
- ArithmeticException
- 設問2 f, g ケ
- Error
解答・解説を表示
解答
設問1 a: イ, 設問1 b: ウ, 設問1 c: ア, 設問1 d: エ, 設問1 e: オ, 設問2 f: イ, 設問2 g: ケ
解説
まず要点:Javaの列挙型(enum)はクラスの一種で、インタフェースを実装したり、メソッドを定義したりできます。電卓はスタック(後から入れた値を先に取り出す入れ物)に数を積み、演算キーやクリアキーの状態に合わせて計算します。
解き方
- enumの宣言の書き方と、ジェネリクス型でインタフェースを指定する規則を確かめます。
- DigitKeyとOperationKeyのoperateOnメソッドのスタック操作と、thisの指すものを整理します。
- CalculatorのonKeyPressedの状態の移り変わりにそって、各テスト文字列を入力したときのスタックと出力を追いかけます。
小問ごとの答え
- 小問 設問1 a:イ
- Javaの列挙型(enum)がインタフェースを実装する際に用いるキーワードはimplementsです。
- 小問 設問1 b:ウ
- 入力中の数値を1桁左シフトするために、スタック最上位の値を取り出すstack.pop()を指定します。
- 小問 設問1 c:ア
- DigitKeyの定数(DIGIT0〜DIGIT9)の数値を表す序数を取得するためにordinal()を呼び出します。
- 小問 設問1 d:エ
- OperationKeyのインスタンスメソッド内において、自身(ADDなど)に応じてswitch文で分岐させるためthisを指定します。
- 小問 設問1 e:オ
- MapにはOperationKeyとDigitKeyの両方の定数を格納するため、共通の型であるKeyインタフェースを指定します。
- 小問 設問2 f:イ
- 文字列"2*4C2="では、'C'でreset()が実行されてスタックが[0]となり、直後の'2'で[2]となり'='で2が表示されるため2となります。
- 小問 設問2 g:ケ
- 文字列"8/2/="では、最後の'/'の処理後にスタックに0が積まれ、'='実行時に4/0のゼロ除算でArithmeticExceptionを捕捉してErrorを出力します。
覚えるポイント
- Javaのenumはクラスの一種でimplementsによりインタフェースを実装可能であること
- enumの各定数の宣言順序(0始まり)はordinal()メソッドで取得できること
間違えやすいところ
- 演算キーが続けて押されるとスタックに0が積まれる仕様を見落とし、0で割る例外を見逃すことです。
- CLEARキーが押されるとスタックが初期化されpendingKeyがnullになる動きを見落とすことです。
出題の前提:平成28年度秋期 基本情報技術者試験 午後 問11 出題仕様
出典:IPA『2016年度 秋期 午後』
公式問題冊子 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 / COMET II / 単方向リスト / ポインタ操作
単方向リストに対して要素を挿入又は削除するアセンブラ副プログラムLPROCに関するプログラムを読み、設問1〜3に答えよ。 リストの各要素は連続する2語から成り、1語目に次の要素へのポインタ、2語目に保持する値が格納される。末尾要素の1語目は0である。主プログラムはGR0に挿入値、GR1にROOTのアドレス、GR2に位置n、GR3に操作種別(0:挿入, 1:削除)を設定してLPROCを呼び出す。副プログラムEGETは新領域を確保してGR2にその先頭アドレスを返し、EFREEはGR2で指定された要素を解放する。
- 設問1 a ア
- JMI FIN
- 設問1 a イ
- LAD GR1, 1, GR1
- 設問1 a ウ
- LAD GR4, 1, GR4
- 設問1 a エ
- LD GR1, GR2
- 設問1 a オ
- LD GR1, 0, GR2
- 設問1 b ア
- LD GR4, 0, GR1
- 設問1 b イ
- LD GR4, 0, GR2
- 設問1 b ウ
- ST GR2, 0, GR1
- 設問1 b エ
- ST GR2, 0, GR2
- 設問1 b オ
- ST GR4, 0, GR1
- 設問1 b カ
- ST GR4, 0, GR2
- 設問1 c ア
- LD GR4, 0, GR1
- 設問1 c イ
- LD GR4, 0, GR2
- 設問1 c ウ
- LD GR4, 2, GR1
- 設問1 c エ
- LD GR4, 2, GR2
- 設問1 c オ
- LD GR4, GR1
- 設問1 c カ
- LD GR4, GR2
- 設問2 ア
- 挿入する要素の先頭アドレス
- 設問2 イ
- 要素2の先頭アドレス
- 設問2 ウ
- 要素3の先頭アドレス
- 設問2 エ
- 0
- 設問3 ア
- α1
- 設問3 イ
- α2
- 設問3 ウ
- E1
- 設問3 エ
- E2
- 設問3 オ
- 0
解答・解説を表示
解答
設問1 a: エ, 設問1 b: ウ, 設問1 c: イ, 設問2: ウ, 設問3: ア
解説
まず要点:単方向リストの挿入・削除では、目当ての要素(要素n)だけでなく、その1つ前の要素(要素n-1)のアドレスも持っておく必要があります。挿入では前の要素のポインタを新しい要素へ、新しい要素のポインタを要素nへ向けます。削除では前の要素のポインタを要素n+1へ向けます。
解き方
- LPROCでのレジスタの役割(GR1は直前の要素、GR2は今の要素、GR4はカウンタや退避用のアドレス)をつかみます。
- 要素を順にたどるループでのポインタの更新手順と、NEXTに着いたときの各レジスタの値を追いかけます。
- LINS(挿入)とLDEL(削除)でのポインタの付け替えを整理し、プログラム2の3回の呼び出し後のリストの形を追います。
小問ごとの答え
- 小問 設問1 a:エ
- 要素をたどる際、現在の要素のアドレス(GR2)を直前要素のアドレス(GR1)へ更新するため、LD GR1, GR2 を実行します。
- 小問 設問1 b:ウ
- 要素n-1の1語目(次の要素アドレス)に、EGETで割り当てられた新要素のアドレス(GR2)を設定するため、ST GR2, 0, GR1 を実行します。
- 小問 設問1 c:イ
- 削除する要素n(GR2)の1語目に格納されている「要素n+1のアドレス」をGR4に読み出すため、LD GR4, 0, GR2 を実行します。
- 小問 設問2:ウ
- n=3でループを3回回り、GR4が0になってNEXTへ分岐した直後、GR2には要素3の先頭アドレスが格納されています。
- 小問 設問3:ア
- 初期リストLIST->E3->E1->E2に対し、n=3にα1挿入、n=3にα2挿入、n=3のα2削除を行うと、E3の次ポインタはα1となるためα1です。
覚えるポイント
- 単方向リストの挿入・削除では直前要素(先行ポインタ)のアドレス保持が必須であること
- CASL IIの副プログラム呼び出し規約においてレジスタ退避・復元の範囲を確認すること
間違えやすいところ
- 挿入位置nでは要素nのすぐ手前(要素n-1の後ろ)に入る、という仕様を取りちがえることです。
- 副プログラムから戻るとき、退避した汎用レジスタが元に戻る仕様を見落とすことです。
出題の前提:平成28年度秋期 基本情報技術者試験 午後 問12 出題仕様
出典:IPA『2016年度 秋期 午後』
公式問題冊子 p.59 ↗(www.ipa.go.jp) / 公式問題冊子 p.60 ↗(www.ipa.go.jp) / 公式問題冊子 p.61 ↗(www.ipa.go.jp) / 公式問題冊子 p.62 ↗(www.ipa.go.jp)
改築作業のスケジューリング
ソフトウェア開発(表計算) · 表計算 / 最短経路問題 / 表引き / マクロ
建物の改築作業における工程スケジューリングを表計算ソフトで行う問題である。改築作業には20種類の状態(状態ID: 1〜20)があり、作業によって状態が遷移する(常に開始状態ID<終了状態ID)。 ワークシート「状態遷移」には、状態間の直接遷移に必要な作業日数が格納されている(遷移が存在しない場合は0)。 ワークシート「作業工程」では、指定された状態遷移列について各作業の日数および累積総日数を算出し、遷移が成立しない場合は'×'を表示する。 ワークシート「作業工程(拡張)」およびマクロ「DisplayMinimumPath」では、開始状態IDから終了状態IDへの総日数が最小となる最適な状態遷移列を求め、セルA3以降に出力する。 各設問の空欄 a 〜 f に当てはまる適切なものを解答群から選べ。
- 設問1 a ア
- 表引き(状態遷移!C$3:V$22, A$4, A3)
- 設問1 a イ
- 表引き(状態遷移!C$3:V$22, A4, A$3)
- 設問1 a ウ
- 表引き(状態遷移!C$3:V$22, A4, A3)
- 設問1 a エ
- 表引き(状態遷移!C3:V$22, A$4, A3)
- 設問1 a オ
- 表引き(状態遷移!C3:V$22, A4, A$3)
- 設問1 a カ
- 表引き(状態遷移!C3:V$22, A4, A3)
- 設問1 b ア
- B4 = '×'
- 設問1 b イ
- C3 = '×'
- 設問1 b ウ
- 論理積(B4 = '×', C3 = '×')
- 設問1 b エ
- 論理積(B4 ≠ '×', C3 ≠ '×')
- 設問1 b オ
- 論理和(B4 = '×', C3 = '×')
- 設問1 b カ
- 論理和(B4 ≠ '×', C3 ≠ '×')
- 設問1 c ア
- B3 + B4
- 設問1 c イ
- C3 + B4
- 設問1 c ウ
- C5 - B4
- 設問1 c エ
- C5 - B5
- 設問2 d ア
- Current < F2
- 設問2 d イ
- Current < F3
- 設問2 d ウ
- Current < F3 - F2
- 設問2 d エ
- Current = 0
- 設問2 d オ
- Current = F2
- 設問2 d カ
- Current ≠ F2
- 設問2 e ア
- 照合検索(Current, H3:H22, J3:J22)
- 設問2 e イ
- 照合検索(Current, J3:J22, H3:H22)
- 設問2 e ウ
- 照合検索(NumWork, H3:H22, J3:J22)
- 設問2 e エ
- 照合検索(NumWork, J3:J22, H3:H22)
- 設問2 f ア
- I: 0, I < NumWork, 1
- 設問2 f イ
- I: 0, I ≦ NumWork, 1
- 設問2 f ウ
- I: 1, I ≦ NumWork, 1
- 設問2 f エ
- I: NumWork - 1, I ≧ 0, -1
- 設問2 f オ
- I: NumWork, I > 0, -1
- 設問2 f カ
- I: NumWork, I ≧ 0, -1
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: オ, 設問1 c: イ, 設問2 d: カ, 設問2 e: ア, 設問2 f: カ
解説
まず要点:表計算では、式を複写してもずれないよう固定したい所には「$」を付けた絶対参照を使います。また最短経路(いちばん短い道すじ)を復元するときは、終点から各ノードの1つ前をたどって始点までさかのぼり、できた並びを正しい順に並べ直します。
解き方
- 設問1では、ワークシート「状態遷移」の行と列の配置(終了状態IDが行、開始状態IDが列)と式を複写する向きから、表引き関数の引数と参照の形式を決めます。
- 工程が成り立たない条件を整理し、直前の遷移が不可(B列が'×')か、それ以前の不成立(C列の1行上が'×')のどちらかで不成立になるので論理和を使います。成り立つときは1行上の累積値とその行の日数を足す式を導きます。
- 設問2では、マクロDisplayMinimumPathの処理を追います。Currentが終了状態から開始状態に着くまで直前状態IDを照合検索でさかのぼり、作業数NumWorkを数える条件(Current ≠ F2)を導きます。
- 格納の処理では、Currentが終点から始点へさかのぼるため、相対参照の行番号IをNumWorkから0まで減らしながら(-1刻み)配列に入れます。
小問ごとの答え
- 小問 設問1 a:ウ
- 表引き関数で「状態遷移」シート(C$3:V$22)を参照する。行の位置には終了状態ID(セルA4)、列の位置には開始状態ID(セルA3)を指定する。下に複写するため行範囲は絶対参照C$3:V$22とし、状態IDの指定は下方向に変化させるため相対参照(A4、A3)とする。
- 小問 設問1 b:オ
- 直前の遷移が存在しない(B4 = '×')か、あるいはそれ以前の累積総日数が算出不能(C3 = '×')のいずれか一方でも満たす場合は総日数も'×'となるため、論理和(B4 = '×', C3 = '×')が適切である。
- 小問 設問1 c:イ
- 累積総日数は、1つ前の工程までの総日数(C3)に今回の工程の所要日数(B4)を加算して求めるため、C3 + B4 となる。A4が空値の場合はB4が0になるため、C3と同じ値が維持される仕様も満たす。
- 小問 設問2 d:カ
- Currentは終了状態ID(F3)から直前の状態IDへと開始状態ID(F2)に到達するまで遡る。そのため、開始状態IDに達するまで繰り返す条件として Current ≠ F2 が適切である。
- 小問 設問2 e:ア
- 照合検索関数の書式は「照合検索(式, 検索範囲, 抽出範囲)」である。現在着目している状態ID Current を列H(H3:H22)から検索し、対応する直前の状態IDを列J(J3:J22)から取得するため、照合検索(Current, H3:H22, J3:J22)となる。
- 小問 設問2 f:カ
- 終了状態ID(F3)から直前の状態へと遡って探索するため、配列A3以降の末尾インデックス(NumWork)から先頭インデックス(0)に向かって降順に格納する必要がある。よって I: NumWork, I ≧ 0, -1 が正しい。
覚えるポイント
- 表引き関数の書式は「表引き(セル範囲, 行の位置, 列の位置)」である。
- 照合検索の書式は「照合検索(式, 検索範囲, 抽出範囲)」である。
- 終点から直前ポインタを辿って経路復元する際は、末尾側から配列に詰めることで反転処理を省略できる。
間違えやすいところ
- 式を縦に複写するとき、参照元の表の行固定($3:$22)を忘れて相対参照のままにしてしまうミス。
- 経路探索で終点から始点へさかのぼっているのを見落とし、配列への代入ループを昇順にして経路を逆順に出力してしまうミス。
出題の前提:基本情報技術者試験 午後 表計算ソフトの仕様(出題範囲・標準仕様)に基づく。
出典:IPA『2016年度 秋期 午後』
公式問題冊子 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)
2016年度 秋期 午後
参照した公式資料
IPAが公開した2016年度 秋期 午後の問題・解答資料です。

