pulpul 日本の試験

基本情報技術者 過去問題

基本情報技術者 2017年 春期 午後 問題

基本情報技術者 2017年 春期 午後の問題文34問です。図・表・別冊資料と正解は掲載していませんので、出典の公表資料またはアプリでご確認ください。

共通の文章

問1 ファイルの安全な受渡しに関する次の記述を読んで,設問1~3に答えよ。 情報システム会社のX社では,プロジェクトを遂行する際,協力会社との間で機密情報を含むファイルの受渡しを手渡しで行っていた。X社は,効率化のために,次期プロジェクトからは,インターネットを経由してファイルを受け渡すことにした。 X社で働くAさんは,ファイルを受け渡す方式について検討するように,情報セキュリティリーダであるEさんから指示された。Aさんは,ファイルを圧縮し,圧縮したファイルを共通鍵暗号方式で暗号化した上で電子メール(以下,メールという)に添付して送信し,別のメールで復号用の鍵を送付する方式をEさんに提案した。しかし,Eさんから「①Aさんの方式は安全とはいえない」との指摘を受けた。 Aさんは,暗号化について再検討し,圧縮したファイルを公開鍵暗号方式で暗号化してメールに添付する方式をEさんに提案したところ,「その方式で問題はないが,相手のaを入手する際には,それが相手のものであると確認できる方法で入手する必要がある点に注意するように」と言われた。 表1 表1「協力会社の参加人数及び受け渡すファイルの機密度」。列見出しは「協力会社」「参加人数(人)」「受け渡すファイルの機密度」。行は、P社:10人、「低」だけ。Q社:5人、「低」と「高」。R社:50人、「低」だけ。S社:25人、「低」と「高」。 Eさんからの指示 「ファイルを受け渡す方式に関するEさんからの指示」:(1) メールを使用する方式以外も検討すること。(2) ファイルを受け渡す方式は,協力会社ごとに異なっていてもよい。(3) 協力会社間ではファイルを受け渡さない。(4) ある協力会社との間で,ファイルを受け渡すためにアカウントを登録する必要があるシステムを使う場合,その会社からプロジェクトに参加する社員全員のアカウントを登録すること。(5) 受け渡すファイルの機密度に合った方式を選択すること。機密度には「低」と「高」の2種類がある。X社のセキュリティポリシでは,機密度が「高」のファイルを,オンラインストレージサービスを利用して受け渡すことを禁止している。(6) 費用(初期費用とプロジェクト期間中の運用費用の合計)が最も安い方式を選択すること。 候補方式(1) 候補(1)「VPNとファイルサーバ」:X社の拠点と協力会社の拠点との間でVPN環境を構築し,ファイルを受け渡すためのファイルサーバをX社に設置する。協力会社ごとに,異なるVPN環境の構築と異なるファイルサーバの設置を行う。この方式では,一つの協力会社につき,初期費用としてVPN環境の構築とファイルサーバの設置に100,000円,運用費用としてファイルサーバの運用及びVPN利用に合わせて月額50,000円が掛かる。初期費用,運用費用ともに利用者数の多寡による影響はない。 候補方式(2) 候補(2)「オンラインストレージサービス」:インターネット上で提供されているオンラインストレージサービスを利用してファイルを受け渡す。このサービスは,利用者にHTTP over TLSでのアクセスを提供しており,ファイルを安全に受け渡せる。この方式では,初期費用は掛からないが,運用費用として利用者1人当たり月額500円が掛かる。X社では,全社員がこのサービスを利用することにしたので,X社の社員についての運用費用はこのプロジェクトの費用には含めない。 候補方式(3) 候補(3)「暗号化機能付きメールソフト」:公開鍵暗号方式を使った暗号化機能付きメールソフトを導入し,メールにファイルを添付して受け渡す。この方式を安全に運用するためには,導入時にプロジェクトの参加者全員に対して,メールソフトの利用方法などに関する研修が必要である。この方式では,初期費用としてメールソフトの導入及び研修に利用者1人当たり30,000円が掛かるが,運用費用は掛からない。X社では,全社員がこのメールソフトを利用することにしたので,X社の社員についての初期費用はこのプロジェクトの費用には含めない。 表2 表2「選択すべき方式とその費用」。列見出しは「協力会社」「選択すべき方式」「費用(円)」。P社の行は「オンラインストレージサービス」、60,000円。Q社の行は方式欄が空欄b、費用欄は網掛けで表示されていない。R社の方式欄と費用欄は網掛けで表示されていない。S社の行は方式欄が空欄c、費用欄が空欄d。注記:「網掛けの部分は表示していない。」

問問1 設問1

本文中の下線①でEさんから指摘を受けた理由として,最も適切な答えを,解答群の中から選べ。

  • ア 圧縮してから暗号化する方式は,暗号化してから圧縮する方式よりも解読が容易である。
  • イ 圧縮ファイルを暗号化してもファイル名は暗号化されない。
  • ウ 共通鍵暗号方式は,他の暗号方式よりも解読が容易である。
  • エ ファイルを添付したメールと,鍵を送付するメールの両方が盗聴される可能性がある。

出典:平成29年度 春期 基本情報技術者試験 午後 問1 設問1

問問1 設問2

本文中の空欄aに入れる適切な答えを,解答群の中から選べ。

  • ア 共通鍵
  • イ 公開鍵
  • ウ ディジタル署名
  • エ パスワード
  • オ 秘密鍵

出典:平成29年度 春期 基本情報技術者試験 午後 問1 設問2

問問1 設問3

次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。次期プロジェクトでは,協力会社であるP社,Q社,R社及びS社と協業する。プロジェクトの期間は12か月である。Aさんは,各協力会社との間でファイルを受け渡す方式について,Eさんからの指示に基づき協力会社ごとに選択すべき方式を検討した。その結果,費用(初期費用とプロジェクト期間中の運用費用の合計)を,表2に示す。 b、cに関する解答群 ア VPNとファイルサーバ イ オンラインストレージサービス ウ 暗号化機能付きメールソフト dに関する解答群 ア 30,000 イ 60,000 ウ 150,000 エ 300,000 オ 700,000 カ 750,000 キ 1,500,000

  • B-ア VPNとファイルサーバ
  • B-イ オンラインストレージサービス
  • B-ウ 暗号化機能付きメールソフト
  • C-ア VPNとファイルサーバ
  • C-イ オンラインストレージサービス
  • C-ウ 暗号化機能付きメールソフト
  • D-ア 30,000
  • D-イ 60,000
  • D-ウ 150,000
  • D-エ 300,000
  • D-オ 700,000
  • D-カ 750,000
  • D-キ 1,500,000

出典:平成29年度 春期 基本情報技術者試験 午後 問1 設問3

共通の文章

問2 温度モニタに関する次の記述を読んで,設問1,2に答えよ。 図1に,ある温度モニタのシステム構成図の一部を示す。 タイマ割込み発生時に起動される割込みプログラムが,温度検出器の出力値をA/D変換器を介して取り込み,対応した値を7セグメントLED(以下,LEDという)に表示するシステムである。温度の検出範囲は0~70℃とし,検出された温度(以下,検出温度という)を8段階のレベルに対応させて,“1”~“8”の数字で表示する。割込みプログラムが起動されてから表示処理の完了までの時間は,タイマ割込み間隔に比べて十分に短いものとする。 LEDの各セグメントは,対応する出力ポートのビットの値が1のとき点灯し,0のとき消灯する。LEDに“1”~“8”の数字を表示するために,数字の字形に合わせて,対応する8ビットのデータを出力ポートのビット0~7に設定する。このデータを形状データといい,出力ポートのビット7を最上位ビットとする2桁の16進数で表記する。 図1 図1「温度モニタのシステム構成図の一部」。バスにCPU、タイマ(一定間隔で割込み)、A/D変換器と出力ポートが接続される。温度検出器からA/D変換器へ入力される。出力ポートのビット15~8にはLEDへの線はなく、ビット7は上端、6は右上、5は右下、4は下端、3は左下、2は左上、1は中央、0は小数点の各セグメントに接続される。黒は点灯、灰色および白丸は消灯を表す。表示例は“2”で、ビット0には常に0が設定される。 表1 表1「温度基準値,A/D変換器出力,レベルの関係」。列見出しは「温度基準値(℃)」「A/D変換器出力(2進表記)」「レベル」。行は、0|000|1、10|001|2、…、70|111|8。説明文:検出温度は、表1に示す10℃ごとの温度基準値のうち最も近い値に近似される。温度基準値の刻み幅の中央の値は高い側の温度基準値に近似される。例:検出温度14℃は10℃に、15℃は20℃に、16℃は20℃に近似される。 図2 図2「LEDの表示」。7セグメントLEDに数字の“6”が表示され、小数点セグメントは消灯している。 表2 表2「LEDとA/D変換器の動作概要」。LED(I/Oポート番号1):番号1のI/Oポートに形状データを書き込むと、出力ポートの各ビットに値が設定され、LEDの各セグメントの点灯と消灯が行われる。A/D変換器(I/Oポート番号2):番号2のI/Oポートに値1を書き込むとA/D変換が開始される。番号2のI/Oポートから読み込んだ値が0なら変換中を示す。0以外ならA/D変換が完了して出力値が確定していることを示す。A/D変換器(I/Oポート番号3):A/D変換完了後に番号3のI/Oポートから読み込むと、A/D変換器の出力値(0~7)が得られる。 表3 表3「擬似命令の形式と動作」。列見出しは「命令の形式」「命令の動作」。INPUT I/Oポート番号:番号で指定したI/Oポートに接続されている機器からデータを読み込み、GRに設定する。OUTPUT I/Oポート番号:GRに設定したデータを、番号で指定したI/Oポートに接続されている機器に書き込む。注記:GRはCPUの8ビットのレジスタ。 図3 図3「割込みプログラムの処理の流れ」。開始→GR←1→OUTPUT 2(注記:A/D変換開始)→INPUT 2→判定欄d。判定のYes側はINPUT 2へ戻り、No側はINPUT 3→変換処理(注記:A/D変換器の出力値を形状データαに変換)→GR←α→命令欄e→終了。

問問2 設問1

次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。LEDの表示が図2のとき,出力ポートに設定されている形状データはa,A/D変換器出力(2進表記)はb,検出温度の範囲はcである。 aに関する解答群 ア 66 イ BE ウ DA エ F2 オ FE bに関する解答群 ア 010 イ 011 ウ 100 エ 101 オ 110 cに関する解答群 ア 40℃以上50℃未満 イ 45℃以上55℃未満 ウ 50℃以上60℃未満 エ 55℃以上65℃未満 オ 60℃以上70℃未満

  • A-ア 66
  • A-イ BE
  • A-ウ DA
  • A-エ F2
  • A-オ FE
  • B-ア 010
  • B-イ 011
  • B-ウ 100
  • B-エ 101
  • B-オ 110
  • C-ア 40℃以上50℃未満
  • C-イ 45℃以上55℃未満
  • C-ウ 50℃以上60℃未満
  • C-エ 55℃以上65℃未満
  • C-オ 60℃以上70℃未満

出典:平成29年度 春期 基本情報技術者試験 午後 問2 設問1

問問2 設問2

タイマ割込み発生時に起動される割込みプログラムについて,その処理の流れを図3に示す。図3中の空欄に入れる正しい答えを,解答群の中から選べ。各機器にはI/Oポート番号が割り当てられており,割込みプログラムは,各機器に対する制御,データの読込み及び書込みを,I/Oポート番号を指定して行う。LEDに接続されている出力ポートにはI/Oポート番号1が,A/D変換器にはI/Oポート番号2と3が,それぞれ割り当てられている。表2にLEDとA/D変換器の動作概要を示す。また,図3で使用している擬似命令の形式と動作は,表3のとおりとする。 dに関する解答群 ア GR<0 イ GR=0 ウ GR=1 エ GR>1 eに関する解答群 ア INPUT 1 イ INPUT 2 ウ INPUT 3 エ OUTPUT 1 オ OUTPUT 2

  • D-ア GR<0
  • D-イ GR=0
  • D-ウ GR=1
  • D-エ GR>1
  • E-ア INPUT 1
  • E-イ INPUT 2
  • E-ウ INPUT 3
  • E-エ OUTPUT 1
  • E-オ OUTPUT 2

出典:平成29年度 春期 基本情報技術者試験 午後 問2 設問2

共通の文章

問3 住民からの問合せに回答するためのデータベースに関する次の記述を読んで,設問1~3に答えよ。 W市役所の生活環境課では,職員は住民からのごみの出し方に関する問合せがあったとき,対象物(ごみ)を検索条件としてルール表を検索し,出し方のルールを回答する業務を行っている。 問合せごとに一意な受付Noを割り当て,受付日,回答日,回答したルールの区分ID及び対象物IDを入力したレコードを問合せ記録表に登録する。問合せがあった対象物が対象物表になかった場合,回答日,区分ID及び対象物IDはNULLにして,メモ欄に当該対象物をテキストで入力したレコードを登録する。後日,問合せ記録表から,回答日,区分ID及び対象物IDがNULLのレコードを選択し,メモ欄に入力されている当該対象物の分別区分を決定し,一意な対象物IDを割り当て,対象物表に新たな対象物のレコードを登録する。ルール表に新たなルールのレコードを登録して,問合せ記録表の選択したレコードに,追加したルールの区分IDと対象物IDを設定する。 データベースの表構成とデータ格納例は図1のとおりである。下線付きの項目は主キーを表す。 業務を行っている過程で幾つかの課題が明らかになった。これらのうちから対策すべき課題を選び,それを実現するために,データベースの表構成の見直し案を作成した。その結果を表1に示す。 図1 図1 データベースの表構成とデータ格納例。下線付きの項目は主キー。 区分表 列:区分ID(主キー),分別区分 行:L0008, 可燃物 対象物表 列:対象物ID(主キー),対象物 行:S0123, 植木の枝 ルール表 列:区分ID(複合主キーの一部),対象物ID(複合主キーの一部),更新日,出し方のルール 行:L0008,S0123,2015-03-01,「乾燥させ,ひもで束にする。」 問合せ記録表 列:受付No(主キー),受付日,回答日,区分ID,対象物ID,メモ欄 行:C003456,2016-05-14,NULL,NULL,NULL,「自転車のタイヤチューブ」 表1 表1 対策する課題とデータベースの表構成の見直し案 課題:同じ対象物でも,大きさなどによって出し方を分ける必要が出てきた。 見直し案:ルール表に主キーとしてルールIDの項目を追加し,区分IDと対象物IDの項目を主キーではなくする。問合せ記録表にルールIDの項目を追加する。 課題:新たに登録したルールについて,不都合があり,修正などをしたことが何度かあった。 見直し案:ルール表に登録状態の項目を追加する。登録状態の項目の値は,“未公開”,“公開”のいずれかである。理由は,ルール表に新たなルールを追加する場合,住民からの問合せに対する検索の対象とならない(未公開)状態で一旦登録し,課内でレビューした後,問題がなければ検索の対象(公開)とするためである。 図2 図2 ルール表作成用DDL CREATE TABLE ルール ( ルールID CHAR(6) PRIMARY KEY, 区分ID CHAR(5) NOT NULL, 対象物ID CHAR(5) NOT NULL, 登録状態 VARCHAR(10) NOT NULL, 更新日 DATE NOT NULL, 出し方のルール VARCHAR(2048), FOREIGN KEY (区分ID) REFERENCES 区分(区分ID), FOREIGN KEY (対象物ID) REFERENCES 対象物(対象物ID), UNIQUE (区分ID, 対象物ID) )

