旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2015年度 春期 午後の概要
インターネットを利用した受注管理システムのセキュリティ
情報セキュリティ · Webセキュリティ / リバースプロキシ / SQLインジェクション / クロスサイトスクリプティング / ディレクトトラバーサル / ブルートフォース攻撃
製造業のK社が開発している、取引先も利用する受注管理システムのセキュリティ対策と脆弱性診断に関する記述を読んで、設問1〜4に答えよ。
- 設問1 ア
- 1
- 設問1 イ
- 1, 2, 3
- 設問1 ウ
- 1, 2, 3, 4
- 設問1 エ
- 1, 2, 3, 4, 5
- 設問1 オ
- 2, 3, 4
- 設問1 カ
- 2, 3, 4, 5
- 設問1 キ
- 3, 4
- 設問2 ア
- DoS攻撃
- 設問2 イ
- SQLインジェクション
- 設問2 ウ
- クロスサイトスクリプティング
- 設問2 エ
- 辞書攻撃
- 設問2 オ
- ディレクトリトラバーサル
- 設問2 カ
- トラッシング
- 設問2 キ
- ブルートフォース攻撃
- 設問2 ク
- ポートスキャン
- 設問3 ア
- ダウンロードしたいファイルを絶対パスで指定させ,該当ファイルが存在する場合には,ダウンロードの処理を行う。
- 設問3 イ
- ダウンロードしたいファイルを相対パスで指定させ,該当ファイルが存在する場合には,ダウンロードの処理を行う。
- 設問3 ウ
- ダウンロードしたいファイルのファイル名だけを指定させ,取引先ごとに決められたフォルダ内に該当ファイルが存在する場合には,ダウンロードの処理を行う。
- 設問3 エ
- 取引先PCのブラウザに,Webサーバ上の全てのフォルダ構成及びファイルを表示し,ダウンロードしたいファイルを指定させ,ダウンロードの処理を行う。
- 設問4 ア
- 取引先の担当者が誕生日をパスワードにしていると,誕生日を知っている者がログインできてしまう。
- 設問4 イ
- パスワードの候補を自動で次々と入力するプログラムを利用することで,ログインできてしまう。
- 設問4 ウ
- パスワードを記載したメモを取引先の担当者が落とし,それを拾った者がログインできてしまう。
- 設問4 エ
- ログイン操作を背後から盗み見て,パスワードを入手し,ログインできてしまう。
解答・解説を表示
解答
設問1: イ, 設問2 a: イ, 設問2 b: ウ, 設問3: ウ, 設問4: イ
解説
まず要点:リバースプロキシ(RPS、通信の受け口となって中継する装置)を使うと、取引先PCからRPSまでの区間だけがHTTPS(暗号化された通信)で、RPSより内側はHTTP(暗号化されない通信)になります。だから暗号化されるのはクライアントとRPSの間だけです。また、DBに不正な命令を混ぜる攻撃はSQLインジェクション、Webページに悪意あるプログラムを埋め込む攻撃はクロスサイトスクリプティング(XSS)と呼びます。
解き方
- 設問1:構成図と『RPSでHTTPSからHTTPに変換する』という説明から、暗号化される区間を特定します。
- 設問2:『DBへの不正アクセス』と『Webページへのスクリプト埋め込み』に合う攻撃手法を選びます。
- 設問3:遡り攻撃を防ぐため、外部からのパス指定をなくし、見せるフォルダを限定する選択肢を選びます。
- 設問4:アカウントロックがないときに悪用される、自動ツールによる連続試行を選びます。
小問ごとの答え
- 小問 設問1:イ
- 問題文に『取引先PCのブラウザからの通信には,HTTP over SSL/TLS(HTTPS)を使用する。RPSではディジタル証明書を使って,HTTPSからHTTPにプロトコルを変換する』とあります。したがって、取引先PCからリバースプロキシサーバ(RPS)までの区間である経路1(取引先PCとFW3)、経路2(FW3とFW1)、経路3(FW1とRPS)でHTTPSが使われます。RPSからWebサーバへの経路(4および5)はHTTPとなるため、対象経路は1, 2, 3です。
- 小問 設問2 a:イ
- 『想定していない操作をDBサーバに実行させて,DBに不正アクセスするような攻撃』は、入力値に意図しないSQL構文を混入させるSQLインジェクションのことです。
- 小問 設問2 b:ウ
- 『攻撃者によってWebページ内にスクリプトが埋め込まれてしまう脆弱性』であり、利用者のブラウザ上で悪意のあるスクリプトを実行させてID・パスワード奪取や別サイト誘導を行う手口は、クロスサイトスクリプティング(XSS)です。
- 小問 設問3:ウ
- 表1下線①の『Webサーバ上の任意のファイルをダウンロード可能である』という脆弱性はディレクトリトラバーサルです。パス指定(../など)を許さず、ファイル名のみを指定させ、サーバ側で取引先専用の固定フォルダ内に対象を限定してアクセス制御を行う対策が適切です。
- 小問 設問4:イ
- 下線②『連続して間違えても利用者IDがロックされない』脆弱性があると、パスワード候補を自動で総当たり入力(ブルートフォース攻撃や辞書攻撃)されて突破されるセキュリティ事故が発生します。
覚えるポイント
- リバースプロキシでSSL/TLSを終端する場合、RPS以降の内部通信はHTTPとなる。
- ディレクトリトラバーサル対策には、外部入力によるパス指定を排除し、ファイル名のみの受付や許可フォルダへの限定が有効である。
間違えやすいところ
- RPSが暗号化を肩代わりする装置だと気づかず、WebサーバまでHTTPSが続くと誤解しやすいです。
出題の前提:平成27年度春期基本情報技術者試験午後問題・問題冊子および公式正答・採点講評に基づく。
出典:IPA『2015年度 春期 午後』
公式問題冊子 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〜3に答えよ。
- 設問1 ア
- 原始プログラムを対話的に確認しながら実行できる。
- 設問1 イ
- 原始プログラムを変更して,直ちに実行できる。
- 設問1 ウ
- 実行途中に異常が発生した場合,原始プログラムのどこでどのような原因によって異常が発生したのかを確認しやすい。
- 設問1 エ
- 目的とする計算機に対応して,実行時間を短縮するための最適化が図れる。
- 設問2 ア
- 特定のOSやハードウェアに依存しない
- 設問2 イ
- 特定のOSやハードウェアに依存する
- 設問2 ウ
- 特定のハードウェアの性能を引き出す
- 設問2 エ
- 特定のハードウェアのメモリ使用量を低減する
- 設問3 ア
- 0.106
- 設問3 イ
- 0.146
- 設問3 ウ
- 0.206
- 設問3 エ
- 0.246
- 設問3 オ
- 0.4
- 設問3 カ
- 0.406
解答・解説を表示
解答
設問1: エ, 設問2 a: ア, 設問3 b: オ, 設問3 c: エ
解説
まず要点:コンパイラは実行する前にプログラム全体を目的のコードへ変換するので、最適化できて速く動きます。一方、中間コード(機械語の代わりの共通コード)を仮想計算機で解釈しながら動かす方式は、機種に依存しない代わりに実行が遅くなります。動的コンパイル(JIT)は、よく使う部分だけを実行時に機械語へ変換して、機種非依存と速さを両立させる方法です。
解き方
- 設問1:コンパイラ方式とインタプリタ方式の特長を比べ、コンパイラ方式の長所を選びます。
- 設問2:中間コードと仮想計算機を使う主な目的である『環境に依存しないこと』を表す語を選びます。
- 設問3 b:インタプリタ実行時間=呼出回数(400)×命令数(2,000)×1命令の時間(500ns)で計算します。
- 設問3 c:動的コンパイルの総時間=最初の100回のインタプリタ実行(0.1)+起動(0.1)+コンパイル(0.04)+残り300回の実行(0.006)を足します。
小問ごとの答え
- 小問 設問1:エ
- コンパイラ方式の利点は、事前に機械語へ一括変換する際に、対象アーキテクチャに合わせた高度な最適化を行い、実行時間を短縮できる点にあります。
- 小問 設問2 a:ア
- 異なるOSやハードウェア上にそれぞれの仮想計算機(インタプリタ)を用意することで、共通の『特定のOSやハードウェアに依存しない』中間コードを配布・実行できるようになります。
- 小問 設問3 b:オ
- インタプリタ方式では、関数Fが1回呼び出されるごとに2,000命令が実行されます。中間コード1命令の実行時間は500ナノ秒(500×10^-9秒)です。関数Fを400回呼び出すため、総実行時間は 400 × 2,000 × (500 × 10^-9) = 800,000 × 500 × 10^-9 = 0.4秒 となります。
- 小問 設問3 c:エ
- 動的コンパイラ方式では、1〜100回目(100回)はインタプリタで実行:100 × 2,000 × (500 × 10^-9) = 0.1秒。101回目呼出し時に動的コンパイラ起動・変換:起動時間0.1秒、コンパイル時間(中間コード400命令分)400/1,000 × 0.1 = 0.04秒。101〜400回目(300回)は実行形式で実行:中間コード1命令に対応する実行形式の実行時間は10ナノ秒なので、300 × 2,000 × (10 × 10^-9) = 0.006秒。合計時間は 0.1 + 0.1 + 0.04 + 0.006 = 0.246秒 となります。
覚えるポイント
- 中間コード方式は機種非依存性(Write Once, Run Anywhere)を提供する。
- 動的コンパイル時の実行時間には、インタプリタ実行時間、動的コンパイラ起動時間、コンパイル時間、ネイティブコード実行時間のすべてが含まれる。
間違えやすいところ
- 動的コンパイルで、コード自体の大きさ(400命令)と実行される命令数(2,000命令)を混同しやすいです。
- 動的コンパイラの起動時間(0.1秒)を足し忘れてしまいます。
出題の前提:平成27年度春期基本情報技術者試験午後問題・問題冊子および公式正答・採点講評に基づく。
出典:IPA『2015年度 春期 午後』
公式問題冊子 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の抽出・集計 / ビューの作成
自治会員の情報を管理する関係データベースの設計と運用に関する問題である。手書きの帳票から関係データベースへの正規化手順、条件に合致する世帯番号を抽出するSQL、班ごとの世帯数と会員数を集計するSQL、および特定条件の会員を抽出するビュー定義について、適切な選択肢を答える。
- 設問1 a
- イ(第1正規化に基づいて)
- 設問1 b
- エ(第3正規化に基づいて)
- 設問2
- ウ(SELECT 世帯番号 FROM 会員表 WHERE 会員表.生年月日 < 19400101 GROUP BY 世帯番号)
- 設問3 c
- ウ(COUNT(DISTINCT 世帯表.世帯番号), COUNT(*))
- 設問4 d
- エ(会員表.世帯番号 = 世帯表.世帯番号 AND 会員表.生年月日 BETWEEN 20030402 AND 20090401)
解答・解説を表示
解答
設問1 a: イ, 設問1 b: エ, 設問2: ウ, 設問3 c: ウ, 設問4 d: エ
解説
まず要点:正規化は、第1正規化で繰り返し項目をなくし、第2正規化で一部の項目だけで決まる従属(部分関数従属)をなくし、第3正規化で他の項目を経由して決まる従属(推移的関数従属)をなくします。また、複数の表を結合して集計すると行数が増えるため、世帯のような主表側の件数を数えるときはDISTINCT(重複を除く)を使います。
解き方
- 設問1:繰返しの排除が第1正規化、非キー項目どうしの従属の分離が第3正規化であることを確かめます。
- 設問2:生年月日の比較条件(1940年より前=19400101より小さい)と、重複排除の構文(GROUP BY)を確かめます。
- 設問3:1対多で結合した後の件数と、世帯番号を重複なく数えるDISTINCTの組合せを判断します。
- 設問4:ビュー定義で、2表の等価結合条件とBETWEENによる期間条件を正しく組み合わせます。
小問ごとの答え
- 小問 設問1 a:イ
- 帳票内の繰返し項目である世帯情報(同居者氏名、続柄、性別、生年月日など)を取り出して会員表を独立させる作業は、繰返し群の排除を行う第1正規化に該当します。
- 小問 設問1 b:エ
- 会員表の主キー以外の属性である続柄コードから続柄名称、性別コードから性別名称への関数従属性を分離して別表とする作業は、推移的関数従属性を排除する第3正規化に該当します。
- 小問 設問2:ウ
- 1940年より前に生まれた会員は生年月日が19400101未満(< 19400101)です。該当する会員が含まれる世帯番号を重複なく抽出するため、GROUP BY 世帯番号でグループ化して抽出します。
- 小問 設問3 c:ウ
- 世帯表と会員表を結合しているため、結果の行数は会員数(COUNT(*))となります。1つの世帯に複数の会員がいるため、世帯数は重複を除外して数えるCOUNT(DISTINCT 世帯表.世帯番号)とする必要があります。
- 小問 設問4 d:エ
- 子供会表ビューを作成するには、世帯表と会員表を結合する結合条件「会員表.世帯番号 = 世帯表.世帯番号」と、生年月日の抽出範囲を指定する「会員表.生年月日 BETWEEN 20030402 AND 20090401」をANDで結ぶ必要があります。
覚えるポイント
- 第1正規化は繰返し項目の排除、第3正規化は推移的関数従属の排除です。
- 結合された表で親レコードの数を集計するときはCOUNT(DISTINCT 列名)を用います。
間違えやすいところ
- 1940年より前を『<= 19391231』や『>=』と取り違えてしまいます。
- 表の結合で1世帯が複数行になることを見落とし、単純なCOUNT(世帯番号)を選んでしまいます。
出題の前提:平成27年度春期基本情報技術者試験午後問題問3の出題条件に基づく。
出典:IPA『2015年度 春期 午後』
公式問題冊子 p.14 ↗(www.ipa.go.jp) / 公式問題冊子 p.15 ↗(www.ipa.go.jp) / 公式問題冊子 p.16 ↗(www.ipa.go.jp) / 公式問題冊子 p.17 ↗(www.ipa.go.jp)
ホスト名の衝突とDNSの仕組み
ネットワーク · DNS名前解決 / サーチリスト / TLD衝突 / セキュリティリスク
DNS(Domain Name System)におけるホスト名の名前解決、独自TLDの運用、サーチリストによるドメイン名補完、新TLD追加に伴う名前衝突(Name Collision)のリスクとその対策に関する問題である。
- 設問1 a
- ウ(インターネット上のWebサーバ“www.bunkyo”のIPアドレス)
- 設問1 b
- エ(インターネット上のWebサーバ“www.corp”)
- 設問1 c
- イ(外部サーバに意図せずアクセスする)
- 設問2
- イ(各組織は,自組織のDNSサーバと外部のDNSサーバとの通信を遮断する。)
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: エ, 設問1 c: イ, 設問2: イ
解説
まず要点:DNSリゾルバ(名前解決を代行する仕組み)は、指定されたホスト名をまずそのままDNSサーバに問い合わせます。その名前が実在して名前解決に成功すると、サーチリスト(ドメイン名を補ってくれる設定)による補完は行われません。また、社内DNSサーバが自社のドメインや独自TLD(一番右の部分)を管理していると、同じ名前は外部へ問い合わせず社内の答えを返すため、外部の同名ホストにはつながりません。
解き方
- 設問1 a:新TLDでインターネット上に『www.bunkyo』が実在すると、最初の問い合わせでそのIPアドレスが返る流れを確かめます。
- 設問1 b:社内DNSサーバが『corp』ゾーンを持つ場合、外部に同じTLDがあっても社内のレコードを返すため、外部のアドレスは得られないと確かめます。
- 設問1 c:社内のつもりの通信が外部へ向かうリスク(外部サーバへの意図しないアクセス)を特定します。
- 設問2:名前衝突の根本的な対策と、インターネット接続を壊してしまう不適切な対策(外部DNSの遮断)を比べます。
小問ごとの答え
- 小問 設問1 a:ウ
- 端末がまず“www.bunkyo”を問い合わせると、A社のDNSサーバには未登録のため外部DNSサーバへ問い合わせが行われ、インターネット上に存在する“www.bunkyo”のIPアドレスが返されます(未解決でエラーになって初めてサーチリストによる補完が行われます)。
- 小問 設問1 b:エ
- A社のDNSサーバは社内向けに“www.corp”を自ら管理しているため、外部DNSサーバへ問い合わせを行わずに自社のIPアドレスを返します。したがって、インターネット上のWebサーバ“www.corp”のIPアドレスを取得することはできません。
- 小問 設問1 c:イ
- 社内の独自TLDや省略されたホスト名がインターネット上で実在するドメインと衝突すると、社内向けに送信したつもりの通信が意図せず外部サーバへ送信され、認証情報などの漏えいにつながります。
- 小問 設問2:イ
- 外部DNSサーバとの通信を遮断すると、通常のインターネット通信に必要な外部ドメインの名前解決が一切行えなくなるため、名前衝突対策として適切ではありません。
覚えるポイント
- リゾルバは未修飾ホスト名をまずそのまま問い合わせ、失敗したときにサーチリストで補完します。
- 新TLDの導入により内部用ドメインが外部と重複する現象を名前衝突と呼びます。
間違えやすいところ
- 最初からサーチリストで補完されると思い込み、社内ホストのアドレスが返ると誤解します。
- 社内DNSが外部へ問い合わせると勘違いし、社内ホストのアドレスが得られないと取り違えます。
出題の前提:平成27年度春期基本情報技術者試験午後問題問4の出題条件に基づく。
出典:IPA『2015年度 春期 午後』
公式問題冊子 p.18 ↗(www.ipa.go.jp) / 公式問題冊子 p.19 ↗(www.ipa.go.jp) / 公式問題冊子 p.20 ↗(www.ipa.go.jp) / 公式問題冊子 p.21 ↗(www.ipa.go.jp)
営業支援システムのデータ設計と機能・エンティティ関連
ソフトウェア設計 · E-R図 / CRUDマトリックス / リレーショナルデータベース設計
生命保険会社E社の営業支援システム(新規契約の申込受付、既契約の保全手続受付、帳票出力)の設計に関する記述、E-R図(図1)、機能階層図(図2)、および機能とエンティティの関係表(表2)を読み、設問1・設問2に答えよ。
- ア
- 【設問1 a~d】関係顧客番号 / 【設問2 e, f】C
- イ
- 【設問1 a~d】契約担当番号 / 【設問2 e, f】R
- ウ
- 【設問1 a~d】契約番号 / 【設問2 e, f】U
- エ
- 【設問1 a~d】顧客ID / 【設問2 e, f】D
- オ
- 【設問1 a~d】社員ID / 【設問2 e, f】C, D
- カ
- 【設問1 a~d】帳票出力番号 / 【設問2 e, f】C, R, U
- キ
- 【設問1 a~d】保険種類ID / 【設問2 e, f】C, R, D
- ク
- 【設問1 a~d】保全受付番号 / 【設問2 e, f】C, U, D
- ケ
- 【設問2 e, f】-
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: ク, 設問1 c: カ, 設問1 d: エ, 設問2 e: カ, 設問2 f: キ
解説
まず要点:データベースやE-R図の設計では、業務の決まりに従って各表を一意に識別する主キーと、表どうしを結ぶ外部キーを正しく見つけることが基本です。また、機能とデータの関係を表すCRUD表では、各機能がデータを作る(C)、参照する(R)、更新する(U)、削除する(D)のすべてを仕様から漏れなく洗い出します。
解き方
- 業務要件の『一意な番号を付与する』という記述から、各表(契約、保全手続、帳票出力、顧客)の主キー(a〜d)を特定します。
- E-R図の1対多の関係を確かめ、親表の主キーが子表で外部キーや複合キーとしてどう置かれるかを照合します。
- 機能仕様の処理手順(検索、追加、変更、削除)を1つずつ追い、表2の各セルで行う操作(CRUD)を漏れなく洗い出します。
小問ごとの答え
- 小問 設問1 a:ウ
- エンティティ「契約担当」および「保全手続」はそれぞれ特定の契約に対して発生する情報であり、「契約」エンティティ(主キー:契約番号)を参照する外部キーまたは複合主キーの一部として契約番号が必要となる。また関係顧客エンティティでも契約番号と顧客IDの組み合わせで管理されるため、aには「契約番号」が入る。
- 小問 設問1 b:ク
- 「保全手続」機能要件において、「保全手続ごとに一意な保全受付番号を付与する」と記載されており、保全手続エンティティの主キーはbであることから、bには「保全受付番号」が入る。
- 小問 設問1 c:カ
- 帳票出力機能要件において、「印刷時に、帳票ごとに一意な帳票出力番号を付与する」と記載されており、帳票出力エンティティの主キーcには「帳票出力番号」が入る。
- 小問 設問1 d:エ
- 顧客情報登録・更新機能要件において、「顧客ごとに一意な顧客IDを付与する」と記載されており、顧客エンティティの主キーdには「顧客ID」が入る。
- 小問 設問2 e:カ
- 顧客情報登録・更新機能において、名寄せ項目を比較して既存顧客情報が存在するかを検索(参照:R)し、既に登録されていれば保有契約件数を更新(更新:U)し、存在しなければ新規登録(作成:C)を行うため、操作は「C, R, U」となる。
- 小問 設問2 f:キ
- 顧客情報更新機能(住所変更時)において、変更前の顧客情報に一致する既存顧客情報を削除する際に、関係する関係顧客情報を「全て削除(D)し、変更後の顧客情報によって新たに登録(C)する」とあり、事前の存在確認等で参照(R)も行うため、操作は「C, R, D」となる。
覚えるポイント
- CRUDマトリックスでは、機能仕様文から作成(C)・参照(R)・更新(U)・削除(D)の漏れがないか確認する。
間違えやすいところ
- 住所変更の名寄せで、関係顧客は更新(U)ではなく一度削除(D)して作り直す(C)点を見落としやすいです。
出題の前提:平成27年度春期基本情報技術者試験午後問5の出題条件に基づく。
出典:IPA『2015年度 春期 午後』
公式問題冊子 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) / 公式問題冊子 p.27 ↗(www.ipa.go.jp)
プロジェクトにおけるコミュニケーションの計画と情報共有
プロジェクトマネジメント · コミュニケーション計画 / コミュニケーションチャネル / グループウェア運用
社内システムの刷新プロジェクトにおけるコミュニケーション計画、プロジェクト体制(図1)、各チームの構成員(表1)、コミュニケーション計画書(図2)、関係の数に関する記述を読み、設問1・設問2に答えよ。
- ア
- 【設問1 a】PM / 【設問1 b】2 / 【設問1 c】3 / 【設問1 d】多い / 【設問1 e】TLが担当者全員から確認メールを受け口頭報告 / 【設問2 f】全チームの担当者 / 【設問2 g】表の選択肢ア
- イ
- 【設問1 a】XチームのTL / 【設問1 b】6 / 【設問1 c】6 / 【設問1 d】少ない / 【設問1 e】TLが担当者全員から確認メールを受け電子メールで報告 / 【設問2 f】全チームのメンバ / 【設問2 g】表の選択肢イ
- ウ
- 【設問1 a】YチームのTL / 【設問1 b】12 / 【設問1 c】12 / 【設問1 d】変わらない / 【設問1 e】メンバが直接PMに電子メール報告 / 【設問2 g】表の選択肢ウ
- エ
- 【設問1 a】ZチームのTL / 【設問1 b】14 / 【設問1 c】24 / 【設問2 g】表の選択肢エ
解答・解説を表示
解答
設問1 a: ア, 設問1 b: エ, 設問1 c: ウ, 設問1 d: ウ, 設問1 e: イ, 設問2 f: イ, 設問2 g: ウ
解説
まず要点:プロジェクトのコミュニケーション管理では、関係者を結ぶ連絡経路の数や情報の伝え方をどう設計するかがとても大切です。情報を確実に伝え、記録として残すことを考えながら、規模に合った階層型の伝達ルールや、グループウェアでのアクセス権限の管理(登録できる権限と見るだけの権限を分ける)を行います。
解き方
- プロジェクト管理文書の一覧(図2)から、議事録の管理者がPMであることを読み取ります(空欄a)。
- 定期会議(全体進捗は月2回、チーム進捗は月4回×3チーム)から、月あたりの会議数と配布頻度を計算します(空欄b)。
- チームの人数から、方法①(階層型)と方法②(直接型)の連絡経路数をそれぞれ計算して比べます(空欄c, d)。
- 伝達確認と記録の保全を確実にする報告方法(口頭ではなく電子メール)を選びます(空欄e)。
- グループウェア導入の問題分析から、文書の配布先の見直し(空欄f)と、役割に応じたアクセス制御(空欄g)を決めます。
小問ごとの答え
- 小問 設問1 a:ア
- 図2の「2.1 プロジェクト管理文書」の項番3より、プロジェクト会議議事録の管理者は「PM」であり、配布の管理を行うのはPMである。
- 小問 設問1 b:エ
- 図2の「2.2 プロジェクト会議」より、全体進捗会議が「月2回」、チーム進捗会議が「チームごとに月4回」開催される。チームはX, Y, Zの3チームあるため、チーム進捗会議は月4回×3=12回。合計で月2回+12回=14回となり、bには14が入る。
- 小問 設問1 c:ウ
- 方法①における関係の数は、PMと各チームTLの間の関係数(3チームなので3)と、各チームTLと担当者の間の関係数の合計である。表1より担当者数はXチーム2名、Yチーム3名、Zチーム4名で計9名。各TLと担当者間の関係数は2+3+4=9。よって合計は3+9=12となる。
- 小問 設問1 d:ウ
- 方法②(PMから全メンバへ直接配布)の場合、PMと全メンバ(TL3名+担当者9名=計12名)の間の関係数は12である。方法①の関係数も12であるため、関係の数は方法②と比較して「変わらない」となる。
- 小問 設問1 e:イ
- 方法①で伝達確認と報告履歴を残すためには、TLが担当者全員から確認の電子メールを受領した上で、TLからPMへ電子メールで報告する運用にするのが適切である。
- 小問 設問2 f:イ
- 設問2の本文で「プロジェクト計画書の配布先が原因となり…機能要件の変更がメンバに伝わっていない場合がある」と分析されており、現状の「全チームのTL」から「全チームのメンバ」へ配布先を拡大するのが適切である。
- 小問 設問2 g:ウ
- プロジェクト会議議事録の管理者はPMであるため、PMは「登録及び参照を許可(●)」となる。また配布先は全チームのメンバであるため、X, Y, Z各チームのTLおよび担当者は全員「参照だけ許可(○)」とするのが適切である。
覚えるポイント
- チーム単位で開催される会議の回数はチーム数を掛けて総数を算出する。
間違えやすいところ
- チーム進捗会議(月4回)にチーム数(3チーム)を掛け忘れ、月6回と誤って計算することが多いです。
出題の前提:平成27年度春期基本情報技術者試験午後問6の出題条件に基づく。
出典:IPA『2015年度 春期 午後』
公式問題冊子 p.28 ↗(www.ipa.go.jp) / 公式問題冊子 p.29 ↗(www.ipa.go.jp) / 公式問題冊子 p.30 ↗(www.ipa.go.jp) / 公式問題冊子 p.31 ↗(www.ipa.go.jp) / 公式問題冊子 p.32 ↗(www.ipa.go.jp)
システム開発の投資評価(回収期間法と正味現在価値法)
システム戦略 · 投資評価 / 回収期間法 / 正味現在価値法(NPV) / キャッシュフロー
システム開発プロジェクトの投資評価に関する問題である。開発方式の異なるA案およびB案について、投資回収期間および正味現在価値(NPV)を用いて投資採算性を評価し、適切な案を意思決定する手順について答える。
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: ア, 設問2 c: ア, 設問2 d: ウ, 設問2 e: ア
解説
まず要点:回収期間法は、投下したお金を回収できるまでの期間が短いほど良いとする評価方法です。一方、正味現在価値(NPV)法は、将来のキャッシュフロー(お金の出入り)を割引率で現在の価値に直し、初期投資を引いた増加分で評価します。NPVが0より大きく、より大きい案を選びます。
解き方
- 表2の年度ごとのキャッシュフローから各年度末の累計を計算し、累計がプラスに変わる年数(回収期間)を判断します。
- 表3の割引係数で各年度の現在価値を求め、合計してNPVを計算し、金額の大小を比べて案を選びます。
小問ごとの答え
- 小問 設問1 a:ウ
- B案の各年度末のキャッシュフロー累計額を求めると、平成27年度は-10,000万円、28年度は-6,900万円、29年度は-3,800万円、30年度は-4,700万円、31年度は-500万円、32年度は+3,700万円となり、投資開始から5年目に初めてプラスになるため、投資回収期間は5年となります。
- 小問 設問1 b:ア
- A案の回収期間は4年、B案の回収期間は5年です。回収期間法では投資額を早期に回収できる短い方が望ましいため、A案よりもB案の方が回収期間は長く、A案を採用すると判断します。
- 小問 設問2 c:ア
- 要求分析前におけるB案の各年度キャッシュフローの現在価値は、27年度が-10,100万円、28年度が2,821万円、29年度が2,573万円(3,100×0.83)、30年度が-675万円(-900×0.75)、31年度が2,856万円、32年度が2,604万円です。これらを合計すると-10,100+2,821+2,573-675+2,856+2,604=79万円となります。
- 小問 設問2 d:ウ
- 要求分析の結果、A案の初期開発費は15,000万円から14,500万円へと500万円減少(キャッシュアウトが減少)しました。27年度のキャッシュフロー現在価値が500万円改善するため、新しいA案のNPVは当初の818万円に500万円を加えて1,318万円となります。
- 小問 設問2 e:ア
- 要求分析後のNPVは、A案が1,318万円、B案が754万円となり、A案の方が正味現在価値が大きいため、NPV法による評価基準に従いA案を採用します。
覚えるポイント
- 回収期間法では回収期間が短い案を優先する。
- NPV法では将来のキャッシュフローを割引率で割り引いた現在価値の合計から初期投資を控除し、NPVが大きい案を優先する。
間違えやすいところ
- 要求分析費用(100万円)を最初のキャッシュアウトに足し忘れるミスに注意します。
- 回収期間は累計が0以上(プラス)になった年数で、1年だけ黒字になったことと混同しないようにします。
出題の前提:平成27年度春期基本情報技術者試験午後問7問題文および公式解答例
出典:IPA『2015年度 春期 午後』
公式問題冊子 p.33 ↗(www.ipa.go.jp) / 公式問題冊子 p.34 ↗(www.ipa.go.jp) / 公式問題冊子 p.35 ↗(www.ipa.go.jp) / 公式問題冊子 p.36 ↗(www.ipa.go.jp)
クイックソートを応用した選択アルゴリズム(クイックセレクト)
アルゴリズム · クイックソート / 選択アルゴリズム / 配列操作 / ループ処理
与えられたn個のデータからk番目に小さい値を選択するアルゴリズム(関数Select)に関する問題である。基準値(Pivot)を用いて走査範囲を分割しながら目的の値を探索する処理のトレースおよび不具合発生時の動作について答える。
解答・解説を表示
解答
設問1 a: ア, 設問1 b: ウ, 設問2 c: イ, 設問2 d: エ, 設問3 e: オ, 設問3 f: エ
解説
まず要点:クイックセレクトは、クイックソートの分割操作(基準値でデータを2組に分けること)を使い、k番目が入っている片方の範囲だけを繰り返し絞り込んで、k番目に小さい値を探す方法です。毎回両側を並べ替えるクイックソートと違って片側だけをたどるため、平均するとO(n)(データ数にほぼ比例する手間)で求められます。
解き方
- 走査範囲内のk番目の要素を基準値Pivotとし、iを左から、jを右から進めて交換しながら2組に分けます。
- 分割後のi, jとkの大小を比べ、kが入る側にTopかLastを更新して探す範囲を狭めます。
小問ごとの答え
- 小問 設問1 a:ア
- 1回目の選択処理ではPivot=x[3]=6とし、内側ループ終了時にi=6、j=5となります。行25のi≦k(6≦3)は偽、行28のk≦j(3≦5)は真となるため、Lastにi-1=5が設定され、Topは1のまま維持されます。
- 小問 設問1 b:ウ
- 2回目の選択処理ではTop=1、Last=5、Pivot=x[3]=1です。内側ループ終了時にi=2、j=1となります。行25のi≦k(2≦3)は真となるためTopにj+1=2が設定され、行28のk≦j(3≦1)は偽となるためLastは5のまま維持されます。
- 小問 設問2 c:イ
- α(基準値やインデックスの初期化)は外側のTop<Lastループの先頭で実行されます。1回目でTop=1・Last=4へ絞り込まれ、2回目でTop=4・Last=2となりループ終了条件(Top<Lastが偽)を満たすため、αの実行回数は2回となります。
- 小問 設問2 d:エ
- γ(要素の交換処理)は、1回目の処理で3回実行され、2回目の処理で1回実行されるため、合計実行回数は3+1=4回となります。
- 小問 設問3 e:オ
- すべての要素が1である配列に対して条件式をx[i]≦Pivot(1≦1)に誤ると、常に真となってiが増加し続け、走査範囲および配列の定義範囲を超えてアクセスすることになります。
- 小問 設問3 f:エ
- 与えられた配列では、2回目の処理においてiが走査範囲の右端を越えて進んだ結果、走査範囲の更新でTop=1、Last=4のまま値が変化しなくなって同一処理を繰り返し、処理が終了しなくなります。
覚えるポイント
- クイックセレクトは両側の部分配列をソートするクイックソートと異なり、kが存在する側の部分配列のみを探索する。
- ポインタを進める不等号の厳密性(<と≦)を崩すと、同一値が連続する場合に範囲外参照や無限ループの原因となる。
間違えやすいところ
- ループ終了時のiとjの位置関係(交差してi>jになる)を見誤り、TopやLastの更新を間違えます。
- 条件式を≦にしたときの、ポインタの増減が止まる条件の破綻を見落とします。
出題の前提:平成27年度春期基本情報技術者試験午後問8問題文および公式解答例
出典:IPA『2015年度 春期 午後』
公式問題冊子 p.37 ↗(www.ipa.go.jp) / 公式問題冊子 p.38 ↗(www.ipa.go.jp) / 公式問題冊子 p.39 ↗(www.ipa.go.jp) / 公式問題冊子 p.40 ↗(www.ipa.go.jp) / 公式問題冊子 p.41 ↗(www.ipa.go.jp)
換字式暗号プログラムの追跡
ソフトウェア開発 · C言語 / 暗号化 / 2次元配列 / 文字列処理
換字表に従って平文の文字を別の文字に置き換えるC言語のプログラムenc_strに関する問題である。5行13列の換字表(英字・数字・記号・空白の計65文字)を用い、平文中の置換対象文字を2文字ずつ組にして暗号化を行う。同一文字の場合、同行の場合、同列の場合、それ以外(長方形の対角)の場合で換字ルールが異なり、奇数文字目の端数は反転位置の文字で置換する。平文の変換処理における変数値の変化および暗号化結果を解答せよ。
- ア
- CVa
- イ
- iAP
- ウ
- iCN
- エ
- iNC
- オ
- PIa
- カ
- VCa
解答・解説を表示
解答
設問1 a: キ, 設問1 b: エ, 設問1 c: エ, 設問1 d: エ, 設問1 e: イ, 設問2: カ
解説
まず要点:このプログラムは、文字を2文字ずつの組にして、換字表(文字の置き換え表)上の位置関係に従って別の文字へ置き換える暗号化を行う。2文字の位置が同じ・同じ行・同じ列・長方形の対角のどれかでルールを切り替える。奇数の文字が余ったときは、末尾の1文字を対角の反転位置の文字に置き換える。
解き方
- 平文のうち換字表にある文字を2文字ずつ順に見て、位置を表す配列(cp, rp, pos)に記録する。
- 2文字の位置関係を見分け、同じ文字・同じ行・同じ列・長方形のそれぞれの規則で暗号文字に置き換える。
- 文字数が奇数なら、最後に余った1文字へ反転位置(RSIZ-1-rp, CSIZ-1-cp)の置換を適用する。
小問ごとの答え
- 小問 設問1 a:キ
- 平文の最初の置換対象文字は'F'(位置0)である。換字表において'F'は4行7列に位置するため、colの値を示すaは7(キ)となる。
- 小問 設問1 b:エ
- 平文の先頭文字'F'の換字表における行位置は4行目であるため、rowの値を示すbは4(エ)となる。
- 小問 設問1 c:エ
- 最初の組は'F'(4行7列)と'u'(1行7列)であり同列に位置する。この場合、各文字の列番号を1進めた文字((cp+1)%13)に置換されるため、'u'(1行7列)は1行8列の'v'に置換される。したがってstr[1]に入るcは'v'(エ)である。
- 小問 設問1 d:エ
- βの行が5回目に実行される組は、位置8と9の連続する空白文字'△'である。同一文字同士の組では行・列ともに1進めた位置の文字で置換される。'△'は2行12列なので、(2+1)%5=3行、(12+1)%13=0列の'Z'に置換され、dは'Z'(エ)となる。
- 小問 設問1 e:イ
- 6回目の組となる文字を探すと、位置10の'f'の後、位置11の'('は換字表に存在しないため読み飛ばされ、位置12の'x'が2文字目となる。よってpos[1]の値であるeは12(イ)となる。
- 小問 設問2:カ
- 平文'IPA'を変換すると、まず'I'(4行4列)と'P'(3行10列)は行も列も異なるため、対角線上の位置である3行4列の'V'と4行10列の'C'に置換される。残った奇数文字'A'(4行12列)はループ後の単独置換ルールにより4-4=0行、12-12=0列の'a'に置換されるため、暗号文は'VCa'(カ)となる。
覚えるポイント
- 2文字換字暗号の条件分岐(同一文字、同一行、同一列、長方形対角)の追跡手順を押さえる。
間違えやすいところ
- 換字表にない文字(括弧など)を読み飛ばさずに位置の添字(pos)を数えてしまう間違いが多い。
出題の前提:平成27年度春期基本情報技術者試験 午後問題 問9
出典:IPA『2015年度 春期 午後』
公式問題冊子 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 / 順ファイル / 索引ファイル / 集計処理
出退勤記録ファイル(順ファイル)を読み込み、従業員番号をキーとする勤務管理ファイル(索引ファイル)に勤務履歴および勤務時間を集計して書き込むCOBOLプログラムに関する問題である。日付の分解、作業領域の桁数定義、未登録従業員レコードの初期化、勤務時間の計算、および設問2における22時以降の深夜勤務時間集計の追加変更を解答せよ。
- ア
- ATD-IN(IDX)
- イ
- ATD-NIGHTSUM
- ウ
- ATD-OUT(IDX)
- エ
- ATD-SUM
- オ
- NIGHT-TIME
解答・解説を表示
解答
設問1 a: オ, 設問1 b: イ, 設問1 c: イ, 設問1 d: エ, 設問2 e: オ, 設問2 f: イ
解説
まず要点:COBOLでは、集団項目を分解して組み立て直す処理、INITIALIZE文のREPLACING指定、そしてPERFORMで共通処理を呼び出す時間計算の基本を押さえる必要がある。時間の繰り上がりや累計の受け渡しは、作業領域の集団項目を正しく使って行う。深夜勤務のように開始時刻を固定して計算する場面では、基準となる時刻を正しく選ぶことが大切である。
解き方
- LOG-DATE(8桁)から下位2桁(日)を取り出すFILLERの桁数と、勤務時間の合計(時間3桁+分2桁)の項目定義を確かめる。
- 索引ファイルに新しいレコードを作るときの初期化として、INITIALIZE REPLACING NUMERIC BY 9999 を選ぶ。
- CALC-PROCサブルーチンが入出力に使う項目(W-TIME-FROM, W-TIME-TO, W-TIME-ACCUM)の流れを整理し、深夜時間の集計を足す場所を導く。
小問ごとの答え
- 小問 設問1 a:オ
- LOG-DATEは8桁(年月日)であり、IDXに日(2桁)を取り出すため、上位の年4桁と月2桁をスキップするFILLERの桁数はPIC 9(6)(オ)となる。
- 小問 設問1 b:イ
- 勤務時間ATD-SUMは5桁(時間3桁、分2桁)で管理される。MAがPIC 9(2)であるため、時間を表すHAはPIC 9(3)(イ)となる。
- 小問 設問1 c:イ
- 新規従業員レコードの勤務履歴31日分(ATD-IN, ATD-OUT)には未出勤を表す9999を格納する必要がある。OCCURS配下の全数値項目を9999で初期化するには INITIALIZE ATD-HST REPLACING NUMERIC BY 9999(イ)を用いる。
- 小問 設問1 d:エ
- CALC-PROC実行後、時間HAと分MAからなる集団項目W-TIME-ACCUMに新累計時間が求まるため、これをATD-SUMに転記する。よってdはW-TIME-ACCUM(エ)である。
- 小問 設問2 e:オ
- 深夜勤務時間の計算では、開始時刻W-TIME-FROMとして深夜開始時刻である2200(NIGHT-TIME)を設定するため、eはNIGHT-TIME(オ)となる。
- 小問 設問2 f:イ
- 深夜勤務時間の累計計算を行うため、加算前の累計深夜時間であるATD-NIGHTSUMを作業領域W-TIME-ACCUMに設定してCALC-PROCを呼び出す。よってfはATD-NIGHTSUM(イ)となる。
覚えるポイント
- INITIALIZE文にREPLACING NUMERIC BY句を指定すると集団項目配下の全数値項目を一括置換できる。
間違えやすいところ
- MOVE 9999 TO ATD-HSTとすると集団項目全体への英数字転記になり、各要素に正しく格納されない点に注意する。
出題の前提:平成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)
セキュアプログラミング(文字列のサニタイズ処理)
ソフトウェア開発 · Java / サニタイズ / クロスサイトスクリプティング対策 / 文字コード
Webアプリケーションにおけるサニタイズ処理を行うJavaプログラムに関する問題である。HTMLタグ間およびJavaScript文字列として埋め込む各ケースに応じた文字の変換処理について、空欄a〜eおよび実行時の呼び出し回数を答える。
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: イ, 設問1 c: ウ, 設問1 d: ア, 設問1 e: イ, 設問2: ウ
解説
まず要点:Webアプリケーションのサニタイズ処理(危険な文字を安全な表現に置き換える処理)では、出力する場所(HTMLの中か、JavaScriptの文字列の中か)の文法に合わせてエスケープ(特殊文字の無害化)を正しく行う必要がある。安全と分かっている文字だけをホワイトリスト方式で登録し、登録していない文字は抽象メソッドencodeで、その場所に応じた表現へ変換する設計になっている。
解き方
- 基底クラスEncoderのMap操作と拡張for文の文法を確かめ、a〜cの空欄を決める。
- HtmlEncoderとJavaScriptEncoderそれぞれの仕様(エスケープの形式と数値範囲の条件)から、空欄d・eを特定する。
- プログラム4のテスト文字列を1文字ずつ見て、HtmlEncoderのコンストラクタであらかじめ登録されない文字の総数を数える。
小問ごとの答え
- 小問 設問1 a:ウ
- addNoConversion(char c)は文字cを変換せずそのまま出力するための登録メソッドです。変換テーブルMapにキーc、値としてcを文字列化したString.valueOf(c)を格納するため、put(c, String.valueOf(c))が適切です。
- 小問 設問1 b:イ
- String型の引数sの各文字を拡張for文で順次取り出してchar型の変数cで参照するため、文字列を文字配列に変換するs.toCharArray()が適切です。
- 小問 設問1 c:ウ
- 文字cが変換テーブルに登録されているかを調べ、対応する文字列を取得するためにconversionTable.get(c)を呼び出します。登録がなければnullが返り、後続のencode(c)が実行されます。
- 小問 設問1 d:ア
- HTMLタグ間への埋め込み仕様(1)③では、その他の文字を10進数コードdddを用いて"&#ddd;"の形式に変換します。char型のcをそのまま加算すると文字として連結されてしまうため、(int) cで整数にキャストしたアが適切です。
- 小問 設問1 e:イ
- JavaScript文字列への埋め込み仕様(2)②では、「文字コードが256未満の英数字以外の文字は\xXXに変換する」と定められているため、256より小さいことを判定する条件「c < 256」が入ります。
- 小問 設問2:ウ
- 引数文字列「<script>alert('注意!');</script>」のうち、HtmlEncoderの登録対象外(encode(c)が呼び出される文字)は、PUNCTUATIONSに含まれない引用符「'」(2箇所)、漢字「注」「意」(2文字)、およびPUNCTUATIONSに含まれないスラッシュ「/」(1文字)の計5文字です。
覚えるポイント
- Javaのchar型変数を文字列連結時に数値コードとして扱いたい場合は、明示的に(int)にキャストする必要がある。
- 拡張for文で文字列の各文字を走査する際はs.toCharArray()を用いてchar配列に変換する。
間違えやすいところ
- HtmlEncoderのPUNCTUATIONS定義にシングルクォート「'」やスラッシュ「/」が入っていないのを見落とし、漢字2文字だけと誤認して呼び出し回数を誤る。
- Mapへの登録でputメソッドではなくgetメソッドやclearメソッドを選んでしまう。
出題の前提:平成27年度春期基本情報技術者試験午後問11の出題および公式解答に基づく。
出典:IPA『2015年度 春期 午後』
公式問題冊子 p.52 ↗(www.ipa.go.jp) / 公式問題冊子 p.53 ↗(www.ipa.go.jp) / 公式問題冊子 p.54 ↗(www.ipa.go.jp) / 公式問題冊子 p.55 ↗(www.ipa.go.jp) / 公式問題冊子 p.56 ↗(www.ipa.go.jp)
アセンブラ言語CASL IIによる階乗計算と再帰処理
ソフトウェア開発 · アセンブラ / CASL II / 再帰呼び出し / スタック操作
CASL IIで記述された階乗を計算するプログラムに関する問題である。ループによる乗算の実現(プログラム1・2)および再帰呼び出し(プログラム3)におけるレジスタやスタックポインタ(SP)の挙動について答える。
解答・解説を表示
解答
設問1 a: エ, 設問1 b: オ, 設問1 c: ウ, 設問2: エ, 設問3 d: オ, 設問3 e: ウ
解説
まず要点:CASL IIでは、サブルーチンを呼ぶCALL命令は戻り先アドレス(PR)をスタックに退避してSPを1減らし、PUSH命令も指定したデータを退避してSPを1減らす。再帰処理では、呼び出しの階層ごとに引数や局所データをスタックへ退避・復元することで、それぞれ独立した実行状態を保つ。
解き方
- プログラム1の条件分岐とカウンタの更新、プログラム2のビット乗算の手順を追い、空欄a〜cを導く。
- n=4のときのプログラム1のGR1とGR2の変化をループの終わりまで追い、設問2の値を求める。
- プログラム3のCALLとPUSH命令が実行されるときのスタックポインタ(SP)の減り方と、退避される値(GR1)を追って設問3のd・eを特定する。
小問ごとの答え
- 小問 設問1 a:エ
- n=0または1のときはループを行わずF(n)=1として即座に終了させます。SUBL GR1,=1によりGR1=n-1を計算したとき、n>=2であれば結果は正(SF=0, ZF=0)となるため、正分岐命令JPL NEXT(選択肢エ)によってループ処理へ進みます。
- 小問 設問1 b:オ
- GR1はループの残存回数を管理するカウンタです。乗算を1回実行するごとにGR1から1を減算し、0になるまで繰り返すため、SUBL GR1,=1(選択肢オ)が適切です。
- 小問 設問1 c:ウ
- 乗算MULTでは被乗数GR1の値をGR4にコピーし、乗数GR2の当該ビット位置(GR3で管理)に合わせて左シフトします。したがって、GR4をGR3ビット左論理シフトするSLL GR4,0,GR3(選択肢ウ)となります。
- 小問 設問2:エ
- F(4)を計算する場合、GR2は1から始まり、各ループの先頭でLAD GR2,1,GR2により2、3、4へとインクリメントされます。MULTサブルーチンはGR2の値を退避・復元するため変更されず、3回目の乗算終了後にループを抜けた直後のGR2の値は4となります。
- 小問 設問3 d:オ
- RPUSH実行直後のSPをBとすると、行3のCALL RSUBで戻り番地がプッシュされてSPはB-1となります。次にRSUB内の行11でPUSH 0,GR1が実行されるとさらにスタックが1語消費され、SPはB-2となります。
- 小問 設問3 e:ウ
- 行11のPUSH 0,GR1でプッシュされる値はGR1の内容そのものです。F(3)の初回呼び出し時、GR1には引数である3が設定されているため、SPが指す番地には3が格納されます。
覚えるポイント
- CALL命令実行時、戻り先アドレスがスタックにプッシュされSPは1減算される。
- PUSH命令は実効アドレスの内容をスタックに格納し、SPを1減算する。
間違えやすいところ
- MULTの呼び出し規約(GR1〜GR7は呼び出し元に戻るとき復元される)を見落とし、MULT内でGR2が変化したまま戻ると誤解する。
- スタックが下位アドレス方向へ伸びる(プッシュでSPが減る)仕組みを逆に捉えてB+2と答えてしまう。
出題の前提:平成27年度春期基本情報技術者試験午後問12の出題および公式解答に基づく。
出典:IPA『2015年度 春期 午後』
公式問題冊子 p.57 ↗(www.ipa.go.jp) / 公式問題冊子 p.58 ↗(www.ipa.go.jp) / 公式問題冊子 p.59 ↗(www.ipa.go.jp) / 公式問題冊子 p.60 ↗(www.ipa.go.jp)
学習進捗管理表の関数式とマクロの実装
ソフトウェア開発(表計算) · 表計算ソフト / ワークシート設計 / マクロ / 条件判定式
社内向け学習教材の進捗管理を行うワークシート「学習進捗管理」およびマクロ「StartLearning」に関する問題です。単元記述部分(図1)と項目記述部分(図2)の連携、学習開始可能性の判定式、および学習開始日を設定するマクロの処理内容について、各設問の空欄[ a ]〜[ f ]に当てはまる適切なものを解答群から選んでください。
- a-ア
- IF(F2 - E2 + 1 ≦ D2, '○', '△'), null
- a-イ
- IF(F2 - E2 ≦ D2, '○', '△'), null
- a-ウ
- IF(F2 - E2 - 1 ≦ D2, '○', '△'), null
- a-エ
- null, IF(F2 - E2 + 1 ≦ D2, '○', '△')
- a-オ
- null, IF(F2 - E2 ≦ D2, '○', '△')
- a-カ
- null, IF(F2 - E2 - 1 ≦ D2, '○', '△')
- b-ア
- 照合一致(切捨て(I2, -2), $A$2~$A$13, 0)
- b-イ
- 照合一致(切捨て(I2, -2), $A$2~$A$13, 0) - 1
- b-ウ
- 照合一致(切捨て(I2, -2), $A$2~$A$13, 0) + 1
- b-エ
- 照合一致(切捨て(I3, -2), $A$2~$A$13, 0)
- b-オ
- 照合一致(切捨て(I3, -2), $A$2~$A$13, 0) - 1
- b-カ
- 照合一致(切捨て(I3, -2), $A$2~$A$13, 0) + 1
- c-ア
- '順次'
- c-イ
- '任意'
- d-ア
- L3 = null
- d-イ
- L3 ≠ null
- d-ウ
- M2 = null
- d-エ
- M2 ≠ null
- d-オ
- M3 = null
- d-カ
- M3 ≠ null
- e-ア
- 表引き(K2~K53, ItemRow, 1) = '可', 表引き(E2~E13, UnitRow, 1) = null
- e-イ
- 表引き(K2~K53, ItemRow, 1) = '可', 表引き(E2~E13, UnitRow, 1) ≠ null
- e-ウ
- 表引き(K2~K53, ItemRow, 1) = '可', 表引き(L2~L53, ItemRow, 1) = null
- e-エ
- 表引き(K2~K53, ItemRow, 1) = '可', 表引き(L2~L53, ItemRow, 1) ≠ null
- e-オ
- 表引き(K2~K53, ItemRow, 1) = '不可', 表引き(E2~E13, UnitRow, 1) = null
- e-カ
- 表引き(K2~K53, ItemRow, 1) = '不可', 表引き(E2~E13, UnitRow, 1) ≠ null
- e-キ
- 表引き(K2~K53, ItemRow, 1) = '不可', 表引き(L2~L53, ItemRow, 1) = null
- e-ク
- 表引き(K2~K53, ItemRow, 1) = '不可', 表引き(L2~L53, ItemRow, 1) ≠ null
- f-ア
- 表引き(E2~E13, ItemRow, 1)
- f-イ
- 表引き(F2~F13, ItemRow, 1)
- f-ウ
- 表引き(F2~F13, UnitRow, 1)
- f-エ
- 表引き(L2~L53, ItemRow, 1)
- f-オ
- 表引き(L2~L53, UnitRow, 1)
- f-カ
- 表引き(M2~M53, ItemRow, 1)
- f-キ
- 表引き(M2~M53, UnitRow, 1)
解答・解説を表示
解答
設問1 a: エ, 設問2 b: オ, 設問2 c: イ, 設問2 d: エ, 設問3 e: ウ, 設問3 f: エ
解説
まず要点:表計算での条件判定では、未入力のセル(null)を除く処理、経過日数を数えるときの両端入れ(+1)、照合一致・表引き関数によるマスタ表との連携参照、そしてマクロでのセルの参照(相対参照・表引き)を正しく組み合わせることが欠かせない。これらを1つでも取り違えると判定結果が変わる。
解き方
- 設問1:セルG2のIF文で、条件「F2 = null」が真なら空値nullを返し、偽なら「F2 - E2 + 1 ≦ D2」で判定する入れ子の作りを導く。
- 設問2(b):今の項目の単元ID「切捨て(I3, -2)」の1つ前の単元を探すため、A列の照合一致の結果から1を引く式を選ぶ。
- 設問2(c)(d):学習順序が「任意」である条件と、「順次」での直前の行の完了(M2 ≠ null)を条件式に当てはめる。
- 設問3(e)(f):マクロ内のItemRowを使って対象項目のK列('可')とL列(null)を判定し、単元の開始日E列に項目の開始日L列を移す処理を特定する。
小問ごとの答え
- 小問 設問1 a:エ
- 学習完了日F2が未設定(null)の場合は空値(null)を表示し、設定済みの場合は学習日数(F2-E2+1)が標準日数D2以下なら'○'、超過なら'△'を出力するため「null, IF(F2 - E2 + 1 ≦ D2, '○', '△')」となります。
- 小問 設問2 b:オ
- 対象項目が属する単元の直前の単元が完了しているかを確認するため、対象単元の行位置「照合一致(切捨て(I3, -2), $A$2~$A$13, 0)」から1を引いた行位置「照合一致(切捨て(I3, -2), $A$2~$A$13, 0) - 1」を指定します。
- 小問 設問2 c:イ
- 条件(a)「項目が属する単元の項目学習順序が'任意'である」を判定するため、垂直照合で取得した単元の項目学習順序と比較する値は「'任意'」となります。
- 小問 設問2 d:エ
- 条件(b)「その単元の中でより小さいIDの項目の学習が全て完了している」は、昇順に並ぶ直前の項目(1つ上の行)の学習完了日M列が入力済みであることを表すため、「M2 ≠ null」となります。
- 小問 設問3 e:ウ
- 項目の学習開始条件である「①学習開始可能(K列が'可')」と「②学習開始日が空値(L列がnull)」を判定するため、「表引き(K2~K53, ItemRow, 1) = '可', 表引き(L2~L53, ItemRow, 1) = null」が入ります。
- 小問 設問3 f:エ
- 単元の学習開始日(E列)にも、開始した項目の学習開始日と同じ日付を設定するため、項目の学習開始日が格納されている「表引き(L2~L53, ItemRow, 1)」を設定します。
覚えるポイント
- 開始日と終了日を含む日数の計算は「終了日 - 開始日 + 1」となる。
- 表引き関数で1つ前の行を参照する際は「照合一致 - 1」を用いる。
間違えやすいところ
- 日数の引き算で「+1」を忘れ、1日少なく計算してしまう間違い。
- マクロ内で単元の行(UnitRow)と項目の行(ItemRow)を取り違えてしまう間違い。
出題の前提:平成27年度春期 基本情報技術者試験 午後問題 問13(正誤表の修正事項を反映)
出典:IPA『2015年度 春期 午後』
公式問題冊子 p.2 ↗(www.ipa.go.jp) / 公式問題冊子 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)
2015年度 春期 午後
参照した公式資料
IPAが公開した2015年度 春期 午後の問題・解答資料です。

