旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2018年度 春期 午後の概要
Webサービスにおけるパスワードの安全な保存
情報セキュリティ · ハッシュ関数 / ソルト / ストレッチング / オフライン総当たり攻撃 / 辞書攻撃
Webサービスにおいて利用者のパスワードを安全に保存・照合する方式に関する記述を読み、設問1〜3に答えよ。
解答・解説を表示
解答
設問1 a: エ, 設問1 b: イ, 設問2 c: イ, 設問2 d: エ, 設問3: エ
解説
まず要点:パスワードは元に戻せない一方向ハッシュ関数(入力を固定長の値に変換する仕組み)で変換して保存します。理由は、万が一データが漏れても元のパスワードが分からないようにするためです。さらに、事前に計算した表を使う辞書攻撃(レインボーテーブル攻撃)を防ぐためランダムな文字列ソルトを加え、計算を何度も繰り返すストレッチングで総当たり攻撃を遅くします。
解き方
- ハッシュ関数の基本的特性(固定長出力、同一入力での同一出力、不可逆性)と代表例(SHA-256)を確認する。
- 事前計算による辞書攻撃の原理と、ランダムなソルト付加によって事前計算表の作成コストを膨大にさせる仕組みを理解する。
- ストレッチングによる反復計算が1試行あたりの計算時間を増加させ、オフライン総当たり攻撃を遅延させる効果を導く。
小問ごとの答え
- 小問 設問1 a:エ
- 選択肢の中で暗号学的ハッシュ関数に該当するのはSHA-256(エ)である。アのAESは共通鍵暗号、イのDiffie-Hellmanは鍵交換プロトコル、ウのRSAは公開鍵暗号、オのTLSはトランスポート層の暗号化通信プロトコルである。
- 小問 設問1 b:イ
- ハッシュ関数は同一の入力値に対して常に同一のハッシュ値を出力する決定論的特性をもつため、パスワードの一致確認に利用できる。アは衝突困難性に反し、ウのように再度ハッシュ化しても元には戻らず、エの秘密鍵による復号も不可逆性のため不可能である。
- 小問 設問2 c:イ
- ハッシュ関数は入力が1文字でも異なれば出力が大きく異なる雪崩効果をもつため、ソルトを連結した文字列のハッシュ値はパスワード単体のハッシュ値とは異なる値になる。また出力長は固定長であるため長さは変化しない。
- 小問 設問2 d:エ
- ソルトが付与されると、攻撃者はパスワード候補ごとに生成された多種類のソルトとの組み合わせを計算しなければならず、一つのパスワード候補に対して事前に求めるべきハッシュ値の数が膨大になるため、事前計算表による辞書攻撃を無効化できる。
- 小問 設問3:エ
- ストレッチングはハッシュ計算を多数回繰り返す手法であるため、攻撃者がパスワード候補を検証する際にも同様に多数回の計算が必要となり、一つのパスワード候補からハッシュ値を求める計算時間が増加する。これによりオフライン総当たり攻撃の成立を困難にする。
覚えるポイント
- ハッシュ関数は不可逆・固定長出力であり、同一入力なら常に同一ハッシュ値を出力する。
- ソルトは事前計算辞書攻撃(レインボーテーブル)対策、ストレッチングは総当たり攻撃対策である。
間違えやすいところ
- ソルトを連結してもハッシュ関数の出力長は固定長であり、ハッシュ値の長さ自体は伸びない点に注意する。
- ストレッチングを行っても最終的に保存・照合するハッシュ値は1つであり、ハッシュ値の比較回数が増えるわけではない点を見落とさないこと。
出題の前提:平成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) / 公式問題冊子 p.10 ↗(www.ipa.go.jp)
論理回路と基本論理演算の実現
ハードウェア · 論理演算 / 真理値表 / 排他的論理和 (XOR) / 半加算器 / しきい値論理
論理演算を行う基本回路を用いたXORや半加算器の構成、および重みとしきい値を用いた論理回路の実現に関する記述を読み、設問1〜3に答えよ。
解答・解説を表示
解答
設問1 a: エ, 設問2 b: オ, 設問2 c: ア, 設問3 d: オ, 設問3 e: ア
解説
まず要点:論理演算の基本回路(AND、OR、NOT、NAND、NOR、XOR)の動きは真理値表(すべての入力の組合わせと出力を並べた表)で決まります。XORは「(X OR Y) AND (X NAND Y)」のように基本回路を組み合わせて作れます。2進数の1桁の足し算をする半加算器は、和をXOR、桁上がりをANDで作ります。また、入力に重みを掛けた和としきい値を比べる1つの式でも、いろいろな論理演算を表せます。
解き方
- XORの真理値表と、NANDおよびANDが接続された回路構成から、未定のゲートaの入出力関係を割り出す。
- 1桁の2進数加算を行い、和の下位桁Z(XOR)と桁上がりC(AND)の真理値を導出して半加算器の各ゲートb, cを特定する。
- しきい値不等式 Wx*X + Wy*Y >= T に4通りの入力(0,0),(0,1),(1,0),(1,1)を適用し、ANDおよびNANDの出力を正しく満たすパラメータ組を選定する。
小問ごとの答え
- 小問 設問1 a:エ
- XORの出力は入力(0,0)->0, (0,1)->1, (1,0)->1, (1,1)->0である。回路出力はNAND(X,Y) AND a(X,Y)であり、NANDの出力は順に1, 1, 1, 0である。ANDした結果がXORに一致するためにはa(X,Y)の出力が0, 1, 1, 1でなければならず、これはOR(エ)である。
- 小問 設問2 b:オ
- 半加算器の和Zは2進数1桁の加算結果の下位桁であり、(0,0)->0, (0,1)->1, (1,0)->1, (1,1)->0となるため、入力XとYの排他的論理和XOR(オ)が対応する。
- 小問 設問2 c:ア
- 半加算器の桁上がりCは、XとYがともに1のときのみ1を出力し他は0となるため、入力XとYの論理積AND(ア)が対応する。
- 小問 設問3 d:オ
- AND回路の真理値(0,0)->0, (0,1)->0, (1,0)->0, (1,1)->1を実現するパラメータを検証すると、オの[0.5, 0.5, 0.8]において、(0,0)は0<0.8で0、(0,1)と(1,0)は0.5<0.8で0、(1,1)は1.0>=0.8で1となり要件を満たす。
- 小問 設問3 e:ア
- NAND回路の真理値(0,0)->1, (0,1)->1, (1,0)->1, (1,1)->0を実現するパラメータを検証すると、アの[-0.5, -0.5, -0.8]において、(0,0)は0>=-0.8で1、(0,1)と(1,0)は-0.5>=-0.8で1、(1,1)は-1.0<-0.8で0となり要件を満たす。
覚えるポイント
- 半加算器の構成:和ZはXOR回路、桁上がりCはAND回路。
- XORはORとNANDのAND(論理積)によって構成できる。
間違えやすいところ
- 半加算器の和Zと桁上がりCのゲートの割り当てを取り違えるミス。
- しきい値演算において負の数の比較不等号の向き(例: -1.0 < -0.8)の判定を誤るミス。
出題の前提:平成30年度春期 基本情報技術者試験 午後 問2
出典:IPA『2018年度 春期 午後』
公式問題冊子 p.11 ↗(www.ipa.go.jp) / 公式問題冊子 p.12 ↗(www.ipa.go.jp) / 公式問題冊子 p.13 ↗(www.ipa.go.jp)
小学生を対象とした子供会名簿の関係データベース
データベース · SQL / 外部結合・内部結合 / 集計関数 / 副問合せ / DELETE文
小学生を対象とした子供会の会員名簿および活動実績を管理する関係データベース(保護者表、児童表、活動表、イベント表)に関するSQL文およびデータ更新処理について、設問1〜4の空欄に入る適切な答えを選択せよ。
- 設問1 ア
- SELECT DISTINCT 保護者表.保護者氏名, 保護者表.住所 FROM 保護者表 WHERE 保護者表.保護者番号 NOT IN (SELECT 児童表.保護者番号 FROM 児童表 WHERE 児童表.学年 = 6)
- 設問1 イ
- SELECT DISTINCT 保護者表.保護者氏名, 保護者表.住所 FROM 保護者表, 児童表 WHERE 児童表.学年 = 6 GROUP BY 保護者表.保護者氏名, 保護者表.住所
- 設問1 ウ
- SELECT DISTINCT 保護者表.保護者氏名, 保護者表.住所 FROM 保護者表, 児童表 WHERE 保護者表.保護者番号 = 児童表.保護者番号 AND 児童表.学年 = 6
- 設問1 エ
- SELECT 保護者表.保護者氏名, 保護者表.住所 FROM 保護者表, 児童表 WHERE 保護者表.保護者番号 = 児童表.保護者番号 GROUP BY 保護者表.保護者氏名, 保護者表.住所 HAVING 児童表.学年 = 6
- 設問2 a ア
- FROM 児童表, 保護者表, イベント表 WHERE 児童表.学年 = 1 AND イベント表.イベント番号 = 18001
- 設問2 a イ
- FROM 児童表, 保護者表, イベント表 WHERE 児童表.保護者番号 = 保護者表.保護者番号 AND 児童表.学年 = 1 AND イベント表.イベント番号 = 18001
- 設問2 a ウ
- FROM 児童表, 活動表, 保護者表 WHERE 児童表.児童番号 = 活動表.児童番号 AND 児童表.保護者番号 = 保護者表.保護者番号 AND 活動表.イベント番号 = 18001 GROUP BY 児童表.児童氏名 HAVING 児童表.学年 = 1
- 設問2 a エ
- FROM 児童表, 活動表, 保護者表 WHERE 児童表.児童番号 = 活動表.児童番号 AND 児童表.保護者番号 = 保護者表.保護者番号 AND 児童表.学年 = 1 AND 活動表.イベント番号 = 18001
- 設問3 b ア
- AVG(活動表.イベント番号)
- 設問3 b イ
- COUNT(*)
- 設問3 b ウ
- MAX(活動表.イベント番号)
- 設問3 b エ
- SUM(活動表.イベント番号)
- 設問4 c ア
- 保護者表.保護者番号 = NULL
- 設問4 c イ
- 保護者表.保護者番号 IN (SELECT 児童表.保護者番号 FROM 児童表 WHERE 児童表.学年 = 7)
- 設問4 c ウ
- 保護者表.保護者番号 IN (SELECT 児童表.保護者番号 FROM 児童表)
- 設問4 c エ
- 保護者表.保護者番号 NOT IN (SELECT 児童表.保護者番号 FROM 児童表)
解答・解説を表示
解答
設問1: ウ, 設問2 a: エ, 設問3 b: イ, 設問4 c: エ
解説
まず要点:関係データベース(表を組み合わせて扱うデータベース)では、共通のキーで表を結び付けたり、副問合せ(別のSELECT文を条件に使うこと)を使ったりしてデータを操作します。こうすることで、複数の表の内容が食い違わないようにしながら、条件に合う行の抽出・更新・削除ができます。
解き方
- 設問1では、保護者表と児童表の結合キー(保護者番号)と抽出条件(学年=6)を満たすSQL文を選定します。
- 設問2では、イベント参加履歴を持つ活動表を結合に加え、学年=1とイベント番号=18001を絞り込む条件式を判定します。
- 設問3では、イベントごとに集約した行数を数えるためCOUNT関数を適用します。
- 設問4では、手順(5)で卒業生が削除された状態を踏まえ、児童表に関連レコードが残っていない保護者を副問合せとNOT IN述語で指定します。
小問ごとの答え
- 小問 設問1:ウ
- 6年生の保護者の氏名と住所を取得するためには、保護者表と児童表を「保護者番号」で等価結合し、条件として「児童表.学年 = 6」を指定します。兄弟姉妹がともに6年生にいる場合などに重複しないよう「DISTINCT」を指定した「ウ」が正解です。
- 小問 設問2 a:エ
- イベント参加実績は活動表に保持されているため、「児童表」「活動表」「保護者表」の3表が必要です。児童表と活動表を児童番号で、児童表と保護者表を保護者番号で結合し、学年が1かつイベント番号が18001である条件をWHERE句に指定する「エ」が適切です。
- 小問 設問3 b:イ
- 各イベントに参加した児童の総数を集計するためには、GROUP BY句でグループ化した単位のレコード数を数える集計関数「COUNT(*)」を指定します。
- 小問 設問4 c:エ
- 手順(5)で学年7となった卒業生が児童表から既に削除されています。在籍する児童がいなくなった保護者を保護者表から削除するには、児童表に保護者番号が1件も存在しないレコードを対象とするため、「保護者表.保護者番号 NOT IN (SELECT 児童表.保護者番号 FROM 児童表)」とします。
覚えるポイント
- SQLで存在しないレコードを特定する際は NOT IN (SELECT ...) や NOT EXISTS を使用する。
- 行数を数えるときは COUNT(*) を用い、重複排除には SELECT DISTINCT を指定する。
間違えやすいところ
- 手順(5)で既に学年7のレコードが削除された後の状態であることを考慮せず、学年=7を条件に検索しようとすること。
- WHERE句とHAVING句の役割を混同し、集約前の個別列条件をHAVINGに記述してしまうこと。
出題の前提:基本情報技術者試験 午後 データベース分野 出題基準
出典:IPA『2018年度 春期 午後』
公式問題冊子 p.14 ↗(www.ipa.go.jp) / 公式問題冊子 p.15 ↗(www.ipa.go.jp) / 公式問題冊子 p.16 ↗(www.ipa.go.jp) / 公式問題冊子 p.17 ↗(www.ipa.go.jp)
クラウドサービス上でのシステム構築
ネットワーク · クラウドアーキテクチャ / 負荷分散 / サイジング計算 / セキュリティグループ / レプリケーション
クラウドサービス上に写真投稿サービスおよび写真検索サービスを構築する設計事例に基づき、設問1(空欄 a〜c)および設問2の利点として適切な選択肢を選べ。
- 設問1 a ア
- A
- 設問1 a イ
- B
- 設問1 a ウ
- C
- 設問1 a エ
- D
- 設問1 b ア
- 4
- 設問1 b イ
- 7
- 設問1 b ウ
- 28
- 設問1 b エ
- 56
- 設問1 c ア
- グループ1,2,5及び6
- 設問1 c イ
- グループ2,5及び6
- 設問1 c ウ
- グループ2及び6
- 設問1 c エ
- グループ5及び6
- 設問2 ア
- クライアントからの写真へのアクセスが増加しても,ストレージサーバの負荷は高まらない。
- 設問2 イ
- クライアントと写真へのアクセスに応答するサーバとの間に介在するサーバ類の台数が少ないので,ネットワーク遅延が小さい。
- 設問2 ウ
- ストレージサーバに障害が発生しても,写真検索サービスの提供を継続できる。
- 設問2 エ
- ストレージサーバに障害が発生しても,写真投稿サービスの提供を継続できる。
- 設問2 オ
- 全てのフロントサーバに障害が発生しても,写真検索サービスの提供を継続できる。
解答・解説を表示
解答
設問1 a: イ, 設問1 b: イ, 設問1 c: ウ, 設問2: ア, ウ
解説
まず要点:クラウドの資源を選ぶときは、処理が追いつかなくなる部分(ボトルネック)に注目し、その能力あたりの値段(コスト効率)で比べます。また、アクセスを段階的に制限する設定と、データを複製して予備を用意する冗長構成を組み合わせて、システムが止まりにくくなるようにします。
解き方
- 設問1 a: 各タイプについて使用率上限50%での秒あたり処理可能要求数を計算し、コストに対する処理能力(単位要求あたりのコスト)を比較します。
- 設問1 b: 1時間の総計算処理量を算出し、1台あたりの最大処理可能量(使用率50%)で除算して切り上げます。
- 設問1 c: 各グループが外部または他グループから受ける通信要件(接続元グループとポート番号)を比較し、同一の通信設定となるグループを特定します。
- 設問2: ストレージサーバとレプリケーションサーバの役割分担から、負荷分散と障害耐性のメリットを導き出します。
小問ごとの答え
- 小問 設問1 a:イ
- 使用率50%制限下で各タイプが処理できる要求数/秒は、計算処理能力上限とネットワーク能力上限の小さい方で決まります。タイプA: min(0.5/0.1, 0.5/0.07)=5要求/秒(10円、1要求あたり2.00円/時)、タイプB: min(1.0/0.1, 0.75/0.07)=10要求/秒(18円、1要求あたり1.80円/時)、タイプC: min(2.0/0.1, 1.0/0.07)=14.28要求/秒(34円、1要求あたり2.38円/時)、タイプD: 14.28要求/秒(60円、1要求あたり4.20円/時)となり、最もコストが低いのはタイプBです。
- 小問 設問1 b:イ
- 1時間あたりの必要総計算処理量は 4,000枚 × 25秒 = 100,000秒です。タイプD仮想マシン1台が使用率50%以下で1時間に処理できる量は 8 × 0.5 × 3,600秒 = 14,400秒です。必要な台数は 100,000 ÷ 14,400 ≒ 6.94台となり、整数に切り上げて最低7台必要です。
- 小問 設問1 c:ウ
- グループ2(フロントサーバ)とグループ6(レプリケーションサーバ)は、ともにグループ1(負荷分散装置)からプロトコルHTTP(ポート80)のアクセスのみを受け付けるため、許可するアクセス内容が完全に一致します。
- 小問 設問2:ア, ウ
- クライアントからの写真取得要求をレプリケーションサーバが処理するため、写真アクセスの増加に伴うストレージサーバの負荷上昇を防げます(ア)。また、ストレージサーバ障害時でも既に複製済みの写真に対する検索・参照サービスは影響を受けず継続可能です(ウ)。
覚えるポイント
- サイジング計算では、複数のリソース項目のうち最小の能力が全体のボトルネックになる。
- セキュリティグループのインバウンド設定は「どの送信元からどのポートへのアクセスを許可するか」で定義する。
間違えやすいところ
- サーバ能力の比較時に、ネットワーク処理能力のボトルネックを見落として計算処理能力だけでコスト比較してしまうこと。
- 稼働率(平均使用率50%以下)の制約を計算に入れ忘れて必要台数を半分と見積もってしまうこと。
出題の前提:基本情報技術者試験 午後 ネットワーク/システム構成分野 出題基準
出典:IPA『2018年度 春期 午後』
公式問題冊子 p.18 ↗(www.ipa.go.jp) / 公式問題冊子 p.19 ↗(www.ipa.go.jp) / 公式問題冊子 p.20 ↗(www.ipa.go.jp) / 公式問題冊子 p.21 ↗(www.ipa.go.jp) / 公式問題冊子 p.22 ↗(www.ipa.go.jp)
健康管理システムの設計とファイル突合せ処理
ソフトウェア設計 · 健康管理システム / マスタファイル参照 / ファイル突合せ / データ整列
健康管理システムの設計に関する次の記述を読んで、設問1・2に答えよ。 K社では、全従業員に年1回誕生月に定期健康診断を受診させ、再検査が必要な場合は再度受診させる。 設問1:健康診断内容決定機能において、定期健康診断対象者抽出機能で従業員マスタから抽出された情報に加え、健康診断コース及び健康診断実施場所を決定するために最低限必要となる情報 [ a ] と、再検査対象者抽出機能で抽出された情報に加え、再検査の実施場所を決定するために最低限必要となる情報 [ b ] を選べ。 設問2:当年の健康診断の未受診者を抽出するため、図4の処理で当年健康診断ファイルを整列するキー [ c ]、抽出2処理で連続した場合に最初の1件を出力するキー [ d ]、および突合せ処理で未受診者として判定する条件 [ e ] を選べ。
- 設問1 a・b: ア
- 従業員マスタ
- 設問1 a・b: イ
- 従業員マスタ及び職位マスタ
- 設問1 a・b: ウ
- 従業員マスタ及び在勤地マスタ
- 設問1 a・b: エ
- 従業員マスタ、職位マスタ及び在勤地マスタ
- 設問1 a・b: オ
- 職位マスタ
- 設問1 a・b: カ
- 職位マスタ及び所属マスタ
- 設問1 a・b: キ
- 職位マスタ及び在勤地マスタ
- 設問1 a・b: ク
- 所属マスタ
- 設問1 a・b: ケ
- 所属マスタ及び在勤地マスタ
- 設問1 a・b: コ
- 在勤地マスタ
- 設問2 c: ア
- 従業員コードの昇順
- 設問2 c: イ
- 従業員コードの昇順,実施年月の昇順
- 設問2 c: ウ
- 従業員コードの昇順,実施年月の降順
- 設問2 c: エ
- 従業員コードの降順
- 設問2 c: オ
- 従業員コードの降順,実施年月の昇順
- 設問2 c: カ
- 従業員コードの降順,実施年月の降順
- 設問2 d: ア
- 同じ従業員コード
- 設問2 d: イ
- 同じ従業員コード及び区分
- 設問2 d: ウ
- 同じ健康診断コース
- 設問2 d: エ
- 同じ健康診断コース及び区分
- 設問2 e: ア
- 判定結果が空白
- 設問2 e: イ
- 再検査要否が“要”
- 設問2 e: ウ
- 再検査要否が“否”
- 設問2 e: エ
- 判定結果が空白,又は再検査要否が“要”
- 設問2 e: オ
- 判定結果が空白,又は再検査要否が“否”
解答・解説を表示
解答
設問1 a: キ, 設問1 b: ウ, 設問2 c: ウ, 設問2 d: ア, 設問2 e: エ
解説
まず要点:業務の処理を設計するときは、処理で決める項目と、すでにあるデータの項目を比べ、足りない情報を持つ外部のマスタ(基本情報をまとめた表)を漏れなく見つけます。また、日々更新される履歴データから最新の状態を判断する突合せ処理では、識別キーの昇順(小さい順)、日付の降順(新しい順)に並べ、先頭の1件を取り出すのが基本です。
解き方
- 業務要件から各機能で決定すべき項目(コース、場所など)と、既存の入力データに含まれる項目を洗い出す。
- 決定に必要な追加情報を保持しているマスタ(職位マスタ、在勤地マスタなど)を特定する。
- 未受診者の条件に基づき、健康診断ファイルを従業員コード昇順・実施年月降順で整列し、最新レコードを抽出する処理を構成する。
- 抽出された最新レコードの判定結果や再検査要否を評価し、従業員マスタとの突合せ条件を設定する。
小問ごとの答え
- 小問 設問1 a:キ
- 定期健康診断のコース決定には従業員の年齢・性別・管理職フラグが必要であり、実施場所決定には現在の健康診断実施場所が必要である。従業員マスタの情報に加え、管理職フラグを得るための職位マスタと、実施場所を得るための在勤地マスタが最低限必要となる。
- 小問 設問1 b:ウ
- 再検査のコースは前月と同じであるが、実施場所は転勤を考慮して現在の在勤地に基づき決定する。健康診断ファイルの情報から現在の在勤地コードを得るための従業員マスタと、実施場所を得るための在勤地マスタが必要となる。
- 小問 設問2 c:ウ
- 突合せの前処理として、従業員ごとに最新の健診結果を先頭にする必要がある。従業員マスタの昇順に合わせて従業員コードを昇順とし、同一年内で定期の後に実施される再検査(新しい月)を先頭にするため実施年月を降順で整列する。
- 小問 設問2 d:ア
- 各従業員の最新レコード1件だけをファイルYに残すため、同じ従業員コードが連続した場合は最初に出現した最新レコードのみを出力する。
- 小問 設問2 e:エ
- 未受診者の条件(2)「定期健診の判定結果が未登録」、条件(3)「再検査要と判定されたが再検査レコードがない(最新レコードの再検査要否が要のまま)、又は再検査の判定結果が未登録」を満たすのは、最新レコードの判定結果が空白、又は再検査要否が“要”の場合である。
覚えるポイント
- マスタ参照設計では既存項目の特定と不足項目の整理が必須
- 最新状態の集約には識別コード昇順・年月降順整列と先頭レコード抽出が有効
間違えやすいところ
- 再検査の実施場所決定において健康診断ファイルだけで特定できると誤認する
- 実施年月を昇順で整列してしまい最新ではなく過去のレコードを抽出してしまう
出題の前提:平成30年度春期 基本情報技術者試験 午後 問5
出典:IPA『2018年度 春期 午後』
公式問題冊子 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)
EVM手法を用いたプロジェクト管理
プロジェクトマネジメント · EVM / 進捗管理 / コスト管理 / SPI / CPI / 完了時総工数予測
EVM手法を用いたプロジェクト管理に関する次の記述を読んで、設問1〜3に答えよ。 S社から受注した新営業システム刷新規プロジェクトにおいて、N社のY君はEVM手法を用いて管理を行う。 設問1:サブシステムS1の内部設計工程の計画工数 [ a ](人月)を求めよ。 設問2:外部設計開始後1.75か月経過時点の表5のEVM指標値から予測した外部設計終了時点の見通しとして適切な組合せを選べ。 設問3:結合テスト開始後1か月経過時点のグラフ(図2)から読み取れる進捗・コスト状況 [ b ]、グラフ上の差異 [ c ](α)および [ d ](β)、ならびに完了時総工数予測式 [ e ](e1〜e3)の組合せを選べ。
- 設問1 a: ア
- 25.75
- 設問1 a: イ
- 30.00
- 設問1 a: ウ
- 31.25
- 設問1 a: エ
- 37.50
- 設問2: ア
- (1)と(4)
- 設問2: イ
- (1)と(5)
- 設問2: ウ
- (2)と(3)
- 設問2: エ
- (2)と(4)
- 設問2: オ
- (3)と(5)
- 設問2: カ
- (3)と(6)
- 設問2: キ
- (4)と(5)
- 設問2: ク
- (4)と(6)
- 設問3 b: ア
- 進捗状況とコスト状況のどちらも悪化傾向
- 設問3 b: イ
- 進捗状況とコスト状況のどちらも改善傾向
- 設問3 b: ウ
- 進捗状況は改善傾向,コスト状況は悪化傾向
- 設問3 b: エ
- 進捗状況は悪化傾向,コスト状況は改善傾向
- 設問3 c・d: ア
- BAC(完了までの総予算)
- 設問3 c・d: イ
- PV(出来高計画値)
- 設問3 c・d: ウ
- EV(出来高実績値)
- 設問3 c・d: エ
- AC(コスト実績値)
- 設問3 c・d: オ
- SV(スケジュール差異)
- 設問3 c・d: カ
- CV(コスト差異)
- 設問3 e: ア
- e1=BAC, e2=AC, e3=EV
- 設問3 e: イ
- e1=BAC, e2=EV, e3=AC
- 設問3 e: ウ
- e1=BAC, e2=PV, e3=EV
- 設問3 e: エ
- e1=PV, e2=AC, e3=EV
- 設問3 e: オ
- e1=PV, e2=BAC, e3=EV
- 設問3 e: カ
- e1=PV, e2=EV, e3=AC
解答・解説を表示
解答
設問1 a: ウ, 設問2: ク, 設問3 b: ア, 設問3 c: カ, 設問3 d: オ, 設問3 e: イ
解説
まず要点:EVM(出来高で進み具合と費用を管理する手法)は、計画の値PV、できた量の値EV、実際にかかった費用ACを使って進捗とコストを数値で管理します。これらの値から効率指数(SPI=EV/PV、CPI=EV/AC)や差(SV=EV-PV、CV=EV-AC)を求め、最後までに必要な工数を予測します。
解き方
- 開発規模(KLOC)と工程別生産性(KLOC/人月)から各工程の計画工数(PV)を計算する。
- 評価時点のPV、EV、ACからSPIとCPIを算出し、終了時点での遅延やコスト超過を判定する。
- グラフからEVとPVの差(SV)およびEVとACの差(CV)を正しく読み取る。
- 完了時総予算BACから出来高EVを差し引いて残作業工数を求め、実績工数ACを加算して総工数を予測する。
小問ごとの答え
- 小問 設問1 a:ウ
- サブシステムS1の開発規模は200.00 KLOCであり、内部設計の生産性は6.40 KLOC/人月である。計画工数は 200.00 ÷ 6.40 = 31.25 人月となる。
- 小問 設問2:ク
- S2はSPI=26.25/26.25=1.0(遅延なし)、CPI=26.25/26.55<1(コスト超過)であり(4)が適切。共通機能はSPI=8.75/8.75=1.0(遅延なし)、CPI=8.75/8.10>1(コスト超過なし)であり(6)が適切である。S1はSPI<1、CPI<1で遅延かつコスト超過となるため(1)(2)は不適切。
- 小問 設問3 b:ア
- 結合テスト開始1か月経過時点(11か月)において、EVがPVを下回っているため進捗は遅延(悪化傾向)、ACがEVを上回っているためコストも超過(悪化傾向)である。
- 小問 設問3 c:カ
- 図2のグラフにおいて、αはACとEVの乖離幅を示しており、コスト差異(CV)を表している。
- 小問 設問3 d:オ
- 図2のグラフにおいて、βはPVとEVの乖離幅を示しており、スケジュール差異(SV)を表している。
- 小問 設問3 e:イ
- 計画見積りに基づく残作業工数は、完了までの予定総予算BACから完了作業の予定工数EVを引いた「BAC - EV」で求められる。これに実績コストACを加算することで、完了時総工数予測値EAC(= BAC - EV + AC)となる。
覚えるポイント
- 計画工数PVは規模÷生産性で算出する
- EAC予測式 EAC = AC + (BAC - EV) の構造を覚える
間違えやすいところ
- 残作業工数の計算で総予算BACではなく評価時点のPVから引いてしまう
- S1のSPI<1にもかかわらず遅延なしの選択肢を選んでしまう
出題の前提:平成30年度春期 基本情報技術者試験 午後 問6
出典:IPA『2018年度 春期 午後』
公式問題冊子 p.29 ↗(www.ipa.go.jp) / 公式問題冊子 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)
部品メーカにおける収益分析と損益分岐点
経営戦略・企業と法務 · 損益分岐点分析 / 変動費率 / 固定費 / CVP分析
小規模な部品メーカであるR社は、部品Tを生産して大手機械メーカに販売している。販売数1,000千個のケースXと1,200千個のケースYの収益検討表(売上高に対する変動費率は等しく固定費は同額)を基に、変動費率、固定費、損益分岐点売上高、許容される値下げ率、他社との費用構造比較、および損益分岐点売上高を下げるための施策に関する問いに答えよ。
解答・解説を表示
解答
設問1 a: エ, 設問1 b: イ, 設問1 c: エ, 設問1 d: イ, 設問1 e: イ, 設問2: イ, 設問3 f: イ, 設問3 g: ア
解説
まず要点:CVP分析(費用・販売量・利益の関係を調べる分析)では、費用を、売上に比例して増える変動費と、売上に関係なく一定でかかる固定費に分けます。限界利益=売上高-変動費=売上高×(1-変動費率)で、損益分岐点売上高(利益が0になる売上高)は固定費÷(1-変動費率)で求められます。
解き方
- 販売数量の異なる2つのケースの差分から限界利益率を求め、1から引くことで変動費率を算出する。
- 求めた変動費率から固定費および損益分岐点売上高を算出し、利益を維持できる単価の値下げ限界を求める。
- 売上高と費用の関係グラフにおける傾きが変動費率に対応することを把握し、変動費削減施策を導く。
小問ごとの答え
- 小問 設問1 a:エ
- 売上高の増加分40,000千円に対して利益が10,000千円増加しているため、限界利益率は10,000÷40,000=0.25(25%)です。したがって変動費率は1-0.25=0.75(75%)となります。
- 小問 設問1 b:イ
- ケースXにおいて、限界利益は200,000千円×(1-0.75)=50,000千円です。利益が16,000千円であるため、固定費は50,000-16,000=34,000千円となります。
- 小問 設問1 c:エ
- 損益分岐点売上高は、固定費÷(1-変動費率)=34,000千円÷0.25=136,000千円となります。
- 小問 設問1 d:イ
- ケースXで利益が0以上を保つには、売上高の減少額を現在の利益16,000千円以内に抑える必要があります。販売数を変えずに単価だけを下げるため、許容される値下げ率は16,000÷200,000=0.08(8%)です。
- 小問 設問1 e:イ
- ケースYにおける許容値下げ率は、利益26,000千円÷売上高240,000千円≒10.83%となり、ケースXの8%よりも大きくなります。
- 小問 設問2:イ
- 費用=変動費率×売上高+固定費のグラフにおいて、直線の傾きは変動費率を表します。変動費率が最も高い会社は、直線の傾きが最も急である②です。
- 小問 設問3 f:イ
- 損益分岐点売上高=固定費÷(1-変動費率)であるため、固定費が一定のまま変動費率が下がると分母が大きくなり、損益分岐点売上高は下がります。
- 小問 設問3 g:ア
- 原材料費は変動費の代表例であり、原材料の単価を下げることは製品1個当たりの変動費を減らし、変動費率を下げる有効な施策となります。
覚えるポイント
- 損益分岐点売上高 = 固定費 ÷ (1 - 変動費率)
- 費用直線において傾きは変動費率、切片は固定費を表す
間違えやすいところ
- 限界利益率(1-変動費率)と変動費率を取り違えて計算してしまうミス
- 単価値下げによる影響を計算する際に変動費まで一緒に下げてしまう誤認
出題の前提:平成30年度春期 基本情報技術者試験 午後問7
出典:IPA『2018年度 春期 午後』
公式問題冊子 p.35 ↗(www.ipa.go.jp) / 公式問題冊子 p.36 ↗(www.ipa.go.jp) / 公式問題冊子 p.37 ↗(www.ipa.go.jp)
ヒープの性質を利用したデータの整列(ヒープソート)
データ構造及びアルゴリズム · ヒープ / 二分木 / ヒープソート / 優先度付きキュー
二分木において親の値が子の値以上である性質をもつヒープを配列で表現し、データを昇順に整列するアルゴリズムについて、配列へのヒープ構築(makeHeap)およびヒープ再構成(downHeap)を用いた整列処理(heapSort)の各設問に答えよ。
解答・解説を表示
解答
設問1 a: イ, 設問1 b: エ, 設問2 c: エ, 設問2 d: イ, 設問2 e: イ
解説
まず要点:ヒープは「親の値が子の値以上」という決まりを満たす完全二分木(上から順に隙間なく埋めた二分木)です。配列で表すと、要素番号iの左の子は2i+1、右の子は2i+2、親は(i-1)÷2(端数切り捨て)になります。ヒープソートは、根にある最大値を末尾と交換し、残った部分をヒープに直す操作を繰り返して並べ替えます。
解き方
- ヒープ構築処理makeHeapにおいて、末尾に追加した要素を親と比較しながら上方に手繰り上げる(upHeap)条件を確認する。
- heapSortにおいて、根と末尾要素を交換した後の配列先頭の値の変化を追跡する。
- downHeapにおいて、左右の子のうち大きい方を選択し、親と比較して必要なら入れ替えて下方に辿る処理の変数値の変化をトレースする。
小問ごとの答え
- 小問 設問1 a:イ
- ヒープの性質を満たすため、新しく追加した要素heap[k]がその親heap[parent(k)]よりも大きい場合に親と値を交換します。したがって条件式は heap[k] > heap[parent(k)] です。
- 小問 設問1 b:エ
- 要素heap[k]と交換する対象は親要素なので、副プログラムswapの引数にはparent(k)を指定します。
- 小問 設問2 c:エ
- heapSortの1回目のループでは、最大値である根heap[0](値60)と整列対象領域の末尾要素heap[last](last=6、値20)を交換するため、交換直後のheap[0]の値は20となります。
- 小問 設問2 d:イ
- downHeapの行番号7にある比較条件「heap[tmp] ≦ heap[rchild(n)]」より、右の子の値が左の子の値(heap[tmp])以上であるときに、比較・交換対象ノードtmpを右の子に更新します。
- 小問 設問2 e:イ
- 根n=0のとき、左の子は1(値30)、右の子は2(値45)です。右の子の方が大きいためtmpは2となり、親(値20)と交換された後、行15でnに代入される最初のtmpの値は2となります。
覚えるポイント
- 配列表現ヒープにおける親子関係の添字計算式:左の子は2i+1、右の子は2i+2、親は(i-1)/2
- ヒープソートで昇順に整列する際は最大ヒープを用い、根の最大値を末尾へ移動させて確定させる
間違えやすいところ
- 左の子と右の子を比較する際にどちらを優先して親と比較すべきかの順序の取り違え
- 整数除算における端数切捨ての扱いと添字が0始まりであることの計算ミス
出題の前提:平成30年度春期 基本情報技術者試験 午後問8
出典:IPA『2018年度 春期 午後』
公式問題冊子 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言語 / ファイル入出力 / コントロールブレーク / 整数オーバーフロー / ゼロ除算 / 配列境界外参照
キー項目で昇順に整列された入力ファイルからレコードを読み込み、キー値ごとに件数と金額合計を集計して出力するプログラム1、およびその集計結果から最大値に基づきアスタリスクによる棒グラフを印字するプログラム2に関する問題です。空欄a〜cにはプログラム1を完成させる適切なコードを、空欄d〜fにはプログラム2の実行時に発生し得る障害(算術演算あふれ、ゼロ除算、配列定義外参照)を引き起こすvalueとvalueMaxの組み合わせを選択してください。
- 設問1 a-ア
- char
- 設問1 a-イ
- FILE
- 設問1 a-ウ
- file
- 設問1 a-エ
- int
- 設問1 b-ア
- fprintf(outFile, format, inKey, count, inValue);
- 設問1 b-イ
- fprintf(outFile, format, key, count, value);
- 設問1 b-ウ
- count++; value += inValue;
- 設問1 b-エ
- count++; value += inValue; fprintf(outFile, format, key, count, value);
- 設問1 b-オ
- count--; fprintf(outFile, format, inKey, count, inValue);
- 設問1 c-ア
- fprintf(outFile, format, inKey, count, inValue);
- 設問1 c-イ
- fprintf(outFile, format, key, count, value);
- 設問1 c-ウ
- count++; value += inValue;
- 設問1 c-エ
- count++; value += inValue; fprintf(outFile, format, key, count, value);
- 設問1 c-オ
- count--; fprintf(outFile, format, inKey, count, inValue);
- 設問2 d-ア
- value: -1,000,000 / valueMax: 0
- 設問2 d-イ
- value: -10,000,000 / valueMax: 10,000,000
- 設問2 d-ウ
- value: 0 / valueMax: 10,000,000
- 設問2 d-エ
- value: 100 / valueMax: 10,000,000
- 設問2 d-オ
- value: 10,000,000 / valueMax: 10,000,000
- 設問2 d-カ
- value: 100,000,000 / valueMax: 100,000,000
- 設問2 e-ア
- value: -1,000,000 / valueMax: 0
- 設問2 e-イ
- value: -10,000,000 / valueMax: 10,000,000
- 設問2 e-ウ
- value: 0 / valueMax: 10,000,000
- 設問2 e-エ
- value: 100 / valueMax: 10,000,000
- 設問2 e-オ
- value: 10,000,000 / valueMax: 10,000,000
- 設問2 e-カ
- value: 100,000,000 / valueMax: 100,000,000
- 設問2 f-ア
- value: -1,000,000 / valueMax: 0
- 設問2 f-イ
- value: -10,000,000 / valueMax: 10,000,000
- 設問2 f-ウ
- value: 0 / valueMax: 10,000,000
- 設問2 f-エ
- value: 100 / valueMax: 10,000,000
- 設問2 f-オ
- value: 10,000,000 / valueMax: 10,000,000
- 設問2 f-カ
- value: 100,000,000 / valueMax: 100,000,000
解答・解説を表示
解答
設問1 a: イ, 設問1 b: ウ, 設問1 c: イ, 設問2 d: カ, 設問2 e: ア, 設問2 f: イ
解説
まず要点:集計では、キーが変わったときに前のグループの結果を出力し、同じキーの間はたし込み続けます。整列済みデータを先頭から見て、キーの区切りごとに件数と金額をまとめる仕組みです。最後のグループはループの外で出力しないと抜けてしまいます。さらに、かけ算のあふれ・ゼロでのわり算・配列の添字の外れにも注意が必要です。
解き方
- プログラム1を見て、inFile/outFileの型、キーが同じときの集計、ループ後の最終出力の3か所を確かめます。
- プログラム2の式『25 - 25 * value / valueMax』に注目し、かけ算の部分がlongの上限2,147,483,647をこえる条件を計算します。
- わり算の除数が0になる組と、配列graphの範囲(0〜25)から外れる負のvalueで添字がはみ出す組を探します。
小問ごとの答え
- 小問 設問1 a:イ
- inFileおよびoutFileはファイルポインタであり、標準ライブラリstdio.hで定義されているファイル型マクロ型名「FILE」を指定して宣言します。
- 小問 設問1 b:ウ
- キーが直前のレコードと等しい場合の処理です。同一キーのレコード数を表すcountを1増やし、合計金額valueに読み込んだレコードの金額inValueを加算します。
- 小問 設問1 c:イ
- 入力ファイルの全レコードを読み終えてwhileループを抜けた後、最終グループの集計結果(key、count、value)を集計ファイルへ出力する必要があります。
- 小問 設問2 d:カ
- 算術演算あふれは25 * valueの乗算結果がlong型の最大値2^31-1(2,147,483,647)を超えると発生します。valueが100,000,000の場合、25 * 100,000,000 = 2,500,000,000となり上限を超えてあふれます。
- 小問 設問2 e:ア
- 25 * value / valueMaxの除算において除数valueMaxが0のときゼロ除算例外が発生します。選択肢アはvalueMaxが0であるため該当します。
- 小問 設問2 f:イ
- 配列graphは長さ26(アスタリスク25個+終端)であり有効添字は0〜25です。添字の計算式は25 - 25 * value / valueMaxです。valueが-10,000,000、valueMaxが10,000,000のとき、25 - (-25) = 50となり添字範囲外を参照します。
覚えるポイント
- コントロールブレーク処理ではループ脱出後の最後の1グループの出力漏れに注意する。
- C言語のC99以前の32ビットlong型の範囲は約-21.4億〜+21.4億である。
間違えやすいところ
- 集計のループが終わるときに、最後のキーのデータを出力し忘れるミスが多いです。
- わり算の前にかけ算がある式では、最後の答えが範囲内でも途中のかけ算であふれることを見落としがちです。
出題の前提:平成30年度春期基本情報技術者試験午後問題・C言語仕様に基づく
出典:IPA『2018年度 春期 午後』
公式問題冊子 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 / ファイル突合せ / EVALUATE / 日付処理 / コントロールブレーク
注文ファイルと入金ファイルのレコードを注文番号順に突き合わせ、出荷対象の判定や結果リストへの印字、未入金注文の出荷待ちファイルへの出力を実行するCOBOLプログラムに関する問題です。設問1ではプログラムの空欄a〜dを埋めて基本突合せ処理を完成させ、設問2では未入金から7日を超えた注文番号を表示する仕様変更(空欄e, f)を答えてください。
- 設問1 a-ア
- ORD-EOF
- 設問1 a-イ
- ORD-EOF AND RCP-EOF
- 設問1 a-ウ
- ORD-EOF OR RCP-EOF
- 設問1 a-エ
- RCP-EOF
- 設問1 b,c-ア
- ORD-AMNT = RCP-AMNT
- 設問1 b,c-イ
- ORD-AMNT = ZERO
- 設問1 b,c-ウ
- ORD-AMNT NOT = RCP-AMNT
- 設問1 b,c-エ
- ORD-CODE = 1 OR 2
- 設問1 b,c-オ
- ORD-CODE = 3 OR 4
- 設問1 b,c-カ
- ORD-CODE = RCP-CODE
- 設問1 d-ア
- ADD 1 TO PRT-NO
- 設問1 d-イ
- MOVE SPACE TO PRT-REC
- 設問1 d-ウ
- SET ORD-EOF RCP-EOF TO TRUE
- 設問1 d-エ
- WRITE PRT-REC
- 設問2 e-ア
- 行番号 51 と 52 の間
- 設問2 e-イ
- 行番号 53 と 54 の間
- 設問2 e-ウ
- 行番号 65 と 66 の間
- 設問2 e-エ
- 行番号 71 と 72 の間
- 設問2 f-ア
- W-CNT < 7
- 設問2 f-イ
- W-CNT = 7
- 設問2 f-ウ
- W-CNT > 7
- 設問2 f-エ
- W-CNT NOT = 7
解答・解説を表示
解答
設問1 a: イ, 設問1 b: オ, 設問1 c: ア, 設問1 d: エ, 設問2 e: イ, 設問2 f: ウ
解説
まず要点:2つのファイルを突き合わせるときは、両方が最後まで終わるまでループを続けます。キーの大小を比べて、小さい方を先に進める、両方同じなら一緒に処理する、の3通りに分けます。さらに、カード払いや着払いは入金前でも出荷できるなど、業務ルールに沿って分岐を置くことが大切です。
解き方
- PERFORM UNTILの終了条件として、両方のファイルが読み終わる条件(ORD-EOF AND RCP-EOF)を選びます。
- EVALUATE TRUEで、注文番号が入金番号より小さいときのカード・着払い判定と、番号一致時の金額一致判定の条件式を導きます。
- 結果リストへの出力命令(WRITE PRT-REC)を見つけます。
- 設問2では、未入金で出荷待ちファイルに書く場所(行53のすぐ後)を探し、経過日数が7日をこえる条件(W-CNT > 7)を導きます。
小問ごとの答え
- 小問 設問1 a:イ
- 2つの順ファイルを突き合わせる処理では、両方のファイルが末尾(EOF)に達するまで処理を繰り返すため、「ORD-EOF AND RCP-EOF」を指定します。
- 小問 設問1 b:オ
- ORD-NO < RCP-NOのとき(入金データなし)、カード払い(3)または着払い(4)であれば入金確認不要で出荷対象(コード00)となります。したがって条件は「ORD-CODE = 3 OR 4」です。
- 小問 設問1 c:ア
- ORD-NO = RCP-NOのとき、請求金額と入金額が一致していれば出荷対象(コード00)とするため、「ORD-AMNT = RCP-AMNT」が入ります。
- 小問 設問1 d:エ
- PRT-RSLT(結果欄)に何らかの判定コードがセットされている場合に結果リストへレコードを印字するため、「WRITE PRT-REC」を実行します。
- 小問 設問2 e:イ
- 未入金の銀行振込またはコンビニ払い注文は、ORD-NO < RCP-NOのELSE節(行番号52〜54)で出荷待ちファイルへ出力されます。その対象に対して日数判定を行うため、行番号53と54の間に追加します。
- 小問 設問2 f:ウ
- 注文日の翌日を1日目として7日を過ぎても入金がない注文を判定するため、現在日と注文日の日数差W-CNTが7より大きい「W-CNT > 7」が成立条件となります。
覚えるポイント
- マージ・マッチング(突合せ)処理のPERFORM UNTILは両方のファイルがEOFになるまで実行する。
- COBOLの組込み関数FUNCTION INTEGER-OF-DATEは日付を通算日数に変換する。
間違えやすいところ
- 突合せループの終了条件でORを選んでしまい、片方のファイルが終わっただけで処理を止めてしまう誤りが多いです。
- カード払い(3)・着払い(4)と、銀行振込(1)・コンビニ払い(2)のコード番号を取りちがえないよう注意します。
出題の前提:平成30年度春期基本情報技術者試験午後問題・COBOL言語仕様および正誤表に基づく
出典:IPA『2018年度 春期 午後』
公式問題冊子 p.2 ↗(www.ipa.go.jp) / 公式問題冊子 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)
表現式を構築するためのライブラリ作成
ソフトウェア開発 · Java / オブジェクト指向 / アクセス修飾子 / クラスライブラリ / equalsメソッド
Javaにおいて、数式を表現・評価するオブジェクト指向ライブラリの作成と利用に関する問題である。インタフェース Expression、定数を表すクラス Constant、加算式を表すクラス Addition、および二項演算式の共通処理を抽象化した BinaryOperatorExpression の設計と、これらをパッケージ外から利用・拡張するプログラムの動作に関する次の各設問に答えよ。
- ア
- new Constant(9) == new Constant(9)
- イ
- new Constant(9).equals(new Constant(9))
- ウ
- new Constant(9).evaluate() == new Constant(9).evaluate()
- エ
- new Constant(9).evaluate().equals(new Constant(9).evaluate())
解答・解説を表示
解答
設問1 a: ア, 設問1 b: カ, 設問1 c: ア, 設問1 d: イ, 設問2: ア, 設問3: ア, 設問4: イ
解説
まず要点:Javaでは、protectedを使うと、パッケージの外からは中身を隠しつつ、継承して拡張するクラスには機能を渡せます。また、中身が同じかどうかを比べたいときは、equalsメソッドを自分で作り直す必要があります。==は場所(参照)を比べるだけで、中身は比べません。
解き方
- クラスがあるパッケージ宣言と、アクセスを制御する修飾子の関係を調べます。
- 抽象クラスの継承関係と、toString()やevaluate()が再帰的に呼ばれた結果を追いかけます。
- 場所の一致(==)と中身の同価性(equals)のちがいを整理し、作り直していないときの動きを確かめます。
小問ごとの答え
- 小問 設問1 a:ア
- プログラム4は別パッケージ com.example.test に属するため、com.example.expr にある公開クラスやインタフェースを利用するには import com.example.expr.クラス名; とインポートする必要があります。
- 小問 設問1 b:カ
- (2 + 5) の加算式を構築するため、左辺に two (値2)、右辺に five (値5) を渡す必要があります。したがって引数は two, five となります。
- 小問 設問1 c:ア
- System.out.println 内で式文字列を出力させるため、c には add を指定します。文字列連結により自動的に add.toString() が呼び出され、"(2 + 5)" が得られます。
- 小問 設問1 d:イ
- 計算結果である 7 を出力させるため、d には評価メソッドの呼び出しである add.evaluate() を指定します。
- 小問 設問2:ア
- protected 修飾子は同一パッケージ内および他パッケージのサブクラスからアクセス可能です。ライブラリ利用者が二項演算式の下位クラスを自作する用途に限定して提供するため、「下位クラスを実装するクラスだけで使える」ように protected に設定します。
- 小問 設問3:ア
- new Subtraction(add, new Subtraction(two, five)) の toString() は、外側の減算式が "(%s %s %s)" 形式で展開され、left の "(2 + 5)"、演算子 "-"、right の "(2 - 5)" が結合されて "((2 + 5) - (2 - 5))" となります。
- 小問 設問4:イ
- 同一の値を持つ別インスタンスの論理的等価性を判定するには equals メソッドを用いますが、Constant クラスで equals がオーバーライドされていないため、Object クラスの同一性判定(参照比較)が働き false となってしまいます。
覚えるポイント
- protected は同一パッケージと別パッケージのサブクラスからアクセス可能である。
- equals をオーバーライドしない場合、Object クラスの参照同一性判定 (==) が適用される。
間違えやすいところ
- オブジェクトの中身が同じかを調べるのに==演算子を使ってしまう誤り。
- int型などの基本型にequalsメソッドが使えると勘違いする誤り。
出題の前提:平成30年度春期 基本情報技術者試験 午後 問11
出典:IPA『2018年度 春期 午後』
公式問題冊子 p.56 ↗(www.ipa.go.jp) / 公式問題冊子 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 において、数字列を10進整数値に変換する副プログラム DTOB、文字列から複数の数字列を抽出して管理テーブルに格納する副プログラム GETWD、およびそれを利用して2整数の乗算を行う副プログラム MULT に関する問題である。各プログラムの空欄を埋め、正しい処理手順を完成させよ。
- ア
- ADDL GR5, GR4
- イ
- SLL GR4, 1
- ウ
- SLL GR4, 2
- エ
- SLL GR5, 1
- オ
- SLL GR5, 2
解答・解説を表示
解答
設問1 a: オ, 設問2 b: ウ, 設問2 c: イ, 設問2 d: エ, 設問3 e: オ, 設問3 f: オ
解説
まず要点:文字の数字を数値に変えるときは、「今までの値×10+次の1けた」をくり返します。10倍は、2倍(1ビット左シフト)と8倍(さらに2ビット左シフト)をたして作れます。かけ算では、かけられる数のビットを右にずらして見ながら、1のところで被乗数を左にずらしてたしこみます。
解き方
- 10倍を、2倍(1ビット左シフト)と8倍(さらに2ビット左シフト)のたし算に分ける手順を確かめます。
- GETWDの中で空白と数字を見分け、数字列の始まり・終わり・ポインタの更新を制御する分岐を追います。
- MULTでかけられる数を1ビットずつ右にずらしながら最下位ビットを調べ、終了判定とたしこみを行うループを追います。
小問ごとの答え
- 小問 設問1 a:オ
- GR0 を 10 倍するため、SLL GR0, 1 で 2 倍にした値を LD GR5, GR0 で退避し、空欄 a で SLL GR5, 2 を実行して 8 倍とし、直後の ADDL GR0, GR5 で 2倍 + 8倍 = 10倍 を実現します。
- 小問 設問2 b:ウ
- 文字が空白(' ')でない場合は数字列の処理を継続するため、CPL GR4, =' ' の結果が不一致(非ゼロ)のときに NUM へ分岐する JNZ NUM が入ります。
- 小問 設問2 c:イ
- GR3 は数字列処理中フラグ(処理中は 0、未処理は -1)です。SETWD 呼び出し時に数字列を処理していなければ何もせず戻る必要があるため、GR3 が -1(非ゼロ)のときに FIN2 へジャンプする JNZ FIN2 が入ります。
- 小問 設問2 d:エ
- 変換した数値を管理テーブルに格納した直後、次の格納位置に進めるため、ポインタである GR7 を 1 増やす LAD GR7, 1, GR7 を実行します。
- 小問 設問3 e:オ
- 乗数 GR5 の全ビットを処理し終えて GR5 が 0 になったかを LD GR5, GR5 で判定し、0 であればループを抜けて終了するため JZE FIN が入ります。
- 小問 設問3 f:オ
- 乗数の各ビットを下位から順に調べるため、被乗数 GR4 を 1 ビット左シフトしたのに合わせて、乗数 GR5 を 1 ビット右論理シフトする SRL GR5, 1 を実行します。
覚えるポイント
- ×10 の計算は「×2 + ×8」(1ビットシフトと3ビットシフト、または2倍の値をさらに2ビットシフト)で実現する。
- 乗算アルゴリズムでは、乗数を右シフトして最下位ビットを調べ、被乗数を左シフトしていく。
間違えやすいところ
- CPL命令の比較で、一致のときZF=1(JZEで分岐)、不一致のときZF=0(JNZで分岐)という対応を取りちがえるミス。
- 管理テーブルのアドレス更新で、インデックス修飾とLAD命令によるポインタ加算を混同するミス。
出題の前提:平成30年度春期 基本情報技術者試験 午後 問12
出典: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) / 公式問題冊子 p.67 ↗(www.ipa.go.jp)
表計算ソフトによる会議室予約システムの作成とマクロ処理
ソフトウェア開発(表計算) · 表計算 / 論理関数 / 検索関数 / マクロ
会議室の予約システムに関するワークシート「会議室選定」及び「予約リスト」、並びにマクロ「SelectRoom」の仕様と処理内容を読み、設問1・設問2の空欄[ a ]〜[ f ]に当てはまる適切な記述を選択せよ。
解答・解説を表示
解答
設問1 a: イ, 設問1 b: オ, 設問1 c: エ, 設問2 d: オ, 設問2 e: ウ, 設問2 f: ア
解説
まず要点:表計算では、照合一致・照合検索・表引き・相対といった参照関数の動きと、時間帯が重なるかの判定を正しく理解する必要があります。時間帯[S1,E1]と[S2,E2]が重ならない条件は「E1≦S2 または E2≦S1」で、これをNOTで打ち消すと重なる条件になります。
解き方
- 設問1では、収容率を0にする除外条件をANDとORで組み立て、最大値が0なら「なし」、それ以外は照合検索で会議室番号を取る式を決めます。
- 設問2では、予約時間が重ならない条件のORをdに決め、会議室番号が一致する行から相対参照でD列の使用不可フラグを立て、利用日が同じ間だけくり返す仕組みを導きます。
小問ごとの答え
- 小問 設問1 a:イ
- 収容率は通常「利用人数 / 定員」で計算されますが、「利用人数が定員を超える場合」「スクリーン利用希望(要)なのに会議室にスクリーンが無い(無)場合」「使用可否が『否』の場合」のいずれかを満たす場合は0とします。したがって、条件式は「論理積(E$19='要', C2='無')」「D2='否'」「D$19 > B2」の3つの条件のいずれかが成り立つ論理和となります。よって正解はイです。
- 小問 設問1 b:オ
- 推奨会議室は収容率が正の値となる会議室のうち最大のものを選びます。条件を満たす会議室が存在しない場合とは、収容率の最大値が正でない(すなわち0以下、収容率の最小値は0なので最大値が0)場合です。したがって、最大(E2:E16) = 0 のときに「なし」を表示するオが正解です。
- 小問 設問1 c:エ
- 最大値をもつ会議室番号を取り出すため、照合検索関数を使用します。照合検索(最大(E2:E16), E2:E16, A2:A16)とすることで、セル範囲E2:E16の中から最大値を上から順に検索し、最初に見つかった位置に対応する会議室番号のセル範囲A2:A16の値を返します。最大値が複数ある場合は最も上の会議室番号を返す仕様にも合致します。よって正解はエです。
- 小問 設問2 d:オ
- 指定した希望利用時間帯と予約リストにある予約の時間帯が「重複しない」条件は、予約が希望開始時刻以前に終了している(予約の終了時刻 ≦ B19)か、または予約が希望終了時刻以後に開始している(予約の開始時刻 ≧ C19)のいずれかが成り立つことです。マクロでは「否定( [ d ] )」のときに重複と判定して使用可否を'否'にするため、dには重複しない条件である「論理和(表引き(予約リスト!C2:C10000, J, 1) ≧ C19, 表引き(予約リスト!D2:D10000, J, 1) ≦ B19)」が入ります。よって正解はオです。
- 小問 設問2 e:ウ
- 重複した予約の会議室番号は「表引き(予約リスト!G2:G10000, J, 1)」で取得できます。この会議室番号が会議室選定シートのA2:A16の何番目にあるかを「照合一致(表引き(...), A2:A16, 0)」で求めます。基準セルD2からの行の相対位置は「見つかった位置 - 1」となるため、「相対(D2, 照合一致(表引き(予約リスト!G2:G10000, J, 1), A2:A16, 0) - 1, 0)」を指定するウが正解です。
- 小問 設問2 f:ア
- 予約リストのデータは利用日の昇順に整列されているため、利用日が希望日A19と一致する間だけ後続の行を連続して調べれば十分です。J行目の利用日を取得する式は「表引き(予約リスト!B2:B10000, J, 1)」であり、これが「= A19」である間ループを継続します。よって正解はアです。
覚えるポイント
- 時間の区間重複判定は、「重ならない条件(一方が他方の前または後)」を考えてからその否定をとると立式しやすい。
- 照合一致関数はセル範囲内の相対位置(1始まり)を返すため、基準セルからの相対参照でオフセットに用いる際は1を引く必要がある。
間違えやすいところ
- 照合一致で得た行番号(1〜15)をそのまま相対指定に渡し、1行ずれて参照してしまう誤り。
- 予約リストが利用日の昇順に並んでいる前提を見落とし、末尾まで探す条件を選んでしまう誤り。
出題の前提:基本情報技術者試験 午後 表計算ソフトの機能・用語の標準仕様
出典:IPA『2018年度 春期 午後』
公式問題冊子 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)
2018年度 春期 午後
参照した公式資料
IPAが公開した2018年度 春期 午後の問題・解答資料です。