問問3 設問1

ルールIDの項目を追加する理由として適切な答えを,解答群の中から選べ。

  • ア 同じ区分IDの同じ対象物IDに対する出し方のルールを複数件登録できるようにする。
  • イ 同じ区分IDの異なる対象物IDに対する出し方のルールを登録できるようにする。
  • ウ 異なる区分IDの同じ対象物IDに対する出し方のルールを登録できるようにする。

出典:平成29年度 春期 基本情報技術者試験 午後 問3 設問1

問問3 設問2

次の記述中の空欄に入れる適切な答えを,解答群の中から選べ。 ルール表のレコードを特定するために,問合せ記録表にルールIDの項目を追加するとき,ルールIDを外部キーとしたルール表に対する[a]制約を設定する。追加するルールIDの項目には,[b]。 aに関する解答群 ア 非NULL イ NULL ウ UNIQUE エ 参照 オ 検査 カ 主キー bに関する解答群 ア 非NULL制約は適用できない イ UNIQUE制約を適用する ウ 更新操作を行うことはできない エ 主キー制約を適用する

  • A-ア 非NULL
  • A-イ NULL
  • A-ウ UNIQUE
  • A-エ 参照
  • A-オ 検査
  • A-カ 主キー
  • B-ア 非NULL制約は適用できない
  • B-イ UNIQUE制約を適用する
  • B-ウ 更新操作を行うことはできない
  • B-エ 主キー制約を適用する

出典:平成29年度 春期 基本情報技術者試験 午後 問3 設問2

問問3 設問3

ルール表作成用DDLの見直しについて,次の記述中の空欄に入れる適切な答えを,解答群の中から選べ。 図2に示す,ルールIDの項目と登録状態の項目追加後のルール表作成用DDLのレビュー時に,[c]は削除すべきとの指摘を受けた。また,登録状態の項目に対する制約が不足しているとの指摘もあり,[d]を追加することになった。 cに関する解答群 ア 区分IDの項目及び対象物IDの項目のUNIQUE制約 イ 対象物IDの項目の非NULL制約 ウ 対象物IDの項目の参照制約 エ ルールIDの項目の主キー制約 dに関する解答群 ア CHECK(登録状態 IN('未公開','公開')) イ CHECK(登録状態 IS NULL) ウ UNIQUE('未公開','公開') エ WHERE 登録状態 IN('未公開','公開')

  • C-ア 区分IDの項目及び対象物IDの項目のUNIQUE制約
  • C-イ 対象物IDの項目の非NULL制約
  • C-ウ 対象物IDの項目の参照制約
  • C-エ ルールIDの項目の主キー制約
  • D-ア CHECK(登録状態 IN('未公開','公開'))
  • D-イ CHECK(登録状態 IS NULL)
  • D-ウ UNIQUE('未公開','公開')
  • D-エ WHERE 登録状態 IN('未公開','公開')

出典:平成29年度 春期 基本情報技術者試験 午後 問3 設問3

共通の文章

問4 無線 LAN におけるデータの送信に関する次の記述を読んで,設問1~3に答えよ。 無線 LAN ではフレームを使用してデータを送信する。フレームにはデータフレームや ACK フレームがあり,データはデータフレームに格納して送信する。データフレームには,フレームの制御情報と TCP/IP パケットが含まれる。一つのデータフレームに格納できるデータ長には上限があり,上限を超えるデータを送信したいときは,データを複数のデータフレームに分けて送信する。無線 LAN では,複数の機器から送信されるフレームがなるべく衝突しないように工夫して,フレームを送信する。 無線 LAN におけるデータフレーム送信の大まかな流れを,(1)~(7)に示す(図1参照)。ここで,W1,W2 は待機時間を表す量である。W2 はあらかじめ決められた値で,W1 は W2 を超えるように毎回決められるランダムな値である。 (1) データフレームを送信しようとする機器は,送信前に他の機器がフレームを送信しているかどうかを調べる。 (2) 他の機器がフレームを送信していれば,そのフレームの送信が終了するまで待機する。 (3) 他の機器がフレームを送信していなければ,W1 だけ待機する。 (4) W1 の間に,他の機器がフレームの送信を開始しなければ,データフレームを送信し,受信側機器からの ACK フレームの到着を待つ。 (5) W1 の間に,他の機器がフレームの送信を開始したときは,(2)に戻る。 (6) データフレームを受信した機器は,データフレームを受信後,W2 だけ待機した後,ACK フレームを送信する。 (7) 複数のデータフレームを送信する必要があるときは,(1)~(6)を繰り返す。 図1 データフレーム送信の例 図1「データフレーム送信の例」。送信側機器の時間軸上に,左から「(2)待機」「(3)W1待機」「(4)データフレーム送信」の区間が並ぶ。その後も送信側機器は(3)、(4)を繰り返す形で示される。受信側機器の時間軸には,データフレーム受信後の「(6)W2待機」「(6)ACKフレーム送信」の区間が示される。矢印はフレームの送信方向を示し,データフレームは送信側から受信側へ,ACKフレームは受信側から送信側へ向かう。 設問1の数値条件 一つのデータフレームに格納できる最大データ長(フレームの制御情報や TCP/IP パケットのヘッダなどの情報を除くデータ本体)は1,460バイト。物理層の通信速度が54 Mビット/秒のとき,最大データ長のデータを格納したデータフレームの送信時間は248マイクロ秒,ACKフレームの送信時間は24マイクロ秒。W1の平均は通信速度に関係なく101.5マイクロ秒,W2は16マイクロ秒。

問問4 設問1

一つのデータフレームに格納できる最大データ長を1,460バイトとする。物理層の通信速度が54 Mビット/秒のとき,最大データ長のデータを格納したデータフレームの送信時間は248マイクロ秒,ACKフレームの送信時間は24マイクロ秒である。W1の平均とW2が,物理層の通信速度に関係なく,それぞれ101.5マイクロ秒と16マイクロ秒であるとき,データ送信速度(単位時間に送信できるデータ量)は最大で a Mビット/秒程度になる。 次に,三台の機器A,B及びCがある場合について考える。①機器Aだけが機器Cに対して1 Mバイトのデータの送信処理を行ったときと,②機器Aと機器Bのそれぞれが機器Cに対して,それぞれ1 Mバイトのデータの送信処理を同時に開始したときとを比較すると,機器Aから機器Cへのデータの送信処理に掛かる時間は,平均的には b となる。ここで,機器Aと機器Cの間,及び機器Bと機器Cの間それぞれの物理層の通信速度は54 Mビット/秒とする。また,フレームの衝突はなく,フレームの再送信も行われなかったものとする。 aに関する解答群 ア 4 イ 6 ウ 30 エ 47 bに関する解答群 ア ①の方が短い イ ②の方が短い ウ 等しい

  • A-ア 4
  • A-イ 6
  • A-ウ 30
  • A-エ 47
  • B-ア ①の方が短い
  • B-イ ②の方が短い
  • B-ウ 等しい

出典:平成29年度 春期 基本情報技術者試験 午後 問4 設問1

問問4 設問2

次の記述中の空欄に入れる適切な答えを,解答群の中から選べ。ここで,c1とc2に入れる答えは,cに関する解答群の中から組合せとして適切なものを選ぶものとする。 無線LANの物理層の通信速度は,機器間の距離や障害物の有無などによって変化する。機器Bを機器Cから離すことによって,機器Bと機器Cの間の物理層の通信速度が24 Mビット/秒になった。機器Aと機器Cの間の物理層の通信速度は54 Mビット/秒のままである。機器Aと機器Bのそれぞれが,機器Cに対して,それぞれ1 Mバイトのデータの送信処理を同時に開始した。このとき,機器Bと機器Cの間の物理層の通信速度が54 Mビット/秒から24 Mビット/秒になったことによって,c1。したがって,機器Aから機器Cへのデータ送信速度は,機器Bと機器Cの間の物理層の通信速度が54 Mビット/秒だったときと比較して,c2。

  • ア c1:機器Aが,機器Bによるフレーム送信終了まで待機する時間が長くなる。 c2:低下する
  • イ c1:機器Aが,W1だけ待機する回数が多くなる。 c2:低下する
  • ウ c1:機器Aと機器Cの間の物理層の通信速度が,機器Bと機器Cの間の物理層の通信速度と比べて向上する。 c2:向上する
  • エ c1:機器Aと機器Cの間の物理層の通信速度に与える影響はない。 c2:変わらない
  • オ c1:機器BのW1が長くなり,機器Aの通信が優先される。 c2:向上する
  • カ c1:送信されるデータの量は変わらない。 c2:変わらない

出典:平成29年度 春期 基本情報技術者試験 午後 問4 設問2

問問4 設問3

無線LANにおける,データ送信速度を向上させる工夫を三つ,次に示す。これらのうち,伝送効率(データ送信速度 ÷ 物理層の通信速度)の向上に寄与するものだけを全て挙げたものとして適切な答えを,解答群の中から選べ。 〔データ送信速度を向上させる工夫〕 (I) 複数のデータフレームに対応する一つのACKを返すことによって,ACKフレームの個数を削減する。 (II) 複数のデータフレームをまとめて送信することによって,W1だけ待機する回数を削減する。 (III) 物理層の通信速度を向上させる。

  • ア (I)
  • イ (I)と(II)
  • ウ (I)と(III)
  • エ (II)
  • オ (II)と(III)
  • カ (III)

出典:平成29年度 春期 基本情報技術者試験 午後 問4 設問3

共通の文章

問5 購買システムにおける注文書出力処理に関する次の記述を読んで,設問1~3に答えよ。 電気製品を製造しているJ社では,製造部門が要求する電子部品(以下,商品という)を購買部門が発注する際に利用する購買システムの構築が進行中である。購買システムを利用するには,Webブラウザを使用する。J社の購買部門の社員(以下,購買担当者という)は社内ネットワーク経由で,仕入先の営業員はインターネット経由で,それぞれ購買システムを利用する。 【購買システムを利用した発注業務の説明】 (1) 発注する全ての商品は,商品ごとに一意になる商品番号で管理する。商品ごとに,仕入先は1社に定まっている。 (2) 購買部門は三つのグループ(以下,購買グループという)に分かれており,購買グループごとに取り扱う商品が異なる。 (3) 各購買担当者は,自グループが取り扱う商品について,製造部門からの要求を取りまとめ,仕入先ごとに分類し,発注登録を行う。このとき,仕入先ごとに,一意の注文番号が割り当てられ,商品ごとに001から始まる注文枝番が連番で割り当てられる。 購買担当者の発注登録,仕入先の営業員の注文書出力及び購買システムの関係は図1のとおりである。 図1に示す破線で囲まれた注文書出力処理の開発を,購買システム構築プロジェクトのメンバK君が担当する。注文書出力処理は,仕入先の営業員が購買システムからJ社の注文書を出力するための処理である。 【注文書出力処理の説明】 (1) 仕入先の営業員が注文書を出力する操作の流れを図2に示す。 (2) 仕入先の端末の注文書出力画面には,まだ注文書として出力していない注文情報だけが,図3に示すように注文番号ごとの注文枝番ごとに一覧表示される。 (3) 購買システムから出力される注文書は,購買グループごとに作成され,注文情報が希望納期,注文番号,注文枝番の昇順に並んでいる。注文書の各ページには,最大5件の注文情報が含まれる。注文情報は,購買グループ名,希望納期,注文番号,注文枝番,商品番号,数量,納品場所,購買担当者などを要素としてもつ。 注文書出力画面と注文書の例を,それぞれ図3と図4に示す。 K君は,注文書出力画面で注文書出力ボタンがクリックされたときに実行する処理の一つである出力準備処理の流れ図を作成した。出力準備処理とは,注文書に含める注文情報を出力順に並べて出力ワーク領域に格納するものである。出力ワーク領域は,1回の注文書出力処理で出力される注文書に含まれる注文情報を格納する2次元配列である。出力ワーク領域[i][j]は,iが注文書のページを表し,jは注文書のページ内での出力順を表している。iもjも1から始まる。 出力準備処理は処理を開始するとき,注文書出力画面で選択された注文情報を,購買グループ名,希望納期,注文番号,注文枝番の順にそれぞれ昇順に整列して格納した1次元配列である注文データ[]と,注文情報件数を引数で受け取る。注文データ[1]には,注文書の1ページ目の第1番目に出力する注文情報が格納されている。 図1 図1「購買担当者の発注登録,仕入先の営業員の注文書出力及び購買システムの関係」:購買担当者が発注登録を行い,購買システム内の発注登録処理へつながる。仕入先の営業員の「注文書出力」操作は購買システム内の「注文書出力処理」へつながり,その結果が「注文書」として営業員に渡る。注文書出力処理は破線で囲まれている。 図2 図2「注文書を出力する操作の流れ」:開始 → 出力していない注文情報の一覧を注文書出力画面に表示する → 表示された注文情報の一覧から,自分が担当する商品の注文情報を選択する → 注文書出力ボタンをクリックして注文書を出力する → 終了。 図3 図3「注文書出力画面の例」:列は「選択」「注文番号」「注文枝番」「商品番号」「商品名」「数量」「希望納期」「購買グループ名」「購買担当者」。例として,A20170427001・001・X01SS001・XXXXXX・数量3・2017-04-27・Aグループ・情報太郎,A20170427001・002・Y01ZZ002・YYYYYY・数量1・2017-04-27・Aグループ・情報太郎,及びC20170512001・001・Z01ZZ001・ZZZZZZ・数量3・2017-05-12・Cグループ・試験五郎が表示されている。各行に選択欄がある。 図4 図4「注文書の例」:注文書には取引先名・住所,J株式会社,購買グループ名,連絡先,日付が記載される。明細の列見出しは注文番号/注文枝番,購買担当者,商品番号/商品名,数量/単価(円),希望納期/納品場所。1ページに最大5件の注文情報を載せる例。表示例の注文番号A20170427001,枝番001,購買担当者 情報太郎,商品番号X01SS001,商品名XXXXXX,数量3,単価300,希望納期2017-04-27,納品場所AREA-01。 図5 図5「出力準備処理の流れ図」:出力ワーク領域[1][1]を初期化。ページ変数←1,出力件数←1,購買グループ名変数←注文データ[1].購買グループ名,i←1,ページカウントフラグ←0。ループ中,i>注文情報件数なら終了。購買グループ名変数=注文データ[i].購買グループ名を判定する。同じ場合は,出力ワーク領域[ページ変数][出力件数]←注文データ[i]を行い,出力件数<bを判定する。Yesならページカウントフラグ←0,出力件数←出力件数+1。Noならページカウントフラグ←1,出力件数←a,ページ変数←ページ変数+1。グループ名が異なる場合は,購買グループ名変数←注文データ[i].購買グループ名,出力件数←aとする。ページカウントフラグ=0ならページ変数←ページ変数+1とし,その後ページカウントフラグ←0,出力ワーク領域[ページ変数][出力件数]←注文データ[i],出力件数←出力件数+1とする。いずれの場合もi←i+1として繰り返す。図中の番号付き箇所は,①出力件数←a,②出力ワーク領域[ページ変数][出力件数]←注文データ[i],③出力件数←a,④出力件数←出力件数+1。注記:注文データ[i].xxx及び出力ワーク領域[i][j].xxxは,それぞれの配列に格納された注文情報の要素xxxの値を表す。ページカウントフラグは,ページ変数を制御するフラグ。 図6 図6「注文データのテストデータ」:列は購買グループ名,希望納期,注文番号,注文枝番,商品番号,数量,購買担当者。注文データ[1]:Aグループ,2017-04-27,A20170427001,001,X01SS001,3,情報太郎。注文データ[2]:Aグループ,2017-04-27,A20170427001,002,Y01ZZ002,1,情報太郎。注文データ[3]:Aグループ,2017-04-30,A20170430001,001,D01SS001,3,情報太郎。注文データ[4]:Bグループ,2017-05-10,B20170510001,001,V01ZZ002,1,技術花子。注文データ[5]:Bグループ,2017-05-11,B20170511001,001,V01ZZ002,1,技術花子。注文データ[6]:Cグループ,2017-05-12,C20170512001,001,Y01ZZ001,3,試験五郎。注記:注文情報の一部の要素は省略してある。

