旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2012年度 秋期 午後の概要
プロセスの排他制御とデッドロック
ソフトウェア · 排他制御 / レースコンディション / セマフォ / デッドロック
コンピュータX上で、単一のCPUと共有メモリを使用し、2つのプロセスp1とp2が共有データyに対して並行して計算処理を実行する状況および排他制御に関する記述を読み、設問1〜3に答えよ。 〔計算処理の手順〕 ① 共有データyの値を読み込む。 ② 読み込んだ値を用いて計算する。 ③ 計算結果をyに書き込む。 【設問1】 プロセスp1はyの値を2増加させ、プロセスp2はyの値を1減少させる。実行前のyの値が5であり、yに対する排他制御を行わないとき、p1とp2が並行に1回ずつ処理を実行した直後において、yが取り得ない値を解答群から選べ。 【設問2】 排他制御のため、確保状態または解放状態をもつ同期変数s、および同期変数の状態を変更する関数l(ロック操作)と関数u(アンロック操作)を導入する。各プロセスは「関数lの呼出し → 計算処理 → 関数uの呼出し」の順で処理を行う。空欄 a 、 b に入る正しい答えを解答群から選べ。 【設問3】 プロセスp1, p2が使用する共有データがy1, y2の二つあり、それぞれ同期変数s1, s2を用いて排他制御を行う。プロセスp1が「y1の確保 → y2の確保 → y2の解放 → y1の解放」の順序で同期変数を操作するとき、デッドロックが発生する可能性のあるプロセスp2の操作順序を解答群から選べ。
- 設問1 ア
- 4
- 設問1 イ
- 5
- 設問1 ウ
- 6
- 設問1 エ
- 7
- 設問2 a ア
- sの状態が解放状態ならば確保状態にし,確保状態ならば解放状態になるまで待ってから確保状態にする
- 設問2 b オ
- sの状態が確保状態ならば解放状態にし,解放状態ならば何もしない
- 設問3 ウ
- y2の確保,y1の確保,y1の解放,y2の解放
解答・解説を表示
解答
設問1: イ, 設問2 a: ア, 設問2 b: オ, 設問3: ウ
解説
まず要点:複数の処理が同じデータを同時に触るときは、順番待ちの仕組み(排他制御)で1つずつ使わせる必要があります。読込みと書込みの間に別の処理が割り込むと、結果がおかしくなる(レースコンディション)からです。さらに、複数の資源を互いに違う順番で取り合うと、お互いが待ち続けて止まってしまう(デッドロック)ことがあります。
解き方
- 設問1では、p1の『読込み・計算・書込み』とp2のそれを様々な順番で組み合わせ、最後に残る値を調べます。
- 設問2では、排他制御の開始(ロック)と終了(アンロック)が正しい状態の移り変わりになっているかを選びます。
- 設問3では、p1と逆の順番でy2→y1と確保する選択肢を探し、お互いが待ち合う状態になるか確かめます。
小問ごとの答え
- 小問 設問1:イ
- 正常に順次実行された場合は 5 + 2 - 1 = 6 となります。並行実行により、p1が5を読み込んだ直後にp2が割り込んで処理を完了(y=4)し、その後p1が計算結果7を書き込むとyは7になります。逆にp2が5を読み込んだ後にp1が先に書き込み(y=7)、p2が計算結果4を上書きするとyは4になります。したがって4, 6, 7は取り得ますが、どちらの加算・減算も反映されない値5になることはありません。
- 小問 設問2 a:ア
- 関数lはロック獲得操作です。同期変数sが解放状態であれば直ちに確保状態(ロック)にし、すでに他のプロセスによって確保状態である場合は解放されるまで待機した上で確保状態にする処理となります。
- 小問 設問2 b:オ
- 関数uはロック解除操作です。同期変数sが自プロセスによって確保状態になっている場合に解放状態へ戻し、既に解放状態であれば何も行いません。
- 小問 設問3:ウ
- デッドロックは、複数のプロセスが互いに相手の確保している資源の解放を待ち合って進行不能になる現象です。p1がy1を確保した状態でy2を要求し、p2がy2を確保した状態でy1を要求する(y2の確保→y1の確保)順序になっている場合に発生します。
覚えるポイント
- 2つの更新が干渉すると、一方の更新が他方を上書きするロストアップデートが発生する。
- デッドロックを防止するための基本原則は、複数資源の獲得順序を一方向に固定することである。
間違えやすいところ
- 排他制御がなければ2つの計算が打ち消し合って5に戻ると考えてしまう間違いがあります。
- デッドロックは解放の順番だけで決まると誤解し、確保の順番の大切さを見落とす間違いがあります。
出題の前提:平成24年度秋期 基本情報技術者試験 午後 問1
出典:IPA『2012年度 秋期 午後』
公式問題冊子 p.5 ↗(www.ipa.go.jp) / 公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp)
購買情報を管理する関係データベースの設計及び運用
データベース · 名寄せ / SQL / 外部結合・等価結合 / GROUP BY / HAVING句 / DISTINCT
購買部門の統合に伴う関係データベースの統合およびSQLを用いたデータ分析に関する記述を読み、設問1〜4に答えよ。 【設問1】 データベース統合時の「名寄せ」作業に関する記述中の空欄 a, b に入る適切な答えを解答群から、空欄 c に入る最も適切な突合せ項目を解答群からそれぞれ選べ。 【設問2】 商品名「エコ鉛筆黒」について、取引先コードと平均購入単価を算出して金額が安い順に表示するSQL文の空欄 d に入る条件式を選べ。 【設問3】 商品コードごとの平均割引率を求めるために結合すべき表 e, f 、および取引先コードごとの集計や安くなった傾向を把握するためにさらに結合すべき表 g を選べ。 【設問4】 文具について10回以上の発注実績がある取引先を対象に、購入金額が多い順に取引先コードと金額を表示するSQL文の空欄 h に入る句を選べ。
- 設問1 a,b ア
- 更新すべきデータが更新されない
- 設問1 a,b イ
- 削除すべきデータが残る
- 設問1 c ウ
- 電話番号
- 設問2 d ア
- 発注表.発注コード = 明細表.発注コード AND 商品表.商品コード = 明細表.商品コード AND 商品表.商品名 = 'エコ鉛筆黒'
- 設問3 e,f ア
- 商品表
- 設問3 e,f カ
- 明細表
- 設問3 g ウ
- 発注表
- 設問4 h イ
- HAVING COUNT(DISTINCT 発注表.発注コード) >= 10
解答・解説を表示
解答
設問1 a: ア, 設問1 b: イ (順不同), 設問1 c: ウ, 設問2 d: ア, 設問3 e: ア, 設問3 f: カ (順不同), 設問3 g: ウ, 設問4 h: イ
解説
まず要点:データベースを統合するときは、同じ相手の重複したデータを1つにまとめる『名寄せ』が必要です。重複したままだと、片方だけ更新・削除されて食い違いが生まれるからです。またSQLで件数を数えるときは、結合で行が増えることを考え、重複を除いて数える工夫が要ります。
解き方
- 設問1では、重複データによる更新・削除の不整合を確認し、書き方の揺れに強い電話番号を名寄せの手がかりに選びます。
- 設問2では、発注表・商品表・明細表をつなぐ結合条件と、商品名で絞り込む条件をWHERE句に組み立てます。
- 設問3では、割引率の計算に必要な定価・購入額・数量を持つ表と、取引先や時系列を調べるための表を探します。
- 設問4では、明細の結合で発注コードが重複して現れる点を考え、DISTINCTを使った条件をHAVING句に書きます。
小問ごとの答え
- 小問 設問1 a:ア
- 同一エンティティが別データとして重複登録されていると、一方の行だけが更新されて「更新すべきデータが更新されない」というデータ不整合が発生します(a・b順不同)。
- 小問 設問1 b:イ
- 重複データが存在する場合、一方を削除しても同一の実体を表すデータが残存し「削除すべきデータが残る」という異常が発生します(a・b順不同)。
- 小問 設問1 c:ウ
- 図2と図3を比較すると、社名には「株式会社」「(株)」などの表記揺れがあり、所在地も「文京区桜坂2-28」「文京区桜坂2丁目28番」などの差異がありますが、電話番号は「03-1111-2222」で表記が統一され一意に突合可能です。
- 小問 設問2 d:ア
- 発注表と明細表を発注コードで結合し、明細表と商品表を商品コードで結合した上で、商品表.商品名 = 'エコ鉛筆黒' の行に絞り込む必要があります。平均購入単価はSELECT句の集約式(SUM/SUM)で計算されるため、WHERE句には結合条件と選択条件を指定します。
- 小問 設問3 e:ア
- 割引率の算出には「定価」(商品表)と「購入額」「数量」(明細表)が必要となるため、商品表を結合します(e・f順不同)。
- 小問 設問3 f:カ
- 実際の購入実績データである「数量」「購入額」は明細表に保持されているため、明細表を結合します(e・f順不同)。
- 小問 設問3 g:ウ
- 「取引先コード」および時系列の傾向を把握するための「発注日」は発注表に格納されているため、さらに発注表を結合する必要があります。
- 小問 設問4 h:イ
- 1回の発注で複数の文具が明細に含まれる場合、単にCOUNT(*)を行うと明細の行数を数えてしまいます。「10回以上の発注実績」を判定するには、発注コードの重複を除いてカウントする COUNT(DISTINCT 発注表.発注コード) >= 10 をHAVING句に指定する必要があります。
覚えるポイント
- 1対多の表を結合した結果に対して件数を数える場合、COUNT(*)ではなくCOUNT(DISTINCT 親の主キー)を用いる。
- 名寄せ作業では、表記揺れが発生しやすい名称・住所よりも、形式が統一されやすいコードや電話番号が突合せキーとして有効である。
間違えやすいところ
- 設問2で『平均購入単価』という言葉につられ、WHERE句の中にAVG関数を入れてしまう間違いがあります。
- 設問4でCOUNT(発注コード)やCOUNT(*)を選び、明細の多さで発注回数を多く数えすぎてしまう間違いがあります。
出題の前提:平成24年度秋期 基本情報技術者試験 午後 問2
出典:IPA『2012年度 秋期 午後』
公式問題冊子 p.8 ↗(www.ipa.go.jp) / 公式問題冊子 p.9 ↗(www.ipa.go.jp) / 公式問題冊子 p.10 ↗(www.ipa.go.jp) / 公式問題冊子 p.11 ↗(www.ipa.go.jp) / 公式問題冊子 p.12 ↗(www.ipa.go.jp)
電子メールで用いるMIME形式のエンコード方式とバウンダリ設定
ネットワーク · MIME / Base64 / Quoted-Printable / マルチパートメール
電子メールで用いるMIME形式に関する次の記述を読み、各設問に答えよ。 インターネットの電子メールは原則7ビット文字しか送信できないため、MIMEによってテキスト以外のコンテンツや8ビット符号を7ビット形式にエンコードする。 ・base64:データを6ビットごとに区切り、US-ASCII図形文字に変換する。 ・quoted-printable:US-ASCII制御文字、"="、および先頭ビットが1のバイト(非ASCII文字など)を「=XX」(XXは16進数2桁)の3文字に変換する。 〔設問1〕 本文中の空欄 [ a1 ] 〜 [ a4 ] に入る語句の適切な組合せ、および [ b ] に入る適切な数値を答えよ。 UTF-8の平仮名1文字は先頭ビットが1である3バイトで表現される。平仮名6文字からなるテキストをquoted-printableで変換した場合、何文字の文字列になるか。 〔設問2〕 マルチパート形式では、boundary="delimiter" でコンテンツの境界を指定する。各コンテンツの開始は "--delimiter"、メールの終了は "--delimiter--" で表される。 あるコンテンツ本文中に次の3行が含まれている場合、delimiterとしてふさわしくない文字列を解答群の中から三つ選べ。 【コンテンツ本文中の3行】 case1 --case2 --case3--
- 設問1 a ア
- a1: base64, a2: quoted-printable, a3: base64, a4: quoted-printable
- 設問1 a イ
- a1: base64, a2: quoted-printable, a3: quoted-printable, a4: base64
- 設問1 a ウ
- a1: quoted-printable, a2: base64, a3: base64, a4: quoted-printable
- 設問1 a エ
- a1: quoted-printable, a2: base64, a3: quoted-printable, a4: base64
- 設問1 b ア
- 8
- 設問1 b イ
- 18
- 設問1 b ウ
- 24
- 設問1 b エ
- 54
- 設問2 ア
- --case1
- 設問2 イ
- --case2
- 設問2 ウ
- --case3
- 設問2 エ
- case1
- 設問2 オ
- case2
- 設問2 カ
- case3
- 設問2 キ
- case1--
- 設問2 ク
- case2--
- 設問2 ケ
- case3--
解答・解説を表示
解答
設問1 a: エ, 設問1 b: エ, 設問2: オ, カ, ケ
解説
まず要点:電子メールは7ビットの文字しか送れないため、MIMEで日本語などを7ビットの形に変換して送ります。Base64は3バイトを4文字に変換する方式で、Quoted-Printableは英数字はそのままにし、特殊な文字だけを『=XX』の3文字に置き換えます。区切り文字(boundary)は、本文の中に出てこない文字列を選ばないと行が混ざってしまいます。
解き方
- 設問1では、変換結果に『=XX』があるかどうかで方式を見分け、文字のバイト数と変換の決まりから文字数を計算します。
- 設問2では、それぞれの区切り文字について、開始行や終了行が本文の3行と重ならないかを確かめます。
小問ごとの答え
- 小問 設問1 a:エ
- UTF-8文字列が「=C2=A9 IPA 2012.」となる変換方式はquoted-printable(a1)であり、「wqkg...」となるのはbase64(a2)です。大部分がASCII文字のテキストにはデータ増加率が低いquoted-printable(a3)が適し、バイナリデータには1バイトあたり約1.33倍の増加で済むbase64(a4)が適しています。
- 小問 設問1 b:エ
- 平仮名1文字は最上位ビットが1であるバイトが3つ連なる構成です。quoted-printableでは最上位ビットが1の各バイトが「=XX」の3文字に変換されるため、1文字あたり3×3=9文字になります。したがって6文字の平仮名テキストは 6×9=54文字 に変換されます。
- 小問 設問2:オ, カ, ケ
- delimiterに「case2」を用いると開始行「--case2」が本文と衝突します。「case3」を用いると終了行「--case3--」が本文と衝突します。「case3--」を用いると開始行「--case3--」が本文と衝突します。よって不適切なdelimiterはオ、カ、ケです。
覚えるポイント
- Quoted-Printableは最上位ビットが1のバイトを「=16進数2桁」の3文字に置き換えるためデータ量が3倍になる。
- MIMEマルチパートのバウンダリは、開始境界が「--delimiter」、終了境界が「--delimiter--」となる。
間違えやすいところ
- 平仮名1文字が3バイトであることだけを見て、1バイトが『=XX』の3文字になる計算を忘れ、18文字としてしまう間違いがあります。
- 区切り文字そのものだけでなく、『--』を付けた開始行・終了行と本文が重なるかを見落としてしまう間違いがあります。
出題の前提:平成24年度秋期 基本情報技術者試験 午後 問3
出典:IPA『2012年度 秋期 午後』
公式問題冊子 p.13 ↗(www.ipa.go.jp) / 公式問題冊子 p.14 ↗(www.ipa.go.jp) / 公式問題冊子 p.15 ↗(www.ipa.go.jp) / 公式問題冊子 p.16 ↗(www.ipa.go.jp)
セキュリティ事故の対応とSQLインジェクション対策
情報セキュリティ · SQLインジェクション / インシデント対応 / セキュアプログラミング / アクセスログ管理
セキュリティ事故への対応に関する次の記述を読み、設問1〜4に答えよ。 D社は会員制の自転車用品通販サイトを運営している。会員のログイン処理に不備があり、外部からSQLインジェクション攻撃を受けて会員情報(クレジットカード情報を含む可能性あり)が漏えいした。 これに対し、表1の対策と対応(①会員謝罪、②事故公表・説明、③会員への事故対応依頼、④被害把握・原因特定、⑤Webサイト改修、⑥常時監視、⑦回線二重化)が検討されたが、⑦は見合わせとなった。 〔設問1〕今回受けたSQLインジェクション攻撃に関する記述として適切なものを選択せよ。 〔設問2〕表1中の③「会員への事故対応の依頼」に関して適切な対応を選択せよ。 〔設問3〕表1中の⑦「ネットワーク回線の二重化」の実施を見合わせた理由として適切なものを選択せよ。 〔設問4〕再発防止策に関する記述中の空欄 [ a ] 〜 [ c ] に入る適切な字句をそれぞれ選べ。
- 設問1 ア
- 攻撃者がDNSに登録されたドメインの情報を改ざんすることによって、利用者をフィッシングサイトに誘導し、そこで入手した利用者IDとパスワードを用いて、データベースを不正に操作した。
- 設問1 イ
- 攻撃者が、D社のWebサイトの入力項目に対し、命令文を送り込むことによって、データベースを不正に操作した。
- 設問1 ウ
- 攻撃者がD社のデータベースの管理ツールを入手し、管理ツール経由で直接D社のデータベースを不正に操作した。
- 設問1 エ
- 攻撃者がネットワーク上で情報の盗聴を行い、D社のデータベースの管理者のIDとパスワードを入手し、データベースを不正に操作した。
- 設問2 ア
- 安易なパスワードの設定を防止するために、パスワードは英字、数字、記号が混在する8文字以上のものにするよう会員に依頼する。
- 設問2 イ
- 攻撃を受けた場合の被害を抑えるために、メールマガジン購読だけを利用する会員の会員情報を格納したデータベースと商品の購入を行う会員の会員情報を格納したデータベースとを分離し、商品の購入を行う会員だけにID及びパスワードの変更を依頼する。
- 設問2 ウ
- 個人情報の目的外利用を避けるために、D社が取得する個人情報の利用目的に事故の対応を追加し、同意を会員に依頼する。
- 設問2 エ
- クレジットカード情報が漏えいしている場合の不正利用を防止するために、登録されたクレジットカードの停止及び番号変更の手続を会員に依頼する。
- 設問3 ア
- Webサーバの増設が必要となる。
- 設問3 イ
- 稼働中のサービスの停止が必要であり、事業への影響が大きい。
- 設問3 ウ
- 今回のSQLインジェクション攻撃を防ぐ対策にならない。
- 設問3 エ
- セキュリティ事故発生時に攻撃者の侵入経路の特定に時間が掛かる。
- 設問4 a ア
- 開発担当者と運用担当者の職務を分離する
- 設問4 a イ
- 開発用の端末と通常利用の端末を分離する
- 設問4 a ウ
- 瑕疵の発生に備えた保険に加入する
- 設問4 a エ
- 機密保持に関する誓約書を作成する
- 設問4 a オ
- セキュアプログラミングのルールを作成する
- 設問4 a カ
- 負荷分散装置を設置する
- 設問4 b ア
- Webサーバとデータベースサーバの時刻を同期させる
- 設問4 b イ
- 会員情報を暗号化する
- 設問4 b ウ
- 社内からのインターネット利用時にフィルタリングを実施する
- 設問4 b エ
- 共有IDを利用する
- 設問4 b オ
- データベースサーバをRAID構成にする
- 設問4 c ア
- アクセスログやエラーログの保管
- 設問4 c イ
- 外部記憶媒体の利用禁止を明文化
- 設問4 c ウ
- 業界団体との連携によるセキュリティ事故情報の共有
- 設問4 c エ
- 担当する業務に応じた情報セキュリティ教育の実施
- 設問4 c オ
- 内部不正に対する罰則の強化
解答・解説を表示
解答
設問1: イ, 設問2: エ, 設問3: ウ, 設問4 a: オ, 設問4 b: イ, 設問4 c: ア
解説
まず要点:Webアプリの安全対策では、入力値をそのまま命令に組み込まないプレースホルダ(値を後から当てはめる仕組み)の利用が基本です。事故が起きたときは、クレジットカードの停止など被害を広げない対応と、原因を調べるためのログの保管が欠かせません。データを暗号化しておくことも、漏れたときの悪用を防ぐ助けになります。
解き方
- 設問1では、SQLインジェクション攻撃が『入力欄にSQL命令を混ぜて不正に実行させる』攻撃だと押さえます。
- 設問2では、漏れたカード情報の悪用を防ぐため、会員にカード停止と再発行を頼む内容を選びます。
- 設問3では、回線の二重化が可用性を高める策であり、アプリの脆弱性対策とは別物だと見きわめます。
- 設問4では、再発防止(セキュアプログラミング)、暗号化、ログ保管のそれぞれに当てはまる施策を選びます。
小問ごとの答え
- 小問 設問1:イ
- SQLインジェクション攻撃は、Webサイトの入力フォーム等にSQL文の一部を不正に送り込み、意図しないSQL文をデータベース側で実行させる攻撃手口です。
- 小問 設問2:エ
- データベースサーバには平文でクレジットカード番号や有効期限が保存されていたため漏えいの恐れがあります。二次被害を防ぐため、会員に対してカード会社への利用停止およびカード番号再発行手続を依頼することが不可欠です。
- 小問 設問3:ウ
- 回線の二重化は耐障害性や可用性の向上を目的とするインフラ対策であり、Webアプリケーションの脆弱性を突くSQLインジェクション攻撃の防止には全く寄与しません。
- 小問 設問4 a:オ
- アプリケーションの設計・実装時にSQLインジェクション等の脆弱性を混入させないための対策として、「セキュアプログラミングのルールを作成する」ことが最も適切です。
- 小問 設問4 b:イ
- データベースサーバに平文で保存されていた会員情報を暗号化して格納することで、万一不正アクセスやデータ漏洩が生じた際の実質的な情報流出被害を防ぎます。
- 小問 設問4 c:ア
- 情報漏洩発生時に原因の分析や犯人の追跡、証拠の保全(デジタルフォレンジクス)を行うためには、「アクセスログやエラーログの保管」を実施することが必要です。
覚えるポイント
- SQLインジェクションは、Webアプリケーションの不備により入力値がSQLコマンドとして解釈・実行されてしまう攻撃である。
- デジタルフォレンジクス(原因究明・証拠保全)には、改ざんされない状態でのアクセスログやエラーログの保管が不可欠である。
間違えやすいところ
- 回線の二重化(障害や負荷への備え)と、アプリの脆弱性(SQLインジェクション)への対策を混同する間違いがあります。
- 作る段階の対策(セキュアプログラミング)と、運用段階の職務分離などの管理策を取り違える間違いがあります。
出題の前提:平成24年度秋期 基本情報技術者試験 午後 問4
出典:IPA『2012年度 秋期 午後』
公式問題冊子 p.17 ↗(www.ipa.go.jp) / 公式問題冊子 p.18 ↗(www.ipa.go.jp) / 公式問題冊子 p.19 ↗(www.ipa.go.jp) / 公式問題冊子 p.20 ↗(www.ipa.go.jp) / 公式問題冊子 p.21 ↗(www.ipa.go.jp)
通信講座受講管理システムの修了判定および割引残期間算出の設計
ソフトウェア設計 · 流れ図 / 業務ロジック設計 / 期日判定 / 月数計算
通信講座を提供するA社における受講管理システムに関する問題です。修了判定の条件(受講期間終了の判定、答案提出期限のチェック、平均点と提出回数による合否・優秀判定)を表す図5の流れ図の空欄 a~e、および修了判定後の割引受講案内を発送するために受講者の割引残存期間を計算する図7の流れ図の空欄 f, g に当てはまる適切な語句を選択します。
- a-ア
- 講座レコードの開始年月日<現在日付
- a-イ
- 講座レコードの答案iの提出期限<現在日付
- a-ウ
- 講座レコードの終了年月日<現在日付
- a-エ
- 成績レコードの答案iの提出日<現在日付
- a-オ
- 成績レコードの答案iの返送日<現在日付
- b-ア
- 成績レコードの答案iの提出日=講座レコードの答案iの提出期限
- b-イ
- 成績レコードの答案iの提出日≠講座レコードの答案iの提出期限
- b-ウ
- 成績レコードの答案iの提出日>講座レコードの答案iの提出期限
- b-エ
- 成績レコードの答案iの提出日≦講座レコードの答案iの提出期限
- b-オ
- 成績レコードの答案iの提出日の前日>講座レコードの答案iの提出期限
- c-ア
- 平均点=60
- c-イ
- 平均点<60
- c-ウ
- 60<平均点<90
- c-エ
- 平均点>90
- c-オ
- 平均点≧90
- d-ア
- “合格”
- d-イ
- “不合格”
- d-ウ
- “優秀”
- e-ア
- “合格”
- e-イ
- “不合格”
- e-ウ
- “優秀”
- f-ア
- 起算日の月+(起算日の年-現在日付の年)×12
- f-イ
- 起算日の月+(現在日付の年-起算日の年)×12
- f-ウ
- 現在日付の月+(起算日の年-現在日付の年)×12
- f-エ
- 現在日付の月+(現在日付の年-起算日の年)×12
- f-オ
- 現在日付の月-(現在日付の年-起算日の年)×12
- g-ア
- 起算日の月
- g-イ
- 起算日の月-割引対象期間
- g-ウ
- 割引対象期間
- g-エ
- 割引対象期間+起算日の月
- g-オ
- 割引対象期間-起算日の月
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: エ, 設問1 c: オ, 設問1 d: ウ, 設問1 e: ア, 設問2 f: エ, 設問2 g: エ
解説
まず要点:業務の流れ図を作るときは、条件の境界(以上・以下・未満)を正確に書き分けることが大切です。また、何年にもまたがる月数を計算するときは、年の差を12倍して月に直し、通算した月数で考えると間違えません。
解き方
- 問題文から修了判定の条件(終了日、提出期限、優秀・合格の分岐の順番)を取り出し、流れ図と照らし合わせます。
- 年が変わる場合の残り月数は、起算日の年からの通算月数に直してから引く計算を組み立て、変数の意味を確認します。
小問ごとの答え
- 小問 設問1 a:ウ
- 仕様より毎月初めに前月で受講期間が終了した受講者を対象として判定するため、受講期間終了の条件は「講座レコードの終了年月日<現在日付」となります。
- 小問 設問1 b:エ
- 答案の提出期限を過ぎて到着した答案は提出回数に含めず点数は0点とするため、有効な提出である条件は「成績レコードの答案iの提出日≦講座レコードの答案iの提出期限」となります。
- 小問 設問1 c:オ
- 優秀判定の基準は「全ての答案を提出し、かつ、平均点が90点以上」です。直前の分岐で平均点≧60を満たした後の判定であるため「平均点≧90」が入ります。
- 小問 設問1 d:ウ
- 平均点≧90を満たし、さらに提出回数=受講期間の月数(全答案提出)の条件を満たした場合の判定区分であるため「“優秀”」が設定されます。
- 小問 設問1 e:ア
- 提出回数の合格基準を満たし、平均点≧60を満たしているが優秀の条件から外れた受講者には合格が与えられるため「“合格”」が設定されます。
- 小問 設問2 f:エ
- 年をまたぐ場合の通算月数を起算日の年を基準に計算するため、現在日付の月に年数の差(現在日付の年-起算日の年)×12を加算した式となります。
- 小問 設問2 g:エ
- 割引期限月は起算日の月から割引対象期間(24または12)経過後となるため、有効期限月は「割引対象期間+起算日の月」となり、ここから経過月変数mを減算して割引残存期間を求めます。
覚えるポイント
- 日付比較では早い日付が小さい数値として扱われるため、期限内は「提出日≦提出期限」となる。
- 年をまたぐ月数の差分計算は、年差×12を月数に換算して通算月数を合わせる。
間違えやすいところ
- 修了判定で『90点以上』を『>90』と書いてしまい、90点ちょうどを外してしまうミスがあります。
- 割引の残り期間の計算で、同じ年と年またぎの場合に基準にする時点を混同してしまうミスがあります。
出題の前提:平成24年度秋期基本情報技術者試験 午後 問5
出典:IPA『2012年度 秋期 午後』
公式問題冊子 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) / 公式問題冊子 p.28 ↗(www.ipa.go.jp)
磁気テープのデータ管理と棚卸しおよび貸出し管理の改善
ITサービスマネジメント · 磁気テープ管理 / 実地棚卸 / 資産管理 / 情報セキュリティ
大手販売会社X社における磁気テープの棚卸しと貸出し運用管理に関する問題です。図2の移動状況から今回の棚卸結果報告書(図3)の各項目(廃棄した本数 a、未使用テープ保管箱 b、使用済みテープ保管箱 c、社内部門貸出中 d、今回の棚卸本数 e)を計算する設問1、返却予定日を定めて適切な管理を実施するための運用内容を問う設問2、および調査部への貸出しで発生した機密情報保護上の根本的な問題点を特定する設問3に解答します。
- a-ア
- 0
- a-イ
- 2
- a-ウ
- 3
- a-エ
- 5
- a-オ
- 13
- b-ア
- 0
- b-エ
- 5
- b-オ
- 13
- b-カ
- 14
- c-オ
- 13
- c-カ
- 14
- c-キ
- 20
- c-ク
- 25
- d-ア
- 0
- d-イ
- 2
- d-ウ
- 3
- d-エ
- 5
- e-ア
- 1028
- e-イ
- 1034
- e-ウ
- 1039
- e-エ
- 1046
- e-オ
- 1053
- e-カ
- 1054
- 設問2-ア
- 運用課が次回の棚卸日よりも後の日付で返却予定日を設定し,棚卸日に超過が発生しないようにする。
- 設問2-イ
- 運用課が返却予定日を管理し,超過した場合は申請者に再申請などの必要な処置をとらせる。
- 設問2-ウ
- 申請者に十分な余裕をもった返却予定日を設定させて,返却予定日の超過が発生しないようにする。
- 設問2-エ
- 申請者に返却予定日の管理を委ね,超過した場合は再申請などの必要な処置を自ら申請させる。
- 設問3-ア
- 調査部からの複写の依頼が,電子メールなどの文書ではなく電話で行われた。
- 設問3-イ
- 複写終了後に,申請者から運用課へ,複写の事後報告をしなかった。
- 設問3-ウ
- 複写終了後に,ヘルプデスク担当者から運用課へ,複写の事後報告をしなかった。
- 設問3-エ
- ヘルプデスク担当者が機密情報を複写し,テープを保管していた。
解答・解説を表示
解答
設問1 a: オ, 設問1 b: カ, 設問1 c: キ, 設問1 d: イ, 設問1 e: エ, 設問2: イ, 設問3: エ
解説
まず要点:媒体(テープなど)の管理では、台帳の理論在庫(前回在庫+受入-払出-廃棄)と実際に数えた在庫を突き合わせ、食い違いをすぐに見つける仕組みが大切です。また、機密情報は許可された人だけが扱うようにしなければなりません。
解き方
- 移動の記録を時間の順にたどり、廃棄・未使用保管箱・使用済み保管箱・貸出中の実際の本数をそれぞれ計算します。
- 実際に確認できた本数と理論上の在庫の差(所在不明1本)をつかみ、報告書の各欄(a〜e)を決めます。
- 貸出管理が形だけにならないための期限管理・督促の方法と、複写権限違反という根本的な問題を特定します。
小問ごとの答え
- 小問 設問1 a:オ
- 前回棚卸時に使用済み保管箱にあった8本と7/25移動の5本を合わせた13本について、8/15に消去が完了したため廃棄本数は13本となります。
- 小問 設問1 b:カ
- 未使用テープは前回残12本に9/12の購入20本を加えた32本から、10/6に使用した18本を引いて14本となります。
- 小問 設問1 c:キ
- 8/15に全消去されて一旦0本になった後、10/2に20本が移動されたため、実地確認本数は20本となります。
- 小問 設問1 d:イ
- 前回の4本から監査室の返却2本を引き、調査部への新規貸出1本を加えると台帳上は3本ですが、実地確認できたのは調査部の1本を除く2本です。
- 小問 設問1 e:エ
- 今回の棚卸本数=前回1060+追加20-廃棄13+搬入0-搬出21=1046本となります。
- 小問 設問2:イ
- 管理部門である運用課が返却予定日を把握・管理し、期限超過時に再申請や返却等の適切な処置を促す運用が適切です。
- 小問 設問3:エ
- 機密情報の複写は経理部と調査部の社員にのみ許可されていたにもかかわらず、権限のないヘルプデスク担当者が複写を行い保管していたことが根本的な問題です。
覚えるポイント
- 実地棚卸し報告書の実地確認済み本数には、所在不明となった資産は含めない。
- 廃棄本数は「不要となって保管箱に移動した時点」ではなく「消去が完了した時点」で計上する。
間違えやすいところ
- 前回の棚卸しで保管箱に残っていた本数を見落とし、期間中の増えた分だけで計算してしまうミスがあります。
- 貸出中の本数として、所在不明の1本を含む台帳上の3本と、実際に確認できた2本を取り違えるミスがあります。
出題の前提:平成24年度秋期基本情報技術者試験 午後 問6
出典:IPA『2012年度 秋期 午後』
公式問題冊子 p.29 ↗(www.ipa.go.jp) / 公式問題冊子 p.30 ↗(www.ipa.go.jp) / 公式問題冊子 p.31 ↗(www.ipa.go.jp) / 公式問題冊子 p.32 ↗(www.ipa.go.jp)
日用品メーカにおける在庫管理業務と在庫削減施策
経営戦略・企業と法務 · 在庫管理 / キャッシュフロー / 棚卸資産回転率
日用品メーカZ社の工場における在庫管理(検品中在庫、良品在庫、不良品在庫の推移)および翌日の出荷・生産手配業務、在庫削減施策に関する次の記述を読み、設問1〜4に答えよ。 【Z社の工場での在庫管理】 (1) 生産品は品質検査完了まで検品中在庫として管理。 (2) 品質検査で良品判定されたものは良品在庫へ。 (3) 不良品判定されたものは不良品在庫へ。 (4) 返品された製品は検品中在庫として管理。 (5) 良品在庫の破損品は不良品在庫へ。 (6) 不良品在庫は定期的に廃棄。 (7) 良品在庫から製品を出荷。 【業務手順】 手順①:各数量および在庫数を管理台帳に記入し、翌日の出荷予定数を記入する。 手順②:当日の良品在庫数が翌日の出荷予定数に満たない場合、本社に連絡して出荷日の変更を依頼する。 手順③:良品在庫数が翌日出荷予定数の2倍以上、かつ検品中在庫数と良品在庫数の合計が翌日出荷予定数の3倍以上という基準を満たさない場合、翌日に一定数を生産する手配を行う。
- ア
- 設問ごとの各解答群を参照
- イ
- 設問ごとの各解答群を参照
- ウ
- 設問ごとの各解答群を参照
- エ
- 設問ごとの各解答群を参照
- オ
- 設問ごとの各解答群を参照
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: イ, 設問1 c: ウ, 設問2: オ, 設問3: ア, 設問4 d: エ, 設問4 e: イ
解説
まず要点:在庫管理では、検品中・良品・不良品という状態ごとに、増える要因と減る要因を正しくつかんで数量の移り変わりを計算します。あわせて、安全在庫の判断基準と、在庫を減らすことがお金の流れ(キャッシュフロー)にどう効くかを理解することが大切です。
解き方
- 各在庫状態の増減の関係式を立て、空欄の数量を逆算して求めます。
- 手順②の欠品リスクの確認と、手順③の安全在庫の判定条件に数値を当てはめ、翌日の業務を決めます。
- 在庫削減がお金の流れ(キャッシュフロー)と棚卸資産に与える影響、発注・生産基準を見直す効果を考えます。
小問ごとの答え
- 小問 設問1 a:ウ
- 検品中在庫の推移式「当日検品中在庫=前日検品中在庫+生産数+返品数-良品判定数-不良品判定数」より、19日検品中在庫(1,150)=a+1,800+50-1,600-100=a+150となるため、a=1,000となります。
- 小問 設問1 b:イ
- 良品在庫の推移式「当日良品在庫=前日良品在庫+良品判定数-破損数-出荷数」より、19日良品在庫(2,880)=3,000+1,600-b-1,700=2,900-bとなるため、b=20となります。
- 小問 設問1 c:ウ
- 不良品在庫の推移式「当日不良品在庫=前日不良品在庫+不良品判定数+破損数-廃棄数」より、20日不良品在庫c=120+0+40-0=160となります。
- 小問 設問2:オ
- 表2の商品Bの20日は、返品10個に対して生産数が0個であり、品質検査によって140個が良品判定されたため、検品中在庫が220個から90個へと130個大幅に減少しています。
- 小問 設問3:ア
- 商品Aは良品在庫2,240<基準1(3,000)、合計4,490<基準2(4,500)で生産手配が必要です。商品Bは良品在庫260≧基準1(240)ですが、合計350<基準2(360)で基準を満たさず生産手配が必要となるため、両方とも21日の生産を手配します。
- 小問 設問4 d:エ
- 在庫の削減は、余剰な仕入・製造資金の固定化を防ぎ現金を回収しやすくするためキャッシュフローを増加させ、棚卸資産の金額を減少させます。
- 小問 設問4 e:イ
- 手順③の「翌日出荷予定数の2倍以上・3倍以上」という安全在庫の基準倍率を引き下げることで、過剰な在庫保有を抑制し在庫削減を図ることができます。
覚えるポイント
- 検品中在庫=前日検品中+生産+返品-良品判定-不良品判定
- 在庫削減は棚卸資産を減らし、運転資金を解放してキャッシュフローを増加させる
間違えやすいところ
- 破損品を良品在庫の減少と不良品在庫の増加の両方に反映し忘れること。
- 手順③の基準が『2倍』と『3倍』の両方を満たす(AND)条件だと気づかず、片方だけで満たしたと誤解すること。
出題の前提:平成24年度秋期 基本情報技術者試験 午後 問7
出典:IPA『2012年度 秋期 午後』
公式問題冊子 p.33 ↗(www.ipa.go.jp) / 公式問題冊子 p.34 ↗(www.ipa.go.jp) / 公式問題冊子 p.35 ↗(www.ipa.go.jp) / 公式問題冊子 p.36 ↗(www.ipa.go.jp) / 公式問題冊子 p.37 ↗(www.ipa.go.jp)
駅間の最短距離を求めるプログラム(Warshall-Floyd法)とその改善
データ構造及びアルゴリズム · ワーシャルフロイド法 / 最短経路問題 / 計算量 / メモリ最適化
全駅間の最短距離を求めるプログラムCalcDist(ワーシャルフロイド法)およびその計算量・メモリ使用量の改善手法に関する次のプログラムと説明を読み、空欄a〜gに当てはまる適切な答えを選べ。 【プログラム概要】 副プログラム CalcDist(整数型: N, 整数型: Dist[][]) 3重ループ(Via: 1〜N, From: 1〜N, To: 1〜N)により、 Dist[From][To] > Dist[From][Via] + Dist[Via][To] のとき、値を Dist[From][Via] + Dist[Via][To] に更新する。 【改善手法】 1. 無向グラフの対称性に着目し、対角線より上側の要素のみを探索・更新する。 2. 路線網を基幹駅(乗換駅・終端駅)と中間駅に分割し、基幹駅間のみをDist(K×K)で管理し、中間駅は駅情報表で管理する。
- ア
- 設問ごとの各解答群を参照
- イ
- 設問ごとの各解答群を参照
- ウ
- 設問ごとの各解答群を参照
- エ
- 設問ごとの各解答群を参照
解答・解説を表示
解答
a: ウ, b: ア, c: エ, d: ウ, e: エ, f: ウ, g: ウ
解説
まず要点:ワーシャルフロイド法は、すべての駅の組の最短距離を、経由する駅を1つずつ増やしながら求める方法です。無向グラフでは表が対称になることを利用すると計算を半分に減らせます。また、乗換のない中間の駅をまとめると、使うメモリを大きく節約できます。
解き方
- Via(経由駅)を通る道(Dist[From][Via]+Dist[Via][To])の和を出し、今のDist[From][To]と比べて表を更新します。
- 3重ループの組み方と2次元配列の大きさから、時間計算量O(N^3)と空間計算量O(N^2)を導きます。
- 中間駅を省いた基幹駅だけの表(K×K)と駅の属性表(5×N)の合計メモリを、改善前(N^2)と比べる式を解きます。
小問ごとの答え
- 小問 a:ウ
- Via=2の処理において、From=1, To=3の経路はDist[1][2]+Dist[2][3]=18+17=35となり、初期値999より小さいため35に更新されます。
- 小問 b:ア
- Via=2の処理において、From=3, To=5の経路はDist[3][2]+Dist[2][5]=17+16=33となり、初期値999より小さいため33に更新されます。
- 小問 c:エ
- Via、From、Toの3重ループがそれぞれ駅数N回実行されるため、時間計算量はO(N^3)となります。
- 小問 d:ウ
- N×Nの2次元配列Distを使用するため、メモリ使用量のオーダはO(N^2)となります。
- 小問 e:エ
- 無向グラフの対称性からFrom<Toの部分のみを計算すればよいため、内側のループはFrom+1からNまで実行する「From + 1, To ≦ N, 1」となります。
- 小問 f:ウ
- 両駅が同じ区間に属するかどうかは区間名が同一であるかで判定するため、条件式は「Sec[i] = Sec[j]」となります。
- 小問 g:ウ
- 改善前のメモリ量はN^2、改善後はK^2+5N=25+5Nです。N^2-5N-25>0を満たす最小の整数Nは、8のとき64-65=-1、9のとき81-70=11>0となるため、N≧9となります。
覚えるポイント
- ワーシャルフロイド法の三重ループは外側から順に「経由点(Via)・始点(From)・終点(To)」
- 無向グラフでは隣接行列が対称行列になるため上三角部分だけの探索で済む
間違えやすいところ
- 外側のループを経由駅ではなく始点にしてしまい、最短距離が正しく更新されない順番で計算してしまうこと。
- 区間の一致を両端の駅番号(KL, KH)で判定してしまい、同じ番号の両端を持つ別の経路を間違えて同じとみなすこと。
出題の前提:平成24年度秋期 基本情報技術者試験 午後 問8
出典:IPA『2012年度 秋期 午後』
公式問題冊子 p.38 ↗(www.ipa.go.jp) / 公式問題冊子 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)
C言語によるくじの当選番号および前後賞の判定
ソフトウェア開発 · C言語 / ポインタ / 文字列操作 / 桁上がり・桁下がり処理
くじ番号と各等級の当選番号を比較して当たりおよび前後賞を確認するC言語プログラムに関する問題である。提示された仕様及びプログラムの空欄 a 〜 f に当てはまる適切な語句を選択せよ。
- a
- 当選番号表(ポインタ配列)の終端条件の判定
- b
- くじ番号の比較開始位置(末尾)へのポインタ移動
- c
- 末尾から各桁を順次比較するループの継続条件
- d
- 前後賞判定用数字列を生成するループの開始インデックス
- e
- 対象のくじ番号から m 桁目の文字を取得する式
- f
- 桁下がり及び桁上がり発生時に置換する文字の組合せ
解答・解説を表示
解答
設問1 a: エ, 設問1 b: エ, 設問1 c: イ, 設問2 d: キ, 設問2 e: エ, 設問2 f: イ
解説
まず要点:C言語の文字列は、最後がナル文字(文字列の終わりを示す '\0')の文字のならびで、ポインタ(文字の場所を指す値)を足すと各文字に直接せんたくできます。そのため、個数が変わるポインタ配列(ポインタを並べた配列)をたどるときは、終わりを NULL で見分ける判定がかかせません。また、数の足し算・引き算を文字列のまま練習するときは、下の位からのくり上がり・くり下がりを正しく判定して次の位へ伝える必要があります。
解き方
- 当選番号表のデータの作りをたしかめ、各等級の配列の終わりが NULL であることを手がかりに、たどる条件をさがします。
- 関数 check_lot で、いちばん下の位から1つずつ引いて比べる処理を読み、ポインタの最初の位置とループを続ける条件を求めます。
- 前後賞をつくる処理で、下の位(添字 LOT_DNUM - 1)から順に '0' のくり下がりや '9' のくり上がりをあつかう流れを追って空欄を決めます。
小問ごとの答え
- 小問 設問1 a:エ
- win_list[i] は各等級の当選番号文字列へのポインタ配列であり、その末尾には空ポインタ定数(NULL)が格納されている。したがって、ポインタがNULLでない間ループを継続するため、条件は win_list[i][k] != NULL となる。
- 小問 設問1 b:エ
- くじ番号は6桁固定(LOT_DNUM)である。直前の行で当選番号のポインタ win を末尾(lenw進めた位置)に移動させているのと同様に、lot も末尾のナル文字の位置まで進めるため、lot += LOT_DNUM とする。
- 小問 設問1 c:イ
- 当選番号の桁数分だけ最下位桁から順に一致するか確認する。各桁が一致している間(result == 1)かつ比較回数が当選番号の桁数未満(i < lenw)の間ループを継続するため、(i < lenw) && (result == 1) が適切である。
- 小問 設問2 d:キ
- 前後賞用の数字列を最下位桁から上位桁に向かって計算するため、配列の末尾インデックスから開始する。文字数は LOT_DNUM なので、末尾の添字は LOT_DNUM - 1 となる。
- 小問 設問2 e:エ
- lots[j] はくじ番号の文字列の先頭アドレスを指すポインタである。m 桁目(先頭からオフセット m の位置)の文字を取り出して代入するため、*(lots[j] + m) を指定する。
- 小問 設問2 f:イ
- 1引く処理(pnum)では、文字が '0'(f1)のとき '9'(f2)に置き換えて桁下がりを上位へ継続させる。逆に1足す処理(nnum)では文字が '9'(f2)のとき '0'(f1)に置き換えて桁上がりを継続させる。よって f1 は '0'、f2 は '9' である。
覚えるポイント
- 可変長ポインタ配列の末尾番兵には NULL がよく用いられる。
- 文字列の末尾から先頭に向かって処理する際は、添字の初期値を「長さ - 1」にして 0 までデクリメントする。
間違えやすいところ
- b で、くじ番号のけた数 LOT_DNUM ではなく当選番号のけた数 lenw をたしてしまうまちがい。
- d で、配列の添字が 0 から始まることを考えず、LOT_DNUM からループを始めてしまうまちがい。
出題の前提:平成24年度秋期 基本情報技術者試験 午後 問9
出典:IPA『2012年度 秋期 午後』
公式問題冊子 p.44 ↗(www.ipa.go.jp) / 公式問題冊子 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)
COBOLによるスポーツクラブ利用料金の集計・整列処理
ソフトウェア開発 · COBOL / ファイル入出力 / REDEFINES句 / SORT文 / 整列処理
会員制スポーツクラブにおける利用記録ファイルを集計し、請求ファイルを作成するCOBOLプログラムに関する問題である。索引ファイルを用いた初期実装から整列機能(SORT)を用いた高速化への改修に関する空欄 a 〜 g に当てはまる適切な語句を選択せよ。
- a
- 料金テーブルの超過料金定義値
- b
- 会員ファイルを順次読み込み請求レコードを出力する手続き名
- c
- 作業用ファイルに初回利用時間を設定する文
- d
- 基本料金に超過料金を加算する計算文
- e
- 整列ファイルへレコードを渡す文
- f
- 同一会員の利用時間を累計する文
- g
- 超過時間計算を行う対象レコードの判定条件式
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: イ, 設問1 c: カ, 設問1 d: ウ, 設問2 e: エ, 設問2 f: ア, 設問2 g: ウ
解説
まず要点:COBOLのREDEFINES句(同じ記憶場所を別のデータとして読みかえる書き方)を使うと、同じ領域をちがう項目として解釈できます。SORT文では、INPUT PROCEDUREの中のRELEASE文でレコードをならべかえ処理にわたし、OUTPUT PROCEDUREの中のRETURN文でならべかえ済みのレコードを受け取ります。そして、同じ会員のまとまりごとに区切って集計するコントロールブレークを行います。
解き方
- データ部のREDEFINESの作りと料金表の対応をたしかめ、超過料金のつながった文字列 a を見つけます。
- 主処理(MAIN-PROC)の流れから、作業用ファイルを作ったあとに、会員ごとの請求書を作る手続き b をよぶことを読み取ります。
- SORT文を使った改修後の作りを読み、ならべかえ入力での RELEASE 文 e、区切りごとの累計加算 f、超過の条件判定 g を求めます。
小問ごとの答え
- 小問 設問1 a:ウ
- 料金表より、種別1〜4の超過料金は順に500円、400円、400円、300円である。EXT-PRICE は 3桁×4(12桁)として再定義されるため、文字列は "500400400300" となる。
- 小問 設問1 b:イ
- MKTIME-PROC で利用記録から作業用ファイルを作成した後、会員ファイルをもとに請求ファイルを作成する手続き MKBILL-PROC を実行するため、PERFORM MKBILL-PROC が入る。
- 小問 設問1 c:カ
- 作業用ファイルに該当会員のレコードが存在しない場合(INVALID KEY)、レコードの新規作成となるため、今回の利用時間を設定する MOVE T-MIN TO W-MIN を実行して書き出す。
- 小問 設問1 d:ウ
- 行72で基本料金が B-CHG に代入されているため、超過料金を加算する COMPUTE B-CHG = B-CHG + EXT-PRICE(M-CODE) * EXT-H が正しい。
- 小問 設問2 e:エ
- SORT文の INPUT PROCEDURE 内で、ソート対象レコードをソート処理機構へ引き渡すには RELEASE 文を使用するため、RELEASE W-REC となる。
- 小問 設問2 f:ア
- ソート後のレコードから同一会員番号の時間が連続して取り出される間、利用時間を累計するため ADD W-MIN TO TMP-MIN を実行する。
- 小問 設問2 g:ウ
- 利用記録が存在する会員(M-NO = TMP-NO)で、かつ累計利用時間が基準の600分を超えている場合(TMP-MIN > 600)に超過料金を計算するため、M-NO = TMP-NO AND TMP-MIN > 600 が適切である。
覚えるポイント
- SORT文の入力手続きでは RELEASE 文、出力手続きでは RETURN 文を使用する。
- REDEFINES 句は同じメモリ領域を異なるデータ形式として分割・定義するために用いる。
間違えやすいところ
- ならべかえ用ファイルへのレコード出力で、WRITE と RELEASE をまちがえること。
- 超過料金の計算で、基本料金にたすのではなく超過料金だけを入れてしまうまちがい。
出題の前提:平成24年度秋期 基本情報技術者試験 午後 問10
出典:IPA『2012年度 秋期 午後』
公式問題冊子 p.50 ↗(www.ipa.go.jp) / 公式問題冊子 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)
スレッドを利用したタイマプログラムの実装と動作
ソフトウェア開発 · Java / マルチスレッド / インターフェース / 排他制御・同期待ち
Javaにおいてスレッドを用いてタイマ機能を提供するプログラムと、それをテストするプログラムに関する次の設問に答えよ。タイマ処理は指定された遅延時間が経過した際、または途中でキャンセルされた際にTimerActionインターフェースに定義されたコールバックメソッドを呼び出す。
- ア
- g1: main, g2: main
- イ
- g1: main, g2: Timer-0
- ウ
- g1: main, g2: Timer-1
- エ
- g1: Timer-0, g2: main
- オ
- g1: Timer-0, g2: Timer-1
- カ
- g1: Timer-1, g2: main
- キ
- g1: Timer-1, g2: Timer-0
解答・解説を表示
解答
設問1 a: エ, 設問1 b: ア, 設問1 c: ウ, 設問1 d: カ, 設問1 e: カ, 設問1 f: ア, 設問2: キ
解説
まず要点:Javaのマルチスレッド(同時にいくつもの処理を動かすしくみ)では、Runnableインターフェースを実装した内部クラス(クラスの中に書くクラス)が、それぞれのスレッドが行う処理の中身になります。スレッドどうしの連けいや知らせは、コールバックメソッド(あとで呼び出してもらうためのメソッド)を通して、待たずに進む形(非同期)で行います。
解き方
- 待つループの条件では、終わりの目標時刻と今の時刻の差(delta)を計算し、残り時間が正の間Thread.sleepをする流れを追います。
- スレッドを作った順番でつく番号(Timer-0, Timer-1)と、各タイマの実行スレッドがどのコールバックメソッドを行うかを整理します。
小問ごとの答え
- 小問 設問1 a:エ
- タイマの終了時刻endAtから現在時刻currentTime()を引いた残り時間deltaが正の間スリープを繰り返すため、(delta = endAt - currentTime()) > 0が適切です。
- 小問 設問1 b:ア
- sleep中に割り込み(InterruptedException)が発生し、canceledがtrueであれば待機ループを終了して即座にキャンセル処理に移る必要があるため、breakでループを抜けます。
- 小問 設問1 c:ウ
- TimerActionはインターフェースであるため、TimerTestクラスでその仕様を実装するにはimplementsキーワードを用います。
- 小問 設問1 d:カ
- 内部で呼び出しているThread.join()メソッドなどがInterruptedExceptionを送出する可能性があるため、メソッド宣言部にthrows InterruptedExceptionを記述します。
- 小問 設問1 e:カ
- Timer.createTimerの第2引数にはTimerActionを実装したインスタンスを渡す必要があります。自身(TimerTestインスタンス)がTimerActionを実装しているためthisを指定します。
- 小問 設問1 f:ア
- shortTimerのタイマ満了時(onAlarm)に他方のlongTimerをキャンセルする仕様であるため、longTimer.cancel()を呼び出します。
- 小問 設問2:キ
- 生成順にTimer-0(longTimer)、Timer-1(shortTimer)となり、先に2秒で満了するshortTimerのスレッド名(Timer-1)がg1、割り込まれてキャンセル通知を行うlongTimerのスレッド名(Timer-0)がg2となります。
覚えるポイント
- Thread.sleep待機中のスレッドにinterrupt()を送るとInterruptedExceptionが発生します。
間違えやすいところ
- TimerActionのメソッドをよび出しているのがmainスレッドだと、かんちがいしやすいので注意します。
出題の前提:平成24年度秋期基本情報技術者試験午後問11
出典:IPA『2012年度 秋期 午後』
公式問題冊子 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) / 公式問題冊子 p.63 ↗(www.ipa.go.jp)
多項式の計算を行うアセンブラプログラム
ソフトウェア開発 · CASL II / 多項式計算 / サブルーチン呼び出し / 再帰処理
COMET II / CASL II において、多項式 F(x, n) = x^n + x^(n-1) + ... + x + 1 の値を求める副プログラムPOLYおよび再帰呼出しを用いたPOLY2に関する次の設問に答えよ。乗算には16ビット符号なし整数の乗算を行う副プログラムMULTを使用する。
- ア
- 4
- イ
- 5
- ウ
- 10
- エ
- 11
- オ
- 15
- カ
- 16
解答・解説を表示
解答
設問1 a: イ, 設問1 b: カ, 設問1 c: エ, 設問2: ウ, 設問3: ア, 設問4 d: オ, 設問4 e: エ
解説
まず要点:アセンブラで多項式を計算するとき、べき乗(同じ数を何回もかけること)を順に計算して合計する反復のやり方と、ホーナー法のように F(x, n) = x * F(x, n-1) + 1 として自分をよび出して計算する再帰のやり方があります。この2つでは、かけ算の回数や命令の組み立て方がちがいます。
解き方
- 反復プログラムPOLYで、GR3のカウンタがどうやって減らされ、かけ算MULTがよび出されるかを追います。
- 再帰プログラムPOLY2で、基本の場合(n=0)と再帰の場合(n>0)の引数のせっていとよび出し回数を数えます。
小問ごとの答え
- 小問 設問1 a:イ
- 外側ループLP1ではGR1(次数)が0以上で継続し、負(JMI)になったら全体の終了処理FINへ分岐するため、JMI FINが適切です。
- 小問 設問1 b:カ
- 副プログラムMULTでは乗数GR2を右シフトしていき、0になったら終了するため、JZE FINによりFINへ分岐します。
- 小問 設問1 c:エ
- MULTのシフト加算処理において、ビット検査のたびに被乗数GR1を1ビット左シフト(SLL GR1, 1)して次の重みに合わせます。
- 小問 設問2:ウ
- 次数n=4のとき、x^4の計算で4回、x^3で3回、x^2で2回、x^1で1回MULTが呼ばれ、合計4+3+2+1=10回呼び出されます。
- 小問 設問3:ア
- 再帰呼出しF(x, n-1)を行うため、GR1から1を減じるLAD GR1,-1,GR1を実行してからRSUBを呼び出します。
- 小問 設問4 d:オ
- n=4から0まで計5回RSUBの先頭(行番号6)に制御が移るため、回数は5回(オ)となります。
- 小問 設問4 e:エ
- 再帰の戻り処理で乗算MULTを呼ぶ行番号12のCALL命令はn=1, 2, 3, 4の各復帰時に実行されるため、計4回(エ)となります。
覚えるポイント
- CASL IIにおいてレジスタの値を1減らすには「LAD reg, -1, reg」を使用します。
間違えやすいところ
- べき乗の計算のループ回数と、多項式全体の項の数をまちがえないように注意します。
出題の前提:平成24年度秋期基本情報技術者試験午後問12
出典:IPA『2012年度 秋期 午後』
公式問題冊子 p.64 ↗(www.ipa.go.jp) / 公式問題冊子 p.65 ↗(www.ipa.go.jp) / 公式問題冊子 p.66 ↗(www.ipa.go.jp) / 公式問題冊子 p.67 ↗(www.ipa.go.jp)
小学校の新設に関する最適配置問題
ソフトウェア開発(表計算) · 表計算ソフト / ワークシート設計 / 相対参照と絶対参照 / マクロ / 最適化アルゴリズム
小学校の新設に伴うメッシュ分割シミュレーションに関する表計算ワークシートおよびマクロの記述について、設問1〜3の空欄[ a ]〜[ h ]に当てはまる最も適切なものをそれぞれの解答群から選べ。
- 設問1 a
- オ(剰余(A2, 100) + 0.5)
- 設問1 b
- キ(整数部(A2 / 100) + 0.5)
- 設問2 c
- ア(平方根((児童数分布表!$B2-B$2)^2+(児童数分布表!$C2-B$3)^2))
- 設問2 d
- カ(IF(照合検索(F12, B$1~D$1, B12~D12)≦E12, F12, E$1))
- 設問2 e
- カ(条件付合計($G12~$G81, =B1, 児童数分布表!$D2~$D71))
- 設問2 f
- ア(論理積(垂直照合(E4, 児童数分布表!$A2~$E71, 5, 0)='*', E5≦E6, E4≠B4, E4≠C4, E4≠D4))
- 設問3 g
- オ(論理積(最小(B7~E7)>MaxRatio, F9=null))
- 設問3 h
- ウ(MaxRatio ← 最小(B7~E7))
解答・解説を表示
解答
設問1 a: オ, 設問1 b: キ, 設問2 c: ア, 設問2 d: カ, 設問2 e: カ, 設問2 f: ア, 設問3 g: オ, 設問3 h: ウ
解説
まず要点:この問題は、ます目(メッシュ)を使った施設の配置を最もよくすることを、表計算のしくみで解く方法を問うています。セル番地の参照のしかた(相対参照・絶対参照)や、照合関数・条件付きで集計する関数、そしてループを使うマクロを用いて、式に表して答えをさがします。
解き方
- メッシュIDの式 ID=x+100y から、整数部と余りを使って座標(x, y)を逆に求めます。
- 2点間の直線距離(ユークリッド距離)の式と、コピーするときのセル番地の相対参照・絶対参照の組み合わせを決めます。
- 今通っている学校までの距離を照合検索の関数で取り、新設校との距離をくらべて新しい通学先を決めます。
- すべての条件を満たしたうえで、全校の最小充足率が最大になる場所をマクロでさがす論理を組み立てます。
小問ごとの答え
- 小問 設問1 a:オ
- メッシュIDは x+100y で定義され、xは0以上100未満の整数であるため、x座標はIDを100で割った余りとなります。メッシュの中心点のx座標は左上端のxに0.5を加えた値であるため、「剰余(A2, 100) + 0.5」となります。
- 小問 設問1 b:キ
- ID=x+100y において x<100 なので、IDを100で割った商の整数部がyとなります。中心点のy座標はこれに0.5を加えた値となるため、「整数部(A2 / 100) + 0.5」となります。
- 小問 設問2 c:ア
- B12からE81に複写する際、児童数分布表のx, y座標は行番号のみ追従させ列は固定($B2, $C2)、学校の座標は列のみ追従させ行は固定(B$2, B$3)とする必要があります。距離公式に適用すると「平方根((児童数分布表!$B2-B$2)^2+(児童数分布表!$C2-B$3)^2)」となります。
- 小問 設問2 d:カ
- 新設小学校までの距離E12が、現在通学している小学校までの距離以下であれば新設校(E$1)へ転校し、そうでなければ現通学校(F12)を維持します。現通学校までの距離は「照合検索(F12, B$1~D$1, B12~D12)」で取得できるため、「IF(照合検索(F12, B$1~D$1, B12~D12)≦E12, F12, E$1)」となります。
- 小問 設問2 e:カ
- 新設後の新通学小学校名が入っているセル範囲はG12~G81です。この列を固定($G12~$G81)して学校名(B1)と一致する児童数(児童数分布表!$D2~$D71)を合算するため、「条件付合計($G12~$G81, =B1, 児童数分布表!$D2~$D71)」となります。
- 小問 設問2 f:ア
- 新設校が制約条件を満たすには、条件1(設置可能メッシュで'*'であること:垂直照合(E4, 児童数分布表!$A2~$E71, 5, 0)='*')、条件2(定員以内:E5≦E6)、条件3(既存校と同一メッシュでない:E4≠B4, E4≠C4, E4≠D4)のすべてを満たす必要があるため、これらを論理積で結合した式となります。
- 小問 設問3 g:オ
- すべての小学校が制約条件を満たしている(F9=null)状態で、かつ各小学校の充足率の最小値「最小(B7~E7)」がこれまでの最大記録「MaxRatio」を上回る場合に更新を行うため、「論理積(最小(B7~E7)>MaxRatio, F9=null)」となります。
- 小問 設問3 h:ウ
- 充足率の最小値が最も大きくなる配置を探索するため、MaxRatioをその時点の4校の充足率の最小値「最小(B7~E7)」で更新します。
覚えるポイント
- メッシュID(x + 100y)の逆算では、x = 剰余(ID, 100)、y = 整数部(ID / 100) を用いる。
- セル複写時の絶対参照($記号)は、固定すべき行・列に対して適切に付与する。
間違えやすいところ
- 整数部や余りを計算するとき、われる数とわる数のじゅんばんをまちがえること。
- 新通学校の判定(設問2 d)で、今の学校と新設校までの距離の大小と、どちらをえらぶかを逆にしてしまうこと。
出題の前提:平成24年度秋期 基本情報技術者試験 午後 問13
出典:IPA『2012年度 秋期 午後』
公式問題冊子 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) / 公式問題冊子 p.75 ↗(www.ipa.go.jp) / 公式問題冊子 p.76 ↗(www.ipa.go.jp)
2012年度 秋期 午後
参照した公式資料
IPAが公開した2012年度 秋期 午後の問題・解答資料です。

