旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2018年度 秋期 午後の概要
Webサイトにおける情報セキュリティ事故の原因分析と対策
情報セキュリティ · SQLインジェクション / プレースホルダ / 情報流出対策 / アクセスログ / WAF
自動車の販売代理店であるA社のWebサイトで、インターネット経由のSQLインジェクション攻撃によりデータベース内のカタログ請求者情報が流出する事故が発生した。事故原因の特定、データベースに対する防御策、情報流出リスク低減策、アクセスログの取得、およびWAF導入などの再発防止策について答える。
- 設問1 ア
- DNS情報の改ざんにより偽サイトへ誘導してブラウザで不正スクリプトを実行させる。
- 設問1 イ
- インターネット経由でDBサーバに直接不正ログインする。
- 設問1 ウ
- インターネット経由でWebアプリにデータベース操作の命令文を入力し、DBを不正操作する。
- 設問1 エ
- インターネット経由で送信されている情報を盗聴する。
- 設問2a ア
- Webアプリへの入力パラメータには、Webサーバ内のファイル名を直接指定できないようにする。
- 設問2a イ
- Webサーバのメモリを直接操作するような命令を記述できないプログラム言語を用いて作り直す。
- 設問2a ウ
- Webページに出力する要素に対して、エスケープ処理を施す。
- 設問2a エ
- データベース操作の命令文の組立てを文字列連結によって行う場合は、連結する文字列にエスケープ処理を施す。
- 設問2b ア
- カタログ請求者の情報の適切な保管期間を定め、同意を得た上で、保管期間を過ぎた時点で消去する。
- 設問2b イ
- カタログ請求者の情報を、カタログ送付後に直ちに、データベースから消去する。
- 設問2b ウ
- カタログ請求者へ送付する電子メールにディジタル署名を付ける。
- 設問2b エ
- データベースに登録されている情報を定期的にバックアップする。
- 設問2c ア
- Webサイトの管理に使用する保守用PCは、必要なときだけ起動する。
- 設問2c イ
- WebサーバとDBサーバにインストールするミドルウェアは、必要最低限にする。
- 設問2c ウ
- WebサーバとDBサーバのハードディスクのデフラグメンテーションを、定期的に行う。
- 設問2c エ
- データベースへのアクセスログを取得する。
- 設問3 ア
- DBサーバを、Webサーバと同じく、DMZに設置する。
- 設問3 イ
- 不正な通信を遮断するために、WAF(Web Application Firewall)を導入する。
- 設問3 ウ
- Webサーバを増設して冗長化した構成にする。
- 設問3 エ
- 保守用PCのログインパスワードには英数字及び記号を使用し、推測が難しい複雑なものを設定する。
解答・解説を表示
解答
設問1: ウ, 設問2 a: エ, 設問2 b: ア, 設問2 c: エ, 設問3: イ
解説
まず要点:SQLインジェクション攻撃は、入力欄にSQL文の一部を紛れ込ませてデータベース(DB、データの保管庫)を不正に操作する攻撃です。原因は、外部からの入力を使ってSQL文を組み立てる処理の不備にあります。対策は、入力した特殊文字を無害化するエスケープ処理や、個人情報を必要以上に長く持たないこと、アクセス記録の取得、WAF(Webアプリへの不正通信を防ぐ防火壁)の導入を組み合わせることです。
解き方
- 下線①の、入力されたSQL文でDBが不正操作された手口から、SQLインジェクションの定義を選ぶ。
- 表1の目的ごとに、SQL防御は文字列エスケープ、リスク低減は不要情報の削除、原因特定はアクセスログ取得を対応させる。
- 設問3では、Webアプリ全体の弱点を狙う外部からの不正アクセスを遮断する策としてWAFを選ぶ。
小問ごとの答え
- 小問 設問1:ウ
- SQLインジェクションは、Webアプリケーションの入力値にSQL文の構成要素を混入させることで、意図しないSQL命令を実行させてデータベースを不正操作する攻撃です。
- 小問 設問2 a:エ
- SQLインジェクションの根本対策はプレースホルダの実装ですが、文字列連結でSQL文を組み立てる場合は、特殊文字を安全にエスケープ処理することが適切な防御策となります。
- 小問 設問2 b:ア
- 情報流出リスクを低減するには、カタログ送付後の購入支援に必要な期間を定めた上で、利用規約等で同意を得て保管期間経過後に不要となった情報をデータベースから削除することが適切です。
- 小問 設問2 c:エ
- 情報流出の原因究明や流出範囲(閲覧されたレコード)を正確に特定するためには、誰がいつどのような問合せを実行したかを記録するデータベースのアクセスログ取得が不可欠です。
- 小問 設問3:イ
- Webアプリケーション全体にクロスサイトスクリプティングなど他の脆弱性が疑われる場合、通信を監視して不正リクエストを遮断するWAF(Web Application Firewall)の導入が有効です。
覚えるポイント
- SQLインジェクション対策の基本はプレースホルダの利用であり、文字列連結を行う場合はエスケープ処理が必要となる。
- 不要になった個人データを消去して保持量を最小化し、アクセスログを取得・保全することが流出被害防止と事後調査の鉄則である。
間違えやすいところ
- HTMLのエスケープ(XSS対策)と、SQL用のエスケープ(SQLインジェクション対策)を混同しないこと。
- 購入支援にデータが必要なのに「カタログ送付後すぐ消去する」を選んでしまう間違いに注意すること。
出題の前提:平成30年度秋期 基本情報技術者試験 午後問題 問1
出典:IPA『2018年度 秋期 午後』
公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp) / 公式問題冊子 p.8 ↗(www.ipa.go.jp) / 公式問題冊子 p.9 ↗(www.ipa.go.jp)
プロセスのスケジューリング(ラウンドロビン方式と優先度順方式)
ソフトウェア · プロセスの状態遷移 / ラウンドロビン方式 / 優先度順方式 / タイムクウォンタム / ディスパッチ
OSにおけるプロセスのスケジューリング方式として、ラウンドロビン方式と優先度順方式を比較・検証する。タイムクウォンタム20ミリ秒での状態遷移の回数、優先度推移、および複数プロセス(A, B, C)が競合する際の実行開始時刻や終了時刻を求める。
- 設問1 ア
- ①: 3回, ②: 2回, ③: 2回, ④: 0回
- 設問1 イ
- ①: 3回, ②: 2回, ③: 2回, ④: 3回
- 設問1 ウ
- ①: 3回, ②: 2回, ③: 2回, ④: 4回
- 設問1 エ
- ①: 6回, ②: 2回, ③: 2回, ④: 0回
- 設問1 オ
- ①: 6回, ②: 2回, ③: 2回, ④: 3回
- 設問1 カ
- ①: 6回, ②: 2回, ③: 2回, ④: 4回
- 設問2a ア
- 3 → 2 → 5 → 4 → 3 → 2
- 設問2a イ
- 3 → 2 → 5 → 4 → 3 → 5
- 設問2a ウ
- 3 → 3 → 5 → 3 → 1
- 設問2a エ
- 3 → 4 → 5 → 4 → 3 → 5
- 設問2b ア
- 10ミリ秒後
- 設問2b イ
- 20ミリ秒後
- 設問2b ウ
- 30ミリ秒後
- 設問2c オ
- 50ミリ秒後
- 設問2c カ
- 60ミリ秒後
- 設問2c キ
- 70ミリ秒後
解答・解説を表示
解答
設問1: オ, 設問2 a: イ, 設問2 b: イ, 設問2 c: キ
解説
まず要点:OSは複数の処理(プロセス)にCPUを順番に割り当て、状態を切り替えて実行します。実行中の「実行状態」、CPUが空くのを待つ「実行可能状態」、入出力(キーボードやディスクの読み書き)の完了を待つ「待ち状態」を行き来します。ラウンドロビン方式では決められた時間(タイムクウォンタム)を使い切ると実行可能状態に戻り、優先度順方式ではCPUを使い続けると優先度が下がり、入出力が終わると優先度が上がります。
解き方
- プロセスXのCPU処理時間(30ms、50ms、10ms)をタイムクウォンタム20msごとに分け、①割当て、②入出力移行、③入出力完了、④中断の回数を数える。
- 優先度の変化ルール(初期値3、中断で-1、入出力完了で5)にそって、各状態変化での優先度を時間順に追う。
- プロセスA・B・Cの到着時刻と優先度キューを管理し、CPUが空いた時点で最も優先度が高い処理の実行開始時刻と終了時刻を求める。
小問ごとの答え
- 小問 設問1:オ
- 処理1(30ms)で①が2回・④が1回・②が1回、処理2(50ms)で①が3回・④が2回・②が1回、処理3(10ms)で①が1回発生し、入出力完了の③が2回で合計は①が6回、②が2回、③が2回、④が3回となります。
- 小問 設問2 a:イ
- 生成時優先度3から、処理1タイムアウトで2、入出力完了で5、処理2の1回目タイムアウトで4、2回目タイムアウトで3、入出力完了で5となるため、優先度推移は「3 → 2 → 5 → 4 → 3 → 5」です。
- 小問 設問2 b:イ
- 時刻0にAが実行開始し、時刻10にBが優先度3で生成されます。時刻20にAのタイムクウォンタム満了でAの優先度が2に低下するため、優先度3のBが時刻20ミリ秒後から実行を開始します。
- 小問 設問2 c:キ
- 時刻40にB中断(優先度2)後、優先度3のCが実行され時刻60にI/O待ちとなります。時刻60にキュー先頭のAが再開し、残り10msを処理して時刻70ミリ秒後に処理1を終了します。
覚えるポイント
- ラウンドロビン方式ではCPU使用時間がタイムクウォンタムを超過するたびにプロセスが中断され実行可能キュー末尾へ回される。
- 多重キュー優先度順方式では、タイムクウォンタム消費による優先度降格とI/O完了による優先度昇格が動的に行われる。
間違えやすいところ
- 処理が終わって消えるときには、タイムクウォンタム満了の中断④が起きないことを見落としやすい。
- 次に取り出す処理は、生成順だけでなく、その時点で最も優先度が高いものから選ばれる点に注意すること。
出題の前提:平成30年度秋期 基本情報技術者試験 午後問題 問2
出典:IPA『2018年度 秋期 午後』
公式問題冊子 p.10 ↗(www.ipa.go.jp) / 公式問題冊子 p.11 ↗(www.ipa.go.jp) / 公式問題冊子 p.12 ↗(www.ipa.go.jp) / 公式問題冊子 p.13 ↗(www.ipa.go.jp) / 公式問題冊子 p.14 ↗(www.ipa.go.jp)
コンサートチケット販売サイトの関係データベースの設計及び運用
データベース · リレーショナルデータベース / 制約条件 / 外部結合 / CASE式 / 副問合せ
コンサートチケット販売サイトの販売サブシステムにおける関係データベースの設計及び運用に関する問題である。会員表、商品表、商品詳細表、決済表、販売表の構成と運用仕様を基に、整合性を保つための制約、販売できない席数を集計するSQL文、支払督促対象を抽出するSQL文、ポイント付与を行うUPDATE文について答える。
- 設問1 ア
- 表名.列名: 決済表.決済額, 制約: 検査制約
- 設問1 イ
- 表名.列名: 決済表.決済日, 制約: 非NULL制約
- 設問1 ウ
- 表名.列名: 商品詳細表.席種, 制約: 参照制約
- 設問1 エ
- 表名.列名: 販売表.会員ID, 制約: 一意性制約
- 設問2 a ア
- a1: INNER JOIN, a2: 決済表.決済額 = -1
- 設問2 a イ
- a1: INNER JOIN, a2: 決済表.決済額 >= 0
- 設問2 a ウ
- a1: LEFT OUTER JOIN, a2: (決済表.決済額 IS NULL OR 決済表.決済額 = -1)
- 設問2 a エ
- a1: LEFT OUTER JOIN, a2: (決済表.決済額 IS NULL OR 決済表.決済額 >= 0)
- 設問2 a オ
- a1: RIGHT OUTER JOIN, a2: (決済表.決済額 IS NULL OR 決済表.決済額 = -1)
- 設問2 a カ
- a1: RIGHT OUTER JOIN, a2: (決済表.決済額 IS NULL OR 決済表.決済額 >= 0)
- 設問3 b ア
- FROM 会員表, 販売表 WHERE DATEDIFF(販売表.決済期限日, NOW()) = 3 AND 販売表.会員ID = 会員表.会員ID AND 販売表.販売ID NOT IN (SELECT 販売ID FROM 決済表)
- 設問3 b イ
- FROM 会員表, 販売表 WHERE DATEDIFF(販売表.決済期限日, NOW()) = 3 AND 販売表.会員ID = 会員表.会員ID AND 販売表.販売ID IN (SELECT 販売ID FROM 決済表 WHERE 決済額 >= 0)
- 設問3 b ウ
- FROM 会員表, 販売表, 決済表 WHERE DATEDIFF(販売表.決済期限日, NOW()) = 3 AND 販売表.会員ID = 会員表.会員ID AND 販売表.販売ID = 決済表.販売ID
- 設問3 b エ
- FROM 会員表, 販売表, 決済表 WHERE DATEDIFF(販売表.決済期限日, NOW()) = 3 AND 販売表.会員ID = 会員表.会員ID AND 販売表.販売ID = 決済表.販売ID AND 決済表.決済額 <> -1
- 設問4 ア
- INSERT INTO 決済表(付与ポイント) SELECT IF 決済額 >= 20000 THEN FLOOR(決済額 * 0.03) ELSEIF 決済額 >= 10000 THEN FLOOR(決済額 * 0.02) ELSE FLOOR(決済額 * 0.01) END WHERE DATEDIFF(NOW(), 決済日) = 1
- 設問4 イ
- UPDATE 決済表 SET 付与ポイント = ( CASE 決済額 >= 20000 THEN FLOOR(決済額 * 0.03) WHEN 決済額 >= 10000 THEN FLOOR(決済額 * 0.02) ELSE FLOOR(決済額 * 0.01) END ) WHERE DATEDIFF(NOW(), 決済日) = 1
- 設問4 ウ
- UPDATE 決済表 SET 付与ポイント = ( CASE WHEN 決済額 >= 20000 THEN FLOOR(決済額 * 0.03) WHEN 決済額 >= 10000 THEN FLOOR(決済額 * 0.02) ELSE FLOOR(決済額 * 0.01) END ) WHERE DATEDIFF(NOW(), 決済日) = 1
- 設問4 エ
- UPDATE 決済表 SET 付与ポイント = ( IF 決済額 >= 20000 THEN FLOOR(決済額 * 0.03) ELSEIF 決済額 >= 10000 THEN FLOOR(決済額 * 0.02) ELSE FLOOR(決済額 * 0.01) END ) WHERE DATEDIFF(NOW(), 決済日) = 1
解答・解説を表示
解答
設問1: ア, 設問2 a: エ, 設問3 b: ア, 設問4: ウ
解説
まず要点:関係データベース(表形式でデータを管理する仕組み)では、データの食い違いを防ぐために適切な制約を設定します。制約には主キー、非NULL(空を許さない)、一意性、検査(値の範囲を限定)、参照制約などがあります。外部結合を使うと、相手の行が無い場合もNULL(値が無い状態)として残して集計でき、CASE式を使うと行ごとに条件で値を変えて更新できます。
解き方
- 表の定義と業務要件(支払い時・期限切れ取消時の行の状態変化)を確認し、各列に付けるべき制約を判断する。
- 販売できない席数を求めるため、未決済(決済表に無く外部結合でNULL)と決済完了(決済額0以上)の両方を拾える外部結合条件を導く。
- 未支払の申込みを取り出すため、副問合せを使ったNOT IN句の除外条件を組み立てる。
- 前日に決済した分のポイント付与更新には、標準SQLのCASE式を使ったUPDATE文を選ぶ。
小問ごとの答え
- 小問 設問1:ア
- 決済表の決済額は、正常な支払時は販売額以上の正の整数、期限切れ取消時は-1となるため、値の取り得る範囲を制約する検査制約(CHECK制約)が適切です。
- 小問 設問2 a:エ
- 販売できない席数は、未決済(決済表に存在しない)または決済済み(決済額>=0)の席数の合計です。未決済レコードを残すため販売表にLEFT OUTER JOINし、決済額がNULLまたは0以上を条件とします。
- 小問 設問3 b:ア
- 督促対象は決済期限日3日前で支払手続が未完了の購入申込です。未支払の販売IDは決済表にまだ存在しないため、販売表.販売ID NOT IN (SELECT 販売ID FROM 決済表) で抽出します。
- 小問 設問4:ウ
- 既存レコードの値を更新するためUPDATE文を使用し、条件分岐は標準SQLのCASE式(CASE WHEN 条件 THEN 値 ... ELSE 値 END)で記述します。
覚えるポイント
- 検査制約(CHECK制約)は列に格納可能な値の条件式を指定する制約である。
間違えやすいところ
- 未決済データが決済表に無いことを見落とし、等価結合(INNER JOIN)を選んでしまう間違いが多い。
出題の前提:問題文中の表構成定義および販売サブシステムの処理規則に基づく。
出典:IPA『2018年度 秋期 午後』
公式問題冊子 p.15 ↗(www.ipa.go.jp) / 公式問題冊子 p.16 ↗(www.ipa.go.jp) / 公式問題冊子 p.17 ↗(www.ipa.go.jp) / 公式問題冊子 p.18 ↗(www.ipa.go.jp) / 公式問題冊子 p.19 ↗(www.ipa.go.jp)
ネットワークの障害分析と対策
ネットワーク · ネットワーク障害切り分け / パケットフィルタリング / ネットワーク冗長化 / 負荷分散
社内ネットワークにおいて発生したリモートデスクトップ接続障害の切り分け、新規開発セグメント追加に伴うファイアウォール設定誤りの特定、およびルータ負荷分散と可用性向上を目的とした機器構成案の評価について答える。
- a, b ア
- PC 1-1 の LAN ポート
- a, b イ
- PC 1-1 の ソフトウェア
- a, b ウ
- スイッチ 1
- a, b エ
- スイッチ B
- a, b オ
- 設定を含むルータ B の ソフトウェア
- a, b カ
- ルータ B の LAN ポート
- c ア
- 事務セグメント内の PC から SSH を用いて当該 PC を遠隔操作できない
- c イ
- 事務セグメント内の PC からリモートデスクトップ機能を用いて当該 PC を遠隔操作できない
- c ウ
- 当該 PC から事務セグメント内のファイルサーバにアクセスできない
- d, e ア
- 可用性を高められる
- d, e イ
- 機密性を高められる
- d, e ウ
- 障害発生時に原因を特定しやすい
- d, e エ
- セグメント間で通信する際に経由する機器が少なくなる
- d, e オ
- ルータ B,C とスイッチ間をつなぐ LAN ケーブルの本数が少なくて済む
- d, e カ
- ルータ B とルータ C の負荷に大きな差が生じないように調整できる
解答・解説を表示
解答
a: イ (順不同), b: オ (順不同), c: ウ, d: ア (順不同), e: カ (順不同)
解説
まず要点:ネットワーク障害は、うまくいった通信の結果から正常な部分を消していき、原因を少しずつ絞り込みます。見る場所は通信の階層(ケーブルなどの物理層、宛先を決めるネットワーク層、信頼性を担うトランスポート層、アプリの層)や経路です。また、パケットフィルタリング(通す通信を選ぶ仕組み)では通信の向き(送信元と宛先)を正しく決める必要があり、機器を二重化すると止まりにくくなる一方で負荷の配分も考えます。
解き方
- 障害切り分けの試験結果(他PCからは接続失敗、別PCへのSSHは成功、セグメント内pingは成功)から、正常な経路や機器を除いて原因候補を絞る。
- 追加したファイアウォール設定の送信元・宛先・ポート番号と要件(ファイル共有の通信方向)を比べ、設定誤りの影響を判断する。
- 構成案1(全スイッチを両ルータにつなぐ冗長化)と構成案2(機能を分担する接続)を比べ、採用理由にあたる利点(可用性と柔軟な負荷調整)を選ぶ。
小問ごとの答え
- 小問 a:イ
- PC 1-2からPC 1-1へのping応答およびPC B-1からPC 1-2へのSSH成功により、中継機器の物理ポートやスイッチ1は正常と判断でき、障害原因はPC 1-1のソフトウェアまたはルータBのソフトウェア設定に絞られます。
- 小問 b:オ
- ルータBを経由する特定ポート(リモートデスクトップ)の通信のみが失敗している可能性があるため、設定を含むルータBのソフトウェアが原因候補となります。
- 小問 c:ウ
- 表1の設定ではポート445の送信元が事務セグメント、宛先が開発セグメント11となっており向きが逆であるため、開発セグメント11のPCからファイルサーバへのアクセスが許可されません。
- 小問 d:ア
- 構成案1では各スイッチが両ルータに接続されルータ冗長化技術が用いられるため、片方のルータに障害が発生しても通信を継続でき、可用性を高められます。
- 小問 e:カ
- 構成案1ではセグメントごとに使用するルータを柔軟に割り当てることができるため、ルータBとルータCの負荷に大きな差が生じないよう均等に調整できます。
覚えるポイント
- パケットフィルタ型ファイアウォールでは、セッションを開始する方向(送信元と宛先)の定義が極めて重要である。
間違えやすいところ
- 正常に通信できた経路(スイッチBやルータBのポート)を障害候補と取り違えてしまうことが多い。
出題の前提:問題文中の社内ネットワーク構成図、ファイアウォール仕様、および切り分け手順に基づく。
出典:IPA『2018年度 秋期 午後』
公式問題冊子 p.20 ↗(www.ipa.go.jp) / 公式問題冊子 p.21 ↗(www.ipa.go.jp) / 公式問題冊子 p.22 ↗(www.ipa.go.jp) / 公式問題冊子 p.23 ↗(www.ipa.go.jp)
購買管理システムで行う処理(ソフトウェア設計)
ソフトウェア設計 · 流れ図 / 決定表 / テストケース設計
自動車用アクセサリ類を製造するK社の購買管理システムにおける「購買ファイル更新可否チェック処理」に関する問題である。日次バッチで受け取る依頼ファイル(依頼種別:登録、変更、削除)を、既存の購買ファイル(購買ステータス:購買受付、見積り中、発注済、納品済)と照合し、更新用依頼ファイルまたは更新対象外依頼ファイルへ振り分ける。業務要件に基づき、処理の流れ図の空欄[ a1 ]・[ a2 ]、出力決定表の空欄[ b ]・[ c ]、およびテストデータ実行時の通過判定[ d ]・[ e ]に当てはまる適切な選択肢を答える。
- ア
- 設問1 a: a1=依頼種別=“登録”, a2=依頼種別=“削除”
- イ
- 設問1 a: a1=依頼種別=“登録”, a2=依頼種別≠“削除”
- ウ
- 設問1 a: a1=依頼種別≠“登録”, a2=依頼種別=“削除”
- エ
- 設問1 a: a1=依頼種別≠“登録”, a2=依頼種別≠“削除”
- オ
- 設問1 a: a1=依頼種別=“変更”, a2=依頼種別=“削除”
- カ
- 設問1 a: a1=依頼種別=“変更”, a2=依頼種別≠“削除”
解答・解説を表示
解答
設問1 a: ア, 設問2 b: ア, 設問2 c: オ, 設問3 d: イ, 設問3 e: ア
解説
まず要点:データを更新してよいかどうかは、既存データがあるか・今の状態(ステータス)は何か・依頼の種類は何かの組み合わせで判断します。判断は抜けや重なりがないように、すべての場合を整理して行います。流れ図の分かれ道と決定表(デシジョンテーブル、条件と結果を表にまとめたもの)の規則を正しく対応付けるのが基本です。
解き方
- 問題文の更新可否の仕様(同じIDの有無、購買ステータス、依頼種別の組み合わせ)を整理する。
- 図2の流れ図の分岐条件と処理の範囲(破線の部分)を確認し、a1とa2を決める。
- 表3の決定表で抜けている条件(見積り中での変更、未登録時の削除)を見つけ、bとcを求める。
- 表4・表5のテストデータを1件ずつ流れ図に当てはめて追い、破線内の処理を通るIDを抜き出してdとeを導く。
小問ごとの答え
- 小問 設問1 a:ア
- 購買ファイルに同じ依頼IDがない場合は依頼種別が登録であれば更新用に出力するためa1は「依頼種別=“登録”」となります。一致レコードがある場合はステータスが購買受付又は見積り中で、かつ依頼種別が変更又は削除であれば更新用に出力するため、変更のNo判定に続くa2は「依頼種別=“削除”」が入ります。
- 小問 設問2 b:ア
- 購買ステータスが「見積り中」の列で、依頼種別が「変更」のケースを定義します。変更がY、更新用依頼ファイル出力がX、更新対象外出力が-となるため、上から順に「-, Y, -, X, -」と定義されたアが正解です。
- 小問 設問2 c:オ
- 購買ファイルに同一IDが存在しない(条件1がN)場合、依頼種別が「削除」のケースを定義します。削除がY、更新用出力が-、更新対象外出力がXとなるため、上から順に「-, -, Y, -, X」と定義されたオが正解です。
- 小問 設問3 d:イ
- 図2の破線内処理(購買ステータスが購買受付又は見積り中の場合の依頼種別判定)において、対象外レコード出力となるのは、依頼種別が変更でも削除でもない「登録」の場合です。該当するのは購買ステータスが見積り中で依頼種別が登録である依頼ID 10000004のみです。
- 小問 設問3 e:ア
- 図2の破線内処理で対象レコード出力となるのは、ステータスが購買受付又は見積り中で、依頼種別が変更又は削除のレコードです。依頼ID 10000003(購買受付・削除)および依頼ID 10000005(見積り中・変更)の2件が処理されます。
覚えるポイント
- 決定表(デシジョンテーブル)は全ての入力条件と動作の組み合わせを漏れなく表現する設計ツールです。
- 流れ図のトレースでは、囲み枠(破線など)の境界条件と分岐先を正確に見極めることが重要です。
間違えやすいところ
- 購買ファイルに行が無い場合の登録処理と、行がある場合の変更・削除処理の条件を混同しやすい。
- 破線の外にある対象外の出力(発注済など)を破線内の処理と勘違いして、dやeを選ばないよう注意すること。
出題の前提:平成30年度秋期基本情報技術者試験午後問5問題文および公式解答・採点講評
出典:IPA『2018年度 秋期 午後』
公式問題冊子 p.24 ↗(www.ipa.go.jp) / 公式問題冊子 p.25 ↗(www.ipa.go.jp) / 公式問題冊子 p.26 ↗(www.ipa.go.jp) / 公式問題冊子 p.27 ↗(www.ipa.go.jp) / 公式問題冊子 p.28 ↗(www.ipa.go.jp) / 公式問題冊子 p.29 ↗(www.ipa.go.jp)
プロジェクトのスケジュール作成(プロジェクトマネジメント)
プロジェクトマネジメント · アローダイアグラム / クリティカルパス / 最早開始日 / トータルフロート
りん議書電子化プロジェクトにおけるアローダイアグラムを用いた日程計画に関する問題である。設問1では提示された図1のアローダイアグラムからクリティカルパス[ a ]、総所要日数[ b ]、作業Jの最早開始日と最遅開始日[ c ]、余裕日数[ d ]を求める。設問2では作業一覧表の依存関係から不足している2つのダミー作業[ e ]・[ f ]を特定し、追加後の総所要日数[ g ]を算出する。
- ア
- 設問1 a: A, C, G, I, K
- イ
- 設問1 a: A, D, I, K
- ウ
- 設問1 a: B, C, G, I, K
- エ
- 設問1 a: B, C, H
- オ
- 設問1 a: B, D, I, K
- カ
- 設問1 a: B, F, I, K
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: エ, 設問1 c: オ, 設問1 d: エ, 設問2 e: ウ (順不同), 設問2 f: ク (順不同), 設問2 g: オ
解説
まず要点:アローダイアグラム(PERT、作業の順序と日数を矢印で表す図)では、かかる日数が最も長い経路がクリティカルパスとなり、それが全体の所要日数になります。ある作業を始めるのに複数の先行作業の完了が必要なときは、所要時間0のダミー作業(見かけの矢印)を使って順序を正しく表します。
解き方
- 各結合点の最早時刻を前から計算し、最も長い経路(クリティカルパス)と総所要日数を求める。
- 対象作業の直前の最早時刻から最早開始日を、終了結合点の最遅時刻から日数を引いて最遅開始日を求め、その差で余裕日数を出す。
- 作業一覧から先行関係を読み取り、図2に無い依存関係をつなぐダミー作業(結合点4→5、7→9)を見つける。
- ダミー作業を入れたネットワークで再びクリティカルパスを計算し、全体の総所要日数を求める。
小問ごとの答え
- 小問 設問1 a:ウ
- 図1の全経路を探索すると、結合点1→2(B:2)→3(ダミー:0)→4(C:3)→6(G:2)→7(I:2)→8(K:3)の所要日数が2+0+3+2+2+3=12日となり最長経路(クリティカルパス)となります。したがって作業名は「B, C, G, I, K」です。
- 小問 設問1 b:エ
- クリティカルパス「B, C, G, I, K」の所要日数の合計は2+3+2+2+3=12日となり、総所要日数は12日(選択肢エ)です。
- 小問 設問1 c:オ
- 作業Jの開始結合点6の最早結合点時刻は、結合点1から6に至る最長経路(B→ダミー→C→G)の合計である7日です。また全体の完了日12日から作業J(所要日数2)を経て終了結合点8に到達するための最遅開始日は12-2=10日となります。したがって最早開始日と最遅開始日は「7日と10日」(選択肢オ)です。
- 小問 設問1 d:エ
- 作業Jの余裕日数(トータルフロート)は、最遅開始日10日から最早開始日7日を引いた3日(選択肢エ)となります。
- 小問 設問2 e:ウ
- 作業G(回付サービスの適合性検証、決定)は、回付サービスの候補選定Fだけでなくシステム要件定義Cで定義する連携要件も必要とします。Cの完了点である結合点4からGの開始点である結合点5への先行関係を表すダミー作業(結合点4から結合点5)が必要です(順不同)。
- 小問 設問2 f:ク
- 作業E(ハードウェア設置、ミドルウェア設定)は、調達Dだけでなく外部設計Iで定義したパラメータ設定を行うため、Iの完了点である結合点7からEの開始点である結合点9への先行関係を表すダミー作業(結合点7から結合点9)が必要です(順不同)。
- 小問 設問2 g:オ
- ダミー作業追加後の各結合点の最早時刻を計算すると、結合点4が70日、ダミー(4→5)により結合点5が70日、結合点6が70+40=110日、結合点10が110+40=150日となります。これに結合テストL(20)、総合テストM(20)、本番移行N(10)を加算すると150+20+20+10=200日(選択肢オ)となります。
覚えるポイント
- クリティカルパス上の作業のトータルフロート(余裕日数)は常にゼロとなります。
- 複数の先行作業が存在する場合、開始結合点にはすべての先行作業の完了を表す矢印(実作業またはダミー作業)が集束する必要があります。
間違えやすいところ
- 結合点4から5へのダミー作業を見落とし、総所要日数を190日(エ)と誤って計算しがちです。
- 最早開始日と最遅開始日を求めるとき、前進計算と後退計算の起点を混同しないよう注意すること。
出題の前提:平成30年度秋期基本情報技術者試験午後問6問題文および公式解答・採点講評
出典:IPA『2018年度 秋期 午後』
公式問題冊子 p.30 ↗(www.ipa.go.jp) / 公式問題冊子 p.31 ↗(www.ipa.go.jp) / 公式問題冊子 p.32 ↗(www.ipa.go.jp) / 公式問題冊子 p.33 ↗(www.ipa.go.jp)
広告制作業務の現状把握と改善
システム戦略 · 業務プロセス改善 / 現状分析 / 授受管理 / 電子化効果の算定
広告制作会社X社における広告制作業務の現状把握と電子化による改善策に関する次の記述を読み、設問1〜3に答えよ。
- ア
- 設問1: 返却日・返却事由は空欄で、審査担当者に「佐藤」、紙広告作成担当者に「-」、Web広告作成担当者に「渡辺」が記入される
- イ
- 設問1: 返却日・返却事由は空欄で、審査担当者に「佐藤」、紙広告作成担当者に「-」、Web広告作成担当者は空欄である
- ウ
- 設問1: 返却日に「10月11日」、返却事由に「原稿不備」、審査担当者に「佐藤」、紙広告作成担当者に「-」、Web広告作成担当者に「渡辺」が記入される
- エ
- 設問1: 返却日に「10月11日」、返却事由に「原稿不備」が記入され、担当者欄はすべて空欄である
解答・解説を表示
解答
設問1: ア, 設問2: イ, ウ, 設問3 a: イ, 設問3 b: エ
解説
まず要点:業務の流れを見える化して改善するには、各工程の受け渡し手順や待ち時間が生まれる原因を正確に追い、電子化などでどの手渡しや保管のリスクが減るかを細かく洗い出します。どの作業が減り、どの作業が残るかを1件ずつ数えることが大切です。
解き方
- 各工程(管理グループ、審査グループ、作成グループ)の手順を読み、待ちが起こる条件を特定する。
- 通番ごとの条件(紙・Webの有無、点検結果)に応じた授受管理簿の記入ルールを当てはめる。
- 電子化する境目(営業の出口か制作の入口か)に応じて、省ける手渡し作業の件数を正確に増減する。
小問ごとの答え
- 小問 設問1:ア
- 通番6は点検の結果不備がなかったため、(1)④に基づき審査担当者「佐藤」、Web広告作成担当者「渡辺」が記入され、原稿のない紙広告担当者は「-」となります。不備がないため返却日と返却事由は空欄のままです。
- 小問 設問2:イ, ウ
- 一時保管に伴い紛失事故が誘発されるのは受け渡し時に待ちが発生する作業です。制作手順より、(3)②で作成担当者が他の作業中の場合に待ちが発生する「管理グループの作業2(イ)」と、(5)②で紙・Webのいずれかに不足がある場合に揃うまで待つ「管理グループの作業3(ウ)」が該当します。
- 小問 設問3 a:イ
- 営業出口で電子化した場合、広告原稿の授受(計6件)がすべて電子化により消失します。残る手渡しは審査票の受け(1件)、作成済広告の受け(1件)、作成済広告の渡し(1件)の計3件(イ)となります。
- 小問 設問3 b:エ
- 制作入口で電子化した場合、制作部門内での原稿授受(計4件)は不要になりますが、営業部門からの受け(1件)および営業部門への原稿返却(1件)は手渡しで行われます。これらに審査票受け(1件)、作成済広告受け(1件)、作成済広告渡し(1件)を加えた計5件(エ)となります。
覚えるポイント
- 業務フローの「待ち」が発生する箇所が業務事故(紛失など)の温床になりやすい。
- 電子化の適用範囲(スコープ)により、部門間受渡しが残るか部門内のみ削減されるかが異なる。
間違えやすいところ
- 制作の入口で電子化するとき、営業部門への返却は手渡しと決められている点を見落としやすい。
- 点検完了で不備が無いのに、返却事由を誤って記入してしまう。
出題の前提:平成30年度秋期 基本情報技術者試験 午後 問7
出典:IPA『2018年度 秋期 午後』
公式問題冊子 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)
整数式の解析と計算
データ構造及びアルゴリズム · 式解析 / 構文解析 / 優先順位 / 四則演算 / 配列操作
整数式を受け取ってその値を計算するプログラムに関する次の記述及びプログラムを読んで、設問1〜3に答えよ。
- ア
- 設問1 a: 1以上 / 設問1 b: priHigh以上
- イ
- 設問1 a: 2以上 / 設問1 b: priHigh + 1以上
- ウ
- 設問1 a: 11以下 / 設問1 b: priHigh - priLow以上
- エ
- 設問1 a: 12以下 / 設問1 b: priHigh - priLow + 1以上
解答・解説を表示
解答
設問1 a: イ, 設問1 b: エ, 設問2 c: エ, 設問2 d: ア, 設問3 e: エ, 設問3 f: イ, 設問3 g: エ
解説
まず要点:式の解析では、演算子ごとの優先順位を数値(プライオリティ)で表し、括弧の深さに応じて基本の値を足します。こうすると、木のような入れ子の順序を、1本の配列上の数値の比べ方に置き換えられます。
解き方
- 演算子の優先順位と、括弧によるネストの加算値の大小関係を不等式として式にする。
- 同じ優先順位の演算子を走査するループで、不等号に等号を付けるかどうかが左結合・右結合のどちらになるかを追う。
- 符号付き整数の入力例を図3の流れに当てはめ、配列Value、Operator、Priority、OpCntの変化を1歩ずつ実行する。
小問ごとの答え
- 小問 設問1 a:イ
- 括弧内の加減算(nest+1)の優先度が括弧外の乗除算の優先度(2)よりも高くなるためには、nestの加算値aについて a + 1 > 2 が成立する必要があり、整数としてaは「2以上」(イ)となります。
- 小問 設問1 b:エ
- 括弧内の最低優先度(nest + b + priLow)が括弧外の最高優先度(nest + priHigh)を超える条件は b + priLow > priHigh、すなわち b ≧ priHigh - priLow + 1(エ)となります。
- 小問 設問2 c:エ
- 優先度が同じ演算子の走査において、行⑦の比較条件が Priority[ip] < Priority[i] であれば左優先、Priority[ip] ≦ Priority[i] であれば右優先となるため、エが正解です。
- 小問 設問2 d:ア
- ケース1は加算と乗算のみで構成され結合法則が成り立つため、左右どちらから実行しても結果が一致します。他のケースは減算や除算を含み結合順序によって値が変わるため、ア(ケース1のみ)が正解です。
- 小問 設問3 e:エ
- 符号付き整数 2 * (-1) は解析処理によって 2 * (0 - 1) と等価に解釈・格納されるため、計算処理を実行すると正しく -2 が求まり、正しい値を返します(エ)。
- 小問 設問3 f:イ
- '(' の直後に '-' が来た場合、演算子判定の前に Value[1] は 0 に初期化されたまま次の演算子処理へ進むため、Value[1] の値は 0(イ)となります。
- 小問 設問3 g:エ
- '*' と '(-' の '-' の2つが演算子として登録されるため、解析完了時の OpCnt は 2(エ)となります。
覚えるポイント
- 乗除算と加減算の優先順位差を括弧ネストの増分値が上回る必要がある。
- 結合法則が成り立つのは加算と乗算のみであり、減算と除算は結合順序により結果が変わる。
間違えやすいところ
- 同じ優先順位の演算子の走査で、<は左優先(等しいとき更新しない)、<=は右優先(等しいとき更新する)という関係を取り違えやすい。
- 単項マイナスを二項演算子として解釈したとき、暗黙の0(0 - x)が入る動作を見落としやすい。
出題の前提:平成30年度秋期 基本情報技術者試験 午後 問8
出典:IPA『2018年度 秋期 午後』
公式問題冊子 p.39 ↗(www.ipa.go.jp) / 公式問題冊子 p.40 ↗(www.ipa.go.jp) / 公式問題冊子 p.41 ↗(www.ipa.go.jp) / 公式問題冊子 p.42 ↗(www.ipa.go.jp) / 公式問題冊子 p.43 ↗(www.ipa.go.jp) / 公式問題冊子 p.44 ↗(www.ipa.go.jp)
鉄道模型における列車の運行シミュレーション
ソフトウェア開発 · C言語 / 構造体 / ポインタ / 再帰探索 / シミュレーション
鉄道模型の路線構成および列車位置を構造体(block_info, train_info)で表現し、信号機制御や列車の進行を行うCプログラムである。各関数の仕様およびシミュレーション実行結果に関する設問1〜3に答えよ。
- a-ア
- block->next[0]->train == NULL
- a-イ
- block->next[1]->train == NULL
- a-ウ
- block->next[0]->train == NULL || block->next[1]->train == NULL
- a-エ
- block->next[0]->train == NULL && block->next[1]->train == NULL
- a-オ
- block->signal == RED
- a-カ
- block->train == NULL
- a-キ
- block->train != NULL
- b-ア
- block->train->dest == NULL
- b-イ
- block->train->dest != NULL
- b-ウ
- block == block->train->dest
- b-エ
- block != block->train->dest
- c-ア
- break
- c-イ
- continue
- c-ウ
- return
- d-ア
- dest, block
- d-イ
- dest, block->next[i]
- d-ウ
- block, dest
- d-エ
- block, block->next[i]
- d-オ
- block->next[i], dest
- d-カ
- block->next[i], block
- e-ア
- 0
- e-イ
- 2
- e-ウ
- 3
- e-エ
- 7
- f-ア
- 一つあり,その信号機は緑を表示している
- f-イ
- 一つあり,その信号機は赤を表示している
- f-ウ
- 二つあり,それらの信号機はいずれも緑を表示している
- f-エ
- 二つあり,それらの信号機はいずれも赤を表示している
- f-オ
- 二つあり,それらの信号機は,一方が緑を,もう一方が赤を表示している
解答・解説を表示
解答
設問1 a: カ, 設問2 b: ウ, 設問2 c: ア, 設問2 d: オ, 設問3 e: イ, 設問3 f: ア
解説
まず要点:この問題は、C言語の構造体ポインタと配列で表した線路のつながりを、順に追いかけて答える問題です。区間(ブロック)は列車がいるかどうかで信号の色が決まり、行き先までの道順は再帰(自分自身を呼び出す方法)で調べます。実行結果は、初期配置から1手ずつ状態を書き換えながら正確になぞることが大切です。
解き方
- 構造体のメンバ(train、next、signal、dest)と各関数の決まり(set_signals、proceed、find_block)を確かめます。
- 設問1・2の空欄は、仕様に書かれた条件式や制御文(break、再帰呼び出しの引数)をコードの流れから見つけます。
- 設問3は、最初の配置から4回の繰り返し(set_signalsとproceed)で各列車の位置と信号の変化を1手ずつ追います。
小問ごとの答え
- 小問 設問1 a:カ
- 関数set_signalsは、各区間の信号機について「区間内に列車がいるときは赤、いないときは緑」を設定する。block->signalにGREENを設定する条件は、当該区間に列車がいないこと、すなわちblock->train == NULLである。
- 小問 設問2 b:ウ
- 進行ルール(4)により、列車が終着駅を出口とする区間(dest)にいるときは無条件に進行し路線上から取り除かれる。判定条件は現在の区間blockが終着区間block->train->destと一致すること、すなわちblock == block->train->destである。
- 小問 設問2 c:ア
- 区間から次の区間へ列車を移動させた後は、その列車の今回のターンにおける移動は完了するため、次区間候補(jループ)の探索を打ち切って外側の区間ループへ進む必要がある。したがってbreakが適切である。
- 小問 設問2 d:オ
- 関数find_blockはblockからdestへ至る経路が存在するかを再帰的に判定する。現在の区間の次区間block->next[i]を新たな出発点として終着区間destへの経路を探索するため、引数はblock->next[i], destとなる。
- 小問 設問3 e:イ
- 各ステップのproceed実行をトレースすると、ステップ0で区間8の列車0が取り除かれ区間3の列車2が区間7へ移動、ステップ1で区間0の列車4が区間2へ移動、ステップ2で区間2の列車4は区間3が占有(列車1)のため動けず、ステップ3でも区間2に留まる。したがって列車4は区間2にいる。
- 小問 設問3 f:ア
- 区間2の出口で接続する区間は区間3のみの1つである。4ステップ終了時点で区間3にいた列車1は区間4へ移動しているため区間3に列車はおらず、信号機は緑を表示している。したがって「一つあり,その信号機は緑を表示している」が正しい。
覚えるポイント
- 再帰呼び出しでは基底条件(終了条件)と次の探索状態への更新引数を確認する。
- 多重ループ内でのbreak文はその最も内側のループのみを脱出する。
間違えやすいところ
- 自分の区間の信号を決める条件で、次の区間のポインタを見てしまう間違い。
- 区間番号のループが逆順(nblocks-1から0)で回るため、前の列車から先に進むことを見落とす間違い。
出題の前提:平成30年度秋期基本情報技術者試験午後問題 問9
出典:IPA『2018年度 秋期 午後』
公式問題冊子 p.45 ↗(www.ipa.go.jp) / 公式問題冊子 p.46 ↗(www.ipa.go.jp) / 公式問題冊子 p.47 ↗(www.ipa.go.jp) / 公式問題冊子 p.48 ↗(www.ipa.go.jp) / 公式問題冊子 p.49 ↗(www.ipa.go.jp) / 公式問題冊子 p.50 ↗(www.ipa.go.jp) / 公式問題冊子 p.51 ↗(www.ipa.go.jp)
社内資格の保有状況の管理
ソフトウェア開発 · COBOL / 索引ファイル / ソートマージ / コントロールブレイク / 表操作
従業員が取得した社内資格の保有状況をマスタ(索引ファイル)に反映するCOBOLプログラムである。SORT文、RETURN文、キーブレイク処理、表の参照および追加変更に関する設問1〜3に答えよ。
- a-ア
- MOVE SPACE TO CR-NO
- a-イ
- PERFORM UPD-PROC
- a-ウ
- PERFORM WRI-PROC
- a-エ
- REWRITE QLF-REC
- b-ア
- CR-NO = SPACE
- b-イ
- SRT-NO = CR-NO
- b-ウ
- SRT-NO = SPACE
- b-エ
- SRT-NO NOT = CR-NO
- c-ア
- MOVE QLF-DATE(SRT-CD) TO QLF-DATE(SRT-CD + 1)
- c-イ
- MOVE SRT-DATE TO QLF-DATE(SRT-CD)
- c-ウ
- MOVE SRT-NO TO QLF-DATE(SRT-CD)
- c-エ
- MOVE ZERO TO QLF-DATE(SRT-CD)
- d-ア
- 行番号33と34の間
- d-イ
- 行番号35と36の間
- d-ウ
- 行番号42と43の間
- d-エ
- 行番号46と47の間
- e-ア
- QLF-DATE(CR-NO) = ZERO
- e-イ
- QLF-DATE(W-CNT) = ZERO
- e-ウ
- QLF-INF NOT = ALL ZERO
- e-エ
- W-CNT > 4
- 設問3-ア
- 当該事業年度の上期に,各資格試験に合格した従業員の数
- 設問3-イ
- 当該事業年度の上期に,各資格試験を受験した従業員の数
- 設問3-ウ
- 当該事業年度の上期までに,各資格試験に合格した従業員の数
- 設問3-エ
- 当該事業年度の上期までに,各資格試験に合格していない従業員の数
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: エ, 設問1 c: イ, 設問2 d: エ, 設問2 e: エ, 設問3: ア
解説
まず要点:この問題は、並べ替えた伝票(トランザクション)ファイルをキーの順に読み、キーが変わったところでマスタ(台帳)ファイルを書き換える基本パターンを問います。キーの切れ目(キーブレイク)を正しく見つけて、前のまとまりを1回だけ書き戻す流れをつかむことが大切です。
解き方
- データの形(QLF-RECのOCCURS 4、PAS-REC、SRT-REC)と、SORT〜OUTPUT PROCEDUREの全体の流れをつかみます。
- 設問1のキーの区切り処理で、キーが違うかの判定とファイルの書き戻し手順を調べます。
- 設問2の4資格すべて取得したかのループの終了条件(UNTIL)と、終了後のW-CNTの動きを追います。
- 設問3は、カウンタを足す位置(行44〜45の間)と上期分を処理する予定から、何を数えているか考えます。
小問ごとの答え
- 小問 設問1 a:ウ
- ソートレコードの取り出し(RETURN文)でAT ENDに達した際、直前まで処理していた最後の従業員の更新レコードをファイルに書き戻す必要があるため、PERFORM WRI-PROCを実行する。
- 小問 設問1 b:エ
- 同一従業員の複数資格合格レコードをまとめるため、直前に処理していた従業員番号CR-NOと新たに読み込んだソートレコードのSRT-NOが異なる(SRT-NO NOT = CR-NO)場合に、前従業員の書き込みと新従業員レコードの読み込みを行う。
- 小問 設問1 c:イ
- 合格レコードの資格種別SRT-CD(1〜4)に対応する保有資格テーブルの項目QLF-DATE(SRT-CD)に、合格日SRT-DATEを格納するため、MOVE SRT-DATE TO QLF-DATE(SRT-CD)が正しい。
- 小問 設問2 d:エ
- 表彰対象の判定は、マスタレコードが更新されてファイルへ書き出される直前(REWRITE QLF-RECの直前)に行うのが適切であるため、行番号46と47の間に追加する。
- 小問 設問2 e:エ
- PERFORM VARYINGループはQLF-DATEがZEROであるかW-CNT > 4で終了する。4つ全ての資格を取得している場合は未取得(ZERO)がなくW-CNTが5まで進むため、条件はW-CNT > 4となる。
- 小問 設問3:ア
- 10月初めに実行される処理は上期の合格ファイルを反映するものであり、合格レコードが処理されるごと(行番号44と45の間)に対応する資格カウンタを加算しているため、「当該事業年度の上期に,各資格試験に合格した従業員の数」が表示される。
覚えるポイント
- SORT文のOUTPUT PROCEDUREではRETURN文でソート済みレコードを1件ずつ取り出す。
- キーブレイク処理では、最終レコード処理後のファイル書き込み(AT END時のフラッシュ)を忘れない。
間違えやすいところ
- PERFORM VARYING UNTILの終了時に、制御変数が増えた後の値(終了値+増分)になるのを忘れる間違い。
- 今回分の伝票の集計と、マスタ全体の累計を混同する間違い。
出題の前提:平成30年度秋期基本情報技術者試験午後問題 問10
出典:IPA『2018年度 秋期 午後』
公式問題冊子 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)
Java:書式を表すひな型への置換表の適用による文書の作成
ソフトウェア開発 · Java / インターフェース / 文字列処理 / 構文解析
文書の書式を表すひな形に置換表を適用して出力文書を生成するJavaプログラムに関する問題である。ひな形中の「<キー名称>」を置換表に従って展開する処理や、ひな形を解析してFragmentのリストを生成するTemplateParser、エスケープ文字「\」を処理する追加ロジックについて、各空欄に入る適切な記述を選択せよ。
- 設問1 a ア
- extends
- 設問1 a イ
- interface
- 設問1 a ウ
- implements
- 設問1 a エ
- throws
- 設問1 b ア
- Fragment(buf)
- 設問1 b イ
- Fragment(c)
- 設問1 b ウ
- PassThrough(buf)
- 設問1 b エ
- PassThrough(c)
- 設問1 b オ
- Replacer(buf)
- 設問1 b カ
- Replacer(c)
- 設問1 c ア
- Fragment(buf)
- 設問1 c イ
- Fragment(c)
- 設問1 c ウ
- PassThrough(buf)
- 設問1 c エ
- PassThrough(c)
- 設問1 c オ
- Replacer(buf)
- 設問1 c カ
- Replacer(c)
- 設問1 d ア
- fragmentList
- 設問1 d イ
- new Template(buf)
- 設問1 d ウ
- new Template(fragmentList)
- 設問1 d エ
- new Template(reader)
- 設問1 e ア
- fragment
- 設問1 e イ
- fragmentList
- 設問1 e ウ
- sb
- 設問1 e エ
- table
- 設問2 f ア
- break
- 設問2 f イ
- buf.append((char) c)
- 設問2 f ウ
- buf.append((char) c); break
- 設問2 f エ
- buf.append((char) reader.read())
- 設問2 f オ
- buf.append((char) reader.read()); break
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: ウ, 設問1 c: オ, 設問1 d: ウ, 設問1 e: エ, 設問2 f: オ
解説
まず要点:Javaでは、共通の動きをinterface(インターフェース、約束事の集まり)で決め、それをクラスがimplements(実装する)で受け持ちます。ひな形の解析では、「<」や「>」の記号を合図に処理を切り替え、それまでためた文字列から適切なクラスのインスタンス(実体)を作ります。
解き方
- プログラム1〜3を読み、Fragmentインターフェースと、それを受け持つReplacer、PassThroughの関係を確かめて空欄aを決めます。
- TemplateParserのswitchで、'<'のときは普通の文字(PassThrough)、'>'のときはキー名(Replacer)を作る流れをつかみ、空欄b・cを決めます。
- TemplateParserの戻りの型と、Templateクラスのapplyメソッドの引数の形から、空欄d・eを見つけます。
- 設問2は、エスケープ文字'\'の次の1文字を飛ばさずバッファに足し、次の処理へ進むためのやり方(reader.read()とbreak)を考えます。
小問ごとの答え
- 小問 設問1 a:ウ
- Fragmentはインターフェースとして定義されているため、クラスReplacerおよびPassThroughがこれを実装するには「implements」キーワードを用います。
- 小問 設問1 b:ウ
- 文字「<」を検出した時点では、それまでにバッファbufに蓄積された文字列は置換指示以外の通常テキストであるため、PassThrough(buf)を生成してリストに追加します。
- 小問 設問1 c:オ
- 文字「>」を検出した時点では、直前の「<」から蓄積されたバッファbufの内容がキー名称となるため、置換指示を表すReplacer(buf)を生成してリストに追加します。
- 小問 設問1 d:ウ
- TemplateParser.parseメソッドの戻り値の型はTemplateであり、構築したList<Fragment>であるfragmentListを引数としてTemplateインスタンスを生成して返すため、「new Template(fragmentList)」が適切です。
- 小問 設問1 e:エ
- Fragment.replaceメソッドは置換表を表す引数table(型:Map<String, List<String>>)を受け取る仕様であるため、fragment.replace(table)を呼び出して置換後文字列を取得します。
- 小問 設問2 f:オ
- エスケープ文字「\」が検出されたときは、それに続く1文字をそのまま文字として読み取ってバッファに追加し、switch文を抜ける必要があるため、「buf.append((char) reader.read()); break」が適切です。
覚えるポイント
- インターフェースの実装にはimplementsを用い、interfaceそのものはインスタンス化できない。
- 状態遷移によるテキスト解析では、バッファのフラッシュと新インスタンス生成のタイミングを正確に追跡する。
間違えやすいところ
- 「<」を見つけたときに置換キーの始まりと考えてReplacerを作ってしまう間違い(正しくはそれまでの普通の文のPassThrough)。
- エスケープ文字「\」の処理で、c(\自身)を足してしまい、次の文字を読まない間違い。
出題の前提:平成30年度秋期基本情報技術者試験午後問11の出題条件およびJava仕様に基づく。
出典:IPA『2018年度 秋期 午後』
公式問題冊子 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.61 ↗(www.ipa.go.jp) / 公式問題冊子 p.62 ↗(www.ipa.go.jp)
アセンブラ:基準日からの日数の計算(CASL II)
ソフトウェア開発 · CASL II / COMET II / 条件分岐 / うるう年判定 / オーバーフロー
基準日(1970年1月1日)から指定された日付までの通算日数を計算するアセンブラ副プログラムDAYOFFSTおよびうるう年を判定するLEAPYEARに関する問題である。月の累積日数テーブルの参照方法、ループ継続・終了条件の分岐、うるう年判定結果の論理演算、および32767年までの日付で生じるオーバーフローの検出処理について、各空欄に当てはまる適切な命令または数値を答えよ。
- 設問1 a ア
- LAD GR4, ACCMDAYS
- 設問1 a イ
- LAD GR4, ACCMDAYS, GR3
- 設問1 a ウ
- LAD GR4, ACCMDAYS, GR5
- 設問1 a エ
- LD GR4, ACCMDAYS
- 設問1 a オ
- LD GR4, ACCMDAYS, GR3
- 設問1 a カ
- LD GR4, ACCMDAYS, GR5
- 設問1 b ア
- JMI BREAK
- 設問1 b イ
- JNZ BREAK
- 設問1 b ウ
- JOV BREAK
- 設問1 b エ
- JPL BREAK
- 設問1 b オ
- JUMP BREAK
- 設問1 b カ
- JZE BREAK
- 設問1 c ア
- JMI FIN
- 設問1 c イ
- JNZ FIN
- 設問1 c ウ
- JOV FIN
- 設問1 c エ
- JUMP FIN
- 設問1 c オ
- JZE FIN
- 設問1 d ア
- AND GR0, =#FFFE
- 設問1 d イ
- AND GR0, =1
- 設問1 d ウ
- OR GR0, =#FFFE
- 設問1 d エ
- OR GR0, =1
- 設問1 d オ
- XOR GR0, =#FFFE
- 設問1 d カ
- XOR GR0, =1
- 設問2 e ア
- 8
- 設問2 e イ
- 13
- 設問2 e ウ
- 18
- 設問2 e エ
- 19
- 設問2 e オ
- 20
- 設問2 f ア
- JMI
- 設問2 f イ
- JNZ
- 設問2 f ウ
- JOV
- 設問2 f エ
- JPL
- 設問2 f オ
- JZE
解答・解説を表示
解答
設問1 a: イ, 設問1 b: カ, 設問1 c: イ, 設問1 d: カ, 設問2 e: エ, 設問2 f: ウ
解説
まず要点:CASL IIでは、LADはアドレスそのものをレジスタに入れる命令で、LDはアドレスが指すメモリの中身を入れる命令です。足し算(ADDL)であふれが起きるとOFフラグが立ち、JOV命令で分岐します。ビットの0と1を反転するには、そのビットに1を指定したXORを使います。
解き方
- DAYOFFSTの中の命令を追い、表を参照するアドレスの計算(LADとLDの違い)から空欄aを導きます。
- 年ごとの足し算ループの終了条件(CPAの結果が一致して0になる)から、空欄bの分岐命令を決めます。
- うるう年の決め方(4の倍数、100の倍数、400の倍数)に従い、ANDの後の分岐cと、DIVISIBLの戻り値の反転dを決めます。
- 通算日数の足し算(ADDL GR1, GR0)であふれが起きる行19と、OFフラグを見つける分岐命令(JOV)を導きます。
小問ごとの答え
- 小問 設問1 a:イ
- 直後の行8で「ADDL GR1, -1, GR4」として指標レジスタGR4を用いた修飾を行っているため、GR4にはACCMDAYSテーブルの月(GR3)に対応する先頭アドレスを設定する必要があります。アドレス値をロードする命令はLADであるため、「LAD GR4, ACCMDAYS, GR3」が適切です。
- 小問 設問1 b:カ
- 行15の「CPA GR2, GR5」で処理対象年(GR2)と目的年(GR5)を比較しています。GR2がGR5と等しくなったとき(差が0のとき)にループを終了してBREAKへ分岐するため、零判定分岐命令「JZE BREAK」を用います。
- 小問 設問1 c:イ
- 行5の「AND GR3, =3」により、年が4で割り切れる場合はGR3が0となり、割り切れない場合は非0になります。4で割り切れない年は平年(GR0=0)と確定するため、非零判定分岐「JNZ FIN」でFINへジャンプします。
- 小問 設問1 d:カ
- 100で割り切れるか判定する副プログラムDIVISIBLは、割り切れるときに1、割り切れないときに0を返します。100で割り切れないとき(0のとき)がうるう年(1)となるため、ビットを反転させる「XOR GR0, =1」を用います。
- 小問 設問2 e:エ
- 通算日数はGR1に累積加算されており、19行目の「ADDL GR1, GR0」によってその年の日数(365または366)を加算した直後に、GR1が16ビット符号なし整数の最大値(65535)を超えてあふれ(OF=1)が発生する可能性があります。
- 小問 設問2 f:ウ
- 論理加算ADDLによって桁上げ・あふれが発生した場合にOFフラグが1にセットされるため、あふれを判定して分岐する命令「JOV」を挿入します。
覚えるポイント
- LADはアドレス値そのものを取得し、LDはアドレスに格納された主記憶の値をロードする。
- 論理値の反転(0⇔1)には、反転させたいビットに1を立てたXOR演算が有効である。
間違えやすいところ
- アドレスをレジスタに入れる処理で、LADとLDを取り違える間違い。
- DIVISIBLの戻り値(100で割り切れる=1、割り切れない=0)とうるう年フラグ(うるう年=1)の反転を見落とす間違い。
出題の前提:平成30年度秋期基本情報技術者試験午後問12の出題条件およびCASL II仕様に基づく。
出典:IPA『2018年度 秋期 午後』
公式問題冊子 p.63 ↗(www.ipa.go.jp) / 公式問題冊子 p.64 ↗(www.ipa.go.jp) / 公式問題冊子 p.65 ↗(www.ipa.go.jp) / 公式問題冊子 p.66 ↗(www.ipa.go.jp)
待ち時間の状況などの分析(表計算と待ち行列シミュレーションマクロ)
ソフトウェア開発 · 表計算 / 条件付個数 / 条件付合計 / 照合検索 / マクロ / 待ち行列シミュレーション
店舗窓口における利用者の待ち時間やサービス状況を分析・改善するため、ワークシート「来店状況」「分析」および窓口割当てをシミュレーションするマクロ「queue_simulation」を作成した。各設問の空欄 a 〜 g に入る適切な式や語句を解答群の中から選べ(設問1 a は出題不備に伴う公式措置を含む)。
- 設問1 a
- 正解なし(待ち時間0の利用者を除外する選択肢が存在しない出題不備のため全員正解)
- 設問2 b
- オ(条件付個数(来店状況!B$3:B$252, ≦B4) - 条件付個数(来店状況!B$3:B$252, <A4))
- 設問2 c
- イ(条件付合計(来店状況!C$3:C$252, =F4, 来店状況!F$3:F$252) / G4)
- 設問2 d
- イ(照合検索(F10, 来店状況!J$3:J$252, 来店状況!A$3:A$252))
- 設問3 e
- エ(min_time > end_time[i])
- 設問3 f
- エ(min_no)
- 設問3 g
- ウ(end_time[min_no] ← 相対(A2, work_line, 6))
解答・解説を表示
解答
設問1 a: 正解なし, 設問2 b: オ, 設問2 c: イ, 設問2 d: イ, 設問3 e: エ, 設問3 f: エ, 設問3 g: ウ
解説
まず要点:表計算で度数(各区間に入る件数)を数えるときは、上限以下の件数から下限未満の件数を引いて、境目を重複なく処理します。最小値を探すマクロでは、初期値・比較して更新・配列の更新の3つを食い違わないようにそろえることが大切です。
解き方
- 設問1・2は、条件付個数・条件付合計・照合検索の決まり(引数の順番、不等号の向き、絶対参照と相対参照)と問題の条件を照らし合わせて式を導きます。
- 設問3は、マクロの目的(終了時刻が最小の窓口を探す、窓口番号と開始時刻を記録する、配列end_timeを更新する)と相対参照のずれを対応させて空欄を決めます。
小問ごとの答え
- 小問 設問1 a:正解なし
- 問題文にある「待ち時間が0の窓口利用者は,待ち人数に含めない」という仕様を満たす選択肢が存在しないため、IPA公式発表により正解なし(全員に得点)と判定されました。
- 小問 設問2 b:オ
- 受付時刻が時間帯[A4, B4]にある件数は、終了時刻B4以下の件数から開始時刻A4未満の件数を差し引くことで正しく求まるため、オの式が適切です。
- 小問 設問2 c:イ
- サービス種別別の平均サービス時間は、サービス種別C列がF4と一致する行のサービス時間F列の合計を、その種別の件数G4で割ることで算出できるため、イが適切です。
- 小問 設問2 d:イ
- 待ち時間順位F10に対応する受付番号を求めるため、照合検索(式, 検索セル範囲, 抽出セル範囲)の引数順に沿って「照合検索(F10, 来店状況!J$3:J$252, 来店状況!A$3:A$252)」とするイが正解です。
- 小問 設問3 e:エ
- 全窓口の中で最も終了時刻が早い窓口を探索するため、現在保持している最小値min_timeより end_time[i] が小さい場合に更新する条件式「min_time > end_time[i]」のエが適切です。
- 小問 設問3 f:エ
- 最小終了時刻の探索によって決定した窓口番号 min_no を、処理行の窓口番号列(D列:相対(A2, work_line, 3))に代入するため、エが適切です。
- 小問 設問3 g:ウ
- 割り当てた窓口 min_no の終了時刻配列 end_time[min_no] に、処理行のサービス終了時刻列(G列:列オフセット6)の値を代入して更新するため、ウが適切です。
覚えるポイント
- 区間[A, B]の件数は、累積度数「≦B」から「<A」を引いて算出する。
- 照合検索の引数は「照合検索(検索値, 検索セル範囲, 抽出セル範囲)」の順である。
間違えやすいところ
- 時間帯の境目の判定で「≦」と「<」を取り違え、境目のデータが二重に数えられたり抜けたりする間違い。
- 相対(基準セル, 行, 列)の列のずれを1から始まると勘違いし、A列を0ではなく1として数え間違える間違い。
出題の前提:平成30年度秋期基本情報技術者試験午後問題冊子(表計算ソフトの機能・用語規約)および公式解答例・採点講評
出典:IPA『2018年度 秋期 午後』
公式問題冊子 p.67 ↗(www.ipa.go.jp) / 公式問題冊子 p.68 ↗(www.ipa.go.jp) / 公式問題冊子 p.69 ↗(www.ipa.go.jp) / 公式問題冊子 p.70 ↗(www.ipa.go.jp) / 公式問題冊子 p.71 ↗(www.ipa.go.jp) / 公式問題冊子 p.72 ↗(www.ipa.go.jp) / 公式問題冊子 p.73 ↗(www.ipa.go.jp) / 公式問題冊子 p.74 ↗(www.ipa.go.jp)
2018年度 秋期 午後
参照した公式資料
IPAが公開した2018年度 秋期 午後の問題・解答資料です。