問問5 設問1

図5中の空欄に入れる正しい答えを,解答群の中から選べ。 a、bに関する解答群 ア 0 イ 1 ウ 2 エ 3 オ 4 カ 5 キ 50

  • A-ア 0
  • A-イ 1
  • A-ウ 2
  • A-エ 3
  • A-オ 4
  • A-カ 5
  • A-キ 50
  • B-ア 0
  • B-イ 1
  • B-ウ 2
  • B-エ 3
  • B-オ 4
  • B-カ 5
  • B-キ 50

出典:平成29年度 春期 基本情報技術者試験 午後 問5 設問1

問問5 設問2

K君は,出力準備処理のホワイトボックステストを実施するために,図6に示す注文データのテストデータを作成した。図6の注文データを利用して出力準備処理をテストしたときに,図5のcの処理が行われなかった。K君は,全ての処理を実行するために,d。次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。 cに関する解答群 ア ① イ ② ウ ③ エ ④ dに関する解答群 ア 購買グループ名がAグループである注文情報を1件追加した イ 購買グループ名がBグループである注文情報を3件追加した ウ 購買グループ名がCグループである注文情報を2件追加した エ 購買グループ名がCグループである注文情報を3件追加した

  • C-ア ①
  • C-イ ②
  • C-ウ ③
  • C-エ ④
  • D-ア 購買グループ名がAグループである注文情報を1件追加した
  • D-イ 購買グループ名がBグループである注文情報を3件追加した
  • D-ウ 購買グループ名がCグループである注文情報を2件追加した
  • D-エ 購買グループ名がCグループである注文情報を3件追加した

出典:平成29年度 春期 基本情報技術者試験 午後 問5 設問2

問問5 設問3

出力準備処理のブラックボックステストを行う場合,K君が実施すべきこととして適切な答えを,解答群の中から選べ。

  • ア 流れ図の全ての分岐処理が実行されたことを確認する。
  • イ 入力として渡した引数の注文データ,注文情報件数の内容が仕様どおりであることを確認する。
  • ウ 入力として渡した引数の内容に対して出力ワーク領域の内容が仕様どおりであることを確認する。

出典:平成29年度 春期 基本情報技術者試験 午後 問5 設問3

共通の文章

問6 プロジェクトの要員計画に関する次の記述を読んで,設問1,2に答えよ。 A社では,社内で使用する新システムの構築に関するプロジェクトの検討を進めてきた。プロジェクトは,システム開発が大規模になるので,要員の確保と納期遵守の観点から,一期開発と二期開発から成る2段階の開発とした。開発チームは,A社の要員と,協力会社B社の要員で編成することにした。 〔プロジェクトの説明〕 (1) 開発規模は,一期開発及び二期開発ともに同一である。 (2) 開発は,ウォータフォールモデルに基づいて,外部設計,内部設計,プログラム開発(単体テストを含む),結合テスト及び総合テストの五つの工程に分ける。 (3) 一期開発は2017年4月に開始する。二期開発は,一期開発のプログラム開発の開始月に開始する。 (4) 各工程での月別要員計画の前提条件は,次のとおりである。 ① 業務ノウハウ蓄積の観点から,外部設計工程の要員には,A社の要員を80%以上割り当てる。 ② ①の条件を満たす最少の人数をA社の要員数とし,全期間を通して一定の人数とする。すなわち,A社の要員には,各月とも,全員が必ず担当する工程があるものとする。 ③ プログラム開発工程には,一期開発及び二期開発ともに,B社の要員だけを割り当てる。 ④ プログラム開発工程を除き,各月の必要要員については,まずA社の要員を割り当て,A社の要員だけでは不足する場合に,B社の要員を割り当てる。 ⑤ 一期開発と二期開発の作業が重なる期間については,A社の要員を,一期開発に優先して割り当てる。 ⑥ 一人が一期開発と二期開発の作業を同一月に行うことはない。 表1 表1「一期開発及び二期開発における各工程の工数及び配分月数」。工程の列順は外部設計、内部設計、プログラム開発、結合テスト、総合テスト。工数(人月)は一期開発が42.0、70.0、140.0、52.5、42.0、二期開発が38.1、63.0、127.2、48.0、38.1。配分月数は一期開発が3、3、(網掛けで非表示)、2、3、二期開発が3、3、(網掛けで非表示)、2、3。注記:網掛けの部分は表示していない。配分月数とは,あらかじめ各工程に配分した開発期間(月数)である。二期開発は一期開発における成果が活用できることから,一期開発よりも工数を削減することを目標とした。各月の要員数は「各工程の工数(人月)÷各工程の配分月数(月)」で算出し,小数点以下を切り上げた整数値とする。 各月の要員数の算出式 各月の要員数(人)=各工程の工数(人月)÷各工程の配分月数(月)。各月の要員数は,小数点以下を切り上げた整数値とする。 表2 表2「プログラム開発工程の配分月数を一期開発及び二期開発ともに4にする開発スケジュール案」。横軸は2017年4月から12月、続いて2018年1月から12月。工程スケジュールは、一期開発が外部設計2017年4~6月、内部設計7~9月、プログラム開発10月~2018年1月、結合テスト2018年2~3月、総合テスト4~6月。二期開発が外部設計2017年10~12月、内部設計2018年1~3月、プログラム開発4~7月、結合テスト8~9月、総合テスト10~12月。図中に数値が表示された要員セルは、一期開発のプログラム開発でA社0人・B社35人が各月(2017年10月~2018年1月)、二期開発のプログラム開発でA社0人・B社32人が各月(2018年4~7月)。その他の網掛け部分は表示されていない。 表3 表3「見直した開発スケジュール案」。横軸は2017年4月から12月、続いて2018年1月から12月。工程スケジュールは、一期開発が外部設計2017年4~6月、内部設計7~9月、プログラム開発10月~2018年2月(5か月)、結合テスト2018年3~4月、総合テスト5~7月。二期開発が外部設計2017年10~12月、内部設計2018年1~3月、プログラム開発4~7月(4か月)、結合テスト8~9月、総合テスト10~12月。図中に数値が表示された要員セルは、一期開発のA社がプログラム開発各月0人、B社がプログラム開発各月28人(2017年10月~2018年2月)、結合テスト各月15人(2018年3~4月)、総合テスト各月2人(2018年5~7月)。二期開発のA社はプログラム開発各月0人(2018年4~7月)、B社は内部設計2018年3月22人、プログラム開発各月33人(2018年4~7月)。網掛けの部分は表示していない。本文では、各月のB社の総要員数(一・二期開発のB社要員数の合計)は2018年4月が他の月より突出するピークであり、ピーク時の人数を減らして3~5月の各月の総要員数を等しくするため、この3か月間は各工程の月ごとの要員数が一定でなくてもよいとしている。

問問6 設問1

要員数に関する次の記述中の空欄に入れる適切な答えを,解答群の中から選べ。 一期開発及び二期開発における各工程の工数及び配分月数を表1のとおりに設定した。ここで,配分月数とは,あらかじめ各工程に配分した開発期間(月数)である。二期開発は,一期開発における成果が活用できることから,一期開発よりも工数を削減することを目標とした。 一期開発,二期開発それぞれにおける各工程の各月の要員数は,表1の工数及び配分月数から算出し,小数点以下を切り上げた整数値とする。A社の要員数は,〔プロジェクトの説明〕(4)の前提条件に基づき〔a〕人になる。一期開発の外部設計工程では,B社の要員数は,各月ともに〔b〕人になる。各月のB社の要員数がばらつくため,月ごとのB社の要員数をできるだけ平準化するよう,プログラム開発工程の配分月数を調整する。納期などの制約から,プログラム開発工程で許容される配分月数は3~5である。 プログラム開発工程の配分月数を一期開発及び二期開発ともに4にする開発スケジュール案を表2に示す。この案の場合,2018年〔c〕が〔プロジェクトの説明〕(4)の条件②を満たせない。これは,プログラム開発工程の配分月数を〔d〕又は「一期開発を5に,二期開発を4にする」ことで解消できる。a、bの解答群はa、bに共通する。 a、bに関する解答群 ア 2 イ 3 ウ 11 エ 12 オ 14 カ 42 cに関する解答群 ア 5月 イ 6月 ウ 7月 エ 8月 dに関する解答群 ア 一期開発を3に,二期開発を4にする イ 一期開発を3に,二期開発を5にする ウ 一期開発を4に,二期開発を3にする エ 一期開発を4に,二期開発を5にする

  • A-ア 2
  • A-イ 3
  • A-ウ 11
  • A-エ 12
  • A-オ 14
  • A-カ 42
  • B-ア 2
  • B-イ 3
  • B-ウ 11
  • B-エ 12
  • B-オ 14
  • B-カ 42
  • C-ア 5月
  • C-イ 6月
  • C-ウ 7月
  • C-エ 8月
  • D-ア 一期開発を3に,二期開発を4にする
  • D-イ 一期開発を3に,二期開発を5にする
  • D-ウ 一期開発を4に,二期開発を3にする
  • D-エ 一期開発を4に,二期開発を5にする

出典:平成29年度 春期 基本情報技術者試験 午後 問6 設問1

問問6 設問2

要員計画に関する次の記述中の空欄に入れる適切な答えを,解答群の中から選べ。 プログラム開発工程の配分月数を「一期開発を5に,二期開発を4にする」案を選択した。その上で,要員計画策定中にユーザ部門から二期開発の追加要件を受けて見直した開発スケジュール案を表3に示す。 各月のB社の総要員数(B社の一期開発及び二期開発の要員数の合計)は,ピーク時の2018年4月に他の月よりも突出する。ピーク時のB社の総要員数を減らし,3月から5月の3か月間の各月のB社の総要員数を等しくしたい。そのためには,この3か月間に実施する各工程の月ごとの要員数は一定ではなくなるが,4月の一期開発の要員のうち〔e〕人を3月に移動し,二期開発の要員のうち〔f〕人を5月に移動すればよい。e、fの解答群はe、fに共通する。 e、fに関する解答群 ア 1 イ 2 ウ 3 エ 4 オ 5 カ 6

  • E-ア 1
  • E-イ 2
  • E-ウ 3
  • E-エ 4
  • E-オ 5
  • E-カ 6
  • F-ア 1
  • F-イ 2
  • F-ウ 3
  • F-エ 4
  • F-オ 5
  • F-カ 6

出典:平成29年度 春期 基本情報技術者試験 午後 問6 設問2

共通の文章

