旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2016年度 春期 午後の概要
Webサーバに対する不正侵入とその対策
情報セキュリティ · 不正侵入対策 / TLS / 秘密鍵漏えい対策 / ポート制限 / パスワード強度
口コミによる飲食店情報を提供するA社システム(Webサーバ、DBサーバ、FW)において、システム管理者IDおよびパスワードが悪用されてWebサーバへの不正侵入とDBサーバへの侵入が発生した。このインシデントにおける被害状況への適切な対策(表1の空欄a〜c)および、パスワードの文字種と長さによる候補数の強度比較(表2の空欄d、e)に入る最も適切な答えを選択せよ。
- a-ア
- TLSを使用していても不正侵入が行われたことから,TLSの使用を直ちに中止し,通常のHTTPで通信を行う。
- a-イ
- 新たな秘密鍵と公開鍵を生成し,その鍵に対する公開鍵証明書の発行手続を行う。
- a-ウ
- 公開鍵証明書の再発行手続を行い,同じ秘密鍵を使用する。
- a-エ
- 秘密鍵へのアクセスが確認できていないことから,秘密鍵の変更や公開鍵証明書の再発行は行わず,念のため秘密鍵の保管場所を,ネットワーク経由でアクセスできないディレクトリに変更する。
- b-ア
- TelnetやSSH以外にHTTPも利用できるようにするために,HTTPのポートを開放する。
- b-イ
- インターネットからのアクセスをFWで禁止し,TelnetやSSHのポートは閉じる。
- b-ウ
- システム管理者がどこからでもすぐにA社システムのメンテナンスができるように,TelnetやSSHのポートの開放は継続する。
- b-エ
- パスワードやA社システムの実装情報の漏えいを防ぐために,Telnetのポートは閉じ,SSHに限定してポートを開放する。
- c-ア
- 管理者パスワードは変更し,全会員にパスワードの変更を依頼する。
- c-イ
- 管理者パスワードは変更し,漏えいした会員だけにパスワードの変更を依頼する。
- c-ウ
- 管理者パスワードはそのままにし,全会員にパスワードの変更を依頼する。
- c-エ
- 管理者パスワードはそのままにし,漏えいした会員だけにパスワードの変更を依頼する。
- d-ア
- 2×8
- d-イ
- 26
- d-ウ
- 2×26
- d-エ
- 7×8
- d-オ
- 10×26
- d-カ
- 26^2
- e-ア
- 2
- e-イ
- 2×8
- e-ウ
- 26
- e-エ
- 208
- e-オ
- 2^8
- e-カ
- 26^8
解答・解説を表示
解答
a: イ, b: イ, c: ア, d: カ, e: オ
解説
まず要点:セキュリティ事故が起きたら、悪用されたパスワードや鍵はすぐ作り直し、被害が及んだかもしれない範囲は広めに守ります。秘密鍵(暗号通信で使う大事な鍵)が漏れた疑いがあるときは、鍵ペアごと新しくして証明書も出し直します。使わない管理用の入り口(ポート)は閉じます。パスワードの組み合わせ数は(文字の種類数)^(文字数)で増えていきます。
解き方
- 表1の被害状況と問題文の前提(遠隔保守が不要、漏えい範囲が不明など)を整理し、a〜cの対策を決めます。
- TLSの秘密鍵が漏れた疑いがあるときの対処として、鍵ペアの作り直しと証明書の再発行が必要か判断します(a)。
- 保守の必要性を確認し、不要なTelnetとSSHのポートを閉じる対策を選びます(b)。
- 漏えいの有無が分からないときは全会員の安全を優先し、全員にパスワード変更を頼みます(c)。
- 表2の各設定のパスワード総数を(文字種数)^(文字数)で計算し、倍率dとeをべき乗の法則で求めます。
小問ごとの答え
- 小問 a:イ
- Webサーバに不正侵入された場合、サーバ内に保持されているTLS用の秘密鍵が漏えいしたリスクを排除できません。秘密鍵の漏えい疑惑があるときは、既存の鍵ペアを破棄し、新しい秘密鍵と公開鍵を生成した上で公開鍵証明書を再発行してもらう必要があります。
- 小問 b:イ
- 問題文に『現在はリモートメンテナンスの必要性はなくなっている』と記述されています。不要となった管理用サービスは攻撃の足場となるため、FWで外部からのアクセスを遮断し、TelnetおよびSSHのポートを完全に閉じることが適切です。
- 小問 c:ア
- 管理者権限が悪用されたため管理者パスワードの変更は必須です。また会員情報について『それ以外の会員については漏えいの有無を特定できていない』とあるため、安全を確保するには一部ではなく全会員に対してパスワード変更を依頼する必要があります。
- 小問 d:カ
- 英小文字26文字を用いたパスワードの候補数は、6文字の場合は26^6通り、8文字の場合は26^8通りです。(b)は(a)と比較して 26^8 ÷ 26^6 = 26^(8-6) = 26^2 倍となります。
- 小問 e:オ
- (c)の英大文字・英小文字8文字では、1文字あたりの候補数が26+26=52=(2×26)文字となるため、全体で (2×26)^8 = 2^8 × 26^8 通りです。(b)の26^8通りと比較すると、(2^8 × 26^8) ÷ 26^8 = 2^8 倍となります。
覚えるポイント
- 秘密鍵漏えいの恐れがあるときは、鍵ペア自体の再生成と証明書の再発行がセットで必要になる。
- パスワード空間の比率は(新文字種数/旧文字種数)^(長さ) で計算できる。
間違えやすいところ
- 文字種数が2倍になると、組合せ数も2倍や2×文字数倍になると勘違いするミスです。
- 安全が確認できない会員がいるのに、漏えいが確定した会員だけに変更を頼む判断です。
出題の前提:平成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)
リスト構造で管理されているセルとガーベジコレクタ
ソフトウェア · ガーベジコレクション / マークアンドスイープ / リスト構造 / アルゴリズムの計算量
固定長セルをリスト構造で管理する実行環境において、マークアンドスイープ方式のガーベジコレクタ(GC)が実装されている。全セル数をM、GC開始時のLIVEセル数をLとした場合の、マーキング処理量(空欄a)、スイープ処理量(空欄b)、回収可能なガーベジ数(空欄c)、単位時間当たりのGC効率とL/Mの関係を表すグラフ(空欄d)、およびマーキング終了時のマークビット1のセルの状態(設問2)について適切な答えを選択せよ。
- 設問1 a-ア
- L
- 設問1 a-イ
- L-M
- 設問1 a-ウ
- M
- 設問1 a-エ
- M+L
- 設問1 a-オ
- M-L
- 設問1 b-ア
- L
- 設問1 b-イ
- L-M
- 設問1 b-ウ
- M
- 設問1 b-エ
- M+L
- 設問1 b-オ
- M-L
- 設問1 c-ア
- L
- 設問1 c-イ
- L-M
- 設問1 c-ウ
- M
- 設問1 c-エ
- M+L
- 設問1 c-オ
- M-L
- 設問1 d-ア
- L/M=1でGC効率が最大となる単調増加のグラフ
- 設問1 d-イ
- L/Mの中間付近でGC効率が極大となる山型のグラフ
- 設問1 d-ウ
- L/M=0でGC効率が最大となり、L/M=1で0に達する単調減少のグラフ
- 設問1 d-エ
- L/Mの中間付近でGC効率が極小となる谷型のグラフ
- 設問2-ア
- 供給源の管理下にある。
- 設問2-イ
- プログラムが使用中である。
- 設問2-ウ
- プログラムの処理が進む過程で,LIVEリストから切り離された。
- 設問2-エ
- マーキングに続いて行われるスイープで,供給源に返却されることがある。
解答・解説を表示
解答
設問1 a: ア, 設問1 b: ウ, 設問1 c: オ, 設問1 d: ウ, 設問2: イ
解説
まず要点:マークアンドスイープ方式のGC(不要になったメモリを自動で片付ける仕組み)は、使っているものに印をつける「マーク」と、印のないものを回収する「スイープ」の2段階で動きます。マークの手間は生きているセル数Lに、スイープの手間は全体のセル数Mに比例します。全部が使用中(L/M=1)なら回収できる量は0で、効率は最も低くなります。
解き方
- マークはLIVEリストからたどれるL個のセルを、スイープは全M個のセルを調べると理解してaとbを決めます。
- 全セルMと使用中セルLの差から、回収できる不要セル(ごみ)の数を式にしてcを求めます。
- GC効率=回収セル数÷処理時間の関係から、L/M=1で回収0・効率0になる特徴を導きグラフdを選びます。
- マークの定義(LIVEからたどれるセルに印1を付ける)に基づき、印1のセルの状態(設問2)を判断します。
小問ごとの答え
- 小問 設問1 a:ア
- マーキング処理は、ルートであるLIVEからのポインタを順にたどって到達できるセルを探索し、マークビットを1に設定する処理です。到達できるセルは使用中のLIVEセル(L個)そのものであるため、処理量はLに比例します。
- 小問 設問1 b:ウ
- スイープ処理は、メモリ領域の先頭から末尾まで連続して配置されているすべてのセルを走査し、マークビットの状態を調べて処理を行います。走査対象は全セル(M個)であるため、処理量はMに比例します。
- 小問 設問1 c:オ
- GCが起動するのは未使用セルがなくなった時点であるため、メモリ領域内の全M個のセルは「LIVEセル(L個)」または「ガーベジ」のいずれかです。したがって、再利用可能となるガーベジの個数は全セル数からLIVEセル数を引いた M-L となります。
- 小問 設問1 d:ウ
- 単位時間当たりに再利用できるセルの数(GC効率)は、回収されるセル数 (M-L) を所要時間(マーキング処理量 c1・L + スイープ処理量 c2・M)で割った値です。L/M=1のときは回収可能セル数が0個となるため効率は0になり、L/Mが小さくなるほど回収できるセルが増えて効率が高くなります。よってL/M=1で0となる右下がりのグラフ「ウ」が適切です。
- 小問 設問2:イ
- マーキング処理では、LIVEリストから到達できるセル(プログラムが現在使用中のセル)のみをたどってマークビットを1にします。したがってマーキング終了時点でマークビットが1のセルは「プログラムが使用中である」セルです。
覚えるポイント
- マーク処理は到達可能(生存)オブジェクト数に比例し、スイープ処理は全ヒープサイズに比例する。
- メモリ使用率(生存率)が100%に近い状態でのGCは、処理時間に対して回収量が極小となり極めて効率が悪化する。
間違えやすいところ
- スイープが調べるのはごみだけだと誤解し、処理量をM-Lとする間違いです。
- L/M=1のときの効率を考えず、グラフを直感や山型で選んでしまうミスです。
出題の前提:平成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句とHAVING句
遊園地Yにおける入園者情報の関係データベースの再設計とSQLに関する問題である。入園者はアトラクション利用時にICカードを読み取らせて記録を行う。入園者表、券種表、利用表、アトラクション表の設計および抽出用SQLについて、設問1〜4の空欄に入る適切な記述や抽出結果を選択せよ。
- ア
- 2015年以前に1回も入園していない会員
- イ
- 2016年以降に1回以上,入園した会員
- ウ
- 2016年以降に1回だけ,入園した会員
- エ
- 2016年以降に1回も入園していない会員
解答・解説を表示
解答
設問1 a: オ, 設問1 b: エ, 設問2 c: イ, 設問3 d: ウ, 設問4: エ
解説
まず要点:関係データベースでは、項目を増やすと新しく分かる情報が増えます。集計ではGROUP BYでグループに分け、COUNTやSUMなどの集計関数を使います。集計した後の条件は、WHERE句ではなくHAVING句に書きます。
解き方
- 表の定義に足された項目(退園時刻やアトラクション利用履歴)から分かる情報を洗い出します。
- SQLの集計では行数を数えるのにCOUNT(*)を使い、グループ化後の合計の条件はHAVING句に集計関数で書きます。
- MAX(日付)が特定の日より前という条件から、直近の利用が過去に限られ、それ以降の利用がないと判断します。
小問ごとの答え
- 小問 設問1 a:オ
- 入園者表に入園時刻と退園時刻の両方が記録されるため、その差を計算することで「入園者の滞在時間」を把握できるようになります。
- 小問 設問1 b:エ
- 利用表には入園者番号ごとに利用時刻とアトラクション番号が都度記録されるため、「入園者のアトラクション利用状況」が分かるようになります。
- 小問 設問2 c:イ
- アトラクションごとの延べ利用者数は、利用表において該当アトラクションが利用された行数そのものであるため、COUNT(*)によって行数を集計します。
- 小問 設問3 d:ウ
- 入園者番号ごとに精算金額を集計するためGROUP BY 入園者表.入園者番号を指定し、合計利用金額が2000円以上という条件はHAVING SUM(アトラクション表.料金) >= 2000で絞り込みます。
- 小問 設問4:エ
- HAVING MAX(入園者表.入園日) < '20160101'は、その会員の最も新しい入園日が2016年1月1日より前であることを表すため、「2016年以降に1回も入園していない会員」が抽出されます。
覚えるポイント
- WHERE句は行の絞り込み、HAVING句はGROUP BYによる集計結果の絞り込みに用いる。
- 延べ回数や延べ件数を求める際は行数カウントのCOUNT(*)を使用する。
間違えやすいところ
- 集計後の合計金額の条件をHAVING SUMではなくWHERE句に書いてしまうミスです。
- MAX(日付)<Xの条件を「X以前に一度も利用していない」と逆に解釈するミスです。
出題の前提:基本情報技術者試験 午後問3(データベース分野)の出題基準および標準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)
イーサネットを介した通信とARPによるアドレス解決
ネットワーク · ARP(アドレス解決プロトコル) / イーサネットフレーム構造 / 同一サブネットとルータ経由のパケット転送
イーサネットを介したIPパケットの送受信とARP(Address Resolution Protocol)の仕組みに関する問題である。IPデータグラムのカプセル化、MACアドレスのビット長と表現可能な個数、同一ネットワーク内および異なるネットワーク宛てにパケットを送信する際のARP要求の宛先について、設問1・2の各空欄に当てはまる適切な選択肢を選べ。
- ア
- ブリッジC
- イ
- ホストD
- ウ
- ホストE
- エ
- ホストF
- オ
- ルータG
- カ
- ルータH
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: オ, 設問1 c: ウ, 設問2 d: ウ, 設問2 e: オ
解説
まず要点:イーサネットでは、IPデータグラム(IPのパケット)をフレームのデータ部分に入れて送ります。ARPは相手のMACアドレス(ネットワーク機器の住所)を調べる仕組みです。同じネットワーク内なら相手自身に、別のネットワークなら出入口のルータ(デフォルトゲートウェイ)に対してARP要求を送ります。
解き方
- プロトコルの階層から、上位のIPデータグラムが下位のイーサネットフレームのデータ部に入ることを確認します。
- MACアドレスのビット長(48ビット)から、表せる個数の式2^48を導きます。
- ARP要求は相手のMACアドレスを知るためのものなので、ブロードキャストで送られることを確認します。
- 送信先IPが自分と同じネットワークか別かを判定し、同じなら相手、別なら出入口のルータをARPの対象にします。
小問ごとの答え
- 小問 設問1 a:ウ
- ネットワーク層のIPデータグラムは、下位のデータリンク層であるイーサネットフレームの「データ部に格納」されてカプセル化されます。
- 小問 設問1 b:オ
- MACアドレスの長さは48ビットであるため、表現可能なアドレスの総数は2の48乗(2^48)個となります。
- 小問 設問1 c:ウ
- 通信相手のMACアドレスが不明な段階で送信するARP要求は、セグメント内の全ホストに届くよう「ブロードキャスト」で送信されます。
- 小問 設問2 d:ウ
- ホストDとホストEは同じ192.168.1.0/24のネットワークに所属しているため、宛先である「ホストE」のIPアドレスに対するARP要求を送信します。
- 小問 設問2 e:オ
- ホストDから別ネットワーク(172.16.1.0/24)のホストFへ送信する場合、同一セグメントのデフォルトゲートウェイである「ルータG」のMACアドレスが必要となるため、ルータGのIPアドレスに対してARP要求を送信します。
覚えるポイント
- MACアドレスは48ビット(2^48通り)で表現される。
- 他ネットワークへの送信時は、宛先ホストではなくデフォルトゲートウェイのMACアドレスをARPで解決する。
間違えやすいところ
- 別ネットワーク宛てなのに、宛先ホストのIPで直接ARP要求を出してしまう誤りです。
- イーサネットフレームの中でIPデータグラムがヘッダ部に入ると勘違いする誤りです。
出題の前提:基本情報技術者試験 午後問4(ネットワーク分野)の出題基準およびTCP/IP標準規格に準拠。
出典:IPA『2016年度 春期 午後』
公式問題冊子 p.18 ↗(www.ipa.go.jp) / 公式問題冊子 p.19 ↗(www.ipa.go.jp) / 公式問題冊子 p.20 ↗(www.ipa.go.jp)
スマートフォンを用いた店舗検索システムの設計
ソフトウェア設計 · Webシステムアーキテクチャ / シーケンス図 / オフライン対応設計
首都圏に約50店舗をもつ生鮮食料品の販売店E社が導入を計画している、スマートフォンを用いた店舗検索システムに関する記述を読み、各設問に答えよ。 本システムはスマートフォン(ブラウザ/Webアプリ)、Webサーバ、ファイルサーバで構成され、店舗データファイル(店舗番号、店舗名、市区町村名、住所、電話番号、特売情報)とお気に入りデータファイル(店舗番号、お気に入り数)を保持する。 Web方式とWebアプリ方式の2つの実装方式を比較検討しており、電波圏外になっても検索操作を継続できる要件(新規要件)への対応を含めて設計を行う。
- ア
- 設問ごとの各解答群における選択肢「ア」
- イ
- 設問ごとの各解答群における選択肢「イ」
- ウ
- 設問ごとの各解答群における選択肢「ウ」
- エ
- 設問ごとの各解答群における選択肢「エ」
- オ
- 設問ごとの各解答群における選択肢「オ」
- カ
- 設問ごとの各解答群における選択肢「カ」
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: ア, 設問1 c: ア, 設問1 d: ウ (または ア), 設問1 e: ア (または ウ), 設問2: ア, 設問3: イ
解説
まず要点:Web方式はサーバ側で処理してHTML画面を作って返します。Webアプリ方式は端末側でアプリを動かし、必要なデータだけを取りに行きます。電波が届かない所でも使えるようにするには、必要なデータをあらかじめ端末に保存しておく設計が有効です。
解き方
- 各処理(処理A〜C)で表示・更新する項目と、2つのデータファイルの項目(図1、図2)を照らし合わせ、a・bと設問2を決めます。
- 図3と図4のシーケンス図から、各方式でブラウザ・Webサーバ・ファイルサーバの間でやり取りされる内容を読み取ります。
- 圏外時の要件から、無線区間(ブラウザとWebサーバの間)と画面を作る主体の違いに注目し、c〜eを導きます。
小問ごとの答え
- 小問 設問1 a:ウ
- Web方式の処理B(検索結果画面の表示)において、画面には店舗名・住所・電話番号・特売情報に加え「お気に入り数」も表示するため、店舗データファイルとお気に入りデータファイルの両方の情報が必要です。
- 小問 設問1 b:ア
- Web方式の処理C(お気に入りボタン押下時)において、ファイルサーバへお気に入り数に1加えることを要求した後に再表示を行うため、ファイルサーバから返却されるのは「お気に入りデータファイル」の情報です。
- 小問 設問1 c:ア
- Web方式では、画面切り替えのたびに「ブラウザがWebサーバに都度要求し、Webサーバが生成する必要がある」ため、サーバへの通信が不可欠となります。
- 小問 設問1 d:ウ
- モバイル端末が圏外になると通信できなくなるのは、無線通信を行っている「ブラウザ」と「Webサーバ」の間(dとeは順不同)です。
- 小問 設問1 e:ア
- 無線通信が切断される区間は「ブラウザ」と「Webサーバ」の間であるため、dがブラウザであればeは「Webサーバ」となります。
- 小問 設問2:ア
- お気に入りデータファイルには「店舗番号」と「お気に入り数」のみが保持されているため、特定の店舗のお気に入り数を抽出するための必須項目は「店舗番号」です。
- 小問 設問3:イ
- シーケンス図(図3および図4)より、ファイルサーバへ要求を発行しているのは、Web方式では「Webサーバ」、Webアプリ方式では端末上で動作する「ブラウザ」です。
覚えるポイント
- Web方式は画面遷移ごとにサーバ通信が必要だが、Webアプリ方式はデータを先読みすればオフライン操作が可能になる。
間違えやすいところ
- お気に入りデータファイルが店舗番号とお気に入り数だけだと見落とし、店舗名や市区町村名で抽出できると誤解しやすいです。
出題の前提:基本情報技術者試験 平成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)
ソフトウェアパッケージ導入時の調達先選定と定量的リスク分析
プロジェクトマネジメント · 調達先選定 / 定量的リスク分析 / リスク対応策の策定 / リスク評価マトリックス
C社における会計システムの再構築を目的とした、ソフトウェアパッケージ導入時の調達先選定に関する記述を読み、各設問に答えよ。 有力候補であるL社、M社、N社から提案を受け、重み付け評価基準による総合評価を行った。また、プロジェクト管理規程に基づき、発生確率と影響度の積が6以上となるリスク項目に対して概算見積費用の10%をリスク対策費用として見込むリスク評価を実施する。
- ア
- 設問ごとの各解答群における選択肢「ア」
- イ
- 設問ごとの各解答群における選択肢「イ」
- ウ
- 設問ごとの各解答群における選択肢「ウ」
- エ
- 設問ごとの各解答群における選択肢「エ」
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: ア, 設問2 c: エ, 設問2 d: イ, 設問2 e: イ
解説
まず要点:パッケージ導入では、アドオンやカスタマイズ(改造)を避け、業務をパッケージの標準に合わせるのが基本です。リスク管理では、発生確率と影響度をかけ合わせてリスク値を出し、基準を超える大きなリスクにはあらかじめ対策費用を用意します。
解き方
- 表1の評価基準に従い、M社の見積金額の評点と重みをかけてaを出し、各社の合計点を比べてb(L社)を決めます。
- 「業務プロセスと運用フローはパッケージの機能だけで実現する」という前提から、改造を伴わないリスク対策(c)を選びます。
- 項番1のリスク「業務設計の遅延」の直接のきっかけ(d)を、業務設計・改訂の流れから特定します。
- 表2・表3のリスク評価に基づき、N社の概算見積金額4,500万円の10%(450万円)をeとして求めます。
小問ごとの答え
- 小問 設問1 a:ウ
- M社の概算見積金額は3,800万円であり、C社予算上限5,000万円の76%(80%以下)に該当するため評価基準の評点は4です。重み30を乗じることで 4 × 30 = 120 となります。
- 小問 設問1 b:ア
- 各社の総合評価点は、L社が 80 + 20 + 120 + 80 + 60 = 360点、M社が 80 + 20 + 0 + 80 + 120 = 300点、N社が 40 + 20 + 120 + 40 + 60 = 280点(適合数32は64%で評点2×20=40)となり、最も高いのはL社です。
- 小問 設問2 c:エ
- 本文冒頭で「業務プロセス及び運用フローについては、パッケージの機能だけで実現する計画である」と明記されているため、パッケージの適合度が低いことへの対策は追加開発ではなく「パッケージを適用する際のC社の業務プロセス、運用フローの見直しについて、C社内の有識者社員から成る検討要員を増員する」ことになります。
- 小問 設問2 d:イ
- 項番1のリスクは「業務プロセス、運用フローの変更項目が多く、業務設計が遅延する」であるため、対策発動の契機(トリガー)は「業務プロセス、運用フローの改訂作業量の増加」が適切です。
- 小問 設問2 e:イ
- N社について発生確率×影響度の積を計算すると、項番1は 普通(2)×大(3) = 6、項番2は 低い(1)×中(2) = 2、項番3は 普通(2)×大(3) = 6 となり、項番1と3の2項目が「6以上」に該当します。1項目ごとに概算見積費用(4,500万円)の10%(450万円)を盛り込むため、対策費用の合計は 450万円 × 2 = 900万円ではなく、問題文は「項番1のリスクに対する」対策費用を指している文脈であるため 4,500万円 × 10% = 450万円となります。
覚えるポイント
- パッケージ導入の前提条件(ノンカスタマイズ方針)を読み落とさず、対策の選択肢から除外する。
- リスク対策費用は「発生確率×影響度」が基準値(本問では6)以上の項目ごとに所定の割合(10%)を計上する。
間違えやすいところ
- パッケージの適合度が低いときの対策として、安易に「カスタマイズ」を選んでしまう誤りです。
- eでN社の対象リスクが2項目あることから450万円×2=900万円(エ)を選んでしまう誤りです(文脈は項番1のリスク1つを指す)。
出題の前提:基本情報技術者試験 平成28年度春期 午後問題 問6 資料・仕様
出典:IPA『2016年度 春期 午後』
公式問題冊子 p.26 ↗(www.ipa.go.jp) / 公式問題冊子 p.27 ↗(www.ipa.go.jp) / 公式問題冊子 p.28 ↗(www.ipa.go.jp) / 公式問題冊子 p.29 ↗(www.ipa.go.jp)
販売データの分析(ID-POSを用いたリピート率分析と施策評価)
システム戦略 · ID-POS / リピート率 / バブルチャート / 費用対効果分析
洋菓子を店舗販売するB社における、ID-POSの購買履歴データを活用したリピート分析および売上拡大施策の費用対効果評価に関する問題である。提示された購入人数、延べ購入回数、売上金額のデータとバブルチャート、及び施策の費用・効果の見積もりに基づき、空欄a〜gに入る適切な組合せを答える。
- 設問1 a
- 商品S(ア)
- 設問1 b
- 商品U(ウ)
- 設問1 c
- 商品の素材や味を見直す(イ)
- 設問1 d
- 商品の認知度を高める(ウ)
- 設問1 e
- 購入人数が増えれば(イ)
- 設問2 f
- 売上金額は2,823千円となり,効果額は444千円(エ)
- 設問2 g
- 投資効果はあるが,リピート率は低下(ア)
解答・解説を表示
解答
設問1 a: ア, 設問1 b: ウ, 設問1 c: イ, 設問1 d: ウ, 設問1 e: イ, 設問2 f: エ, 設問2 g: ア
解説
まず要点:ID-POS分析では、延べ購入回数と購入人数からリピート率を出し、商品の課題が「知られていない」のか「繰り返し買われない」のかを見分けます。その上で、適切な販促のやり方と費用対効果を確かめます。
解き方
- 表1の購入人数と延べ購入回数から各商品のリピート率を計算し、図3のバブルチャート(横軸:購入人数、縦軸:リピート率)と照合して商品S(a)と商品U(b)を特定します。
- 商品の特徴に合った改善の方向(リピート率の改善か認知度の拡大か)を文脈から読み取り、c・d・eを決めます。
- 商品Uの単価(300円×2個=600円/回)と延べ購入回数の増分(1,240回)から売上増加額(744千円)を求め、広告費(300千円)を引いて効果額(444千円)と新売上(2,823千円)を出します。
- 効果額÷費用の比率(1.48>1)で投資効果の有無を判断し、施策後のリピート率(約59.4%へ低下)と比べます。
小問ごとの答え
- 小問 設問1 a:ア
- 図3のバブルチャートにおいて、aは購入人数が約4,800人と多く、リピート率が約10%と最も低い位置にある。表1より商品Sの購入人数は4,782人、リピート率は(5,217-4,782)/5,217*100≒8.3%であり、aに対応する商品はS(ア)である。
- 小問 設問1 b:ウ
- 図3のbは、購入人数が約1,300人、リピート率が約60%超の位置にある。表1より商品Uの購入人数は1,312人、リピート率は(3,465-1,312)/3,465*100≒62.1%であるため、bに対応する商品はU(ウ)である。
- 小問 設問1 c:イ
- 商品a(S)は購入人数が多いもののリピート率が極端に低いため、1回購入した顧客が再購入していない。商品自体の魅力を高めて再購入を促す必要があり、「商品の素材や味を見直す」(イ)が適切である。
- 小問 設問1 d:ウ
- 商品b(U)はリピート率が約62%と高い一方で、購入人数が少ない。試食会などを開催して「商品の認知度を高める」(ウ)ことで、新規の購入者を呼び込む施策が適切である。
- 小問 設問1 e:イ
- 商品bは既にリピート率が高いため、試食会等で認知度を高めて「購入人数が増えれば」(イ)、リピート購入による売上の拡大が期待できる。
- 小問 設問2 f:エ
- 商品Uの現在の売上は2,079千円(延べ3,465回、1回あたり平均2個で単価300円なら1回600円)。延べ購入回数が1,240回増加すると、増加額は1,240回×600円=744千円となる。したがって施策後の売上金額は2,079+744=2,823千円。効果額は売上増加額744千円から広告費用300千円を引いた444千円となる(エ)。
- 小問 設問2 g:ア
- 投資効果の割合は効果額444千円÷費用300千円=1.48となり1より大きいため「投資効果はある」。施策後の購入人数は1,312+600=1,912人、延べ購入回数は3,465+1,240=4,705回となり、施策後のリピート率は(4,705-1,912)/4,705*100≒59.4%と元の62.1%から低下する。よって「投資効果はあるが,リピート率は低下」(ア)となる。
覚えるポイント
- リピート率=(延べ購入回数-購入人数)÷延べ購入回数×100
- 投資効果=売上増加額から費用を引いた効果額÷費用
間違えやすいところ
- 商品Uの売上増加額を出すとき、1回の購入で平均2個(600円)買う条件を見落とし、300円で計算してしまう誤りです。
- 正誤表で表2の延べ購入回数の増加の単位が「人」から「回」に直されている点に注意します。
出題の前提:平成28年度春期 基本情報技術者試験 午後 問7
出典:IPA『2016年度 春期 午後』
公式問題冊子 p.30 ↗(www.ipa.go.jp) / 公式問題冊子 p.31 ↗(www.ipa.go.jp) / 公式問題冊子 p.32 ↗(www.ipa.go.jp) / 公式問題冊子 p.33 ↗(www.ipa.go.jp) / 公式問題冊子 p.34 ↗(www.ipa.go.jp)
簡易メモ帳のメモリ管理(配列操作とガーベジコレクション)
データ構造及びアルゴリズム · 配列 / ポインタ管理 / 文字列格納 / コンパクション / ガーベジコレクション
携帯端末上で稼働する簡易メモ帳のメモリ管理アルゴリズムに関する問題である。可変長メモを文字列用配列Data[]とポインタ配列Memo[]を用いて管理し、追加・削除・変更・移動および参照されなくなった領域を回収するclearGarbage関数の処理について、プログラム中の空欄a〜gに入る適切な式や値を答える。
- 設問1 a
- DataLen(ア)
- 設問1 b
- DataLen + textLen(ウ)
- 設問1 c
- pos + 1(エ)
- 設問1 d
- fromPos, i ≧ toPos + 1, -1(イ)
- 設問2 e
- 4(ウ)
- 設問2 f
- 9(カ)
- 設問2 g
- 13(ケ)
解答・解説を表示
解答
設問1 a: ア, 設問1 b: ウ, 設問1 c: エ, 設問1 d: イ, 設問2 e: ウ, 設問2 f: カ, 設問2 g: ケ
解説
まず要点:ポインタ配列とデータ領域を分けたメモリ管理では、データの並び順(ポインタ配列の番号)と実際の置き場所(データ配列の位置)が別々になります。ガベージコレクション(ごみ集め)では、ポインタ配列の順番どおりに有効なデータだけを詰め直し、ポインタの値も付け替えます。
解き方
- addMemo・changeMemo・deleteMemo・moveMemoの各手続きで配列の添字がどう変わるかを確認し、a〜dの条件式を決めます。
- 図6の有効なメモ(Memo[0]=19の'Abe'、Memo[1]=5の'Imai'、Memo[2]=10の'Uno')のデータ長(長さ1バイトを含む)を把握します。
- clearGarbageのループに従い、m=0(4バイト)・m=1(5バイト)・m=2(4バイト)がtemp配列の先頭から順に詰められる様子をたどります。
- 並べ直した後の各メモの開始位置としてMemo[1]=4、Memo[2]=4+5=9、全データ長DataLen=9+4=13を導きます。
小問ごとの答え
- 小問 設問1 a:ア
- addMemoにおいて、新規メモの格納開始位置は現在のData[]の末尾空き位置であるDataLenである。Memo[MemoCnt]に新規メモの先頭インデックスを保持させるため、aにはDataLen(ア)が入る。
- 小問 設問1 b:ウ
- addMemoおよびchangeMemoにおいて、文字列の長さ情報1バイトは直前ですでにDataLen←DataLen+1として加算されている。その後に続くtextLenバイトの文字データを格納したため、最終的なDataLenは加算前の値からtextLenだけ進める必要があり、DataLen←DataLen + textLen(ウ)が入る。
- 小問 設問1 c:エ
- deleteMemoでは、削除対象posの1つ後ろからMemoCnt-1までの要素を左に1つずつ詰める。ループ内でMemo[i - 1] ← Memo[i]を実行しているため、iの初期値はpos + 1(エ)でなければならない。
- 小問 設問1 d:イ
- moveMemoでfromPos > toPosのとき、Memo[fromPos]を待避後、toPosからfromPos-1までの要素を右に1つずらす(Memo[i] ← Memo[i - 1])。上書き破壊を防ぐには末尾(fromPos)側から順に処理する必要があるため、iの範囲はfromPosからtoPos + 1まで、刻み幅は-1となる(イ)。
- 小問 設問2 e:ウ
- 図6の状態でMemo[0]=19(3, 'A', 'b', 'e'の4バイト)、Memo[1]=5(4, 'I', 'm', 'a', 'i'の5バイト)、Memo[2]=10(3, 'U', 'n', 'o'の4バイト)である。clearGarbageはm=0, 1, 2の順にtempへ詰めて複写する。m=0のメモ(長さ4)がtemp[0..3]に格納され、m=1のメモはtempのインデックス4から始まるため、実行後のMemo[1]は4(ウ)となる。
- 小問 設問2 f:カ
- m=1のメモ(長さ5)がtemp[4..8]に格納された後、m=2のメモはtempのインデックス9から始まるため、実行後のMemo[2]は9(カ)となる。
- 小問 設問2 g:ケ
- 全3件のメモの合計バイト数は4 + 5 + 4 = 13バイトである。temp[0..12]に格納され、最終的なDataLenは13(ケ)となる。
覚えるポイント
- 配列の右シフト(要素を後方に詰める)では、上書きを防ぐため後ろの要素から順に移動させる。
- コンパクション処理では、論理的なポインタ順序に従ってデータを先頭から詰め直し、ポインタ値を再設定する。
間違えやすいところ
- addMemoでDataLenを更新するとき、長さ情報の1バイトを直前に足し済みなのを見落とし、DataLen+textLen+1を選ぶ誤りです。
- clearGarbageのたどりで、Data[]の物理的な並びでなくMemo[]の番号順(論理順)に並べ直すのを見落とす誤りです。
出題の前提:平成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言語 / 再帰呼出し / フラクタル図形 / 自己相似性
フラクタル図形を文字 '*' と空白文字を用いて描画するCプログラムに関する次の設問に答えよ。 〔プログラムの説明〕 図形の一部を拡大すると再び同じパターンが現れる自己相似性をもつ図形をフラクタル図形と呼ぶ。関数 print_frac は、文字 '*' 及び空白文字を2次元の格子状に並べてフラクタル図形を描画する。 (1) 深さ0の図形は1行1列の文字 '*' から成る。深さ1以上の図形は、深さ0の図形に対して生成規則を深さの回数だけ繰返し適用して得られる。 (2) 深さd(d≧1)の図形は、深さd-1の図形を構成する各文字について、文字 '*' の部分は生成パターンと呼ばれる文字の行列で置換し、空白文字の部分は生成パターンと同じ大きさですべての要素が空白文字の行列で置換する。 (3) 生成パターンは2次元配列 pat により与えられ、空白文字は0、文字 '*' は1で表される。行数 p_rn、列数 p_cn である。
- ア
- 設問1: ① / 設問2: pat[2][3]={{0,1,0},{1,0,1}} / 設問3 a: p_rn += rn; / b: 0 / c: 0 / d: pat[i][j]
- イ
- 設問1: ② / 設問2: pat[2][3]={{1,1,1},{1,0,1}} / 設問3 a: p_rn *= rn; / b: 1 / c: 1 / d: pat[i % d][j % d]
- ウ
- 設問1: ③ / 設問2: pat[3][3]={{0,1,0},{1,1,1},{1,0,1}} / 設問3 a: rn += p_rn; / b: pat[i][j] / c: pat[i / d][j / d]
- エ
- 設問1: ④ / 設問2: pat[3][3]={{1,1,1},{1,0,1},{1,0,1}} / 設問3 a: rn *= p_rn; cn *= p_cn; / b: pat[i % d][j % d] / d: pat[i / p_rn][j / p_cn]
- オ
- 設問3 c: pat[i / d][j / d]
- カ
- 設問3 d: pat[i % p_rn][j % p_cn]
- キ
- 設問3 d: pat[i / p_rn][j / p_cn]
解答・解説を表示
解答
設問1: ウ, 設問2: イ, 設問3 a: エ, 設問3 b: イ, 設問3 c: ア, 設問3 d: カ
解説
まず要点:深さdの図形は、深さd-1の図形の各文字を、生成パターン(*と空白の並びを表す行列)で置き換えて作ります。だから深さdの座標(i, j)の状態は、まず親にあたる深さd-1の座標(i÷p_rn, j÷p_cn)を調べ、親が空白なら空白(0)、親が'*'なら生成パターン内の位置(i%p_rn, j%p_cn)を見て決めます。同じ手順を繰り返す(再帰する)ことで、自分と似た形が現れるフラクタル図形を描けます。
解き方
- 描かれた図形の縦と横の文字の数を数え、深さdから逆算して、生成パターンpatの大きさと中身を読み取る。
- 再帰関数exists_atについて、深さ0のときの処理(d == 0)と、割り算で親の位置、余りで自分のパターン内の位置を出す役割を確かめて、空欄を埋める。
小問ごとの答え
- 小問 設問1:ウ
- 深さ2の図形(4行4列)において斜線部で示されているのは、左下の2行2列のブロック(行2〜3、列0〜1)です。深さ3の図形(8行8列)では、深さ2の各文字がさらに2行2列のパターンに置換されるため、深さ2の左下ブロックは深さ3において左下の4行4列の領域全体(行4〜7、列0〜3)へと展開されます。図中の領域③がこの4行4列の領域を指しているため、ウが正解です。
- 小問 設問2:イ
- 描画結果の図形サイズを数えると、縦8行、横27列となっています。深さ3の図形で縦8行=2^3、横27列=3^3であることから、基本となる生成パターン pat の行数は2、列数は3であることが分かります。さらに、1行目はすべて '*' で埋まっており、2行目は '* (空白) *' が繰り返されていることから、pat の1行目は {1, 1, 1}、2行目は {1, 0, 1} です。これに合致するのは選択肢イです。
- 小問 設問3 a:エ
- 深さ d の図形の行数 rn は (p_rn)^d、列数 cn は (p_cn)^d で計算されます。ループ処理前で rn = cn = 1 と初期化されており、for ループが d 回繰り返されるため、ループ内では毎回 rn に p_rn を乗算し、cn に p_cn を乗算する処理である「rn *= p_rn; cn *= p_cn;」が入ります。
- 小問 設問3 b:イ
- exists_at 関数において、深さ d が 0 のときの文字を判定しています。問題文の定義より、深さ0の図形は1行1列の文字 '*' から成り、文字 '*' は値 1 で表されるため、d == 0 のときは常に 1 を返却します。
- 小問 設問3 c:ア
- 再帰呼出し exists_at(i / p_rn, j / p_cn, d - 1) は、深さ d-1 の図形において対象位置の元となった文字が何かを調べています。この戻り値が 0(空白文字)である場合、置換規則に従ってその領域全体が空白文字で埋められるため、判定結果として空白を表す 0 を返却します。
- 小問 設問3 d:カ
- 深さ d-1 の元となる文字が '*'(1)である場合、その位置は生成パターン pat の各要素で置換されます。行 i、列 j の要素が pat 内のどの行・列に対応するかは、生成パターンのサイズで割った余り(i % p_rn 行、j % p_cn 列)で決まるため、pat[i % p_rn][j % p_cn] を返却します。
覚えるポイント
- フラクタル描画の再帰判定では、親ブロックの判定に除算(i / N)、自ブロック内の判定に剰余(i % N)を用います。
間違えやすいところ
- 生成パターンは縦と横の長さがちがうことがあるので、図形全体の行数と列数の比を見落として正方形だと決めつけないよう注意する。
出題の前提:平成28年度春期基本情報技術者試験午後問9出題条件
出典:IPA『2016年度 春期 午後』
公式問題冊子 p.41 ↗(www.ipa.go.jp) / 公式問題冊子 p.42 ↗(www.ipa.go.jp) / 公式問題冊子 p.43 ↗(www.ipa.go.jp) / 公式問題冊子 p.44 ↗(www.ipa.go.jp) / 公式問題冊子 p.45 ↗(www.ipa.go.jp)
COBOLによる福利厚生施設の宿泊予約管理
ソフトウェア開発 · COBOL / PERFORM文 / 配列・テーブル操作 / 日付計算 / うるう年判定
6部屋を有する保養所の宿泊予約管理を行うCOBOLプログラムに関する次の設問に答えよ。 〔プログラムの説明〕 ・予約希望者は1〜6までの部屋数を指定でき、予約ファイル(索引ファイル)に日付を主キーとして部屋1〜6の予約番号(未予約は0)を記録する。 ・設問1では、指定された日付のレコードが存在しない場合の新規作成処理(RSV-PROC)および既存レコードの空き部屋確認・確保処理(CHK-PROC)を実装する。 ・設問2では、予約成功時に宿泊日の7日前となるキャンセル料発生開始日を計算して設定する処理の追加について実装する。西暦2016年〜2099年で動作を保証する。
- ア
- 設問1 a: ADD 1 TO GET-ROOM / b: CNT > 6 / c: CNT > PRM-ROOM / 設問2 d: 行番号25と26の間 / e: COMPUTE CAN-DD = 30 + CAN-DD - 7 / f: QUOTIENT > 100
- イ
- 設問1 a: ADD 1 TO PRM-FREE / b: CNT > GET-ROOM / c: GET-ROOM < PRM-ROOM / 設問2 d: 行番号35と36の間 / e: COMPUTE CAN-DD = MONTH-ELM(CAN-MM - 1) - 7 / f: QUOTIENT > 400
- ウ
- 設問1 a: MOVE PRM-NO TO RSV-NO(CNT) / b: CNT > PRM-ROOM / c: GET-ROOM > PRM-ROOM / 設問2 d: 行番号37と38の間 / e: COMPUTE CAN-DD = MONTH-ELM(CAN-MM) + CAN-DD - 7 / f: URU-SUPPLY = ZERO
- エ
- 設問1 a: MOVE ZERO TO RSV-NO(CNT) / b: GET-ROOM < PRM-ROOM / 設問2 d: 行番号46と47の間 / e: SUBTRACT 7 FROM CAN-DD / f: URU-SUPPLY NOT = ZERO
- オ
- 設問1 c: GET-ROOM = PRM-ROOM
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: ア, 設問1 c: オ, 設問2 d: ア, 設問2 e: ウ, 設問2 f: ウ
解説
まず要点:COBOLで何度も並んだデータ(表)を扱うときは、添字(何番目かを示す番号)を使って各要素を指定し、PERFORM VARYINGで同じ処理を繰り返します。キャンセル料の開始日を求めるような日付の逆算では、月を1つ引いた後の値がすでに前の月を指している点に注意して表を参照します。2016〜2099年では、4で割り切れる年をうるう年とする規則も正しく押さえることが大切です。
解き方
- 設問1:まだ予約がない日の処理と予約がある日の処理の内容を確かめ、6部屋すべてを見る条件(CNT > 6)と、希望の部屋数が確保できたかを判定する条件を考える。
- 設問2:キャンセル日の計算を呼び出す位置が、新規と既存の両方の処理を終えた後(READの直後)であることを確かめ、前の月を指す添字と、4で割り切れるかによるうるう年の判定条件を求める。
小問ごとの答え
- 小問 設問1 a:ウ
- 新規に予約レコードを作成する RSV-PROC では、要求された部屋数(PRM-ROOM)分の部屋に予約番号を設定します。CNT は 1 から PRM-ROOM まで変化するため、各部屋の予約番号項目に予約番号を代入する「MOVE PRM-NO TO RSV-NO(CNT)」が入ります。
- 小問 設問1 b:ア
- CHK-PROC では、全6部屋を走査して空き部屋の数を数えるとともに、空き部屋があれば要求された部屋数を確保します。空き部屋数 PRM-FREE を全部屋について正確に集計する必要があるため、ループは部屋1から部屋6まで全て検査する「CNT > 6」まで繰り返します。
- 小問 設問1 c:オ
- 希望どおりの部屋数が確保できた場合のみ予約ファイルを更新(REWRITE)し、予約結果(PRM-RSLT)を 0 とします。確保できた部屋数 GET-ROOM が希望部屋数 PRM-ROOM と一致しているかを判定するため、「GET-ROOM = PRM-ROOM」が入ります。
- 小問 設問2 d:ア
- キャンセル料発生開始日の設定処理は、RSV-PROC(新規日付)および CHK-PROC(既存日付)のどちらの段落が実行された場合でも、予約処理が完了して PRM-RSLT が確定した後に実行される必要があります。READ文が終了した直後であり、ファイルを閉じる前の位置である「行番号25と26の間」が適切です。
- 小問 設問2 e:ウ
- CAN-DD ≦ 7 のときは前月に月またぎが発生します。SUBTRACT 1 FROM CAN-MM により前月の月番号へと更新された後なので、前月の日数は MONTH-ELM(CAN-MM) で参照できます。これに当月の日付 CAN-DD を加え、7日分を減算するため、「COMPUTE CAN-DD = MONTH-ELM(CAN-MM) + CAN-DD - 7」となります。
- 小問 設問2 f:ウ
- 前月が2月の場合(CAN-MM = 2)、西暦年を4で割った余り(URU-SUPPLY)が0であればうるう年となり、2月の日数を28日から29日に補正(ADD 1 TO CAN-DD)する必要があります。したがって条件式は「URU-SUPPLY = ZERO」です。
覚えるポイント
- PERFORM VARYING によるテーブル走査では、中断条件ではなく全件集計が必要かどうかに応じて UNTIL 条件を決定します。
間違えやすいところ
- SUBTRACT 1 FROM CAN-MM を実行した後は、CAN-MM自体がすでに前の月を指している。そのため MONTH-ELM(CAN-MM - 1) のように、もう一度1を引いて二重に減らさないよう注意する。
出題の前提:平成28年度春期基本情報技術者試験午後問10出題条件
出典:IPA『2016年度 春期 午後』
公式問題冊子 p.46 ↗(www.ipa.go.jp) / 公式問題冊子 p.47 ↗(www.ipa.go.jp) / 公式問題冊子 p.48 ↗(www.ipa.go.jp) / 公式問題冊子 p.49 ↗(www.ipa.go.jp) / 公式問題冊子 p.50 ↗(www.ipa.go.jp)
JavaプログラムによるToDo管理と条件抽出
ソフトウェア開発 · Java / コレクションフレームワーク / equalsの実装 / 関数型インタフェース
ToDoリストを管理するJavaプログラム(クラスToDo、ToDoList、インタフェースCondition、テスト用クラスToDoListTester)に関する設問1および設問2に答えよ。
- ア
- 設問1 a: ((ToDo) o).id.equals(id) / b: !todoList.contains(todo) / c: != -1 / d: boolean selected = false / e: += | 設問2: 主題: PC購入, 期限: 20160531, 優先度: HIGH
- イ
- 設問1 a: (ToDo) o.id.equals(id) / b: !todoList.isEmpty() / c: < todoList.size() / d: boolean selected = true / e: = | 設問2: 主題: 会議室予約, 期限: 201605301200, 優先度: HIGH
- ウ
- 設問1 a: id.equals(id) / b: todoList.contains(todo) / c: == -1 / d: int selected = 0 / e: == | 設問2: 主題: チケット購入, 期限: 20160430, 優先度: MIDDLE
- エ
- 設問1 a: o.id.equals(id) / b: todoList.isEmpty() / c: >= todoList.size() / d: int selected = todoList.size() / e: |= | 設問2: 主題: 報告書作成, 期限: 20160428, 優先度: HIGH
- オ
- 設問2: 主題: ホテル予約, 期限: 20160420, 優先度: LOW
- カ
- 設問2: 主題: メール送信, 期限: 201604181500, 優先度: HIGH
解答・解説を表示
解答
設問1 a: ア, b: ア, c: ア, d: イ, e: イ / 設問2 f: カ, g: エ
解説
まず要点:Javaのequalsメソッドは引数がObject型なので、目的の型に変換するキャストを括弧でくくり、そのあとで中身(メンバ)にアクセスします。また、条件で絞り込む処理では、条件を指定しなかったときの動きや、リストに要素が入っている順番を正しく追いかけることが大切です。
解き方
- 設問1:クラスToDoのequalsの実装と、ToDoListのadd・update・selectメソッドの動きを確かめて、それぞれの空欄に入る式を決める。
- 設問2:ToDoListTesterの実行手順どおりに、リストへの追加、updateの呼び出し(PC購入はIDが違うので更新されない)、状態の変更、そして「20160501より前で優先度HIGH」という条件で取り出される結果を順番に確かめる。
小問ごとの答え
- 小問 設問1 a:ア
- Object型の引数oをToDo型にキャストしてフィールドidを参照するため、優先順位を考慮して((ToDo) o).id.equals(id)とする必要があります。
- 小問 設問1 b:ア
- 同一idのToDoを複数含まないようにするため、リストに含まれていない場合のみ追加する条件!todoList.contains(todo)を指定します。
- 小問 設問1 c:ア
- indexOfメソッドは対象要素が見つからない場合に-1を返すため、リスト内に存在することを確認する条件はindex != -1となります。
- 小問 設問1 d:イ
- 条件が1つも指定されない場合は全件抽出する仕様であるため、ループ開始前の初期値はboolean selected = trueである必要があります。
- 小問 設問1 e:イ
- 各条件判定メソッドcondition.test(todo)の戻り値(boolean)をそのまま変数selectedに代入するため、代入演算子「=」が入ります。
- 小問 設問2 f:カ
- 抽出条件「期限が20160501より前」かつ「優先度HIGH」に合致する最初の要素は、登録順より「メール送信」となります。
- 小問 設問2 g:エ
- 条件に合致する2番目の要素は、登録順より「報告書作成」となります(PC購入は新規UUIDのため更新されずリストに含まれません)。
覚えるポイント
- equalsメソッド引数のキャストでは((TargetClass) obj).fieldのように外側を括弧で括る。
- List#indexOfは指定要素が見つからない場合に-1を返す。
間違えやすいところ
- (TargetClass) obj.field のように書いてしまい、キャストとドット演算子の優先順位を間違える。
- updateのときに渡した新しいインスタンスは別のUUIDを持つため、更新されないことを見落とす。
出題の前提:平成28年度春期基本情報技術者試験午後問11
出典:IPA『2016年度 春期 午後』
公式問題冊子 p.51 ↗(www.ipa.go.jp) / 公式問題冊子 p.52 ↗(www.ipa.go.jp) / 公式問題冊子 p.53 ↗(www.ipa.go.jp) / 公式問題冊子 p.54 ↗(www.ipa.go.jp) / 公式問題冊子 p.55 ↗(www.ipa.go.jp) / 公式問題冊子 p.56 ↗(www.ipa.go.jp)
アセンブラによる10,000m競走チーム別成績の集計と表示
ソフトウェア開発 · CASL II / COMET II / 最小値探索 / 数値文字列変換
10,000m競走におけるチーム別合計タイムの最小値探索および成績順出力を行うアセンブラプログラムに関する設問1〜4に答えよ。
- ア
- 設問1 a: JMI LOOP12 / b: JMI LOOP13 | 設問2: チーム番号の昇順に出力される | 設問3 d: JMI LOOP21 / e: JMI LOOP21 | 設問4: 9
- イ
- 設問1 a: JMI LOOP13 / b: JMI LOOP12 | 設問2: チーム番号の降順に出力される | 設問3 d: JMI LOOP22 / e: JPL LOOP21 | 設問4: 17
- ウ
- 設問1 a: JPL LOOP12 / b: JPL LOOP12 | 設問2: どのチームが先に出力されるかは時々異なる | 設問3 d: JPL LOOP21 / e: JPL LOOP22 | 設問4: 20
- エ
- 設問1 a: JPL LOOP13 / b: JUMP LOOP12 | 設問3 d: JUMP LOOP21 / e: JUMP LOOP22 | 設問4: 270
- オ
- 設問1 a: JUMP LOOP12 / b: JUMP LOOP13 | 設問3 d: JUMP LOOP22 / e: JZE LOOP21 | 設問4: 299
- カ
- 設問1 a: JUMP LOOP13 / b: JZE LOOP12 | 設問3 d: JZE LOOP22 / e: JZE LOOP22
解答・解説を表示
解答
設問1 a: エ, b: ウ / 設問2 c: イ / 設問3 d: オ, e: イ / 設問4 f: ア
解説
まず要点:CASL IIで最小値を選ぶ処理では、番号を大きい方から小さい方へたどり、本当に小さいときだけ更新する判定(JPL)を使うと、同じ値のデータでは先に見た大きい番号の方が選ばれます。また、割り算の命令がない仕組みでは、割る数を何度も引いていって、商(何回引けたか)と余りを求め、各桁の数字を出していきます。
解き方
- プログラム1のループの組み立てを確かめ、内側のループ(チームをたどるGR4)と外側のループ(出力する順位のGR3)について、くり返しを終える条件と分岐命令(a, b)を求める。
- 同じタイムのチームがあったときの、GR4のたどり方(9から1へ大きい順から)と、JPL命令(より小さいときだけ更新する)の動きから、出力される順番(c)を判断する。
- プログラム2の、割り算のためのループ(LOOP22)と桁のためのループ(LOOP21)のしくみをとらえ、分岐命令(d, e)を決める。
- 設問4の出力文字列「2708」が27分08秒(合計1,628秒)を表すことを読み取り、割る数(600、60、10)ごとに引き算した回数を全部足して、SUBAが実行された合計回数(f)を計算する。
小問ごとの答え
- 小問 設問1 a:エ
- 内側ループにおいてNEXTラベルでGR4を1減算した後、GR4が正(1以上)であれば探索を継続するため、JPL LOOP13となります。
- 小問 設問1 b:ウ
- 1チームの出力が終わり、処理済みチームのタイムを最大値に更新した後、GR3を1減算して正(1以上)なら外側ループを継続するため、JPL LOOP12となります。
- 小問 設問2 c:イ
- 内側ループはGR4を9から1へと降順に走査し、タイムの比較条件がJPL(GR2 > TOTAL[GR4])のため、同タイムの場合は大きいチーム番号の値で更新されず維持されるか、あるいは降順走査により大きいチーム番号が優先されるため、チーム番号の降順に出力されます。
- 小問 設問3 d:オ
- 商を求めるため、除数を引いて商カウンタGR7をインクリメントした後、さらに減算を試みるため無条件分岐JUMP LOOP22で比較処理に戻ります。
- 小問 設問3 e:イ
- 除数テーブルの全桁(3回)の処理を繰り返すため、桁カウンタGR5を減算した結果が正の間、次の桁へ進めるためJPL LOOP21で分岐します。
- 小問 設問4 f:ア
- 出力データ「7 Δ 2 7 0 8」はチーム7の平均タイム「27分08秒」を表します。総秒数は27×60+8=1,628秒です。プログラム2では除数600で1,628秒から600を2回引いて商2(減算2回、余り428秒)、次に除数60で428秒から60を7回引いて商7(減算7回、余り8秒)、最後に除数10で8秒から10を0回引いて商0(減算0回、余り8秒)となるため、行12のSUBA命令の実行回数は2+7+0=9回となります。
覚えるポイント
- CASL IIでは除算命令がないため、除数の繰り返し減算と商の加算で商と余りを求める。
- 時間の出力形式「mm:ss」では、上位2桁が分、下位2桁が秒を表す。
間違えやすいところ
- 出力文字列「2708」をそのまま合計2,708秒だと読み間違えて計算してしまう。
- 同じ値のとき、厳密な不等号(>)で判定すると、どちらの番号が残るのかを混同してしまう。
出題の前提:平成28年度春期基本情報技術者試験午後問12
出典:IPA『2016年度 春期 午後』
公式問題冊子 p.57 ↗(www.ipa.go.jp) / 公式問題冊子 p.58 ↗(www.ipa.go.jp) / 公式問題冊子 p.59 ↗(www.ipa.go.jp) / 公式問題冊子 p.60 ↗(www.ipa.go.jp)
販売分析ワークシートおよびマクロの作成
表計算 · 表計算 / 条件付合計 / 表引き / 水平照合 / グループトータル
卸売業のP社における過去3年間の販売データを基に、商品の取扱い見直しを判定するワークシート「販売分析」の関数式(a〜d)およびデータ集計を行うマクロ「Sales_Total」の空欄(e〜g)に当てはまる適切な字句の組合せを答えよ。
- a-ア
- 条件付合計($C5:$K5, >C5, $C5:$K5)
- a-イ
- 条件付合計($C5:$K5, >C5, $C5:$K5) + C5
- a-ウ
- 条件付合計($C5:$K5, >=C5, $C5:$K5)
- a-エ
- 条件付合計($C5:$K5, >=C5, $C5:$K5) - C5
- b-ア
- 表引き($A$25:$A$27, 条件付個数($B$25:$B$27, <C6), 1)
- b-イ
- 表引き($A$25:$A$27, 条件付個数($D$25:$D$27, <=C6), 1)
- b-ウ
- 表引き($A$25:$A$27, 照合一致(C6, $B$25:$B$27, 1), 1)
- b-エ
- 表引き($A$25:$A$27, 照合一致(C6, $D$25:$D$27, -1), 1)
- c-ア
- IF(論理積(C9<1, C14<1), 'Y', 'N')
- c-イ
- IF(論理積(C9>1, C14>1), 'N', 'Y')
- c-ウ
- IF(論理和(C9<1, C14<1), 'Y', 'N')
- c-エ
- IF(論理和(C9>1, C14>1), 'N', 'Y')
- d-ア
- 水平照合(IF(C18='Y', 3, 0) + IF(C19='Y', 2, 0) + IF(C20='Y', 1, 0), $C30:$J34, 4, 0)
- d-イ
- 水平照合(IF(C18='Y', 3, 0) + IF(C19='Y', 2, 0) + IF(C20='Y', 1, 0), $C30:$J34, 5, 0)
- d-ウ
- 水平照合(IF(C18='Y', 4, 0) + IF(C19='Y', 2, 0) + IF(C20='Y', 1, 0), $C30:$J34, 4, 0)
- d-エ
- 水平照合(IF(C18='Y', 4, 0) + IF(C19='Y', 2, 0) + IF(C20='Y', 1, 0), $C30:$J34, 5, 0)
- e-ア
- 相対(C2, 0, total_col) = 相対(販売データ!D2, data_row, 0)
- e-イ
- 相対(C2, 0, total_col) ≠ 相対(販売データ!B2, data_row, 0)
- e-ウ
- 相対(C2, 0, total_col) ≠ 相対(販売データ!D2, data_row, 0)
- e-エ
- 相対(C2, total_row, 0) = 相対(販売データ!B2, data_row, 0)
- e-オ
- 相対(C2, total_row, 0) = 相対(販売データ!D2, data_row, 0)
- e-カ
- 相対(C2, total_row, 0) ≠ 相対(販売データ!B2, data_row, 0)
- f-ア
- subtotal ← subtotal + 相対(販売データ!A1, data_row, 5) * 相対(販売データ!A1, data_row, 6)
- f-イ
- subtotal ← subtotal + 相対(販売データ!A2, total_row, 5) * 相対(販売データ!A2, total_row, 6)
- f-ウ
- subtotal ← subtotal + 相対(販売データ!F2, data_row, 0) * 相対(販売データ!G2, data_row, 0)
- g-エ
- total_row ← 0
- g-オ
- total_row ← total_row + 1
- g-カ
- total_row ← total_row + 5
解答・解説を表示
解答
設問1 a: イ, 設問1 b: ア, 設問1 c: ア, 設問1 d: エ, 設問2 e: ア, 設問2 f: ウ, 設問2 g: カ
解説
まず要点:表計算でABC分析(金額の大きい順にA・B・Cへ分ける、パレート分析ともいう)を行うときは、構成比率を大きい順に足し合わせた累計を出し、70%や90%といった区切りの値で区分を決めます。同じ比率の商品があるときは「自分より本当に大きい値の合計に、自分の値を1回だけ足す」ことで二重に数えるのを防ぎます。また、キーで並べ替えた明細データを、小計ごとにまとめて別の表へ出すやり方をグループトータルと呼びます。
解き方
- 設問1では、累計を出すときの同じ比率の扱い、区分の表から行の位置を求める方法、論理積で2年続けて減ったかを判定する方法、2進数のビットを組み合わせて表を照合する手順を、それぞれ確かめる。
- 設問2では、並べ替え済みの明細データから、年度ごと・商品コードごとの売上高をまとめて集計する2重ループについて、終わる条件、足し算の式、行を表す変数の増やし方を求める。
小問ごとの答え
- 小問 設問1 a:イ
- 構成比率累計は自身より大きい構成比率の合計に自商品の構成比率(C5)を加算して求めるため「条件付合計($C5:$K5, >C5, $C5:$K5) + C5」となります。
- 小問 設問1 b:ア
- 管理区分A(70%以下), B(90%以下), C(100%以下)を判定するため、下限列B25:B27(0%, 70%, 90%)のうち累計値より真に小さい個数を数えると行番号と正確に一致します。
- 小問 設問1 c:ア
- 直近2年(2014年と2015年)の売上高が連続して減少している条件は、対前年比率が共に1未満であることなので「IF(論理積(C9<1, C14<1), 'Y', 'N')」となります。
- 小問 設問1 d:エ
- 3条件の真偽を2進数3桁の10進変換値(4, 2, 1の重み)として合算し、取扱判定表($C30:$J34)の5行目に格納された取扱方針を水平照合で完全一致検索します。
- 小問 設問2 e:ア
- 販売分析シートの対象商品コード「相対(C2, 0, total_col)」と販売データシートの商品コード「相対(販売データ!D2, data_row, 0)」が一致している間、明細の集計を継続します。
- 小問 設問2 f:ウ
- 販売データの単価(F列)と数量(G列)の積を小計subtotalに加算するため「subtotal ← subtotal + 相対(販売データ!F2, data_row, 0) * 相対(販売データ!G2, data_row, 0)」となります。
- 小問 設問2 g:カ
- 販売分析シートにおいて各年の売上高データは行3、行8、行13と5行間隔で配置されているため、年が変わるごとに「total_row ← total_row + 5」と更新します。
覚えるポイント
- 同一値がある場合の構成比率累計は「>値 の条件付合計 + 自セル値」で求める
- 水平照合や垂直照合の行・列位置は、指定したセル範囲の先頭(上端行・左端列)を1として数える
間違えやすいところ
- 管理区分を表引きで求めるときに「照合一致」を使うと、境界値ちょうどのときに取り出す行がずれてしまう。
- マクロで行を進めるときに、表の並びの行間隔(この問題では5行おき)を見落として、1だけ足してしまう。
出題の前提:基本情報技術者試験 表計算ソフトウェアの仕様に準拠
出典:IPA『2016年度 春期 午後』
公式問題冊子 p.61 ↗(www.ipa.go.jp) / 公式問題冊子 p.62 ↗(www.ipa.go.jp) / 公式問題冊子 p.63 ↗(www.ipa.go.jp) / 公式問題冊子 p.64 ↗(www.ipa.go.jp) / 公式問題冊子 p.65 ↗(www.ipa.go.jp) / 公式問題冊子 p.66 ↗(www.ipa.go.jp) / 公式問題冊子 p.67 ↗(www.ipa.go.jp) / 公式問題冊子 p.68 ↗(www.ipa.go.jp)
2016年度 春期 午後
参照した公式資料
IPAが公開した2016年度 春期 午後の問題・解答資料です。