問7 在庫補充方法の変更に関する次の記述を読んで,設問1~3に答えよ。 食品メーカのM社では,コスト削減やキャッシュフローの改善を目的として,自社の在庫補充方法を変更して在庫量の削減を図ることにした。従来は,毎週月曜日に,保管を委託している全ての配送倉庫の商品について,配送倉庫ごとに,当該週を含む4週間分の出荷予想量と在庫量を比較し,出荷予想量に満たない量を工場から補充していた。このたびM社では,出荷予想量を算出する期間を見直し,配送倉庫,商品群,賞味期限ごとに在庫基準量を設定し,在庫量が在庫基準量に満たない場合,その差を在庫補充量として補充することにした。この新しい在庫補充方法を次に示す。 【新しい在庫補充方法】 (1) 販売量が多い商品群A,中程度の商品群B,少ない商品群Cの商品群別に管理する。 (2) 賞味期限が短い商品(以下,短期品という)は,全ての商品群について2週間分の出荷予想量を在庫基準量とする。 (3) 賞味期限が中程度の商品(以下,中期品という)は,商品群Aについて2週間分の出荷予想量を,商品群B及びCについて3週間分の出荷予想量を在庫基準量とする。 (4) 賞味期限が長い商品(以下,長期品という)は,全ての商品群について3週間分の出荷予想量を在庫基準量とする。 (5) 配送倉庫の中には,工場から遠く,すぐに在庫を補充できない配送倉庫(以下,遠隔地倉庫という)がある。遠隔地倉庫における商品群Aの商品の在庫基準量は,(2)~(4)にかかわらず次のとおりとする。 ① 短期品は,2週間分の出荷予想量を在庫基準量とする。 ② 中期品は,3週間分の出荷予想量を在庫基準量とする。 ③ 長期品は,4週間分の出荷予想量を在庫基準量とする。 (6) 遠隔地倉庫における商品群B及びCの商品は全て,(2)~(4)にかかわらず4週間分の出荷予想量を在庫基準量とする。 表1 表1「新しい在庫補充方法における在庫基準量の決定表」。左から10列の条件の組合せ。遠隔地倉庫の行は N,N,N,N,N,N,Y,Y,Y,Y。A商品群の行は Y,Y,Y,N,N,N,Y,Y,Y,N。表中の d は賞味期限区分の2行分に対応し、上段は Y,N,N,Y,N,N,Y,N,N,-、下段は -,Y,N,-,Y,N,-,Y,N,-。在庫基準量の各行は左から、4週間分:-,-,-,(4列分が空欄e),-,-,X。3週間分:X,-,-,(4列分が空欄e),X,-,-。2週間分:-,X,X,(4列分が空欄e),-,X,-。 表2 表2「N配送倉庫の在庫量及び4週間分の出荷予想量」(単位:百箱)。列は商品、商品群、賞味期限の区分、在庫量、出荷予想量(1週目〔当該週〕、2週目、3週目、4週目)。行データ:P:A、短期品、在庫量120、出荷予想量100・80・50・70。Q:A、中期品、在庫量200、120・140・100・120。R:B、中期品、在庫量30、30・40・40・30。S:B、長期品、在庫量10、20・20・20・20。T:C、長期品、在庫量10、10・5・5・10。

問問7 設問1

在庫量を削減することによって期待される効果に関する次の記述中の空欄に入れる適切な答えを,解答群の中から選べ。 M社では,在庫量を削減することによって,原材料購入から商品販売までの期間を短くできるので,aできる。また,bの削減も期待できる。さらに,在庫として保有する期間が短くなるので,商品のcについても期待できる。 aに関する解答群 ア 売掛金の回収期間を短縮 イ 買掛金の支払期間を延長 ウ キャッシュの回収期間を短縮 エ 資金の調達期間を延長 bに関する解答群 ア 在庫スペースの縮小による保管コスト イ 商品種類の減少による管理コスト ウ 商品種類の減少による商品開発コスト エ フリーキャッシュフローの減少による事務コスト cに関する解答群 ア 欠品によって販売機会を逸失するリスクの低減 イ 限界利益率の低下 ウ 賞味期限切れが発生するリスクの低減 エ 損益分岐点販売量の増加

  • A-ア 売掛金の回収期間を短縮
  • A-イ 買掛金の支払期間を延長
  • A-ウ キャッシュの回収期間を短縮
  • A-エ 資金の調達期間を延長
  • B-ア 在庫スペースの縮小による保管コスト
  • B-イ 商品種類の減少による管理コスト
  • B-ウ 商品種類の減少による商品開発コスト
  • B-エ フリーキャッシュフローの減少による事務コスト
  • C-ア 欠品によって販売機会を逸失するリスクの低減
  • C-イ 限界利益率の低下
  • C-ウ 賞味期限切れが発生するリスクの低減
  • C-エ 損益分岐点販売量の増加

出典:平成29年度 春期 基本情報技術者試験 午後 問7 設問1

問問7 設問2

M社では,新しい在庫補充方法に合わせて在庫管理システムの変更を検討している。その準備として,在庫基準量を決定するために表1に示す決定表を作成した。表1中の空欄に入れる正しい答えを,解答群の中から選べ。 dに関する解答群 ア 上段:短期品、下段:中期品 イ 上段:短期品、下段:長期品 ウ 上段:中期品、下段:短期品 エ 上段:中期品、下段:長期品 オ 上段:長期品、下段:短期品 カ 上段:長期品、下段:中期品 eに関する解答群 ア 3行×4列:1行目 X,-,-,X/2行目 -,X,X,-/3行目 -,-,-,- イ 3行×4列:1行目 X,-,-,X/2行目 -,X,-,-/3行目 -,-,X,- ウ 3行×4列:1行目 -,-,-,X/2行目 X,X,X,-/3行目 -,-,-,- エ 3行×4列:1行目 -,-,-,X/2行目 X,X,-,-/3行目 -,-,X,- オ 3行×4列:1行目 -,-,-,-/2行目 X,X,-,X/3行目 -,-,X,- カ 3行×4列:1行目 -,-,-,-/2行目 X,-,-,X/3行目 -,X,X,-

  • D-ア 上段:短期品、下段:中期品
  • D-イ 上段:短期品、下段:長期品
  • D-ウ 上段:中期品、下段:短期品
  • D-エ 上段:中期品、下段:長期品
  • D-オ 上段:長期品、下段:短期品
  • D-カ 上段:長期品、下段:中期品
  • E-ア 3行×4列:1行目 X,-,-,X/2行目 -,X,X,-/3行目 -,-,-,-
  • E-イ 3行×4列:1行目 X,-,-,X/2行目 -,X,-,-/3行目 -,-,X,-
  • E-ウ 3行×4列:1行目 -,-,-,X/2行目 X,X,X,-/3行目 -,-,-,-
  • E-エ 3行×4列:1行目 -,-,-,X/2行目 X,X,-,-/3行目 -,-,X,-
  • E-オ 3行×4列:1行目 -,-,-,-/2行目 X,X,-,X/3行目 -,-,X,-
  • E-カ 3行×4列:1行目 -,-,-,-/2行目 X,-,-,X/3行目 -,X,X,-

出典:平成29年度 春期 基本情報技術者試験 午後 問7 設問2

問問7 設問3

M社では,新しい在庫補充方法による在庫量の削減効果を,遠隔地倉庫ではないN配送倉庫について見積もることにした。表2は,ある月曜日におけるN配送倉庫の在庫量及び4週間分の出荷予想量である。N配送倉庫の在庫補充量及び在庫量に関する次の記述中の空欄に入れる適切な答えを,解答群の中から選べ。 新しい在庫補充方法に基づく商品Pの在庫補充量はf百箱となる。また,商品Rの在庫補充量は,従来の在庫補充方法に基づく在庫補充量に比べてg百箱の削減となる。商品P,Q,R,S及びTの合計では,新しい在庫補充方法の導入によって従来の在庫補充方法に比べて,補充後の在庫量をh百箱削減できる。 f、g、hに関する解答群 ア 30 イ 60 ウ 70 エ 120 オ 170 カ 180 キ 230 ク 300 ケ 400 コ 440

  • F-ア 30
  • F-イ 60
  • F-ウ 70
  • F-エ 120
  • F-オ 170
  • F-カ 180
  • F-キ 230
  • F-ク 300
  • F-ケ 400
  • F-コ 440
  • G-ア 30
  • G-イ 60
  • G-ウ 70
  • G-エ 120
  • G-オ 170
  • G-カ 180
  • G-キ 230
  • G-ク 300
  • G-ケ 400
  • G-コ 440
  • H-ア 30
  • H-イ 60
  • H-ウ 70
  • H-エ 120
  • H-オ 170
  • H-カ 180
  • H-キ 230
  • H-ク 300
  • H-ケ 400
  • H-コ 440

出典:平成29年度 春期 基本情報技術者試験 午後 問7 設問3

共通の文章

問8「ShortestPath」:次のプログラムの説明及びプログラムを読んで、設問1、2に答える。副プログラム ShortestPath は、N個(N>1)の地点と、地点間を直接結ぶ経路及び距離が与えられたとき、出発地から目的地に至る最短経路とその距離を求める。最短経路とは、ある地点から別の地点へ最短距離で移動する際の経由地を結んだ経路である。この副プログラムでは、出発地の隣接地点から開始して、目的地に向かって最短距離を順次確定する。隣接地点とは、その地点から他の地点を経由せずに直接移動できる地点である。地点数Nが7の経路例では、各地点に0から始まる番号が順番に割り当てられ、線分は地点間を直接結ぶ経路、線分上の数字は距離を表す。経路上は双方向に移動できる。 図1 図1「地点数Nが7の経路の例」。地点は0~6。双方向の辺と距離は、0–1:2、0–2:8、0–3:4、1–4:3、2–4:2、2–5:3、3–5:8、4–6:9、5–6:3。これら以外の地点間に直接経路はない。 表1 表1「副プログラムShortestPathの引数の仕様」。Distance[][]:整数型、入力、地点間の距離を格納する2次元配列。nPoint:整数型、入力、地点数。sp:整数型、入力、出発地の地点番号。dp:整数型、入力、目的地の地点番号。sRoute[]:整数型、出力、出発地から目的地までの最短経路上の地点の地点番号を目的地から出発地までの順に設定する1次元配列。sDist:整数型、出力、出発地から目的地までの最短距離。配列の要素番号は0から始まる。出発地から目的地までを結ぶ経路は少なくとも一つ存在するものとする。 表2 Distance[i][j](i=0,…,nPoint−1、j=0,…,nPoint−1)には地点iから地点jまでの距離を格納する。同一地点の場合は0、地点iが地点jの隣接地点でない場合は−1。表2の列見出しはj、行見出しはi(いずれも0~6)。行列値:i=0は[0,2,8,4,−1,−1,−1]、i=1は[2,0,−1,−1,3,−1,−1]、i=2は[8,−1,0,−1,2,3,−1]、i=3は[4,−1,−1,0,−1,8,−1]、i=4は[−1,3,2,−1,0,−1,9]、i=5は[−1,−1,3,8,−1,0,3]、i=6は[−1,−1,−1,−1,9,3,0]。 プログラムの説明 プログラムの説明:(1) 引数の仕様は表1。(2) Distance[i][j]には地点iから地点jまでの距離を格納し、同一地点は0、隣接していない地点間は−1。(3) 行番号5~10で初期化する。sDistに∞(最大値を表す定数)を格納し、最短距離が未設定であることを示す。sRouteの全要素に−1を格納し、経路上の地点番号が未設定であることを示す。pDistは要素数nPointの配列で、全要素を∞に初期化する。pFixedは要素数nPointの論理型配列で、全要素をfalseに初期化し、最短距離が未確定であることを示す。距離が確定した地点ではpFixed[i]=trueとなり、その距離はpDist[i]に設定される。pFixed[i]=falseならpDist[i]は確定した最短距離ではない。(4) 行番号11でpDist[sp]に0を設定。(5) 行番号12~39で最短経路を探索する。行番号13~22ではpFixedを調べ、全地点の最短距離が確定していれば探索を抜ける。行番号23~29では、未確定地点のうち出発地からの距離が最も短い地点を探してsPointとし、その地点の最短距離を確定する。行番号30~38では各地点について、sPointの隣接地点で、かつ距離未確定なら、出発地からsPointを経由してその地点に至る距離を求める。それが既に算出してあるpDist[j]より短ければpDist[j]とpRoute[j]を更新する。pDist[j]は出発地から地点jまでの仮の最短距離、pRoute[j]は地点jの直前の経由地の地点番号。(6) 行番号40~48で出発地から目的地までの最短距離をsDistに設定し、最短経路上の地点番号を目的地から出発地までの順にsRouteに設定する。 プログラム プログラム(行番号と空欄):1 ShortestPath(Distance[][], nPoint, sp, dp, sRoute[], sDist)。2 整数型 pDist[nPoint], pRoute[nPoint]。3 論理型 pFixed[nPoint]。4 整数型 sPoint, i, j, newDist。5 sDist ← ∞。6~10 iを0からnPointまで1ずつ増やす反復の中で、7 sRoute[i]←−1、8 pDist[i]←∞、9 pFixed[i]←false。11 pDist[sp]←0。12 true(最短経路探索処理)。13 i←0。14~19 iを0からnPoint未満まで1ずつ増やし、15 not(pFixed[i])なら16 break。18 i←i+1。20 i=nPointなら21 break。23~27 jをi+1からnPoint未満まで1ずつ増やす反復:24 [a] and pDist[j]<pDist[i]なら25 i←j。28 sPoint←i。29 pFixed[[b]]←true。30~38 jを0からnPoint未満まで1ずつ増やす反復:31 Distance[sPoint][j]>0 and not(pFixed[j])なら32 newDist←pDist[sPoint]+Distance[sPoint][j]。33 newDist<pDist[j]なら34 pDist[j]←newDist、35 pRoute[j]←sPoint。40 sDist←pDist[dp]。41 j←0。42 i←dp。43 i≠spの間、44 [c]←i、45 i←[d]、46 j←j+1。48 [c]←sp。 表3 表3「βにおける配列pDistと配列pRouteの値」。探索処理の1回目:pDist=[0,2,8,4,∞,∞,∞]、pRoute=[0,0,0,0,0,0,0]。2回目:pDist=[0,2,8,4,5,∞,∞]、pRoute=[0,0,0,0,1,0,0]。3回目は空欄fとg。表の続きは省略記号。設問文に、pRouteの全要素は初期値として0が格納されているものとする、とある。

問問8 設問1

プログラム中の空欄a~dに入れる正しい答えを、解答群の中から選ぶ。 aに関する解答群 ア not(pFixed[i]) イ not(pFixed[j]) ウ pFixed[i] エ pFixed[j] bに関する解答群 ア dp イ nPoint ウ nPoint−1 エ sp オ sPoint c、dに関する解答群 ア pRoute[dp] イ pRoute[i] ウ pRoute[j] エ pRoute[sp] オ sRoute[dp] カ sRoute[i] キ sRoute[j] ク sRoute[sp]

  • A-ア not(pFixed[i])
  • A-イ not(pFixed[j])
  • A-ウ pFixed[i]
  • A-エ pFixed[j]
  • B-ア dp
  • B-イ nPoint
  • B-ウ nPoint−1
  • B-エ sp
  • B-オ sPoint
  • C-ア pRoute[dp]
  • C-イ pRoute[i]
  • C-ウ pRoute[j]
  • C-エ pRoute[sp]
  • C-オ sRoute[dp]
  • C-カ sRoute[i]
  • C-キ sRoute[j]
  • C-ク sRoute[sp]
  • D-ア pRoute[dp]
  • D-イ pRoute[i]
  • D-ウ pRoute[j]
  • D-エ pRoute[sp]
  • D-オ sRoute[dp]
  • D-カ sRoute[i]
  • D-キ sRoute[j]
  • D-ク sRoute[sp]

出典:平成29年度 春期 基本情報技術者試験 午後 問8 設問1

問問8 設問2

図1で出発地の地点番号sp=0、目的地の地点番号dp=6の場合について、プログラムの動きを追跡する。行番号12~39の最短経路探索処理の繰返しで、行番号28のαにおいてsPointに代入された値は、繰返しの1回目が0、2回目が1、3回目がeとなる。また、行番号30~38の処理が終了した直後のβにおける配列pDistと配列pRouteの値を表3に示す。最短経路探索処理の繰返しが3回目のときのβにおける配列pDistの値はfとなり、配列pRouteの値はgとなる。 eに関する解答群 ア 2 イ 3 ウ 4 エ 5 オ 6 fに関する解答群 ア 0,2,8,4,5,10,14 イ 0,2,8,4,5,10,∞ ウ 0,2,8,4,5,11,14 エ 0,2,8,4,5,11,∞ オ 0,2,8,4,5,12,14 カ 0,2,8,4,5,12,∞ gに関する解答群 ア 0,0,0,0,1,3,0 イ 0,0,0,0,1,3,5 ウ 0,0,0,0,2,2,0 エ 0,0,0,0,2,2,5 オ 0,0,4,0,1,2,0 カ 0,0,4,0,2,2,5

  • E-ア 2
  • E-イ 3
  • E-ウ 4
  • E-エ 5
  • E-オ 6
  • F-ア 0,2,8,4,5,10,14
  • F-イ 0,2,8,4,5,10,∞
  • F-ウ 0,2,8,4,5,11,14
  • F-エ 0,2,8,4,5,11,∞
  • F-オ 0,2,8,4,5,12,14
  • F-カ 0,2,8,4,5,12,∞
  • G-ア 0,0,0,0,1,3,0
  • G-イ 0,0,0,0,1,3,5
  • G-ウ 0,0,0,0,2,2,0
  • G-エ 0,0,0,0,2,2,5
  • G-オ 0,0,4,0,1,2,0
  • G-カ 0,0,4,0,2,2,5

出典:平成29年度 春期 基本情報技術者試験 午後 問8 設問2

共通の文章

問9 次のCプログラムの説明及びプログラムを読んで,設問1~3に答えよ。 マーク式試験の答案を採点するプログラムである。問題と受験者の解答の例を,図1に示す。 ここでは,unsigned int 型のデータは,16ビットのビット列で表し,連続する8ビットが全て0のときは0…0,全て1のときは1…1と表記する。 図1 図1「問題と受験者の解答の例」。問題欄には、問11「次のうち,面積が最も大きいのはどれか。」の選択肢ⓐ 2,000mm²、ⓑ 30cm²、ⓒ 0.004m²と、問12「x²−x−2=0を満たすxの値を,二つ選べ。」の選択肢ⓐ −2、ⓑ −1、ⓒ 0、ⓓ 1、ⓔ 2が示されている。受験者の解答欄では、問11はⓒ、問12はⓑとⓓが黒く塗られている。 関数 marking の仕様 関数 marking は,1回の実行で受験者1人分の答案を採点する。引数の仕様:numQ(int、入力)は問題数を格納した変数。type[](int、入力)は各問の解答形式を格納した配列。ansC[](unsigned int、入力)は各問の正答を格納した配列。ansE[](unsigned int、入力)は各問の受験者の解答を格納した配列。mark[](int、出力)は各問の採点結果を格納する配列。① 問の数はnumQであり,引数である各配列の要素数もnumQである。② 1問当たりの選択肢の個数は16個以下である。③ type[]の各要素には,答えを一つマークする問の場合は1,複数個マークする問の場合はマークする個数n(2≦n≦8)が格納されている。④ ansC[]の各要素は16ビットのビット列で,最上位のビットから1ビットずつ順に選択肢ⓐ、ⓑ、…に対応し,正答の選択肢に対応するビット位置に1が格納されている。他の全てのビットは0である。⑤ ansE[]の各要素はansC[]と同様の形式で,受験者の解答が格納されている。 図2 図2「正答及び受験者の解答の格納形式と格納例」。問12の選択肢ⓐ〜ⓔに対応するビット位置は左から順に並び,正答はⓑとⓔが黒丸で,ansC[11] は「0 1 0 0 1 0 0 0 0…0」。受験者の解答はⓑとⓓが黒丸で,ansE[11] は「0 1 0 1 0 0 0 0 0…0」。 表1 表1「解答形式に応じた各問の採点方法」。解答形式「答えを一つマークする問」ではtype[i]の値は1で,ansC[i]=ansE[i](正解)ならmark[i]に1,ansC[i]≠ansE[i](不正解)なら0を格納する。解答形式「答えを複数個マークする問」ではtype[i]の値はn(2≦n≦8)。ansE[i]中の1のビット数がn+1個以上なら0を格納し,n個以下ならansC[i]とansE[i]の対応するビットがともに1である個数を格納する。 プログラム1 プログラム1(原プログラム)。 void marking(int numQ, int type[], unsigned int ansC[], unsigned int ansE[], int mark[]) { int i; /* α */ for (i = 0; i < numQ; i++) { mark[i] = 0; if (type[i] == 1) { if (ansE[i] == ansC[i]) { mark[i] = 1; } } else if ((2 <= type[i]) && (type[i] <= 8)) { if (countMarkBits([a]) <= [b]) { mark[i] = countMarkBits([c]); } } /* β */ } } 設問1 解答群 設問1の解答群(a〜c共通)。ア:2。イ:3。ウ:ansC[i]。エ:ansC[i] & ansE[i]。オ:ansC[i] | ansE[i]。カ:ansE[i]。キ:type[i]。ク:type[i] + 1。 プログラム2と設問2の説明 プログラム2。 int countMarkBits(unsigned int ans) { int count = 0; unsigned int work = ans; while (work != 0) { count++; work = work & (work - 1); /* γ */ } return count; } /* γ */の代入式の実行前のworkが「0101 0000 0…0」のとき,実行後のworkの値を空欄dに入れる。また,/* γ */の代入式を「work = work && (work - 1);」に変更してプログラム2の実行を試みた場合について,空欄eに入る記述を選ぶ。 設問2 d 解答群 設問2のdに関する解答群。ア:「0001 0000 0…0」。イ:「0100 0000 0…0」。ウ:「0100 1111 1…1」。エ:「1001 0000 0…0」。 設問2 e 解答群 設問2のeに関する解答群。ア:演算子&&と&とは実行する演算の内容が同じなので,正しい結果を返す。イ:演算子&&はビットごとの論理積を求めることはしないので,誤った結果を返す。ウ:変数workには実行前の値が保持されたまま変わらないので,無限ループになる。 順不同形式の説明 設問3の説明。解答形式に順不同形式を追加する。順不同形式とは,答えを一つマークする問が2問以上連続していて,共通の解答群から答えを選んでいくが,その選択の順序は入れ替わってもよい形式である。図3の例では,問21、22、23の順に正答ⓑ、ⓓ、ⓔが設定されているが,受験者の解答例のように異なる順序で解答してもよい。正しい答えが幾つ選択されたかによって採点結果が決まる。順不同形式を表すtype[]の値は11〜13。一組の順不同形式の問題では,値11は先頭の問,値13は末尾の問を表す。値12は3問以上から成る順不同形式の問題における中間の問を表す。 図3 図3「順不同形式の問題,正答及び受験者の解答の例」。問題は「問21〜23 次の府県のうち,海に面していないのは[問21],[問22]及び[問23]である。」選択肢はⓐ 大阪、ⓑ 岐阜、ⓒ 京都、ⓓ 滋賀、ⓔ 奈良、ⓕ 兵庫、ⓖ 三重。正答欄は問21でⓑ、問22でⓓ、問23でⓔが黒丸。受験者の解答欄は問21でⓔ、問22でⓑ、問23でⓓが黒丸。 修正後のプログラム1 順不同形式に対応するためのプログラム1の修正。(1) コメント /* α */ の行を「unsigned int sumC, sumE;」の1行で置き換える。(2) コメント /* β */ の行を次のコードで置き換える。 else if ((11 <= type[i]) && (type[i] <= 13)) { if (type[i] == 11) { sumC = 0; sumE = 0; } sumC = sumC | ansC[i]; if (countMarkBits(ansE[i]) == 1) { sumE = sumE | ansE[i]; } if (type[i] == 13) { mark[i] = countMarkBits(sumC & sumE); } } 図4 図4「関数 marking に渡された配列の内容及び採点結果」。列は解答形式、正答、受験者の解答、採点結果。行は次のとおり。type[20]=11、ansC[20]=「0100 0000 0…0」、ansE[20]=「0000 1000 0…0」。type[21]=12、ansC[21]=「0001 0000 0…0」、ansE[21]=「0000 1000 0…0」。type[22]=13、ansC[22]=「0000 1000 0…0」、ansE[22]=「0101 0000 0…0」。採点結果mark[20]、mark[21]、mark[22]の値の組を空欄fで選ぶ。採点完了時点のsumEの値を空欄gで選ぶ。 設問3 f 解答群 設問3のfに関する解答群(mark[20]、mark[21]、mark[22]の順)。ア:(0, 0, 1)。イ:(0, 0, 3)。ウ:(0, 1, 0)。エ:(0, 1, 2)。オ:(1, 0, 0)。カ:(1, 0, 2)。 設問3 g 解答群 設問3のgに関する解答群。ア:「0…0 0…0」。イ:「0000 1000 0…0」。ウ:「0101 0000 0…0」。エ:「0101 1000 0…0」。

問問9 設問1

プログラム1中の空欄に入れる正しい答えを,解答群の中から選べ。 a、b、cに関する解答群 ア 2 イ 3 ウ ansC[i] エ ansC[i] & ansE[i] オ ansC[i] | ansE[i] カ ansE[i] キ type[i] ク type[i] + 1

  • A-ア 2
  • A-イ 3
  • A-ウ ansC[i]
  • A-エ ansC[i] & ansE[i]
  • A-オ ansC[i] | ansE[i]
  • A-カ ansE[i]
  • A-キ type[i]
  • A-ク type[i] + 1
  • B-ア 2
  • B-イ 3
  • B-ウ ansC[i]
  • B-エ ansC[i] & ansE[i]
  • B-オ ansC[i] | ansE[i]
  • B-カ ansE[i]
  • B-キ type[i]
  • B-ク type[i] + 1
  • C-ア 2
  • C-イ 3
  • C-ウ ansC[i]
  • C-エ ansC[i] & ansE[i]
  • C-オ ansC[i] | ansE[i]
  • C-カ ansE[i]
  • C-キ type[i]
  • C-ク type[i] + 1

出典:平成29年度 春期 基本情報技術者試験 午後 問9 設問1

問問9 設問2

関数countMarkBitsのプログラム2について,記述中の空欄に入れる正しい答えを解答群の中から選べ。 dに関する解答群 ア 0001 0000 0…0 イ 0100 0000 0…0 ウ 0100 1111 1…1 エ 1001 0000 0…0 eに関する解答群 ア 演算子&&と&とは実行する演算の内容が同じなので,正しい結果を返す イ 演算子&&はビットごとの論理積を求めることはしないので,誤った結果を返す ウ 変数workには実行前の値が保持されたまま変わらないので,無限ループになる

  • D-ア 0001 0000 0…0
  • D-イ 0100 0000 0…0
  • D-ウ 0100 1111 1…1
  • D-エ 1001 0000 0…0
  • E-ア 演算子&&と&とは実行する演算の内容が同じなので,正しい結果を返す
  • E-イ 演算子&&はビットごとの論理積を求めることはしないので,誤った結果を返す
  • E-ウ 変数workには実行前の値が保持されたまま変わらないので,無限ループになる

出典:平成29年度 春期 基本情報技術者試験 午後 問9 設問2

問問9 設問3

次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。 fに関する解答群 ア mark[20], mark[21], mark[22]の順に (0, 0, 1) イ mark[20], mark[21], mark[22]の順に (0, 0, 3) ウ mark[20], mark[21], mark[22]の順に (0, 1, 0) エ mark[20], mark[21], mark[22]の順に (0, 1, 2) オ mark[20], mark[21], mark[22]の順に (1, 0, 0) カ mark[20], mark[21], mark[22]の順に (1, 0, 2) gに関する解答群 ア 0…0 0…0 イ 0000 1000 0…0 ウ 0101 0000 0…0 エ 0101 1000 0…0

  • F-ア mark[20], mark[21], mark[22]の順に (0, 0, 1)
  • F-イ mark[20], mark[21], mark[22]の順に (0, 0, 3)
  • F-ウ mark[20], mark[21], mark[22]の順に (0, 1, 0)
  • F-エ mark[20], mark[21], mark[22]の順に (0, 1, 2)
  • F-オ mark[20], mark[21], mark[22]の順に (1, 0, 0)
  • F-カ mark[20], mark[21], mark[22]の順に (1, 0, 2)
  • G-ア 0…0 0…0
  • G-イ 0000 1000 0…0
  • G-ウ 0101 0000 0…0
  • G-エ 0101 1000 0…0

出典:平成29年度 春期 基本情報技術者試験 午後 問9 設問3

共通の文章

問10 次のCOBOLプログラムの説明及びプログラムを読んで,設問1,2に答えよ。 【プログラムの説明】 八つの支店をもつZ社は4月~翌年3月を事業年度としており,毎年4月に前年度の売上データを集計して売上マスタファイルに格納する。このプログラムは,売上伝票ファイルに格納された前年度の売上データを集計して,売上マスタファイルに格納する。 図1 売上伝票ファイルのレコード様式 図1 売上伝票ファイルのレコード様式。順ファイル。項目は,支店番号(2桁),伝票番号(6桁),売上日(8桁),売上金額(6桁)。 ① 売上伝票ファイルには,前年度の全支店の売上データが,順不同で格納されている。レコード件数がゼロの月はない。 ② 支店番号には,各支店に対応する01~08の番号が格納されている。支店1は01,支店2は02,…,支店8は08である。 ③ 伝票番号には,各支店で一意となる6桁の数字が格納されている。 ④ 売上日には,西暦の年,月,日が,それぞれ4桁,2桁,2桁で格納されている。 図2 売上マスタファイルのレコード様式 図2 売上マスタファイルのレコード様式。索引ファイルで,主キーは売上年月。項目は,売上年月(6桁),売上金額合計(10桁),支店別売上金額(支店1~支店8の各9桁)。 ① 売上年月には,西暦の年,月が,それぞれ4桁,2桁で格納される。 ② 支店別売上金額には,当該年月における各支店の売上金額が格納される。各支店の月間の売上金額が9桁を超えることはない。 ③ 売上金額合計には,当該年月における全支店の売上金額の合計が格納される。 ④ 売上マスタファイルには,このプログラムを実行する時点で,2000年度から前々年度までのデータが格納されている。 プログラム プログラム(行番号付き。空欄 a~d は原本の空欄のまま)。 1 DATA DIVISION. 2 FILE SECTION. 3 SD SRT-FILE. 4 01 SRT-REC. 5 02 SRT-BRANCH PIC 9(2). 6 02 SRT-NO PIC 9(6). 7 02 SRT-DATE. 8 03 SRT-YYYYMM PIC 9(6). 9 03 SRT-DD PIC 9(2). 10 02 SRT-AMOUNT PIC 9(6). 11 FD SAL-FILE. 12 01 SAL-REC PIC X(22). 13 FD MST-FILE. 14 01 MST-REC. 15 02 MST-YYYYMM. 16 03 MST-YYYY PIC 9(4). 17 03 MST-MM PIC 9(2). 18 02 MST-AMOUNT PIC 9(10). 19 02 MST-TABLE. 20 03 MST-BRANCH PIC 9(9) OCCURS 8. 21 WORKING-STORAGE SECTION. 22 77 CNT PIC 9(1). 23 77 SRT-FLAG PIC X(1) VALUE SPACE. 24 88 SRT-EOF VALUE ”E”. 25 PROCEDURE DIVISION. 26 MAIN-PROC. 27 OPEN EXTEND MST-FILE. 28 SORT SRT-FILE ASCENDING KEY [a] 29 USING SAL-FILE 30 OUTPUT PROCEDURE IS RET-PROC. 31 CLOSE MST-FILE. 32 STOP RUN. 33 RET-PROC. 34 INITIALIZE MST-REC. 35 PERFORM UNTIL SRT-EOF 36 RETURN SRT-FILE AT END SET SRT-EOF TO TRUE 37 PERFORM WRI-PROC 38 NOT AT END PERFORM ADD-PROC 39 END-RETURN 40 END-PERFORM. 41 ADD-PROC. 42 IF [b] THEN 43 PERFORM WRI-PROC 44 INITIALIZE MST-REC 45 MOVE SRT-YYYYMM TO MST-YYYYMM 46 END-IF. 47 [c]. 48 WRI-PROC. 49 IF MST-YYYY NOT = ZERO THEN 50 PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 8 51 [d] 52 END-PERFORM 53 WRITE MST-REC 54 END-IF. 図3 表示例 図3 表示例。1ST QUARTER: 736,055,716/2ND QUARTER: 1,088,207,339/3RD QUARTER: 865,163,702/4TH QUARTER: 1,224,859,224。 表1 プログラムの変更内容 表1 プログラムの変更内容。行番号17と18の間に追加:88 QUART-MONTH VALUES [f]. 行番号24と25の間に追加:77 QUART-AMOUNT PIC 9(11) VALUE ZERO./77 QUART-AMOUNT-D PIC ZZ,ZZZ,ZZZ,ZZ9./77 CR-QUART PIC 9(1) VALUE 1./01 QUART-STR PIC X(8) VALUE ”STNDRDTH”./01 QUART-TBL REDEFINES QUART-STR./02 QUART-NO PIC X(2) OCCURS 4. 行番号欄が空欄 e の箇所に追加:ADD MST-AMOUNT TO QUART-AMOUNT/IF QUART-MONTH THEN/ MOVE QUART-AMOUNT TO QUART-AMOUNT-D/ DISPLAY CR-QUART QUART-NO(CR-QUART)/ ” QUARTER: ” QUART-AMOUNT-D/ MOVE ZERO TO QUART-AMOUNT/ [g]/END-IF。 設問2の条件 設問2の条件。前年度の売上データを集計して売上マスタファイルに格納する際,第1四半期から第4四半期の順に,当該四半期における全支店の売上金額の合計を表示するようにプログラムを変更する。第1四半期から第4四半期は,それぞれ4月~6月,7月~9月,10月~12月,1月~3月である。

問問10 設問1

プログラム中の空欄に入れる正しい答えを,解答群の中から選べ。 aに関する解答群 ア SRT-AMOUNT イ SRT-BRANCH ウ SRT-DATE エ SRT-NO bに関する解答群 ア MST-YYYYMM = SRT-YYYYMM イ MST-YYYYMM NOT = SRT-YYYYMM ウ MST-YYYYMM = ZERO エ SRT-YYYYMM = ZERO c、dに関する解答群 ア ADD MST-BRANCH(CNT) TO MST-AMOUNT イ ADD MST-BRANCH(SRT-BRANCH) TO MST-AMOUNT ウ ADD SRT-AMOUNT TO MST-BRANCH(CNT) エ ADD SRT-AMOUNT TO MST-BRANCH(SRT-BRANCH) オ MOVE SRT-AMOUNT TO MST-BRANCH(SRT-BRANCH)

  • A-ア SRT-AMOUNT
  • A-イ SRT-BRANCH
  • A-ウ SRT-DATE
  • A-エ SRT-NO
  • B-ア MST-YYYYMM = SRT-YYYYMM
  • B-イ MST-YYYYMM NOT = SRT-YYYYMM
  • B-ウ MST-YYYYMM = ZERO
  • B-エ SRT-YYYYMM = ZERO
  • C-ア ADD MST-BRANCH(CNT) TO MST-AMOUNT
  • C-イ ADD MST-BRANCH(SRT-BRANCH) TO MST-AMOUNT
  • C-ウ ADD SRT-AMOUNT TO MST-BRANCH(CNT)
  • C-エ ADD SRT-AMOUNT TO MST-BRANCH(SRT-BRANCH)
  • C-オ MOVE SRT-AMOUNT TO MST-BRANCH(SRT-BRANCH)
  • D-ア ADD MST-BRANCH(CNT) TO MST-AMOUNT
  • D-イ ADD MST-BRANCH(SRT-BRANCH) TO MST-AMOUNT
  • D-ウ ADD SRT-AMOUNT TO MST-BRANCH(CNT)
  • D-エ ADD SRT-AMOUNT TO MST-BRANCH(SRT-BRANCH)
  • D-オ MOVE SRT-AMOUNT TO MST-BRANCH(SRT-BRANCH)

出典:平成29年度 春期 基本情報技術者試験 午後 問10 設問1

問問10 設問2

前年度の売上データを集計して,売上マスタファイルに格納する際に,第1四半期から第4四半期の順に,当該四半期における全支店の売上金額の合計を表示するようにプログラムを変更する。第1四半期から第4四半期は,それぞれ4月~6月,7月~9月,10月~12月,1月~3月である。表1中の空欄に入れる正しい答えを,解答群の中から選べ。 eに関する解答群 ア 行番号30と31の間 イ 行番号40と41の間 ウ 行番号47と48の間 エ 行番号52と53の間 fに関する解答群 ア 1 THRU 12 イ 4 THRU 3 ウ 4, 7, 10, 1 エ 6, 9, 12, 3 gに関する解答群 ア ADD 1 TO CR-QUART イ ADD 3 TO CR-QUART ウ MOVE CNT TO CR-QUART エ MOVE ZERO TO CR-QUART

  • E-ア 行番号30と31の間
  • E-イ 行番号40と41の間
  • E-ウ 行番号47と48の間
  • E-エ 行番号52と53の間
  • F-ア 1 THRU 12
  • F-イ 4 THRU 3
  • F-ウ 4, 7, 10, 1
  • F-エ 6, 9, 12, 3
  • G-ア ADD 1 TO CR-QUART
  • G-イ ADD 3 TO CR-QUART
  • G-ウ MOVE CNT TO CR-QUART
  • G-エ MOVE ZERO TO CR-QUART

出典:平成29年度 春期 基本情報技術者試験 午後 問10 設問2

共通の文章

問11 次のJavaプログラムの説明及びプログラムを読んで,設問1,2に答える。電気料金プラン(以下,プランという)を比較するためのプログラムである。電気料金は,基本料金,及び電気の使用量(以下,電力量という)から算出される電力量料金から成る。電力量の単位は,キロワット時(kWh)である。電力量料金を算出するための1kWh当たりの料金(以下,料金単価という)は,電力量に応じて段階的に変わる。プランA及びプランBの料金表を表1に示す。例えば,プランAで,使用した電力量が200.5 kWhのとき,120 kWh分に対して19.62円/kWh,残りの80.5 kWhに対して26.10円/kWhの料金単価が適用される。 抽象クラスTierTableは,段階的に変化する値のペアをテーブルとして表現する。値は,型doubleで与えられる。コンストラクタは,可変長の引数で与えられたdoubleの数値2個ずつをペアとして配列にし,更にその配列を要素とする配列を生成し,フィールドpairsに保持する。引数tiersの長さが奇数のときは,IllegalArgumentExceptionを投げる。抽象メソッドmapは,引数で与えられた数値を別の数値に変換して返す。 クラスTieredRateTableは,料金単価のテーブルを表す。コンストラクタは,引数で与えられた電力量とそれに対応する料金単価のペアからテーブルを作成する。メソッドmapは,引数で与えられた電力量から電力量料金を計算し,その値を返す。 クラスRatePlanは,プランを表す。コンストラクタは,引数で与えられたプラン名,基本料金,料金単価のテーブルで表されるインスタンスを生成する。メソッドgetNameは,プラン名を返す。メソッドgetPriceは,引数で与えられた電力量から電力量料金を計算し,その値と基本料金の合計を型intの数値で返す。このとき,小数点以下は切り捨てられる。 クラスMainは,表1を基にプランA及びプランBを表すRatePlanのインスタンスを生成し,電力量が543.0 kWhのときの電気料金を比較する。メソッドmainを実行すると,図1の結果が得られる。 表1 表1「プランA及びプランBの料金表」。列は「プラン」「プランA」「プランB」。基本料金(円):プランA 1123.30,プランB 1040.10。料金単価(円/kWh):120 kWhまで—プランA 19.62,プランB 18.17;120 kWh超過300 kWhまで—プランA 26.10,プランB 24.17;300 kWh超過分—プランA 30.12,プランB 27.77。 プログラム1 プログラム1: ```java [a] class TierTable { final double[][] pairs; TierTable(double... tiers) { if (tiers.length % 2 == 1) { throw new IllegalArgumentException("不正な長さ: " + tiers.length); } double[][] a = new double[tiers.length / 2][]; for (int i = 0; i < tiers.length; i += 2) { a[b] = new double[] { tiers[i], tiers[i + 1] }; } this.pairs = a; } abstract double map(double amount); } ``` プログラム2 プログラム2: ```java class TieredRateTable extends TierTable { TieredRateTable(double... tiers) { super(tiers); } double map(double amount) { double charge = 0; for (int i = 0; i < pairs.length; i++) { if (i + 1 < pairs.length && amount > pairs[i + 1][0]) { charge += (pairs[c] - pairs[d]) * pairs[i][1]; } else { charge += (amount - pairs[i][0]) * pairs[i][1]; break; } } return charge; } } ``` プログラム3 プログラム3: ```java class RatePlan { private final String name; private final double basicCharge; private final TierTable pricingTiers; RatePlan(String name, double basicCharge, TierTable pricingTiers) { this.name = name; this.basicCharge = basicCharge; this.pricingTiers = pricingTiers; } String getName() { return name; } int getPrice(double amount) { return (int) (basicCharge + pricingTiers.map(amount)); } } ``` プログラム4 プログラム4: ```java public class Main { public static void main(String[] args) { RatePlan planA = new RatePlan("プランA", 1123.30, new TieredRateTable(0, 19.62, 120, 26.10, 300, 30.12)); RatePlan planB = new RatePlan("プランB", 1040.10, new TieredRateTable(0, 18.17, 120, 24.17, 300, 27.77)); double amount = 543.0; int d = planA.getPrice(amount) - planB.getPrice(amount); if (d < 0) { System.out.printf("%sが%d円安い%n", planA.getName(), -d); } else if (d > 0) { System.out.printf("%sが%d円安い%n", planB.getName(), d); } else { System.out.println("両プランで同額"); } } } ``` 図1 図1「メソッドmainの実行結果」:枠内に「プランBが1175円安い」と表示されている。 割引プランの説明 設問2の割引プランは,指定した他のサービスを電気と一緒に利用した場合には,プランAやプランBという当初のプランで計算した電気料金を,電気料金の額に応じて割り引くプランである。割引プランの割引率の例を表2に示す。割引率は小数で与えるものとする。例えば,1%は0.01である。 表2 表2「割引プランの割引率の例」。列は「電気料金」「割引率」。5,000円未満—1%;5,000円以上8,000円未満—3%;8,000円以上—5%。 プログラム5 プログラム5:割引率を求めるためのクラスDiscountTable。メソッドmapは,引数で与えられた電気料金から割引率を求め,その値を返す。 ```java class DiscountTable extends TierTable { DiscountTable(double... tiers) { super(tiers); } double map(double amount) { for (int i = pairs.length - 1; i >= 0; i--) { if (amount >= pairs[i][0]) { return pairs[i][1]; } } throw new IllegalArgumentException("amount = " + amount); } } ``` プログラム6 プログラム6:割引プランを表すクラスDiscountPlan。DiscountPlanは,クラスRatePlanを拡張し,上位クラスであるRatePlanのメソッドgetPriceで求めた電気料金から割引率を求め,割引を適用した金額を電気料金として計算する。 ```java class DiscountPlan [e] RatePlan { private final TierTable discountTiers; DiscountPlan(String name, double basicCharge, TierTable pricingTiers, TierTable discountTiers) { super(name, basicCharge, pricingTiers); this.discountTiers = discountTiers; } int getPrice(double amount) { int price = [f].getPrice(amount); return (int) (price * [g]); } } ```

問問11 設問1

プログラム中の空欄に入れる正しい答えを,解答群の中から選べ。 aに関する解答群 ア abstract イ final ウ private エ protected オ public カ static bに関する解答群 ア i イ i - 1 ウ i * 2 エ i / 2 オ i / 2 + 1 カ i + 1 c、dに関する解答群 ア [i + 1][0] イ [i + 1][1] ウ [i + 1][i] エ [i][0] オ [i][1] カ [i][i + 1]

  • A-ア abstract
  • A-イ final
  • A-ウ private
  • A-エ protected
  • A-オ public
  • A-カ static
  • B-ア i
  • B-イ i - 1
  • B-ウ i * 2
  • B-エ i / 2
  • B-オ i / 2 + 1
  • B-カ i + 1
  • C-ア [i + 1][0]
  • C-イ [i + 1][1]
  • C-ウ [i + 1][i]
  • C-エ [i][0]
  • C-オ [i][1]
  • C-カ [i][i + 1]
  • D-ア [i + 1][0]
  • D-イ [i + 1][1]
  • D-ウ [i + 1][i]
  • D-エ [i][0]
  • D-オ [i][1]
  • D-カ [i][i + 1]

出典:平成29年度 春期 基本情報技術者試験 午後 問11 設問1

問問11 設問2

プログラム中の空欄に入れる正しい答えを,解答群の中から選べ。 eに関する解答群 ア extends イ implements ウ imports エ public オ throws fに関する解答群 ア ((RatePlan) this) イ RatePlan ウ super エ this オ TieredRateTable カ TierTable gに関する解答群 ア (1.0 - discountTiers.map(amount)) イ (1.0 - discountTiers.map(basicCharge)) ウ (1.0 - discountTiers.map(price)) エ discountTiers.map(amount) オ discountTiers.map(basicCharge) カ discountTiers.map(price)

  • E-ア extends
  • E-イ implements
  • E-ウ imports
  • E-エ public
  • E-オ throws
  • F-ア ((RatePlan) this)
  • F-イ RatePlan
  • F-ウ super
  • F-エ this
  • F-オ TieredRateTable
  • F-カ TierTable
  • G-ア (1.0 - discountTiers.map(amount))
  • G-イ (1.0 - discountTiers.map(basicCharge))
  • G-ウ (1.0 - discountTiers.map(price))
  • G-エ discountTiers.map(amount)
  • G-オ discountTiers.map(basicCharge)
  • G-カ discountTiers.map(price)

出典:平成29年度 春期 基本情報技術者試験 午後 問11 設問2

共通の文章

問12 次のアセンブラプログラムの説明及びプログラムを読んで、設問1~3に答えよ。 プログラム1の説明・図1 プログラム1の説明:副プログラム ADD64 は、64ビット符号なし整数の加算を行う。64ビット符号なし整数の主記憶への格納方法は図1のとおり。GR1及びGR2には、それぞれ加算対象となる二つの64ビット符号なし整数を格納する領域の先頭アドレスが設定され、主プログラムから渡される。各領域は連続した4語から成る。GR1とGR2の値が等しい場合を除き、両領域は重ならない。ADD64はGR1のアドレスから始まる連続した4語の領域に加算結果を格納する。桁あふれは発生しない。ADD64から戻るとき、汎用レジスタGR1~GR7の内容を元に戻す。 図1 図1「64ビット符号なし整数の主記憶への格納方法」:アドレスN番地に最上位16ビット、N+1番地に第2位16ビット、N+2番地に第3位16ビット、N+3番地に最下位16ビットを格納する。 プログラム1 プログラム1(行番号/ラベル/命令・オペランド)。空欄a、b、cは原本どおり未記入。 1 ADD64 START 2 RPUSH 3 LD GR0,=0 4 LAD GR3,3,GR1 5 LAD GR4,3,GR2 6 LOOP LD GR5,=0 7 ADDL GR0,0,GR3 8 JOV OV1 9 JUMP NOV1 10 OV1 [a] 11 NOV1 ADDL GR0,0,GR4 12 JOV OV2 13 JUMP NOV2 14 OV2 [a] 15 NOV2 ST GR0,0,GR3 16 LD GR0,GR5 17 [b] 18 JZE EXIT 19 SUBL GR3,=1 20 SUBL GR4,=1 21 [c] 22 EXIT RPOP 23 RET 24 END 設問1の解答群 設問1の解答群「a、bに関する解答群」:ア AND GR5,=1/イ CPL GR3,=0/ウ CPL GR3,GR1/エ CPL GR3,GR2/オ LD GR5,=1。解答群「cに関する解答群」:ア JOV LOOP/イ JUMP LOOP/ウ JZE LOOP。 図2 図2「主記憶に格納した値」:GR1番地から順に、(GR1)番地=#3F1D、(GR1)+1番地=#B759、(GR1)+2番地=#2E0C、(GR1)+3番地=#A684。GR2番地から順に、(GR2)番地=#2E0C、(GR2)+1番地=#A684、(GR2)+2番地=#3F1D、(GR2)+3番地=#B759。 設問2の解答群 設問2の解答群「dに関する解答群」:ア #0000/イ #0001/ウ #2E0C/エ #2E0D/オ #3F1D/カ #3F1E。 プログラム2の説明・図3 プログラム2の説明:32ビット符号なし整数の乗算を行う副プログラム MUL32 を作成する。32ビット符号なし整数の主記憶への格納方法は図3のとおり。GR1及びGR2には、乗算対象となる二つの32ビット符号なし整数を格納する領域の先頭アドレスが設定され、主プログラムから渡される。各領域は連続した2語から成る。GR3には、乗算結果となる64ビット符号なし整数を格納する領域の先頭アドレスが設定される。結果の領域は連続した4語から成る。GR1、GR2及びGR3が指す領域は互いに重ならない。MUL32から戻るとき、汎用レジスタGR1~GR7の内容を元に戻す。 図3 図3「32ビット符号なし整数の主記憶への格納方法」:アドレスN番地に上位16ビット、N+1番地に下位16ビットを格納する。 プログラム2 プログラム2(行番号/ラベル/命令・オペランド/原本のコメント)。空欄e、fは原本どおり未記入。 MUL32 START RPUSH LAD GR7,TEMP ; 初期化 LD GR0,0,GR1 ; GR1から始まる2語の領域の値を、TEMPから始まる4語の領域のうち下位2語に格納 ST GR0,2,GR7 LD GR0,1,GR1 ST GR0,3,GR7 LD GR0,=0 ST GR0,0,GR7 ; TEMPから始まる4語の領域のうち上位2語に0を格納 ST GR0,1,GR7 ST GR0,0,GR3 ; GR3から始まる4語の領域に0を格納 ST GR0,1,GR3 ST GR0,2,GR3 ST GR0,3,GR3 LD GR5,=0 ; ループカウンタ LD GR4,GR2 ; GR2の値をGR4に退避 LOOP LD GR6,GR5 SUBL GR6,=16 e LD GR0,0,GR2 SRL GR0,GR6 JUMP TESTBIT LOWORD LD GR0,1,GR2 SRL GR0,0,GR5 TESTBIT AND GR0,=#0001 JZE EXITLOOP LD GR1,GR3 LAD GR2,TEMP CALL ADD64 EXITLOOP CPL GR5,=31 JZE EXIT ADDL GR5,=1 LAD GR1,TEMP f CALL ADD64 LD GR2,GR4 ; GR4に退避した値をGR2に復帰 JUMP LOOP EXIT RPOP RET TEMP DS 4 END 設問3の解答群 設問3の解答群「e、fに関する解答群」:ア JMI LOWORD/イ JNZ LOWORD/ウ JPL LOWORD/エ JZE LOWORD/オ LAD GR2,TEMP/カ LD GR2,=1/キ LD GR2,GR3/ク LD GR2,TEMP。 命令仕様(公式別添) 命令仕様(公式別添・物理PDF p72–74):COMET IIは16ビット語を用い、主記憶は65536語。汎用レジスタGR0~GR7は16ビット。LD r1,r2はr1←r2、LD r,adr[,x]はr←実効アドレスの内容。ST r,adr[,x]は実効アドレス←r。LAD r,adr[,x]はr←実効アドレス。ADDL r1,r2及びADDL r,adr[,x]は論理加算(符号なし加算)を行い、結果を左辺に格納する。SUBLは論理減算を行い、結果を左辺に格納する。ANDは論理積を行い結果を左辺に格納する。CPLは論理比較を行い、比較結果に応じてSF及びZFを設定する。比較では、左辺が右辺より大きいとSF=0,ZF=0、等しいとSF=0,ZF=1、小さいとSF=1,ZF=0。SRL r,adr[,x]は符号を含めずrを指定ビット数だけ右シフトし、空いたビットには0を入れる。条件分岐:JPLはSF=0かつZF=0、JMIはSF=1、JNZはZF=0、JZEはZF=1、JOVはOF=1の場合に分岐する。JUMPは無条件分岐。CALLは副プログラムを呼び出し、RETは副プログラムから戻る。RPUSHはGRの内容をGR1,GR2,…,GR7の順序でスタックに格納し、RPOPはスタックの内容を取り出しGR7,GR6,…,GR1の順序でGRに格納する。 アセンブラ記述仕様(公式別添) アセンブラ記述・リテラルに関係する仕様(公式別添・物理PDF p75–77):命令は1命令行に1命令を記述する。命令コードとオペランドの記述形式は命令ごとに定義される。オペランドのr、r1、r2はGR0~GR7を表し、xは指標レジスタとして用いるGR1~GR7を表す。アドレスは10進数、16進数、アドレス定数又はリテラルで指定する。リテラルは数値の前に等号を付けて記述し、等号の後の定数をオペランドとするDC命令を生成し、そのアドレスをオペランド値とする。 プログラム2の注釈と別添のフラグ仕様 物理p61の括弧付きコメントの対応:LD GR0,0,GR1~ST GR0,3,GR7の4命令は、GR1から始まる2語をTEMPから始まる4語領域の下位2語に格納する。ST GR0,0,GR7及びST GR0,1,GR7はTEMP領域の上位2語に0を格納する。ST GR0,0,GR3~ST GR0,3,GR3の4命令はGR3から始まる4語領域に0を格納する。 物理p72–74:FRはOF、SF、ZF。符号付き算術演算の結果が−32768~32767に、符号なし論理加減算の結果が0~65535に収まらないときOF=1。SFは結果のビット15、ZFは結果がゼロのとき1。ADDL・SUBLはFRを設定。LD・CPL・ANDではOF=0。論理シフトでは最後に送出したビットをOFに設定する。JOVはOF=1、JMIはSF=1、JPLはSF=0かつZF=0、JNZはZF=0、JZEはZF=1で分岐する。

問問12 設問1

プログラム1中の空欄a、b、cに入れる正しい答えを、解答群の中から選べ。 a、bに関する解答群 ア AND GR5,=1 イ CPL GR3,=0 ウ CPL GR3,GR1 エ CPL GR3,GR2 オ LD GR5,=1 cに関する解答群 ア JOV LOOP イ JUMP LOOP ウ JZE LOOP

  • A-ア AND GR5,=1
  • A-イ CPL GR3,=0
  • A-ウ CPL GR3,GR1
  • A-エ CPL GR3,GR2
  • A-オ LD GR5,=1
  • B-ア AND GR5,=1
  • B-イ CPL GR3,=0
  • B-ウ CPL GR3,GR1
  • B-エ CPL GR3,GR2
  • B-オ LD GR5,=1
  • C-ア JOV LOOP
  • C-イ JUMP LOOP
  • C-ウ JZE LOOP

出典:平成29年度 春期 基本情報技術者試験 午後 問12 設問1

問問12 設問2

GR1及びGR2に設定したアドレスから始まる連続した4語の領域に、図2のとおりに値を格納して副プログラムADD64を実行したとき、行番号7の命令を2回目に実行した後のGR0の値は d である。正しい答えを解答群の中から選べ。

  • ア #0000
  • イ #0001
  • ウ #2E0C
  • エ #2E0D
  • オ #3F1D
  • カ #3F1E

出典:平成29年度 春期 基本情報技術者試験 午後 問12 設問2

問問12 設問3

副プログラムADD64を使用して32ビット符号なし整数の乗算を行う副プログラムMUL32を作成した。プログラム2中の空欄e、fに入れる正しい答えを、解答群の中から選べ。 e、fに関する解答群 ア JMI LOWORD イ JNZ LOWORD ウ JPL LOWORD エ JZE LOWORD オ LAD GR2,TEMP カ LD GR2,=1 キ LD GR2,GR3 ク LD GR2,TEMP

  • E-ア JMI LOWORD
  • E-イ JNZ LOWORD
  • E-ウ JPL LOWORD
  • E-エ JZE LOWORD
  • E-オ LAD GR2,TEMP
  • E-カ LD GR2,=1
  • E-キ LD GR2,GR3
  • E-ク LD GR2,TEMP
  • F-ア JMI LOWORD
  • F-イ JNZ LOWORD
  • F-ウ JPL LOWORD
  • F-エ JZE LOWORD
  • F-オ LAD GR2,TEMP
  • F-カ LD GR2,=1
  • F-キ LD GR2,GR3
  • F-ク LD GR2,TEMP

出典:平成29年度 春期 基本情報技術者試験 午後 問12 設問3

共通の文章

問13「表計算」。T社のUさんは、3種類の商品X、Y、Zを納品書に基づいて梱包し、宅配便業者に集荷を依頼して発送する業務を担当している。従来は、発送する商品をまとめて荷物として梱包した後、個別に重量を量って料金計算をしていたが、表計算ソフトを用いて作業の効率化を図ることにした。 商品発送に利用する宅配便サービスの発送料金は、料金計算上同一地域とする都道府県の区分である着地域区分と、荷物の重量で区分された重量区分に基づいて決定される。ワークシート「料金表」には、T社の所在地からの発送料金を検索するために利用する「料金表」が格納されている。ワークシート「商品重量」には、料金計算で商品の重量を検索するときに利用する「商品重量表」が格納されている。ワークシート「重量区分」には、荷物の重量から重量区分を検索するときに利用する「重量区分表」が格納されている。ワークシート「料金計算」には「料金計算表」を作成して格納する。セルA4に発送先の都道府県名、セルB4~D4に発送する商品X、Y、Zの数量を入力すると、商品総重量、重量区分、梱包後重量及び発送料金を表示する。 図1 料金表 図1「ワークシート“料金表”の例」。1行目は料金表(単位:円)。C2~N2は着地域区分の名称、C3~N10は各列の地域に属する都道府県名。見えている列はC北海道、D北東北、E南東北、M九州、N沖縄。C3は北海道、D3~D5は青森県・秋田県・岩手県、E3~E5は宮城県・山形県・福島県、M3~M9は福岡県・佐賀県・長崎県・熊本県・大分県・宮崎県・鹿児島県、N3は沖縄県。B11~B15の重量区分は順に1~5。C11~N15が発送料金で、見えているC,D,E,M,Nの各行は順に11行:1,188/864/756/1,188/1,296、12行:1,458/1,134/1,026/1,458/1,836、13行:1,728/1,404/1,296/1,728/2,376、14行:1,998/1,674/1,566/1,998/3,186、15行:2,268/1,944/1,836/2,268/3,996。C16~N16は着地域区分検索の作業領域で、図ではD16に1がある。省略記号の範囲に値を補わない。 図2 商品重量表 図2「ワークシート『商品重量』」。列Aは商品名、列Bは重量(g)。行3:X、460。行4:Y、720。行5:Z、1,200。 図3 重量区分表 図3「ワークシート『重量区分』」。列Aは重量区分、列Bは重量の上限(g)、列Cは箱重量(g)、列D・Eは発送可能な商品の総重量の範囲(g)(から・まで)。行4:区分1、上限2,000、箱重量135、範囲1~1,865。行5:区分2、5,000、260、1,866~4,740。行6:区分3、10,000、415、4,741~9,585。行7:区分4、20,000、870、9,586~19,130。行8:区分5、30,000、1,320、19,131~28,680。この宅配便サービスで発送できる荷物の重量は30,000gまで。セルA4~A8に重量区分、B4~B8に各重量区分で発送できる荷物の重量の上限、C4~C8に各区分で用いる梱包用の箱の重量、D4~E8に箱の重量を加えたときに当該重量区分で発送可能な商品の総重量の範囲が入力されている。 図4 料金計算表 図4「ワークシート『料金計算』の例」。列A:発送先都道府県名、列B~D:発送商品数量(X、Y、Z)、列E:商品総重量(g)、列F:重量区分、列G:梱包後重量(g)、列H:発送料金(円)。行4の例は、青森県、X=12、Y=6、Z=4、商品総重量14,640、重量区分4、梱包後重量15,510、発送料金1,674。 料金計算表の式に関する条件 料金計算表のセルA4には発送先都道府県名、セルB4~D4には商品X、Y、Zの数量を入力する。セルE4には商品総重量を表示する式を入力する:B4 * 商品重量!B3 + C4 * 商品重量!B4 + D4 * 商品重量!B5。セルF4には、E4が0のとき「—」、E4が発送可能な商品の総重量の上限を超えるとき「×」、それ以外のときは、E4の商品総重量の商品を一つの荷物として発送できる最も小さい重量区分を「重量区分」から検索して表示する式を入力する。セルG4には、F4が「—」又は「×」のとき「—」、それ以外のときはE4にF4の重量区分で利用する箱の重量を加えた値を表示する式を入力する。セルH4には、発送料金の検索ができないとき「—」、それ以外のときはA4の発送先都道府県名とF4の重量区分に該当する発送料金を「料金表」から検索して表示する式を入力する。 図5 梱包作業表・梱包指示表 図5「『梱包作業表』及び『梱包指示表』を追加したワークシート『料金計算』の例」。梱包作業表では、セルB9~D9に梱包の組合せが未決定の商品数量(残数量)、E9にその残重量、F9に重量区分、G9に発送料金を表示する。例の残数量はX=0、Y=0、Z=0、残重量0、F9・G9は「—」。セルB10~D10はマクロPackage_countの作業領域で、例はX=4、Y=7、Z=2、E10=9,280。梱包指示表は荷物番号、商品X・Y・Zの数量、商品総重量(g)、重量区分、発送料金(円)の列を持つ。表示例:荷物1はX=6、Y=1、Z=21、総重量28,680、区分5、料金1,944。荷物2はX=0、Y=28、Z=7、総重量28,560、区分5、料金1,944。荷物3はX=4、Y=7、Z=2、総重量9,280、区分3、料金1,404。行26の合計はX=10、Y=36、Z=30、総重量66,520、料金5,292。 問3 梱包条件・処理概要 問3の追加条件とマクロPackage_countの処理概要。発送可能な商品の総重量の上限を超え、重量区分欄に「×」が表示された場合、発送可能な重量に収まる組合せに分割して梱包する。梱包作業表のB9~D9に残数量を格納し、E9に残重量を表示する。F9はE9が0なら「—」、E9が発送可能な総重量上限を超えるときは5、それ以外はE9の商品を一荷物で発送できる最も小さい重量区分を表示する。G9はE9が0なら「—」、それ以外はA4の発送先都道府県名とF9の重量区分に該当する料金を表示する。セルB10~D10には商品の組合せ、E10には作業重量を表示する。マクロは、B4~D4の数量をB9~D9に複写し、package_noを1に初期化する。E9が0でない間、表示行(行15からpackage_noの値だけ下の行)に荷物番号、F9、G9を複写し、work_weightを0にする。B10、C10、D10をそれぞれ0から対応する残数量まで変化させて全組合せの作業重量E10を求め、そのうち一荷物で発送可能な総重量上限以下で最大となるものを表示行のE列に表示し、対応するX、Y、Z数量をB~D列に格納する。全組合せの比較後、表示行のB~D列の数量をその荷物の数量として確定し、残数量から差し引き、package_noに1を加えて繰り返す。1枚の納品書で発送する荷物は10個を超えない。A16~G25に分割結果を表示し、B26~E26及びG26には各列の行16~25の合計を表示する式を入力する。 マクロPackage_count 擬似コード マクロPackage_countの擬似コード(原本の空欄e・fは未補完)。数値型変数:package_no, i, j, k, m, work_weight。 i: 0, i ≤ 2, 1 ・相対(B9, 0, i) ← 相対(B4, 0, i) package_no ← 1 E9 > 0 の間 ・相対(A15, package_no, 0) ← package_no ・相対(F15, package_no, 0) ← F9 ・相対(G15, package_no, 0) ← G9 ・work_weight ← 0  i: 0, i ≤ B9, 1  ・B10 ← i   j: 0, j ≤ C9, 1   ・C10 ← j    k: 0, k ≤ D9, 1    ・D10 ← k    ・[e]     m: 0, m ≤ 3, 1     ・相対(B15, package_no, m) ← 相対(B10, 0, m)    ・work_weight ← E10  i: 0, i ≤ 2, 1  ・[f] ・package_no ← package_no + 1 別添 関数・セル参照仕様 別添「表計算ソフトの機能・用語」から本問に関係する仕様。セル参照:相対(セル変数, 行位置, 列位置)は基準セルからの相対位置を表す。配列添字は0から始まる。関数:条件付個数(セル範囲, 検索条件の記述)は条件を満たすセル数を返す。照合一致(式, セル範囲, 検索の指定)は、検索指定0なら一致する値、1なら式以下の最大値(昇順であること)、−1なら式以上の最小値(降順であること)を検索し、セル範囲内の位置を返す。垂直照合(式, セル範囲, 列の位置, 検索の指定)は範囲の左端列を上から検索し、該当行の指定列の値を返す。表引き(セル範囲, 行の位置, 列の位置)は指定位置のセル値を返す。論理積は全条件が真の場合に真、論理和は少なくとも一つが真の場合に真を返す。合計(セル範囲)は範囲内の数値の合計を返す。IF(論理式, 式1, 式2)は論理式が真なら式1、偽なら式2を返す。物理ページ78~83。 物理p78では別シートのセル又は範囲を「シート名!セル番地」「シート名!セル範囲」で表す。物理p79ではセル複写時、相対参照は元と先の列番号・行番号の差を各番地に加える。列又は行の直前に$がある絶対参照の部分は複写先でも変えない。

問問13 設問1

ワークシート「料金表」に関する記述中の空欄aに入れる正しい答えを、解答群の中から選べ。

  • ア IF(条件付個数(C3:C10, =料金計算!$A4) = 0, 1, null)
  • イ IF(条件付個数(C3:C10, =料金計算!$A4) = 1, 1, null)
  • ウ IF(条件付個数(C3:C10, =料金計算!$A4) > 1, null, 1)
  • エ IF(条件付個数($C3:$C10, =料金計算!$A4) = 0, null, 1)
  • オ IF(条件付個数($C3:$C10, =料金計算!$A4) = 1, null, 1)
  • カ IF(条件付個数($C3:$C10, =料金計算!$A4) > 1, 1, null)

出典:平成29年度 春期 基本情報技術者試験 午後 問13 設問1

問問13 設問2

ワークシート「料金計算」に関する記述中の空欄b、c、dに入れる正しい答えを、それぞれ解答群から選べ。 bに関する解答群 ア IF(E4 > 重量区分!E8, '×', 照合一致(E4, 重量区分!D4:D8, 1)) イ IF(E4 > 重量区分!E8, '×', 照合一致(E4, 重量区分!D4:D8, -1)) ウ IF(E4 > 重量区分!E8, '×', 照合一致(E4, 重量区分!E4:E8, 1)) エ IF(E4 > 重量区分!E8, '×', 照合一致(E4, 重量区分!E4:E8, -1)) cに関する解答群 ア 論理積(G4 ≠ '—', A4 ≠ null) イ 論理積(論理和(F4 = '—', F4 = '×'), A4 = null) ウ 論理和(G4 = '—', 合計(料金表!C16:N16) = 0) エ 論理積(論理積(F4 ≠ '—', F4 ≠ '×'), 合計(料金表!C16:N16) = 1) dに関する解答群 ア 垂直照合(F4, 料金表!B11:N15, 照合一致(1, 料金表!C16:N16, 0), 0) イ 垂直照合(照合一致(1, 料金表!C16:N16, 0), 料金表!B11:N15, F4, 0) ウ 表引き(料金表!C11:N15, F4, 照合一致(1, 料金表!C16:N16, 0)) エ 表引き(料金表!C11:N15, 照合一致(1, 料金表!C16:N16, 0), F4)

  • B-ア IF(E4 > 重量区分!E8, '×', 照合一致(E4, 重量区分!D4:D8, 1))
  • B-イ IF(E4 > 重量区分!E8, '×', 照合一致(E4, 重量区分!D4:D8, -1))
  • B-ウ IF(E4 > 重量区分!E8, '×', 照合一致(E4, 重量区分!E4:E8, 1))
  • B-エ IF(E4 > 重量区分!E8, '×', 照合一致(E4, 重量区分!E4:E8, -1))
  • C-ア 論理積(G4 ≠ '—', A4 ≠ null)
  • C-イ 論理積(論理和(F4 = '—', F4 = '×'), A4 = null)
  • C-ウ 論理和(G4 = '—', 合計(料金表!C16:N16) = 0)
  • C-エ 論理積(論理積(F4 ≠ '—', F4 ≠ '×'), 合計(料金表!C16:N16) = 1)
  • D-ア 垂直照合(F4, 料金表!B11:N15, 照合一致(1, 料金表!C16:N16, 0), 0)
  • D-イ 垂直照合(照合一致(1, 料金表!C16:N16, 0), 料金表!B11:N15, F4, 0)
  • D-ウ 表引き(料金表!C11:N15, F4, 照合一致(1, 料金表!C16:N16, 0))
  • D-エ 表引き(料金表!C11:N15, 照合一致(1, 料金表!C16:N16, 0), F4)

出典:平成29年度 春期 基本情報技術者試験 午後 問13 設問2

問問13 設問3

商品総重量が発送可能な商品の総重量の上限を超え、重量区分欄に「×」が表示されると、Uさんは、商品を発送可能な重量に収まるような組合せに分割して梱包し、発送しなければならない。この商品の組合せを求めるために、ワークシート「料金計算」に新たな表を追加するとともに、マクロPackage_countを作成して格納した。マクロPackage_count中の空欄に入れる正しい答えを、解答群の中から選べ。 eに関する解答群 ア 論理積(work_weight < E9, E10 > 重量区分!E8) イ 論理積(work_weight < E10, E10 ≤ 重量区分!E8) ウ 論理積(work_weight > E9, E10 > 重量区分!E8) エ 論理積(work_weight > E10, E10 ≤ 重量区分!E8) fに関する解答群 ア 相対(B9, 0, i) ← 相対(B4, 0, i) − 相対(B10, 0, i) イ 相対(B9, 0, i) ← 相対(B4, 0, i) − 相対(B15, package_no, i) ウ 相対(B9, 0, i) ← 相対(B9, 0, i) − 相対(B10, 0, i) エ 相対(B9, 0, i) ← 相対(B9, 0, i) − 相対(B15, package_no, i)

  • E-ア 論理積(work_weight < E9, E10 > 重量区分!E8)
  • E-イ 論理積(work_weight < E10, E10 ≤ 重量区分!E8)
  • E-ウ 論理積(work_weight > E9, E10 > 重量区分!E8)
  • E-エ 論理積(work_weight > E10, E10 ≤ 重量区分!E8)
  • F-ア 相対(B9, 0, i) ← 相対(B4, 0, i) − 相対(B10, 0, i)
  • F-イ 相対(B9, 0, i) ← 相対(B4, 0, i) − 相対(B15, package_no, i)
  • F-ウ 相対(B9, 0, i) ← 相対(B9, 0, i) − 相対(B10, 0, i)
  • F-エ 相対(B9, 0, i) ← 相対(B9, 0, i) − 相対(B15, package_no, i)

出典:平成29年度 春期 基本情報技術者試験 午後 問13 設問3

出典

各問題の下に出典を記載しています。

公表資料(PDF)