共通の文章
問1「クラウドサービスの利用者認証」。A社では現在、Webベースの業務システムが複数稼働しており、それぞれが稼働するサーバ(以下、業務システムサーバという)を社内LANに設置している。A社のネットワーク構成を図1に示す。
利用者は、業務システムを、社内LANに設置されたクライアントPCのWebブラウザから利用する。社外から社内LANへのリモートアクセスは禁止されている。業務システムの利用者認証は、A社認証サーバでの利用者IDとパスワード(以下、この二つを併せて利用者認証情報という)の検証によって行っており、シングルサインオンを実現している。
社内LANからインターネットを介した社外への通信は、クライアントPCからプロキシサーバを経由した、HTTP over TLS(以下、HTTPSという)による通信だけが、ファイアウォールによって許可されている。社外からインターネットを介した社内LANへの通信は、全てファイアウォールによって禁止されている。ファイアウォールの設定は、A社のセキュリティポリシに基づき変更しないものとする。
【クラウドサービスの利用者認証】このたびA社は、業務システムの一つである販売管理システムを、B社がインターネットを介して提供する販売管理サービス(以下、B社クラウドサービスという)に移行することにした。利用者認証に関しては、A社認証サーバとB社クラウドサービスを連携し、次の(1)~(3)を実現することにした。
(1) B社クラウドサービスをシングルサインオンの対象とする。
(2) A社の利用者認証は、B社クラウドサービスについても、A社認証サーバで行う。
(3) 利用者が本人であることを確認するためにA社認証サーバで用いる a は、B社クラウドサービスには送信しない。
(1)~(3)を実現するために、A社は、利用者認証を仲介するIDプロバイダ(以下、IdPという)を社内LANに設置することにした。IdPは、認証結果、認証有効期限及び利用者ID(以下、これら三つを併せて認証済情報という)にディジタル署名を付加してから、Webブラウザを介してB社クラウドサービスに送信する。B社クラウドサービスは、付加されているディジタル署名を使って、受信した認証済情報に b がないことを検証する。このために、IdPの c をB社クラウドサービスに登録しておく。
WebブラウザとB社クラウドサービスとの間、及びWebブラウザとIdPとの間の通信には、HTTPSを用いる。IdPとA社認証サーバとの間の通信にはLDAPを用いる。
【B社クラウドサービスが利用可能になるまでの処理の手順】A社の利用者が、利用者認証されていない状態で、B社クラウドサービスを利用しようとした場合に、利用可能になるまでの処理の手順を次の①~⑩に示す。
① 利用者は、WebブラウザからB社クラウドサービスにアクセスの要求を送信する。
② B社クラウドサービスは、アクセスの要求をIdPに転送する指示(以下、転送指示という)をWebブラウザに返信する。
③ Webブラウザは、②の転送指示に従い、IdPにアクセスの要求を送信する。
④ IdPは、利用者認証情報の入力画面をWebブラウザに返信する。
⑤ 利用者は、Webブラウザで利用者認証情報を入力する。Webブラウザは、入力された利用者認証情報をIdPに送信する。
⑥ IdPは、利用者認証情報をA社認証サーバに送信する。
⑦ A社認証サーバは、利用者認証情報を検証し、認証結果をIdPに返信する。
⑧ IdPは、認証結果が成功の場合に、認証済情報を発行し、当該情報のB社クラウドサービスへの転送指示とともに、Webブラウザに返信する。
⑨ Webブラウザは、⑧の転送指示に従い、認証済情報をB社クラウドサービスに送信する。
⑩ B社クラウドサービスは、認証済情報に基づいて、B社クラウドサービスの利用を許可し、操作画面をWebブラウザに返信する。
B社クラウドサービスが利用可能になるまでの処理の流れを、図2に示す。図2中の①~⑩は、処理の手順の①~⑩と対応している。
図1 A社のネットワーク構成
図1「A社のネットワーク構成」。A社の枠内に社内LANがあり、社内LANには、一本のLAN接続線上に業務システムサーバ(複数台。図中に「…」)、クライアントPC(複数台。図中に「…」)、A社認証サーバ及びプロキシサーバが接続されている。A社枠の上部中央にファイアウォールがあり、インターネットからファイアウォールを経て社内LANへ接続する構成。図中に数値データはない。
図2 B社クラウドサービスが利用可能になるまでの処理の流れ
図2「B社クラウドサービスが利用可能になるまでの処理の流れ」。左から、B社クラウドサービス、Webブラウザ、IdP、A社認証サーバの4本のライフライン。各処理番号の位置と送受信方向は次のとおり。① WebブラウザからB社クラウドサービスへ送信。② B社クラウドサービスからWebブラウザへ返信。③ WebブラウザからIdPへ送信。④ IdPからWebブラウザへ返信。⑤ WebブラウザからIdPへ送信。⑥ IdPからA社認証サーバへ送信。⑦ A社認証サーバからIdPへ返信。⑧ IdPからWebブラウザへ返信。⑨ WebブラウザからB社クラウドサービスへ送信。⑩ B社クラウドサービスからWebブラウザへ返信。凡例は、実線矢印が「送信」、破線矢印が「返信」。
問問1 設問1
設問1 本文中の空欄に入れる適切な答えを、解答群の中から選べ。
a、b、cに関する解答群
ア PKI
イ 改ざん
ウ 公開鍵
エ サービス妨害
オ 生体情報
カ パスワード
キ 秘密鍵
ク 利用者ID
ケ 漏えい
- A-ア PKI
- A-イ 改ざん
- A-ウ 公開鍵
- A-エ サービス妨害
- A-オ 生体情報
- A-カ パスワード
- A-キ 秘密鍵
- A-ク 利用者ID
- A-ケ 漏えい
- B-ア PKI
- B-イ 改ざん
- B-ウ 公開鍵
- B-エ サービス妨害
- B-オ 生体情報
- B-カ パスワード
- B-キ 秘密鍵
- B-ク 利用者ID
- B-ケ 漏えい
- C-ア PKI
- C-イ 改ざん
- C-ウ 公開鍵
- C-エ サービス妨害
- C-オ 生体情報
- C-カ パスワード
- C-キ 秘密鍵
- C-ク 利用者ID
- C-ケ 漏えい
出典:平成31年度 春期 基本情報技術者試験 午後 問1 設問1
問問1 設問2
設問2 次の記述中の空欄に入れる適切な答えを、解答群の中から選べ。B社クラウドサービスでは、接続元のIPアドレスをA社のものに限定する機能は提供されていない。しかし、他の業務システムと同様に、B社クラウドサービスを社内LANからの利用に限定できる。この理由は、空欄 d ことが必要であるが、IdPを社内LANに設置するので、社外からB社クラウドサービスを利用しようとしても、図2中の空欄 e の送信で失敗し、利用者認証されないからである。
dに関する解答群
ア B社クラウドサービスが、IdPと直接通信する
イ B社クラウドサービスが、利用者認証情報を検証し、Webブラウザに返信する
ウ IdPが、利用者に代わって、利用者認証情報をB社クラウドサービスに送信する
エ Webブラウザが、IdPと通信する
eに関する解答群
ア ①
イ ③
ウ ⑤
エ ⑥
オ ⑨
- D-ア B社クラウドサービスが、IdPと直接通信する
- D-イ B社クラウドサービスが、利用者認証情報を検証し、Webブラウザに返信する
- D-ウ IdPが、利用者に代わって、利用者認証情報をB社クラウドサービスに送信する
- D-エ Webブラウザが、IdPと通信する
- E-ア ①
- E-イ ③
- E-ウ ⑤
- E-エ ⑥
- E-オ ⑨
出典:平成31年度 春期 基本情報技術者試験 午後 問1 設問2
共通の文章
問2 仮想記憶方式に関する次の記述を読んで,設問1~3に答えよ。
仮想記憶方式は,OSが提供する論理的な記憶領域(以下,仮想記憶という)上のアドレスと物理的な主記憶上のアドレスを対応付けて管理する方式である。仮想記憶方式では,補助記憶装置を仮想記憶の実装媒体として用いることによって,プログラムが主記憶の容量を超える大きさであっても,これを仮想記憶上のデータとして格納し,実行することができる。仮想記憶上のアドレス空間を仮想アドレス空間,主記憶上のアドレス空間を物理アドレス空間と呼び,それぞれの空間における記憶場所は仮想アドレス,物理アドレスで指定する。
仮想記憶方式の実現方法の一つにページング方式がある。この方式では,仮想アドレス空間と物理アドレス空間をそれぞれ仮想ページ,物理ページと呼ぶ固定長の領域に分割し,管理する。ページング方式では,プログラムの実行過程で,実行に必要な仮想ページのデータが物理アドレス空間に存在していないときは,そのデータが格納されている仮想ページからデータを物理ページに読み込んで利用する。
ページング方式のページ管理方法の例を,次の(1)~(3)に示す。
(1) 仮想アドレス空間及び物理アドレス空間の各ページには,1から順に番号を付け,それぞれを仮想ページ番号,物理ページ番号と呼ぶ。
(2) 仮想ページと物理ページの対応は,ページテーブルで管理する。ページテーブルの各要素は仮想ページと1対1に対応付けられており,要素の個数は仮想ページの個数と同じである。
(3) ページテーブルには,仮想ページのデータが物理アドレス空間に存在しているかどうかを示すビット(以下,存在ビットという)と,存在している場合に対応する物理ページ番号を登録する領域がある。存在ビットは,当該仮想ページのデータが物理アドレス空間に存在している場合は1,存在していない場合は0である。
図1
図1「仮想アドレス空間の仮想ページと物理アドレス空間の物理ページとの対応例」。仮想アドレス空間の仮想ページ番号1~8には順にデータA、B、C、D、E、F、G、Hが格納されている。ページテーブルの各行は仮想ページ番号1~8に対応し、各行に存在ビットと物理ページ番号の領域がある。存在ビットは各行とも1。仮想ページ番号1~4に対応する物理ページ番号の欄には順にa1、a2、a3、a4と記されている。物理アドレス空間の物理ページ番号1~8には順にデータE、A、D、G、B、F、C、Hが格納されている。図中の網掛け部分は表示していない。
ページフォールト割込み処理
設問2のページフォールト割込み処理:(1) 物理ページのうち、仮想ページと対応付けられていない物理ページ(以下、空きページという)を一つ探す。(2) 空きページがなかった場合、空きページにするb1ページを一つ選び、その選んだページに格納されているデータをb2。その後、対応するページテーブルの要素の存在ビットを0にする。これによって空きページを確保する。(3) 空きページがあった場合、又はなかった場合では(2)の処理後に、その空きページにプログラムの実行に必要なc1ページに格納されているデータをc2。その後、対応するページテーブルの要素に物理ページ番号を登録して、その存在ビットを1にする。
設問3の参照順と条件
仮想ページの参照順:4 → 2 → 1 → 5 → 4 → 2 → 3 → 4 → 2 → 1 → 5 → 3 → 5。プログラムの実行開始時点では、このプログラムの実行のために割り当てられた物理ページは全て空きページである。FIFOで物理ページ数が3のとき、ページフォールトは9回。LRUで物理ページ数が3のとき、ページフォールトは10回。
問問2 設問1
図1中の空欄に入れる正しい答えを,解答群の中から選べ。ここで,a1~a4に入れる答えは,aに関する解答群の中から組合せとして正しいものを選ぶものとする。
- ア a1=1、a2=2、a3=3、a4=4
- イ a1=2、a2=3、a3=5、a4=7
- ウ a1=2、a2=5、a3=7、a4=3
- エ a1=5、a2=1、a3=4、a4=7
- オ a1=5、a2=2、a3=7、a4=3
出典:平成31年度 春期 基本情報技術者試験 午後 問2 設問1
問問2 設問2
次の記述中の空欄に入れる適切な答えを,解答群の中から選べ。ここで,b1とb2,c1とc2に入れる答えは,それぞれb,cに関する解答群の中から組合せとして適切なものを選ぶものとする。ページフォールト割込み処理は、ページフォールトが発生したときに、ページフォールト割込み処理の記述に従って行う。
bに関する解答群
ア b1:仮想、b2:補助記憶装置から読み込む
イ b1:仮想、b2:補助記憶装置に書き出す
ウ b1:物理、b2:補助記憶装置から読み込む
エ b1:物理、b2:補助記憶装置に書き出す
cに関する解答群
ア c1:仮想、c2:補助記憶装置から読み込む
イ c1:仮想、c2:補助記憶装置に書き出す
ウ c1:物理、c2:補助記憶装置から読み込む
エ c1:物理、c2:補助記憶装置に書き出す
- B-ア b1:仮想、b2:補助記憶装置から読み込む
- B-イ b1:仮想、b2:補助記憶装置に書き出す
- B-ウ b1:物理、b2:補助記憶装置から読み込む
- B-エ b1:物理、b2:補助記憶装置に書き出す
- C-ア c1:仮想、c2:補助記憶装置から読み込む
- C-イ c1:仮想、c2:補助記憶装置に書き出す
- C-ウ c1:物理、c2:補助記憶装置から読み込む
- C-エ c1:物理、c2:補助記憶装置に書き出す
出典:平成31年度 春期 基本情報技術者試験 午後 問2 設問2
問問2 設問3
次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。FIFOを用いると、割り当てられた物理ページの個数が3のときは、ページフォールトの発生回数は9回である。物理ページの個数が4ならば、物理ページの個数が3のときと比べて、ページフォールトの発生回数はd。 一方、LRUを用いると、物理ページの個数が3のときは、ページフォールトの発生回数は10回である。物理ページの個数が4ならば、物理ページの個数が3のときと比べて、ページフォールトの発生回数はe。
d、eに関する解答群
ア 1回増える
イ 1回減る
ウ 2回増える
エ 2回減る
オ 3回増える
カ 3回減る
キ 4回増える
ク 4回減る
ケ 変わらない
- D-ア 1回増える
- D-イ 1回減る
- D-ウ 2回増える
- D-エ 2回減る
- D-オ 3回増える
- D-カ 3回減る
- D-キ 4回増える
- D-ク 4回減る
- D-ケ 変わらない
- E-ア 1回増える
- E-イ 1回減る
- E-ウ 2回増える
- E-エ 2回減る
- E-オ 3回増える
- E-カ 3回減る
- E-キ 4回増える
- E-ク 4回減る
- E-ケ 変わらない
出典:平成31年度 春期 基本情報技術者試験 午後 問2 設問3
共通の文章
問3 定期健康診断のデータが登録されているデータベースに関する次の記述を読んで,設問1~3に答えよ。D中学校では,年に1回,定期健康診断を実施し,結果をデータベースに登録している。身長と体重の測定結果は,身長の単位はcm,体重の単位はkgとして,いずれも0.1刻みで健診結果表に登録している。定期健康診断を受ける生徒の生年月日,性別などの属性情報は,受診者情報表に登録している。
健診結果表の定義
健診結果表を作成するSQL文の一部:CREATE TABLE 健診結果表(年度 CHAR(4),受診者ID CHAR(10),学年 INT,身長 DECIMAL(4,1),体重 DECIMAL(4,1),…,肺活量 INT,PRIMARY KEY(年度,受診者ID),FOREIGN KEY(受診者ID) REFERENCES 受診者情報表(受診者ID))。
受診者情報表の定義
受診者情報表を作成するSQL文:CREATE TABLE 受診者情報表(受診者ID CHAR(10),氏名 VARCHAR(50),ふりがな VARCHAR(50),生年月日 DATE,性別 SMALLINT,特記事項 VARCHAR(512),PRIMARY KEY(受診者ID))。
DECIMALの説明
DECIMAL(x, y)は固定小数点数を扱うデータ型であり,xは精度であって表示する数字の桁数を示し,yは位取りであって小数点以下の数字の桁数を示す。例えば,データベースに175.5を登録するには,xに4を,yに1を指定する。
測定結果ビューの定義
身長と体重を統計データとして参照するために作成する測定結果ビュー。列は(年度,学年,性別,生年月日,身長,体重)。SQL文:CREATE VIEW 測定結果ビュー(年度,学年,性別,生年月日,身長,体重) AS SELECT 健診結果表.年度,健診結果表.学年,CASE 受診者情報表.性別 WHEN 0 THEN '男' WHEN 1 THEN '女' ELSE '-' END,受診者情報表.生年月日,健診結果表.身長,健診結果表.体重 FROM 健診結果表,受診者情報表 WHERE 健診結果表.受診者ID = 受診者情報表.受診者ID。
図1 体格推移表
図1「体格推移表」。列見出し:年度,学年,性別,平均身長,最大身長,最小身長,平均体重,最大体重,最小体重。表示行:2010|1|男|153.2|169.5|140.2|47.3|71.3|42.1;…|…|…|…|…|…|…|…|…;2019|1|男|152.8|168.2|140.4|48.1|73.1|43.6;2019|2|男|153.2|179.9|142.8|53.2|89.6|45.6;2019|3|男|154.1|180.1|139.3|50.4|93.2|41.1。行の並び順はSQL文の出力順と同じ。
図2 身長階級表
図2「身長階級表」。列見出し:身長階級,階級下限,階級上限。行:140cm未満|0.0|139.9;140cm以上150cm未満|140.0|149.9;150cm以上160cm未満|150.0|159.9;160cm以上170cm未満|160.0|169.9;170cm以上180cm未満|170.0|179.9;180cm以上190cm未満|180.0|189.9;190cm以上|190.0|999.9。
図3 身長度数分布表
図3「身長度数分布表」。列見出し:身長階級,人数。行:140cm未満|3;140cm以上150cm未満|104;150cm以上160cm未満|302;160cm以上170cm未満|182;170cm以上180cm未満|32;180cm以上190cm未満|1;190cm以上|1。
問問3 設問1
2010年度から2019年度までの定期健康診断データを基に,男子生徒の体格の推移を見る。次のSQL文の実行結果を用いて,図1に示す体格推移表を作成した。平均身長と平均体重は小数第2位を四捨五入した値である。SQL文の空欄に入れる正しい答えを,解答群の中から選べ。c1とc2に入れる答えは,cに関する解答群の中から組合せとして正しいものを選ぶ。
SELECT 年度, 学年, 性別,
AVG(身長) AS 平均身長, MAX(身長) AS 最大身長, MIN(身長) AS 最小身長,
AVG(体重) AS 平均体重, MAX(体重) AS 最大体重, MIN(体重) AS 最小体重
FROM 測定結果ビュー WHERE 年度 [a] AND 性別 = [b]
GROUP BY 年度, 学年, 性別
ORDER BY 年度 [c1], 学年 [c2]
aに関する解答群
ア LIKE '201_'
イ LIKE '2010'
ウ LIKE '2019'
エ = '201%'
オ = '201_'
カ = '201*'
bに関する解答群
ア 0
イ 1
ウ '男'
エ '女'
オ '-'
cに関する解答群
ア c1=ASC,c2=ASC
イ c1=ASC,c2=DESC
ウ c1=DESC,c2=ASC
エ c1=DESC,c2=DESC
- A-ア LIKE '201_'
- A-イ LIKE '2010'
- A-ウ LIKE '2019'
- A-エ = '201%'
- A-オ = '201_'
- A-カ = '201*'
- B-ア 0
- B-イ 1
- B-ウ '男'
- B-エ '女'
- B-オ '-'
- C-ア c1=ASC,c2=ASC
- C-イ c1=ASC,c2=DESC
- C-ウ c1=DESC,c2=ASC
- C-エ c1=DESC,c2=DESC
出典:平成31年度 春期 基本情報技術者試験 午後 問3 設問1
問問3 設問2
次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。D中学校では,転入生を受け入れる場合,転出元の中学校から受領した定期健康診断の結果の情報をデータベースに登録する。健診結果表には,受診者IDと年度にd制約を設定し,受診者IDに受診者情報表の受診者IDへのe制約を設定している。この制約に従うと,転入生の定期健康診断の結果の情報の健診結果表への登録は,受診者情報表に転入生の情報を登録した後に行う必要がある。
d、eに関する解答群
ア UNIQUE
イ 検査
ウ 参照
エ 主キー
オ 非NULL
- D-ア UNIQUE
- D-イ 検査
- D-ウ 参照
- D-エ 主キー
- D-オ 非NULL
- E-ア UNIQUE
- E-イ 検査
- E-ウ 参照
- E-エ 主キー
- E-オ 非NULL
出典:平成31年度 春期 基本情報技術者試験 午後 問3 設問2
問問3 設問3
次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。図1を見ると,2019年度は男子全学年での最大身長が180.1cmであり,190cm以上の生徒は存在しないが,図3の身長度数分布表では,190cm以上の人数が1となっている。この原因は,(2)で作成したSQL文ではfとすべき箇所をCOUNT(*)としていることにある。その結果,測定結果ビューと身長階級表を結合した結果において,NULLとなっているレコードもカウントしているからである。
図3に示す身長度数分布表の作成は,次の(1)~(3)の手順で行った。
(1) 図2に示す身長階級表をデータベースに作成した。
(2) 新たなSQL文を作成した。
(3) (2)で作成したSQL文の実行結果を用いて,図3に示す身長度数分布表を作成した。
(2)で作成したSQL文は,対象とした全生徒を必ずいずれかの身長区分に分類して集計するために,身長階級表からは全レコードを,測定結果ビューからはON句に指定した結合条件に一致するレコードを抽出している。
SELECT 身長階級, 階級下限, COUNT(*) AS 人数
FROM 測定結果ビュー RIGHT OUTER JOIN 身長階級表 ON
身長 BETWEEN 階級下限 AND 階級上限
AND 年度 = '2019'
AND 性別 = '男'
GROUP BY 身長階級, 階級下限, 階級上限
ORDER BY 階級下限 ASC
- ア COUNT(身長)
- イ COUNT(身長階級)
- ウ MAX(身長)
- エ MAX(身長階級)
- オ 身長
- カ 身長階級
出典:平成31年度 春期 基本情報技術者試験 午後 問3 設問3
共通の文章
問4 eラーニングシステムの構成変更に関する次の記述を読んで,設問1~3に答えよ。
G社は,全国に設置した様々な規模の教室から教育コンテンツにアクセスできるWebベースのeラーニングシステムを構築し,このシステムを使った教育事業を展開している。
eラーニングシステムは,1台のコンテンツサーバと1台のアプリケーションサーバで構成されている。コンテンツサーバは,教材や試験問題などの教育コンテンツを保持し,アプリケーションサーバを経由して,クライアントである教室のPCに教育コンテンツを送信する。アプリケーションサーバは,受講者の認証を行い,ログインしている受講者を管理する。受講者は,クライアントを利用して,教室ごとに設置されているプロキシサーバとインターネットを経由して,eラーニングシステムにアクセスして学習する。
最近,一部の受講者から,システム利用に関して「応答に時間が掛かる」などの苦情が寄せられている。G社では,応答時間を短縮するために,アプリケーションサーバ1台の追加と負荷分散装置の導入を伴う新しいネットワーク構成を検討した。負荷分散装置は,クライアントからの要求を,同じ機能をもつ複数のサーバのうちのいずれかに振り分ける装置である。
検討したネットワーク構成では,DNSサーバ及び負荷分散装置に次の設定を行う。DNSサーバに,eラーニングシステムのドメイン名とこれに対応するIPアドレスとして⟦a⟧を登録する。負荷分散装置に,振り分け先IPアドレスとして⟦b⟧を登録する。
アプリケーションサーバは,ログインしている受講者を管理し,その受講者がどの教育コンテンツを閲覧中かなどの状況を保持する。したがって,負荷分散装置を用いてアプリケーションサーバの負荷分散を行う場合には,受講者がeラーニングシステムにログインしてからログアウトするまでは,その受講者が利用する1台のクライアントからアプリケーションサーバへの要求を,常に同一のアプリケーションサーバへ振り分ける必要がある。負荷分散装置には,送信元のIPアドレスの情報を基に要求を振り分けるタイプ(以下,装置タイプAという)と,OSI基本参照モデルのレイヤ4以上の情報を基に要求を振り分けるタイプ(以下,装置タイプBという)とがある。二つのタイプそれぞれの装置の動作について,概要を次に示す。
装置タイプAでは,振り分け先が決まっていない送信元IPアドレスからの要求を,ラウンドロビン方式で決定したアプリケーションサーバに振り分けるとともに,送信元IPアドレスと振り分け先のアプリケーションサーバのIPアドレスとを記録する。振り分け先が決まっている送信元IPアドレスからの要求は,そのアプリケーションサーバに振り分ける。装置タイプAを用いると,多くのクライアントのある大規模な教室からのアクセスが1台のアプリケーションサーバに集中して,アプリケーションサーバの負荷に偏りが生じることが予想される。
装置タイプBでは,クライアントから送信された要求中のHTTPヘッダ内に識別情報⟦c⟧がない場合,ラウンドロビン方式で決定したアプリケーションサーバに振り分ける。アプリケーションサーバから送信された応答に含まれるHTTPヘッダ内の識別情報と,当該アプリケーションサーバのIPアドレスとを記録する。クライアントから送信された要求中のHTTPヘッダ内の識別情報に対応するアプリケーションサーバのIPアドレスが記録されている場合は,そのアプリケーションサーバに振り分ける。装置タイプBを用いると,多くのクライアントのある大規模な教室からプロキシサーバを経由してアクセスがあっても,振り分け先の決定をクライアント単位で行える。
検討の結果,アプリケーションサーバの負荷に偏りが少なくなることから,装置タイプBを導入することにした。
図1 検討したネットワーク構成
図1「検討したネットワーク構成」。教室内の複数のクライアントが教室内ネットワークに接続され,プロキシサーバ(IPアドレス198.51.100.1)を経由してインターネットに接続する。eラーニングシステム側には,DNSサーバ(192.0.2.1)と負荷分散装置(192.0.2.2)が接続される。負荷分散装置のIPアドレスは192.168.0.254。システム内のネットワークには,アプリケーションサーバ1(192.168.0.1),アプリケーションサーバ2(192.168.0.2),コンテンツサーバ(192.168.0.3)が接続される。図中の注記:x.x.x.xはIPアドレスを表す。
M/M/1の待ち行列モデルの式
平均処理待ち時間 = ρ/(1-ρ) × 平均処理時間。ρ:アプリケーションサーバの利用率=λ/μ。μ:アプリケーションサーバの処理率(=平均処理時間の逆数)。λ:アプリケーションサーバへの平均到着率。
問問4 設問1
本文中の空欄a~cに入れる適切な答えを,それぞれ解答群の中から選べ。
aに関する解答群
ア 192.0.2.1
イ 192.0.2.2
ウ 192.168.0.1
エ 192.168.0.2
オ 192.168.0.3
カ 198.51.100.1
bに関する解答群
ア 192.168.0.1 と 192.168.0.2
イ 192.168.0.1 と 192.168.0.3
ウ 192.168.0.2 と 192.168.0.3
エ 192.168.0.2 と 192.168.0.254
cに関する解答群
ア DNSサーバのIPアドレス
イ アプリケーションサーバとコンテンツサーバのポート番号
ウ セッションIDを示すcookie
エ 負荷分散装置のIPアドレス
- A-ア 192.0.2.1
- A-イ 192.0.2.2
- A-ウ 192.168.0.1
- A-エ 192.168.0.2
- A-オ 192.168.0.3
- A-カ 198.51.100.1
- B-ア 192.168.0.1 と 192.168.0.2
- B-イ 192.168.0.1 と 192.168.0.3
- B-ウ 192.168.0.2 と 192.168.0.3
- B-エ 192.168.0.2 と 192.168.0.254
- C-ア DNSサーバのIPアドレス
- C-イ アプリケーションサーバとコンテンツサーバのポート番号
- C-ウ セッションIDを示すcookie
- C-エ 負荷分散装置のIPアドレス
出典:平成31年度 春期 基本情報技術者試験 午後 問4 設問1
問問4 設問2
本文中の下線部①で,装置タイプAを用いたときに,アプリケーションサーバの負荷に偏りが生じる要因となり得るものはどれか。適切な答えを,解答群の中から選べ。
- ア 同じ教室のどのクライアントからの要求も送信元IPアドレスが全て同じになること。
- イ クライアントから送られてきたIPパケット内の送信先アドレスが変換されること。
- ウ 負荷分散装置が送信元IPアドレスの情報を用いるだけの単純な機能なので,高速に動作すること。
- エ プロキシサーバを経由しても,HTTPヘッダの情報が変更されないこと。
出典:平成31年度 春期 基本情報技術者試験 午後 問4 設問2
問問4 設問3
eラーニングシステムの応答時間は,1件の要求に対するネットワーク上のデータ転送時間,アプリケーションサーバでの処理待ち時間,及びアプリケーションサーバの処理時間(処理を始めてから応答を返すまでの時間)の合計である。検討したネットワーク構成での応答時間の短縮効果を評価するために,アプリケーションサーバでの平均処理待ち時間を計算する。アプリケーションサーバの要求1件の平均処理時間は0.40秒であり,要求の平均到着率は2.30件/秒である。処理の待ち行列はアプリケーションサーバだけで発生するものとして,現行のネットワーク構成における平均処理待ち時間を,M/M/1の待ち行列モデルの式で計算すると4.60秒となる。アプリケーションサーバを1台追加し,装置タイプBを導入したとき,1台のアプリケーションサーバでの平均処理待ち時間をM/M/1の待ち行列モデルによって計算すると何秒となるか。要求は2台のアプリケーションサーバに交互に振り分けられると仮定する。また,平均処理待ち時間は小数第3位を四捨五入し,ネットワーク上のデータ転送時間とアプリケーションサーバの処理時間は変わらないものとする。正しい答えを解答群の中から選べ。
出典:平成31年度 春期 基本情報技術者試験 午後 問4 設問3
共通の文章
問5 農産物の検査管理システムに関する次の記述を読んで、設問1~3に答える。K社は、農産物を検査し、結果を報告する検査業務を実施している。検査の申込者の情報、検査を依頼された農産物(以下、検査農産物という)の情報、及び検査項目ごとの検査結果の情報は、検査管理システムで管理する。
【検査農産物の検査業務の流れ】
(1) 担当者は、申込者から検査農産物と検査項目を受け付ける。一つの検査農産物に対して五つまでの検査項目を受け付ける。
(2) 担当者は、申込者が新規の場合、申込者の情報を検査管理システムに登録する。
(3) 担当者は、検査農産物の情報を検査管理システムに登録する。ただし、検査項目は登録しない。
(4) 担当者は、受け付けた検査項目の検査を実施する。受け付けた全ての検査項目の検査が終了した後、検査結果の情報を、検査項目ごとに検査管理システムに一括して登録する。
(5) 担当者は、検査管理システムに登録された検査結果を確認して、申込者に検査結果を報告する。
【検査管理システムの説明】
検査管理システムは3台のサーバから成り、各サーバは個別にデータベース(以下、DBという)をもつ。各DBへの情報の登録には、各サーバの申込情報登録ツール、利用者情報登録ツール及び検査結果登録ツールを利用する。担当者は、申込者に報告する検査結果を確認するために報告用アプリケーションを利用する。報告用アプリケーションは、各サーバが提供しているWebインタフェースのAPI(以下、WebAPIという)である情報取得用WebAPIと認証関連WebAPIだけを利用して、各DBにアクセスする。
担当者は、報告用アプリケーションに自身の利用者IDとパスワードを入力して、検査管理システムにログインする。報告用アプリケーションは、ログイン処理に認証関連WebAPIを利用し、ログインに成功したら認証サーバからアクセス用のID(以下、アクセスIDという)を取得する。アクセスIDは、認証情報として認証DBに格納され、ログアウトするまで管理される。報告用アプリケーションは、アクセスIDを情報取得用WebAPIの引数に指定して、各DBから必要な情報を取得する。
情報取得用WebAPIは指定された引数に基づいて処理を実行し、取得した情報を戻り値とする。引数の指定方法には、個別のIDを指定する方法、IDのリストを指定する方法、開始番号を指定する方法の3通りがある。開始番号を指定する場合、格納されている情報を整列し、整列後の並びの先頭の情報を1件目とし、開始番号の位置から最多で10件を取得して戻り値とする。例えば情報が25件ある場合、開始番号1では整列後の1~10件目、開始番号11では11~20件目、開始番号21では21~25件目を戻り値とする。
情報取得用WebAPIは処理開始時に認証関連WebAPIを利用し、引数に指定されたアクセスIDが認証情報として管理されているかどうかを確認する。管理されていない場合は処理を受け付けない。表1のWebAPI仕様の処理説明では、アクセスIDの確認処理の説明は省略されている。
図1
図1「検査管理システムの構成」。上段に「申込情報登録ツール」「利用者情報登録ツール」「検査結果登録ツール」があり、それぞれ申込情報管理サーバ、認証サーバ、検査結果管理サーバに接続する。各サーバ内にそれぞれ申込DB、認証DB、検査結果DBがあり、各サーバはWebAPIを提供する。申込情報管理サーバと検査結果管理サーバは「情報取得用WebAPI」、認証サーバは「認証関連WebAPI」を提供する。下段の「報告用アプリケーション」から、各サーバの情報取得用WebAPI及び認証関連WebAPIへ矢印でアクセスが示されている。凡例:矢印はアクセスを示し、記載がないアクセスは発生しない。
図2
図2「検査管理システムが管理する情報と項目」。情報と項目は次のとおり(下線付き項目は主キー)。認証情報:アクセスID(主キー)、利用者ID、ログイン日時、最終アクセス日時。利用者情報:利用者ID(主キー)、パスワード。申込者情報:申込者ID(主キー)、団体名、住所、電話番号。検査農産物情報:検査農産物ID(主キー)、空欄b、検査農産物名。検査結果情報:検査ID(主キー)、空欄c、検査項目名、検査結果、検査日。各情報には利用者ID、検査IDなどの個別IDが付与され、各情報は一つのDBだけに格納される。申込DBに格納されている情報を問う本文中の空欄aがある。
表1
表1「情報取得用WebAPIの説明」。列はサーバ、WebAPI名、WebAPI仕様(引数、戻り値、処理)。申込情報管理サーバ:getOffererInfo—引数はアクセスIDと申込者IDのリスト(10件まで指定可)、戻り値は申込者情報のリスト、処理は指定された申込者IDの申込者情報を申込DBから取得する。listOffererInfo—引数はアクセスIDと開始番号、戻り値は申込者情報のリスト、処理は申込DBの申込者情報を申込者IDの昇順に整列し、開始番号から最多で10件取得する。getProductInfo—引数はアクセスIDと検査農産物IDのリスト(10件まで指定可)、戻り値は検査農産物情報のリスト、処理は指定された検査農産物IDの検査農産物情報を申込DBから取得する。listProductInfo—引数はアクセスIDと開始番号、戻り値は検査農産物情報のリスト、処理は申込DBの検査農産物情報を検査農産物IDの昇順に整列し、開始番号から最多で10件取得する。検査結果管理サーバ:getResultInfo—引数はアクセスIDと検査IDのリスト(10件まで指定可)、戻り値は検査結果情報のリスト、処理は指定された検査IDの検査結果情報を検査結果DBから取得する。getResultInfoForProduct—引数はアクセスIDと検査農産物ID、戻り値は検査結果情報のリスト、処理は指定された検査農産物IDに対応する検査農産物の全ての検査結果情報を検査結果DBから取得する。listResultInfo—引数はアクセスIDと開始番号、戻り値は検査結果情報のリスト、処理は検査結果DBの検査結果情報を検査日、検査IDの降順に整列し、開始番号から最多で10件取得する。注記:WebAPIの処理では、引数に指定した申込者ID、検査農産物ID又は検査IDに対応する情報のうち、各DBに存在するものだけを戻り値とする。
図3
図3「農産物検査結果表示機能が表示する画面の例」。表示例の上部に検査農産物ID「20190301-001」、検査農産物名「水稲うるち玄米」、申込者情報として団体名「○○団体」、住所「○○県○○市○○町1-1」、電話番号「○○○-○○○○-○○○○」がある。検査結果情報の表の列は検査ID、検査項目名、検査結果、検査日。表示行は、0000984501/形質/一等標準品/2019-03-05、0000984502/整粒(%)/70/2019-03-05、0000984503/水分(%)/15.0/2019-03-06。表にはさらに空欄の4、5行目がある。
図4
図4「検査結果リスト表示機能が表示する画面の例」。開始番号は1。画面に「前へ」「次へ」ボタンがあり、表の列は番号、団体名、検査農産物ID、検査ID、検査項目名、検査結果、検査日。例の1行目は番号1、団体名「□□□団体」、検査農産物ID「20190401-001」、検査ID「0000989587」、検査項目名「形質」、検査結果「一等標準品」、検査日「2019-04-02」。2~10行目は省略記号で示される。注記:番号の列には、開始番号から始まる連番を表示する。機能は1画面に最多で10件を表示し、画面に表示されていない情報を表示するときは「前へ」又は「次へ」をクリックして表示対象を切り替える。初期表示時の開始番号は1。「前へ」又は「次へ」をクリックすると開始番号に-10又は10を加算して画面を再表示する。
問問5 設問1
本文中及び図2中の空欄に入れる正しい答えを、解答群の中から選べ。
aに関する解答群
ア 認証情報及び申込者情報
イ 認証情報及び利用者情報
ウ 認証情報、申込者情報及び検査農産物情報
エ 検査農産物情報
オ 申込者情報
カ 申込者情報及び検査農産物情報
b、cに関する解答群
ア アクセスID
イ 検査ID
ウ 検査項目名
エ 検査農産物ID
オ 申込者ID
カ 利用者ID
- A-ア 認証情報及び申込者情報
- A-イ 認証情報及び利用者情報
- A-ウ 認証情報、申込者情報及び検査農産物情報
- A-エ 検査農産物情報
- A-オ 申込者情報
- A-カ 申込者情報及び検査農産物情報
- B-ア アクセスID
- B-イ 検査ID
- B-ウ 検査項目名
- B-エ 検査農産物ID
- B-オ 申込者ID
- B-カ 利用者ID
- C-ア アクセスID
- C-イ 検査ID
- C-ウ 検査項目名
- C-エ 検査農産物ID
- C-オ 申込者ID
- C-カ 利用者ID
出典:平成31年度 春期 基本情報技術者試験 午後 問5 設問1
問問5 設問2
報告用アプリケーションには農産物検査結果表示機能があり、この機能は、1件の検査農産物IDを入力して「表示」ボタンをクリックすると画面に情報を表示する。検査結果の情報が登録済みの検査農産物の検査農産物IDを入力した場合、「表示」ボタンをクリックしてから画面の表示が完了するまでには、表1に示す情報取得用WebAPIの実行が最低何回必要であるか。ここで、実行時にエラーは発生しないものとする。
出典:平成31年度 春期 基本情報技術者試験 午後 問5 設問2
問問5 設問3
担当者から、検査農産物IDの検査結果を個別に閲覧するのではなく、一覧形式で閲覧したいという要望が挙がった。要望を受けて、報告用アプリケーションに検査結果リスト表示機能を追加する。機能では表1の情報取得用WebAPIを利用して、登録されている検査結果の情報(以下、農産物検査結果情報という)を全て一覧形式で表示する。1行の表示内容は、各農産物検査結果情報の一覧全体中での位置を示す番号と、内訳として団体名、検査農産物ID、検査ID、検査項目名、検査結果及び検査日である。一覧にするとき、最近実施した検査の検査結果が先に表示されるように検査日の降順に整列する。1画面に最多で10件を表示し、画面に表示されていない情報を表示するときは「前へ」又は「次へ」ボタンをクリックして対象を切り替える。初期表示時の開始番号を1とし、ボタンをクリックすると開始番号に-10又は10を加算して画面を再表示する。画面表示のたびに,開始番号及び情報取得用WebAPIを利用して表示する情報を取得する場合,情報取得用WebAPIを[e]という順番で1回ずつ実行する。ここで、実行時にエラーは発生しないものとする。
- ア listOffererInfo、listProductInfo、getResultInfoForProduct
- イ listProductInfo、getOffererInfo、getResultInfoForProduct
- ウ listProductInfo、listOffererInfo、getResultInfoForProduct
- エ listResultInfo,getOffererInfo,getProductInfo
- オ listResultInfo、getProductInfo、getOffererInfo(表記は選択肢に記載された順)
出典:平成31年度 春期 基本情報技術者試験 午後 問5 設問3
共通の文章
問6 社内システムの仕様変更の扱いに関する次の記述を読んで,設問1,2に答えよ。
Q社では,ある社内システムを刷新する開発プロジェクト(以下,刷新プロジェクトという)を実施している。刷新プロジェクトは,設計,プログラム開発,結合試験及び総合試験の4工程で推進する。刷新プロジェクトは,利用部門,プロジェクト管理チーム,プロジェクトマネージャ(以下,担当PMという)及び複数の開発チームで構成されている。Q社では,過去の社内システムの構築において,開発中に発生した仕様変更に伴い,プロジェクト計画の大幅な見直しが必要になったことがあり,利用部門から仕様変更の依頼が発生した場合の取扱手順を定めている。
[仕様変更の依頼が発生した場合の取扱手順]
プロジェクト管理チーム,担当PM,開発チームの役割は,次のとおりである。
・プロジェクト管理チーム:仕様変更依頼票の受渡しなど利用部門との書類や情報のやり取り,担当PMや開発チームとの書類のやり取り,取りまとめを行う。また,変更管理会議の運営を行う。
・担当PM:仕様変更依頼票の確認,仕様変更の採否の判断,プロジェクト計画の更新を行う。
・開発チーム:仕様変更依頼票の内容に基づく影響調査を実施する。
図1
図1「刷新プロジェクトのスケジュール」。期間(月)は1から10。工程の順序と期間は,設計が1~2か月,プログラム開発が3~6か月,結合試験が7~8か月,総合試験が9~10か月。工程は図中の矢印で順に接続されている。本文では1か月を4週とする。
表1
表1「機能Lに関する生産性及び当初計画の工数」。列は工程,生産性(kステップ/人月),工数(人月)。設計:10,40。プログラム開発:4,100。結合試験:8,50。総合試験:10,40。
問問6 設問1
[仕様変更の依頼が発生した場合の取扱手順]
(1) 利用部門は,仕様変更の目的及び内容と,変更によって得られる効果を記述した仕様変更依頼票を起票し,a1に提出する。
(2) a1は,仕様変更依頼票を受け付けて,受付番号を記入して,管理簿への記録を行う。
(3) a2は,仕様変更依頼票の記述内容を確認し,内容が妥当であれば,受領し,変更内容に対する影響調査を該当するa3に対して依頼するようにa1に指示する。ここで,プログラム開発以降の工程では,システム全体への影響を迅速に把握する必要があるので,Q社のルールでは,全てのa3に対して影響調査を依頼する。受領しない場合,受領しない理由を仕様変更依頼票に付して利用部門に返却するようa1に指示する。
(4) 依頼されたa3は,仕様変更依頼票に記述してある仕様変更の内容に基づき,自チームで開発している機能に関する影響を調査する。追加,変更などが必要な設計書のページ数,対象プログラム及び影響を受ける開発規模を調査し,影響調査結果を回答する。
(5) a1は,影響調査結果を取りまとめ,利用部門,a2及び影響のあるa3のメンバを出席者とする変更管理会議を開催する。
(6) 変更管理会議において,影響調査結果を参考にして,担当PMは,仕様変更の依頼の重要性及び緊急性,納期遅延の可能性,工数増加の有無,変更によるプログラム品質への影響などを総合的に評価して,変更を採用するかしないかを判断する。
(7) プロジェクト管理チームは,利用部門に仕様変更依頼の採否の結果を回答する。
(8) 変更管理会議において,仕様変更依頼が採用された場合,担当PMはbする。
設問1 [仕様変更の依頼が発生した場合の取扱手順]の記述中の空欄に入れる適切な答えを,解答群の中から選べ。ここで,a1~a3に入れる答えは,aに関する解答群の中から組合せとして適切なものを選ぶものとする。
aに関する解答群
ア a1=開発チーム,a2=担当PM,a3=プロジェクト管理チーム
イ a1=担当PM,a2=開発チーム,a3=プロジェクト管理チーム
ウ a1=担当PM,a2=プロジェクト管理チーム,a3=開発チーム
エ a1=プロジェクト管理チーム,a2=担当PM,a3=開発チーム
bに関する解答群
ア 仕様変更依頼の内容に対する影響調査を指示
イ 仕様変更依頼票の内容をプロジェクト計画に反映させて更新
ウ 仕様変更依頼票の起票に至る経緯をプロジェクト管理チームに確認
エ 仕様変更依頼票の起票に至る経緯を利用部門に確認
- A-ア a1=開発チーム,a2=担当PM,a3=プロジェクト管理チーム
- A-イ a1=担当PM,a2=開発チーム,a3=プロジェクト管理チーム
- A-ウ a1=担当PM,a2=プロジェクト管理チーム,a3=開発チーム
- A-エ a1=プロジェクト管理チーム,a2=担当PM,a3=開発チーム
- B-ア 仕様変更依頼の内容に対する影響調査を指示
- B-イ 仕様変更依頼票の内容をプロジェクト計画に反映させて更新
- B-ウ 仕様変更依頼票の起票に至る経緯をプロジェクト管理チームに確認
- B-エ 仕様変更依頼票の起票に至る経緯を利用部門に確認
出典:平成31年度 春期 基本情報技術者試験 午後 問6 設問1
問問6 設問2
設問2 次の記述中の空欄に入れる適切な答えを,解答群の中から選べ。
刷新プロジェクトのスケジュールを図1に示す。ここで,1か月は4週とする。
スケジュールのとおりに開発が進んでいたところ,刷新プロジェクトの開始後13週目において,機能Lに対する仕様変更依頼票が起票され,すぐに担当PMは受領した。刷新プロジェクトでは,機能Lを開発チーム1が,機能Mを開発チーム2が,機能Nを開発チーム3が担当している。現在の工程では,変更内容に対する影響調査の依頼先は,Q社のルールにのっとり,cとなる。
[影響調査結果の概要]
影響調査の結果,開発チーム1が担当している機能L(当初計画の開発規模は,400kステップ)だけに影響があることが分かった。機能Lに関する生産性及び当初計画の工数を,表1に示す。
仕様変更を行っても,開発を進めている機能Lのプログラムを変更する必要はなく,機能Lの当初計画の開発規模の10%の追加開発が必要と分かった。また,仕様変更分における工程ごとの生産性は,当初計画と同じである。仕様変更に関わる,設計工程から結合試験工程までは,当初計画分と切り離して実施可能であり,この期間に必要な追加の工数はd人月となる。
開発チーム1では,仕様変更分の総合試験の実施に関して,次の二つの計画を検討した。
・計画1:仕様変更分の総合試験は,当初計画分の総合試験の開始時点から実施する。
・計画2:仕様変更分の総合試験は,当初計画分の総合試験の5週目開始時点から実施する。
仕様変更に関わる,設計工程から結合試験工程までの期間は,刷新プロジェクトの開始後17週目開始から,計画1又は計画2の総合試験工程の開始前までとする。総合試験工程は,図1のスケジュールで示した当初計画どおりに完了させる。ここで,仕様変更分の開発に必要な追加の要員数は,設計工程から結合試験工程までの期間の各週で同一とする。また,追加の要員は,全ての工程を担当できるスキルを備えているものとする。
計画1の場合は刷新プロジェクトの開始後e週目終了までに,計画2の場合は刷新プロジェクトの開始後36週目終了までに,結合試験工程を完了させる必要がある。仕様変更に関わる,設計工程から結合試験工程までの期間の各週に必要な追加の要員は,計画1の場合は少なくともf人,計画2の場合は少なくともg人である。追加可能な要員が各週とも最大4人である場合,h。
前記の影響調査結果も踏まえて変更管理会議を開催し,仕様変更依頼を採用することになった。
cに関する解答群
ア 開発チーム1
イ 開発チーム2
ウ 開発チーム3
エ 開発チーム1及び開発チーム2
オ 開発チーム1及び開発チーム3
カ 開発チーム2及び開発チーム3
キ 全ての開発チーム
dに関する解答群
ア 19
イ 23
ウ 190
エ 230
eに関する解答群
ア 17
イ 31
ウ 32
エ 36
f、gに関する解答群
ア 1
イ 2
ウ 3
エ 4
オ 5
カ 6
キ 7
ク 8
hに関する解答群
ア 計画1だけが実現可能である
イ 計画2だけが実現可能である
ウ 両計画とも実現可能である
エ 両計画とも実現不可能である
- C-ア 開発チーム1
- C-イ 開発チーム2
- C-ウ 開発チーム3
- C-エ 開発チーム1及び開発チーム2
- C-オ 開発チーム1及び開発チーム3
- C-カ 開発チーム2及び開発チーム3
- C-キ 全ての開発チーム
- D-ア 19
- D-イ 23
- D-ウ 190
- D-エ 230
- E-ア 17
- E-イ 31
- E-ウ 32
- E-エ 36
- F-ア 1
- F-イ 2
- F-ウ 3
- F-エ 4
- F-オ 5
- F-カ 6
- F-キ 7
- F-ク 8
- G-ア 1
- G-イ 2
- G-ウ 3
- G-エ 4
- G-オ 5
- G-カ 6
- G-キ 7
- G-ク 8
- H-ア 計画1だけが実現可能である
- H-イ 計画2だけが実現可能である
- H-ウ 両計画とも実現可能である
- H-エ 両計画とも実現不可能である
出典:平成31年度 春期 基本情報技術者試験 午後 問6 設問2
共通の文章
問7 製造業における情報システムの統合
T社は大手家電製品メーカーであり、製品の設計及び需要予測は事業部ごとに行っている。各製造工場は、一つ以上の事業部の製品を製造している。2018年度に各製造工場が製造した製品の事業部別取扱高を表1に示す。
T社は、事業部と製造工場ごとに情報システムを整備してきた経緯があり、設計システムには三つ、需要予測システムには三つ、調達システムには四つのシステムがある。各事業部が利用している設計システム及び需要予測システムを表2に、各製造工場が利用している調達システムを表3に示す。システムの名称が同一の場合は、事業部又は製造工場が同じシステムを共用していることを意味している。例えば、P事業部とS事業部は、設計システムとしてAシステムを共用している。
T社では情報システムの運用保守コストの削減が求められており、本社の情報システム部門の主導によってプロジェクトを立ち上げ、設計システム、需要予測システム及び調達システムのそれぞれについて、複数のシステムを統合することとした。
表1 2018年度に各製造工場が製造した製品の事業部別取扱高
表1 2018年度に各製造工場が製造した製品の事業部別取扱高。単位は億円。列はP事業部、Q事業部、R事業部、S事業部の順。記号「-」は、その製造工場が当該事業部の製品を製造していないことを示す。
| 製造工場 | P事業部 | Q事業部 | R事業部 | S事業部 |
|---|---:|---:|---:|---:|
| H製造工場 | - | 200 | - | 50 |
| I製造工場 | 500 | - | - | - |
| J製造工場 | - | - | - | 150 |
| K製造工場 | - | - | 300 | - |
| L製造工場 | - | 200 | - | - |
| M製造工場 | - | - | - | 100 |
| 合計 | 500 | 400 | 300 | 300 |
表2 各事業部が利用している設計システム及び需要予測システム
表2 各事業部が利用している設計システム及び需要予測システム。
| 事業部 | 設計システム | 需要予測システム |
|---|---|---|
| P事業部 | Aシステム | Eシステム |
| Q事業部 | Bシステム | Fシステム |
| R事業部 | Cシステム | Fシステム |
| S事業部 | Aシステム | Gシステム |
表3 各製造工場が利用している調達システム
表3 各製造工場が利用している調達システム。
| 製造工場 | 調達システム |
|---|---|
| H製造工場 | Vシステム |
| I製造工場 | Wシステム |
| J製造工場 | Xシステム |
| K製造工場 | Yシステム |
| L製造工場 | Xシステム |
| M製造工場 | Xシステム |
問問7 設問1
データの受渡し(以下,データ連携という)に関する次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。
調達システムは、製品の製造に必要な部品の在庫管理と発注処理を行っている。各製造工場が利用している調達システムは、その工場が製造する製品を担当している事業部が利用している設計システム及び需要予測システムとデータ連携している。設計システムと需要予測システムとの間のデータ連携はない。
表1~3によれば、最も多くの調達システムとデータ連携している設計システムは[a]システムであり、そのデータ連携先の調達システム数は[b]である。また、調達システムの中で、データ連携している設計システム数と需要予測システム数の合計が最も多いのは、[c]システムと[d]システムである。
aに関する解答群
ア A
イ B
ウ C
bに関する解答群
ア 2
イ 3
ウ 4
エ 5
オ 6
c、dに関する解答群
ア V
イ W
ウ X
エ Y
- A-ア A
- A-イ B
- A-ウ C
- B-ア 2
- B-イ 3
- B-ウ 4
- B-エ 5
- B-オ 6
- C-ア V
- C-イ W
- C-ウ X
- C-エ Y
- D-ア V
- D-イ W
- D-ウ X
- D-エ Y
出典:平成31年度 春期 基本情報技術者試験 午後 問7 設問1
問問7 設問2
情報システムの運用保守コストに関する次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。
本社の情報システム部門による調査の結果、情報システムの運用保守コストとして、設計システムのそれぞれには年間2億円、需要予測システムのそれぞれには年間3億円、調達システムのそれぞれには年間1億円が掛かっていることが分かった。それらに加えて、調達システムのそれぞれには、各製造工場が製造する製品の年間の取扱高の0.1%分の運用保守コストが掛かっていることが分かった。また、システム間のデータ連携のための経路(以下,データ連携経路という)の運用保守コストとして、データ連携経路一つ当たり年間0.1億円が掛かっていることが分かった。今後においても、今までデータ連携していないシステム間に新たなデータ連携経路を一つ作成した場合、データ連携経路の運用保守コストは年間0.1億円増加する。
2018年度のT社の設計システム、需要予測システム、調達システム及びデータ連携経路の年間の運用保守コストの合計は[e]億円であった。設計システム、需要予測システム及び調達システムを全社でそれぞれ一つに統合できれば、これらのシステム及びデータ連携経路の年間の運用保守コストの合計は[f]億円となる。ここで、取扱高などの前提条件は変わらないものとする。また、一つのシステムを複数の事業部や製造工場で共用する場合でも、共用するシステムの運用保守コストは一つの事業部や製造工場が単独で利用する場合と変わらないものとする。
eに関する解答群
ア 19.0
イ 20.2
ウ 21.7
エ 25.2
fに関する解答群
ア 6.0
イ 6.2
ウ 7.7
エ 9.7
- E-ア 19.0
- E-イ 20.2
- E-ウ 21.7
- E-エ 25.2
- F-ア 6.0
- F-イ 6.2
- F-ウ 7.7
- F-エ 9.7
出典:平成31年度 春期 基本情報技術者試験 午後 問7 設問2
問問7 設問3
Gシステムの廃棄に関する次の記述中の空欄に入れる適切な答えを,解答群の中から選べ。
本社の情報システム部門は、Gシステムの保守サポート期間の終了が迫っているので、Gシステムを廃棄し、他の需要予測システムによって代替できるかどうかを検討した。新たなデータ連携経路を作成することなくGシステムとの代替が可能な需要予測システムは[g]。
- ア Eシステムだけである
- イ Fシステムだけである
- ウ Eシステム及びFシステムである
- エ ない
出典:平成31年度 春期 基本情報技術者試験 午後 問7 設問3
共通の文章
問8 ハフマン符号化を用いた文字列圧縮に関する次の記述を読んで、設問1~3に答えよ。
“A”~“D”の4種類の文字から成る文字列をハフマン符号化によって圧縮する。ハフマン符号化では、出現回数の多い文字には短いビット列を、出現回数の少ない文字には長いビット列を割り当てる。ハフマン符号化による文字列の圧縮手順は、次の(1)~(4)のとおりである。
(1) 文字列中の文字の出現回数を求め、出現回数表を作成する。例えば、文字列“AAAABBCDCDDCCAAAAA”(以下、文字列αという)中の文字の出現回数表は、表1のとおりになる。
(2) 文字の出現回数表に基づいてハフマン木を作成する。ハフマン木は、節と枝で構成する二分木である。親である節は、子である節を常に二つもち、子の節の値の和を値としてもつ。子をもたない節(以下、葉という)は文字に対応し、出現回数を値としてもつ。親をもたない節(以下、根という)は、文字列の文字数を値としてもつ。文字列αに対応するハフマン木の例を図1に示す。
ハフマン木は、次の手順で配列によって実現する。
① 節の値を格納する1次元配列を用意する。
② 文字の出現回数表に基づいて、各文字に対応する葉の値を、配列の先頭の要素から順に格納する。
③ 親が作成されていない節を二つ選択し、選択した順に左側の子、右側の子とする親の節を一つ作成する。この節の値を、配列中で値が格納されている最後の要素の次の要素に格納する。節の選択は節の値の小さい順に行い、同じ値をもつ節が二つ以上ある場合は、配列の先頭に近い要素に値が格納されている節を選択する。
④ 親が作成されていない節が一つになるまで③を繰り返す。
(3) ハフマン木から文字のビット列(以下、ビット表現という)を次の手順で作成する。
① 親と左側の子をつなぐ枝に0、右側の子をつなぐ枝に1の値をもつビットを割り当てる。
② 文字ごとに根から対応する葉までたどったとき、枝のビット値を順に左から並べたものを各文字のビット表現とする。図2に示すとおり、根から矢印のようにたどると、文字列αの文字“B”のビット表現は010となる。
(4) 文字列の全ての文字を(3)で得られたビット表現に置き換えて、ビット列を作成する。
表1
表1「文字列α中の文字の出現回数表」。列見出し「文字」の値はA、B、C、D。行見出し「出現回数」の値は10、2、4、3(順にA、B、C、Dに対応)。文字列αは“AAAABBCDCDDCCAAAAA”。
図1
図1「文字列αに対応するハフマン木の例」。二分木の根の値は19。根の左の子は9、右の子は葉“A”の値10。節9の左の子は葉“C”の値4、右の子は節5。節5の左の子は葉“B”の値2、右の子は葉“D”の値3。丸の中の数値は各節がもつ値を表し、“A”~“D”は葉に対応する文字を表す。
図2
図2「文字列αにおける文字“B”のビット表現の作成例」。図1の木で、左枝に0、右枝に1を割り当てる。根から葉“B”への枝のビットは順に0、1、0で、ビット表現は010。線分は枝を表し、枝の上の数値は各枝のビット値を表す。
設問1共通情報
設問1の対象文字列は“ABBBBBBBCCCDD”。文字とビット表現を示す表を選ぶ。ハフマン符号化によって圧縮した場合の総ビット長に対する圧縮率は、ハフマン符号化による圧縮後の総ビット長を、2ビットの固定長で表現したときの総ビット長で割って求める。圧縮率はこの値の小数第3位を四捨五入して求める。
図3
図3は、図1のハフマン木を表す配列の例。要素番号は0~6。parent配列は順に[6,4,5,4,5,6,-1]、left配列は[-1,-1,-1,-1,1,2,5]、right配列は[-1,-1,-1,-1,3,4,0]、freq配列は[10,2,4,3,5,9,19]。要素番号0~3は順に文字“A”~“D”の葉に対応する。葉のときleftとrightの値はいずれも-1。根のときparentの値は-1。矢印は、始点と終点の二つの要素組に対応する節が子と親の関係にあることを示す。
プログラム1の説明
プログラム1の説明:(1) 同じ要素番号に対応するparent、left、right、freqの要素の組(要素組)によって一つの節を表す。要素番号は0から始まる。四つの配列の大きさは十分大きく、全要素は-1で初期化されている。(2) parentには親、leftには左側の子、rightには右側の子を表す要素組の要素番号を格納し、freqには節の値を格納する。節が葉のときleftとrightはいずれも-1。図3では要素番号0~3の要素組が順に“A”~“D”の葉に対応する。節が根のときparentは-1。
(3) 副プログラムHuffmanは、葉である節の個数size、初期化されたparent、left、right、および初期化後に文字の出現回数が要素番号0から順に格納されたfreqを受け取り、ハフマン木を表現する配列を作成する。
(4) 副プログラムSortNodeは、親が作成されていない節を抽出し、節の値の昇順に整列し、節を表す要素組の要素番号を順に配列nodeに格納し、その個数をnsizeに格納する。行番号19~24では親が作成されていない節を表す要素組の要素番号を抽出し、行番号25で節の値の昇順に整列する。
(5) 副プログラムSortは、節を表す要素組の要素番号の配列nodeを受け取り、要素番号に対応する要素組が表す節の値が昇順となるように整列する。節の値が同じときの順序は、並べ替える直前の順序に従う。
(6) 副プログラムHuffman、SortNodeおよびSortの引数の仕様は表2~4に示す。
表2
表2「副プログラムHuffmanの引数の仕様」。列は引数/データ型/入出力/説明。size/整数型/入力・出力/節の個数。parent[]/整数型/入力・出力/節の親を表す要素組の要素番号を格納した配列。left[]/整数型/入力・出力/節の左側の子を表す要素組の要素番号を格納した配列。right[]/整数型/入力・出力/節の右側の子を表す要素組の要素番号を格納した配列。freq[]/整数型/入力・出力/節の値を格納した配列。
表3
表3「副プログラムSortNodeの引数の仕様」。列は引数/データ型/入出力/説明。size/整数型/入力/節の個数。parent[]/整数型/入力/節の親を表す要素組の要素番号を格納した配列。freq[]/整数型/入力/節の値を格納した配列。nsize/整数型/出力/配列node中の、整列対象とした節の個数。node[]/整数型/出力/節の値の昇順に整列した、親が作成されていない節を表す要素組の要素番号を格納した配列。
表4
表4「副プログラムSortの引数の仕様」。列は引数/データ型/入出力/説明。freq[]/整数型/入力/節の値を格納した配列。nsize/整数型/入力/配列node中の、整列対象の節の個数。node[]/整数型/入力・出力/節を表す要素組の要素番号を格納した配列。
プログラム1
プログラム1(行番号/処理):
1 副プログラム:Huffman(整数型:size、整数型:parent[]、整数型:left[]、整数型:right[]、整数型:freq[])
2 整数型:i、j、nsize
3 整数型:node[]
4 SortNode(size, parent, freq, nsize, node)
5 c
6 i ← node[0](最も小さい値をもつ要素組の要素番号)
7 j ← node[1](2番目に小さい値をもつ要素組の要素番号)
8 left[size] ← i
9 right[size] ← j
10 freq[size] ← freq[i] + freq[j](子の値の合計)
11 parent[i] ← size(子に親の節の要素番号を格納)
12 parent[j] ← size(子に親の節の要素番号を格納)
13 size ← size + 1
14 SortNode(size, parent, freq, nsize, node)
15 ここまで
16 副プログラム:SortNode(整数型:size、整数型:parent[]、整数型:freq[]、整数型:nsize、整数型:node[])
17 整数型:i
18 nsize ← 0
19 i:0、i<size、1ずつ増やす
20 d
21 node[nsize] ← i
22 nsize ← nsize + 1
23 ここまで
24 ここまで
25 Sort(freq, nsize, node)
プログラム2の説明
プログラム2の説明:(1) ビット表現を求めたい文字に対応する葉を表す要素組の要素番号を、副プログラムEncodeの引数kに与えて呼び出すと、ハフマン木から文字のビット表現を作成して表示する。(2) 副プログラムEncodeの引数の仕様を表5に示す。(3) 副プログラムEncodeは、行番号2の条件が成り立つとき、副プログラムEncodeを再帰的に呼び出す。これによって、ハフマン木を葉から根までたどっていく。(4) 根にたどり着くと次は葉に向かってたどっていく。現在の節が親の左側の子のときは0を、右側の子のときは1を表示する。(5) 関数printは、引数で与えられた文字列を表示する。
表5
表5「副プログラムEncodeの引数の仕様」。列は引数/データ型/入出力/説明。k/整数型/入力/節を表す要素組の要素番号。parent[]/整数型/入力/節の親を表す要素組の要素番号を格納した配列。left[]/整数型/入力/節の左側の子を表す要素組の要素番号を格納した配列。
プログラム2
プログラム2(行番号/処理):
1 副プログラム:Encode(整数型:k、整数型:parent[]、整数型:left[])
2 e
3 Encode(parent[k], parent, left)
4 f
5 print(“0”)(0を表示する)
6 print(“1”)(1を表示する)
7 ここまで
8 ここまで
問問8 設問1
次の記述中の空欄に入れる正しい答えを、解答群の中から選べ。文字列“ABBBBBBBCCCDD”を、ハフマン符号化を用いて表現する。各文字とビット表現を示した表は空欄aである。ハフマン符号化によって圧縮すると、文字“A”~“D”をそれぞれ2ビットの固定長で表現したときの当該文字列の総ビット長に対する圧縮率は空欄bとなる。圧縮率は、上記の比の値の小数第3位を四捨五入して求める。
aに関する解答群
ア 表:A→010、B→1、C→00、D→011
イ 表:A→010、B→0、C→01、D→111
ウ 表:A→100、B→0、C→101、D→11
エ 表:A→100、B→1、C→00、D→01
bに関する解答群
ア 0.77
イ 0.85
ウ 0.88
エ 0.92
- A-ア 表:A→010、B→1、C→00、D→011
- A-イ 表:A→010、B→0、C→01、D→111
- A-ウ 表:A→100、B→0、C→101、D→11
- A-エ 表:A→100、B→1、C→00、D→01
- B-ア 0.77
- B-イ 0.85
- B-ウ 0.88
- B-エ 0.92
出典:平成31年度 春期 基本情報技術者試験 午後 問8 設問1
問問8 設問2
ハフマン木を作成するプログラム1の説明及びプログラム1を読んで、プログラム1中の空欄に入れる正しい答えを、解答群の中から選べ。
c、dに関する解答群
ア nsize ≥ 0
イ nsize ≥ 1
ウ nsize ≥ 2
エ parent[i] < 0
オ parent[i] > 0
カ size ≤ nsize
キ size ≥ nsize
- C-ア nsize ≥ 0
- C-イ nsize ≥ 1
- C-ウ nsize ≥ 2
- C-エ parent[i] < 0
- C-オ parent[i] > 0
- C-カ size ≤ nsize
- C-キ size ≥ nsize
- D-ア nsize ≥ 0
- D-イ nsize ≥ 1
- D-ウ nsize ≥ 2
- D-エ parent[i] < 0
- D-オ parent[i] > 0
- D-カ size ≤ nsize
- D-キ size ≥ nsize
出典:平成31年度 春期 基本情報技術者試験 午後 問8 設問2
問問8 設問3
ハフマン木から文字のビット表現を作成して表示するプログラム2の説明及びプログラム2を読んで、プログラム2中の空欄に入れる正しい答えを、解答群の中から選べ。
eに関する解答群
ア k ≥ 0
イ left[k] = -1
ウ left[k] ≥ 0
エ parent[k] = -1
オ parent[k] ≥ 0
fに関する解答群
ア left[k] = k
イ left[parent[k]] = k
ウ parent[k] = k
エ parent[left[k]] = k
- E-ア k ≥ 0
- E-イ left[k] = -1
- E-ウ left[k] ≥ 0
- E-エ parent[k] = -1
- E-オ parent[k] ≥ 0
- F-ア left[k] = k
- F-イ left[parent[k]] = k
- F-ウ parent[k] = k
- F-エ parent[left[k]] = k
出典:平成31年度 春期 基本情報技術者試験 午後 問8 設問3
共通の文章
問9 次のCプログラムの説明及びプログラムを読んで、設問1、2に答えよ。入力ファイルを読み込んで、文字コードごとの出現回数を印字するプログラムである。入力ファイルはバイナリファイルとして読み込み、各バイトの内容(ビット構成)に制約はない。入力ファイル名は #define で指定する。入力ファイル中の各バイトについて、16進数00~FFで表す文字コードごとの出現回数を求めて印字する。印字形式は、1行目に処理したバイト数を印字し、3行目以降は出現回数と文字コードを印字する。文字コードが20~7Eの場合は、文字コードの後にその文字コードが表す文字を印字する。文字コードは64行×4列の範囲に上から下、左から右へ昇順に並べる。プログラム中の関数 fgetc(s) はストリーム s から1文字を読み込んで返し、入力ファイルの終わりに達しているときは EOF を返す。入力ファイルのサイズは long 型(32ビットとする)で表現できる数値の範囲を超えないものとする。
図1
図1「印字例(文字コード順)」:先頭に「10000 bytes processed」と印字する。以降は4列の文字コード順で、各項目は出現回数・16進文字コードの順(文字コード20~7Eでは表す文字も表示)。図中の例は、00: 0、01: 0、02: 0、03: 0、40: 0と「@」、41: 15と「A」、42: 0と「B」、43: 20と「C」、80: 0、81: 0、82: 0、83: 0、C0: 0、C1: 0、C2: 0、C3: 0、20: 3620と空白文字、21: 8と「!」、22: 76と「"」、60: 0と「`」、61: 103と「a」、62: 10と「b」、A0: 0、A1: 0、A2: 0、E0: 0、E1: 0、E2: 0、3E: 18と「>」、3F: 0、7E: 0と「~」、7F: 0、BE: 0、BF: 0、FE: 0、FF: 0。途中の行は省略されている。各文字コードは上から下、左から右へ昇順に配置する。
プログラム
プログラム(空欄は原本どおり):#include <stdio.h>。#define InName "sample.c" /* 入力ファイル名 */。int main() { FILE *infile; int chr, i; long cnt; long freq[256]; /* freq[i]: 文字コード i の出現回数 */。for (chr = 0; chr <= 255; chr++) freq[chr] = 0; infile = fopen(InName, "rb"); cnt = 0; while ((chr = fgetc(infile)) != EOF) { cnt++; freq[chr]++; } fclose(infile); printf("%10ld bytes processed\n\n", [a]); for (i = 0; i < 64; i++) { for (chr = i; chr <= [b]; chr += [c]) { if ((0x20 <= chr) && (chr <= 0x7E)) printf("%10ld %02X '%c'", freq[chr], chr, chr); else printf("%10ld %02X ", freq[chr], chr); } printf("\n"); } }。図中の丸数字①は int chr, i; の行、②は出力ループ後の閉じ波括弧を指す。
図2
図2「追加した処理による印字例(出現回数順)」:図1と同じ印字形式で、文字コードを出現回数の降順に並べ、同じ出現回数の文字コードは文字コードの昇順に並べる。図に示された例は、20: 3620と空白文字、69: 404と「i」、0A: 329、0D: 329、65: 299と「e」、72: 295と「r」、4B: 12と「K」、4C: 12と「L」、57: 12と「W」、4D: 11と「M」、58: 10と「X」、62: 10と「b」、36: 14と「6」、34: 12と「4」、7E: 0と「~」、7F: 0。その他の行は省略されている。
整列処理部
図2の処理のため、行①の直後に「int ih, ix, code[256];」を追加する。行②の位置に整列処理部を追加する:for (i = 0; i <= 255; i++) code[i] = i; [③] ih = 255; [④] while (ih > 0) { [⑤] for (i = 0; i < ih; i++) { [⑥] if (freq[i] < freq[i+1]) { Swap(code[i], code[i+1]); Swap(freq[i], freq[i+1]); } [⑦] } [⑧] ih--; }。Swap(x, y) は x と y の内容を入れ替えるマクロ。整列対象のデータ数が比較的少なく、同じ出現回数の文字コードは元の並び順を維持するため、バブルソートを使う。行④の while 文のブロックを1回実行すると、配列の走査範囲(要素番号0~ih)の出現回数の最小値とその文字コードが要素番号 ih の位置に置かれ、走査範囲が1だけ狭まる。この処理で while 文のブロックを実行する回数は一定となる。1回の繰返しで行⑥の if 文ブロック内の処理が最後に実行されたときの i の値を ix とすると、行⑤の for 文ブロックの実行終了時点で freq 配列の要素番号[e]以降の値は整列済みとなる。
表1
表1「整列処理部の変更内容」:処置「[f] の直後に追加」―変更内容「ix = 0;」。処置「行⑦の位置に追加」―変更内容「ix = i;」。処置「行⑧を置換え」―変更内容「[g];」。この変更により while 文ブロックの実行回数を減らせる可能性がある。
問問9 設問1
プログラム中の空欄に入れる正しい答えを、解答群の中から選べ。
aに関する解答群
ア cnt - 1
イ cnt
ウ cnt + 1
b、cに関する解答群
ア 4
イ 64
ウ 256
エ i + 4
オ i + 64
カ i + 192
- A-ア cnt - 1
- A-イ cnt
- A-ウ cnt + 1
- B-ア 4
- B-イ 64
- B-ウ 256
- B-エ i + 4
- B-オ i + 64
- B-カ i + 192
- C-ア 4
- C-イ 64
- C-ウ 256
- C-エ i + 4
- C-オ i + 64
- C-カ i + 192
出典:平成31年度 春期 基本情報技術者試験 午後 問9 設問1
問問9 設問2
次の記述中の空欄に入れる正しい答えを、解答群の中から選べ。ここで、記述中の b と c には設問1の正しい答えが入っているものとする。文字コードを出現回数の降順に並べて印字する処理を追加する。追加処理による印字例を図2に示す。印字の様式は文字コードの並び順を除いて図1の3行目以降と同じである。同じ出現回数の文字コードは文字コードの昇順に並べる。前掲の説明及び表1に基づき、空欄 d、e、f、g に入れる答えを選ぶ。 元の整列処理部でwhile文のブロックを実行する回数は常に[d]回である。各回で行⑥のif文のブロック内の処理が最後に実行されたときのiの値をixとすると、行⑤のfor文のブロックの実行が終了した時点で、配列freqの要素番号[e]以降の要素は整列済みである。表1は[f]の直後にix = 0;を追加し、行⑦の位置にix = i;を追加し、行⑧を[g];に置き換える。
dに関する解答群
ア 253
イ 254
ウ 255
エ 256
eに関する解答群
ア 256 - ix
イ ix - 1
ウ ix
エ ix + 1
fに関する解答群
ア 行③
イ 行④
ウ 行⑤
gに関する解答群
ア ih = ix - 1
イ ih = ix
ウ ih = ix + 1
エ ix = ih
- D-ア 253
- D-イ 254
- D-ウ 255
- D-エ 256
- E-ア 256 - ix
- E-イ ix - 1
- E-ウ ix
- E-エ ix + 1
- F-ア 行③
- F-イ 行④
- F-ウ 行⑤
- G-ア ih = ix - 1
- G-イ ih = ix
- G-ウ ih = ix + 1
- G-エ ix = ih
出典:平成31年度 春期 基本情報技術者試験 午後 問9 設問2
共通の文章
問10 次のCOBOLプログラムの説明及びプログラムを読んで,設問1,2に答えよ。
【プログラムの説明】
地域の5か所に建物(以下,校舎という)をもち,中学生向けの進学指導を行っているP学習塾では,定期的にテストを実施している。全ての塾生は,国語,数学,英語,理科及び社会の5教科のテストを受ける。テスト結果は,1回分を学年別の結果ファイルに格納する。各校舎の各学年には1名以上の塾生が所属しており,1学年の人数は塾全体で999人を超えることはない。
このプログラムは,結果ファイルに格納されたある学年のテスト結果を塾生ごとに集計して,5教科の得点の合計(以下,合計点という)の降順に並べた順位リストを印字する。
図1 結果ファイルのレコード様式
図1「結果ファイルのレコード様式」。項目は,塾生番号(6桁),校舎番号(2桁),テスト結果(国語3桁,数学3桁,英語3桁,理科3桁,社会3桁)。塾生番号は塾全体で一意となる番号。校舎番号には,塾生番号で示される塾生が所属する校舎の番号を01~05で格納する。テスト結果には,各教科の得点を000~100で格納する。
図2・図3 順位リストの印字様式・印字例
図2「順位リストの印字様式」。列見出しは「全体順位」「塾生番号」「校舎番号」「校舎内順位」「合計点」。各列の例示値は順に「ZZ9」「999999」「99」「ZZ9」「ZZ9」。見出しは印刷済み。印字行は合計点の降順に並べる。全体順位には塾全体での順位,校舎内順位には塾生が所属する校舎での順位を印字する。同じ合計点の塾生は同じ順位とする。図3の例では,492点が1名,488点が2名,487点が1名の場合,それぞれ全体順位1,2,2,4となる。塾生番号・校舎番号・校舎内順位・合計点の例示行は「182025・02・1・492」「181007・01・1・488」「182038・02・2・488」「185011・05・1・487」。
プログラム
プログラム中の空欄 a~d はそのまま空欄として示す。
01 DATA DIVISION.
02 FILE SECTION.
03 SD SRT-FILE.
04 01 SRT-REC.
05 02 SRT-NO PIC 9(6).
06 02 SRT-BLD PIC 9(2).
07 02 SRT-TOTAL PIC 9(3).
08 FD RSL-FILE.
09 01 RSL-REC.
10 02 RSL-NO PIC 9(6).
11 02 RSL-BLD PIC 9(2).
12 02 RSL-SCR PIC 9(3) OCCURS 5.
13 FD PRT-FILE.
14 01 PRT-REC.
15 02 PRT-ALL-RANK PIC ZZ9.
16 02 PRT-SP1 PIC X(7).
17 02 PRT-NO PIC 9(6).
18 02 PRT-SP2 PIC X(4).
19 02 PRT-BLD PIC 9(2).
20 02 PRT-SP3 PIC X(8).
21 02 PRT-BLD-RANK PIC ZZ9.
22 02 PRT-SP4 PIC X(9).
23 02 PRT-TOTAL PIC ZZ9.
24 WORKING-STORAGE SECTION.
25 77 SRT-FLAG PIC X(1) VALUE SPACE.
26 88 SRT-EOF VALUE "E".
27 77 RSL-FLAG PIC X(1) VALUE SPACE.
28 88 RSL-EOF VALUE "E".
29 77 ALL-ORD-NO PIC 9(3) VALUE ZERO.
30 77 ALL-RANK PIC 9(3) VALUE ZERO.
31 77 ALL-CR-TOTAL PIC 9(3) VALUE 999.
32 01 BLD-INF.
33 02 BLD-ORD-NO PIC 9(3) OCCURS 5 VALUE ZERO.
34 02 BLD-RANK PIC 9(3) OCCURS 5 VALUE ZERO.
35 02 BLD-CR-TOTAL PIC 9(3) OCCURS 5 VALUE 999.
36 PROCEDURE DIVISION.
37 MAIN-PROC.
38 OPEN INPUT RSL-FILE
39 OUTPUT PRT-FILE.
40 SORT SRT-FILE [a]
41 INPUT PROCEDURE IS REL-PROC
42 OUTPUT PROCEDURE IS RET-PROC.
43 CLOSE RSL-FILE PRT-FILE.
44 STOP RUN.
45 REL-PROC.
46 PERFORM UNTIL RSL-EOF
47 READ RSL-FILE AT END SET RSL-EOF TO TRUE
48 NOT AT END PERFORM CALC-PROC
49 END-READ
50 END-PERFORM.
51 CALC-PROC.
52 MOVE RSL-NO TO SRT-NO.
53 MOVE RSL-BLD TO SRT-BLD.
54 COMPUTE SRT-TOTAL = RSL-SCR(1) + RSL-SCR(2) +
55 RSL-SCR(3) + RSL-SCR(4) + RSL-SCR(5).
56 RELEASE SRT-REC.
57 RET-PROC.
58 PERFORM UNTIL SRT-EOF
59 RETURN SRT-FILE AT END SET SRT-EOF TO TRUE
60 NOT AT END PERFORM PRT-PROC
61 END-RETURN
62 END-PERFORM.
63 PRT-PROC.
64 [b].
65 IF SRT-TOTAL < ALL-CR-TOTAL THEN
66 MOVE SRT-TOTAL TO ALL-CR-TOTAL
67 [c]
68 END-IF.
69 IF SRT-TOTAL < BLD-CR-TOTAL(SRT-BLD) THEN
70 MOVE SRT-TOTAL TO BLD-CR-TOTAL(SRT-BLD)
71 [d]
72 END-IF.
73 INITIALIZE PRT-REC.
74 MOVE ALL-RANK TO PRT-ALL-RANK.
75 MOVE SRT-NO TO PRT-NO.
76 MOVE SRT-BLD TO PRT-BLD.
77 MOVE BLD-RANK(SRT-BLD) TO PRT-BLD-RANK.
78 MOVE SRT-TOTAL TO PRT-TOTAL.
79 WRITE PRT-REC.
図4・表1 平均点の表示様式とプログラム変更内容
図4「表示様式」では,1行目に「AVG:」に続けて塾全体の平均点を表示し,2行目に「BLD-AVG:」に続けて校舎ごとの平均点を校舎番号01~05の昇順で表示する。表示例は「AVG: ZZ9.9」および「BLD-AVG: ZZ9.9 ZZ9.9 ZZ9.9 ZZ9.9 ZZ9.9」。表1「プログラムの変更内容」では,行番号31と32の間に「77 ALL-TOTAL PIC 9(8) VALUE ZERO.」「77 ALL-AVG PIC 9(3)V9(1).」「77 DSP-AVG PIC ZZ9.9.」「77 CNT PIC 9(2).」を追加する。行番号35と36の間に「02 BLD-TOTAL PIC 9(6) OCCURS 5 VALUE ZERO.」「02 BLD-AVG PIC 9(3)V9(1) OCCURS 5 VALUE ZERO.」を追加する。行番号43と44の間に「COMPUTE ALL-AVG = ALL-TOTAL / ALL-ORD-NO.」「MOVE ALL-AVG TO DSP-AVG.」「DISPLAY "AVG: " DSP-AVG.」「DISPLAY "BLD-AVG: " WITH NO ADVANCING.」「PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 5」「COMPUTE BLD-AVG(CNT) = [f]」「MOVE BLD-AVG(CNT) TO DSP-AVG」「DISPLAY DSP-AVG " " WITH NO ADVANCING」「END-PERFORM.」を追加する。さらに,[e]の位置に「ADD SRT-TOTAL TO ALL-TOTAL BLD-TOTAL(SRT-BLD).」を追加する。
問問10 設問1
プログラム中の空欄に入れる正しい答えを,解答群の中から選べ。
aに関する解答群
ア ASCENDING KEY SRT-NO
イ ASCENDING KEY SRT-TOTAL
ウ DESCENDING KEY SRT-NO
エ DESCENDING KEY SRT-TOTAL
bに関する解答群
ア ADD 1 TO ALL-ORD-NO BLD-ORD-NO(SRT-BLD)
イ ADD 1 TO ALL-RANK BLD-RANK(SRT-BLD)
ウ INITIALIZE BLD-INF
エ MOVE ALL-ORD-NO TO BLD-ORD-NO(SRT-BLD)
c、dに関する解答群
ア MOVE ALL-CR-TOTAL TO ALL-RANK
イ MOVE ALL-ORD-NO TO ALL-RANK
ウ MOVE ALL-ORD-NO TO BLD-RANK(SRT-BLD)
エ MOVE BLD-CR-TOTAL(SRT-BLD) TO BLD-RANK(SRT-BLD)
オ MOVE BLD-ORD-NO(SRT-BLD) TO ALL-RANK
カ MOVE BLD-ORD-NO(SRT-BLD) TO BLD-RANK(SRT-BLD)
- A-ア ASCENDING KEY SRT-NO
- A-イ ASCENDING KEY SRT-TOTAL
- A-ウ DESCENDING KEY SRT-NO
- A-エ DESCENDING KEY SRT-TOTAL
- B-ア ADD 1 TO ALL-ORD-NO BLD-ORD-NO(SRT-BLD)
- B-イ ADD 1 TO ALL-RANK BLD-RANK(SRT-BLD)
- B-ウ INITIALIZE BLD-INF
- B-エ MOVE ALL-ORD-NO TO BLD-ORD-NO(SRT-BLD)
- C-ア MOVE ALL-CR-TOTAL TO ALL-RANK
- C-イ MOVE ALL-ORD-NO TO ALL-RANK
- C-ウ MOVE ALL-ORD-NO TO BLD-RANK(SRT-BLD)
- C-エ MOVE BLD-CR-TOTAL(SRT-BLD) TO BLD-RANK(SRT-BLD)
- C-オ MOVE BLD-ORD-NO(SRT-BLD) TO ALL-RANK
- C-カ MOVE BLD-ORD-NO(SRT-BLD) TO BLD-RANK(SRT-BLD)
- D-ア MOVE ALL-CR-TOTAL TO ALL-RANK
- D-イ MOVE ALL-ORD-NO TO ALL-RANK
- D-ウ MOVE ALL-ORD-NO TO BLD-RANK(SRT-BLD)
- D-エ MOVE BLD-CR-TOTAL(SRT-BLD) TO BLD-RANK(SRT-BLD)
- D-オ MOVE BLD-ORD-NO(SRT-BLD) TO ALL-RANK
- D-カ MOVE BLD-ORD-NO(SRT-BLD) TO BLD-RANK(SRT-BLD)
出典:平成31年度 春期 基本情報技術者試験 午後 問10 設問1
問問10 設問2
図4の表示様式に示すとおり,「AVG:」に続けて塾全体の平均点を表示し,「BLD-AVG:」に続けて校舎ごとの平均点を,校舎番号01~05の昇順に表示するようにプログラムを変更する。表1中の空欄に入れる正しい答えを,解答群の中から選べ。
eに関する解答群
ア 行番号50と51の間
イ 行番号51と52の間
ウ 行番号62と63の間
エ 行番号79の後ろ
fに関する解答群
ア BLD-TOTAL(CNT) / BLD-ORD-NO(CNT)
イ BLD-TOTAL(CNT) / BLD-ORD-NO(SRT-BLD)
ウ BLD-TOTAL(CNT) / BLD-RANK(CNT)
エ BLD-TOTAL(CNT) / BLD-RANK(SRT-BLD)
- E-ア 行番号50と51の間
- E-イ 行番号51と52の間
- E-ウ 行番号62と63の間
- E-エ 行番号79の後ろ
- F-ア BLD-TOTAL(CNT) / BLD-ORD-NO(CNT)
- F-イ BLD-TOTAL(CNT) / BLD-ORD-NO(SRT-BLD)
- F-ウ BLD-TOTAL(CNT) / BLD-RANK(CNT)
- F-エ BLD-TOTAL(CNT) / BLD-RANK(SRT-BLD)
出典:平成31年度 春期 基本情報技術者試験 午後 問10 設問2
共通の文章
問11「迷路と駒」。升目で表された迷路と、迷路上の駒を外部から操作するJavaプログラムについて、プログラムの説明を読み、設問1、2に答える。迷路は通路と壁からなり、外周は壁である。通路の一つが開始地点で、開始地点以外の通路の一つがゴール地点である。升目の位置は非負整数の2次元座標 (x, y) で表す。x が大きくなる方角は東、小さくなる方角は西、y が大きくなる方角は南、小さくなる方角は北である。駒は東西南北のいずれかを向き、向いている方角を基準として左または右に向きを変える操作と、隣接する前方の升が通路なら1升前進する操作を外部から受け付ける。
図1
図1「本問で扱う迷路」。座標の列は x=0,1,2,3,4,5,6、行は y=0,1,2,3,4,5,6。各升の状態を x=0 から6の順に記す。# は壁、. は通路、S は開始地点、G はゴール地点。
y=0: #######
y=1: #..#..#
y=2: #S##.##
y=3: #.....#
y=4: #####.#
y=5: #G....#
y=6: #######
方角表示は、北が y の小さい向き、南が y の大きい向き、東が x の大きい向き、西が x の小さい向き。
プログラム1
プログラム1(Maze)の記載内容。空欄は原本どおり未記入。
public class Maze {
private final String mazeData;
private final int width;
private final Location startLocation;
public Maze(String mazeData, int width) {
this.mazeData = mazeData;
this.width = width;
startLocation = locationOf('S');
}
public Location getStartLocation() { return startLocation; }
public boolean isGoal(Location loc) {
return mazeData.charAt(loc.y [a] width + loc.x) == 'G';
}
public boolean isBlank(Location loc) {
return mazeData.charAt(loc.y [a] width + loc.x) != '*';
}
private Location locationOf(char c) {
int index = mazeData.indexOf(c);
return new Location(index [b] width, index / width);
}
}
プログラム2
プログラム2(Piece)の記載内容。空欄は原本どおり未記入。
import java.util.ArrayList;
import java.util.List;
public class Piece {
private final Maze maze;
private Location location;
private Direction direction = Direction.NORTH;
private final List<Direction> history = new ArrayList<>();
public Piece(Maze maze) {
this.maze = maze;
location = maze.getStartLocation();
}
public void turnLeft() { direction = direction.left(); }
public void turnRight() { direction = direction.right(); }
public boolean tryStepForward() {
Location nextLocation = new Location([c]);
if (maze.isBlank(nextLocation)) {
location = nextLocation;
history.add(direction);
return true;
}
return false;
}
public boolean isAtGoal() { return maze.isGoal(location); }
public List<Direction> getHistory() { return new ArrayList<>(history); }
}
プログラム3
プログラム3(Direction)。列挙定数は NORTH(0, -1), EAST(1, 0), SOUTH(0, 1), WEST(-1, 0)。public int dx, dy を持ち、private Direction(int dx, int dy) は this.dx = dx; this.dy = dy; とする。コメントには、values は列挙定数を定義順に格納した配列を返し、ordinal は定義順の序数(先頭は0)を返すとある。left の定義は return values()[[d]];、right の定義は return values()[(ordinal() + 1) % 4];。
プログラム4
プログラム4(Location)。public final int x, y を持つ。Location(int x, int y) コンストラクタは this.x = x; this.y = y; とする。
プログラム5
プログラム5(PlayMaze)の記載内容。空欄αは原本の挿入位置。
import java.util.List;
public class PlayMaze {
public static void main(String... args) {
Maze maze = new Maze("*******" +
"*..*..*" +
"*S**.**" +
"*.....*" +
"*****.*" +
"*G....*" +
"*******", 7);
Piece piece = new Piece(maze);
while (!piece.isAtGoal()) {
piece.turnLeft();
while (!piece.tryStepForward()) {
piece.turnRight();
}
}
List<Direction> history = piece.getHistory();
[α]
System.out.println(history);
}
}
API仕様(物理PDF p.77)
物理PDF p.77のAPI説明から、本問に関係する仕様。java.util.List<E>: add(E e) は指定要素をリスト末尾に追加する(戻り値 true)。get(int index) は指定位置の要素を返す。remove(int index) は指定位置の要素を削除し、後続要素があれば順次詰める。size() はリスト内の要素数を返す。java.util.ArrayList<E>: ArrayList(Collection<? extends E> c) はコレクションのイテレータが返す全要素を、その順に格納したリストを作る。
API仕様(物理PDF p.78)
物理PDF p.78のAPI説明から、本問に関係する仕様。java.lang.String: charAt(int index) は文字列の指定位置の char 値を返す(先頭のインデックスは0)。indexOf(int ch) は指定文字が最初に現れる位置のインデックスを返し、文字列中にない場合は -1 を返す。
問問11 設問1
プログラム中の空欄に入れる正しい答えを、解答群の中から選べ。
a、bに関する解答群
ア %
イ &
ウ *
エ +
オ -
カ /
キ ^
ク |
cに関する解答群
ア direction
イ direction.dx, direction.dy
ウ location + direction
エ location.x + direction.dx, location.y + direction.dy
dに関する解答群
ア (ordinal() + 3) % 4
イ (ordinal() + 3) / 4
ウ (ordinal() - 1) % 4
エ (ordinal() - 1) / 4
- A-ア %
- A-イ &
- A-ウ *
- A-エ +
- A-オ -
- A-カ /
- A-キ ^
- A-ク |
- B-ア %
- B-イ &
- B-ウ *
- B-エ +
- B-オ -
- B-カ /
- B-キ ^
- B-ク |
- C-ア direction
- C-イ direction.dx, direction.dy
- C-ウ location + direction
- C-エ location.x + direction.dx, location.y + direction.dy
- D-ア (ordinal() + 3) % 4
- D-イ (ordinal() + 3) / 4
- D-ウ (ordinal() - 1) % 4
- D-エ (ordinal() - 1) / 4
出典:平成31年度 春期 基本情報技術者試験 午後 問11 設問1
問問11 設問2
プログラム5のαの位置に次の処理を挿入して実行した結果、図2に示す方角のリストを得た。駒は開始地点からリストの方角の順に1升ずつ進むと、直前の升に戻る(正反対の方角に向きを変えて進む)ことなく、ゴール地点に至ることができる。空欄に入れる正しい答えを、解答群の中から選べ。
for (int i = [e]; i < history.size(); i++) {
if (history.get(i - 1) == history.get(i).left().left()) {
history.remove([f]);
history.remove([f]);
i = i < 2 ? 0 : i - 2;
}
}
eに関する解答群
ア -1
イ 0
ウ 1
fに関する解答群
ア i
イ i + 1
ウ i - 1
- E-ア -1
- E-イ 0
- E-ウ 1
- F-ア i
- F-イ i + 1
- F-ウ i - 1
出典:平成31年度 春期 基本情報技術者試験 午後 問11 設問2
共通の文章
問12 次のアセンブラプログラムの説明及びプログラムを読んで,設問1,2に答えよ。
【プログラムの説明】
主記憶上の連続した語から成る領域(以下,ビット領域という)内において,指定されたビット列(以下,対象ビット列という)に対する操作を行うための副プログラム群である。対象ビット列は,連続したビットの並びであり,開始位置(以下,ビット位置という)とビット数(以下,ビット長という)で表す。ビット位置は,ビット領域全体を連続したビット列と捉えて,ビット領域の最初の語の最上位ビットを0ビット目としたときの相対位置である。対象ビット列はビット領域内に収まるものとする。
図1に,ビット領域及び対象ビット列(網掛け部分)の例を示す。ビット位置が44でビット長が24の場合,ビット領域の最初の語を0語目としたとき,対象ビット列の最初のビットを含む語は2語目なので,相対アドレス2と表す。対象ビット列の最初のビットは,相対アドレス2の語の最上位ビットを0ビット目としたとき,12ビット目なので,ビットインデックス12と表す。対象ビット列の最後のビットの位置を,相対アドレス4の語のビットインデックス3と表す。
プログラム1は,対象ビット列の全ビットを1にする副プログラムBITSONである。主プログラムは,連続した3語に,ビット領域の先頭アドレス,対象ビット列のビット位置,及び対象ビット列のビット長をこの順に格納して,その3語の先頭アドレスをGR1に設定して呼び出す。ビット位置及びビット長は,符号のない数値である。ビット長が0の場合は,対象ビット列に対する操作は行わない。
プログラム2は,GR0で与えるビットマスクの値と,ビット領域内で操作の対象となる1語の値との論理和を求め,結果を同じ語に格納する副プログラムSETOPである。GR0に1語内のビット操作の対象となるビットを1で表すビットマスクを,GR1にビット領域の先頭アドレスを格納した語のアドレスを,GR2に操作の対象となる語への相対アドレスを設定して呼び出す。副プログラムから戻るとき,汎用レジスタGR1~GR7の内容は元に戻す。
図1
図1「ビット領域及び対象ビット列の例」。ビット領域は連続する語から成り,各語のビットインデックスは左端(最上位ビット)が0,右端が15。ビット領域の先頭語を相対アドレス0とし,語が順に1,2,3,4,5…と並ぶ。ビット位置はビット領域全体で数えた位置。例の網掛けの対象ビット列は相対アドレス2の語のビットインデックス12から始まり,相対アドレス3の語をまたいで,相対アドレス4の語のビットインデックス3で終わる。例ではビット位置44,ビット長24。
プログラム1
プログラム1 BITSON(原本の空欄a~dは未記入のまま)。行番号・命令・コメントを示す。
1 BITSON START
2 RPUSH
3 LD GR3,1,GR1 ; GR3: ビット位置
4 ; ビット位置を,相対アドレス(GR2)と
5 ; ビットインデックス(GR3)とに変換
6 LD GR2,GR3
7 □a
8 AND GR3,=#000F
9 LD GR4,2,GR1 ; GR4: ビット長(初期値)
10 ; (ビットインデックス+ビット長)≧16の間,ビット操作を行う
11 LOOP LD GR0,GR4
12 ADDL GR0,GR3
13 CPL GR0,BITSPW
14 JMI BREAK
15 LD GR5,BITSPW ; GR5: 語内で対象となるビット数
16 LD GR3,GR3
17 JZE FULL
18 □b
19 FULL SUBL GR3,GR3 ; GR3 ← 0
20 SUBL GR4,GR5 ; 操作するビット数だけビット長を減らす
21 LD GR0,=1
22 SLL GR0,0,GR5
23 SUBL GR0,=1 ; GR0: ビットマスク
24 CALL SETOP
25 ADDL GR2,=1 ; GR2: 次の語の相対アドレス
26 JUMP LOOP
27 BREAK LD GR4,GR4 ; 操作の対象になる未処理のビットあり?
28 □c
29 ; 未操作のビット数分の右詰めのビットマスクを生成し,
30 ; 必要なビット数だけ左へシフト
31 LD GR0,=1
32 SLL GR0,0,GR4
33 SUBL GR0,=1
34 LD GR5,BITSPW
35 SUBL GR5,GR3
36 □d
37 SLL GR0,0,GR5 ; GR0: ビットマスク
38 CALL SETOP
39 FIN RPOP
40 RET
41 BITSPW DC 16 ; 1語のビット数
42 END
プログラム2
プログラム2 SETOP。
1 SETOP START
2 RPUSH
3 LD GR3,0,GR1
4 ADDL GR3,GR2
5 OR GR0,0,GR3
6 ST GR0,0,GR3
7 RPOP
8 RET
9 END
プログラム3
プログラム3(新BITSON)。行番号・命令を示す。
1 BITSON START
2 RPUSH
3 LAD GR7,SETOP
4 CALL BITSOP
5 RPOP
6 RET
7 END
COMET II命令仕様(関連部分)
COMET II仕様のうちプログラム1・2で使う命令の関係する仕様(公式別添・物理PDF 79~81ページ)。LDはレジスタへ値をロードし,STはメモリへ格納する。LADは実効アドレスをレジスタに設定する。ADDL/SUBLは符号なし論理加算/論理減算,AND/ORは論理積/論理和を行う。SLLは指定ビット数の論理左シフト,SRLは論理右シフト。CPLは論理比較で,結果に応じてSF/ZFを設定する。JMIはSF=1,JZEはZF=1,JNZはZF=0のとき分岐し,JUMPは無条件分岐する。CALLは副プログラムを呼び出し,RETは復帰する。RPUSHはGRの内容をGR1,GR2,…,GR7の順でスタックに格納し,RPOPはGR7,GR6,…,GR1の順で取り出して格納する。各命令の指定形式やレジスタ範囲などの表記は別添仕様に従う。
CASL II仕様(関連部分)
CASL II仕様の関連部分(公式別添・物理PDF 82~84ページ)。ラベルは命令のアドレスを示し,プログラムから参照する名前。STARTはプログラムの先頭を定義し,ENDはプログラムの終わりを示す。DCは定数を連続する語に格納する。機械語命令のオペランドにはレジスタ,アドレス,リテラル等を指定できる。CALLはラベル等で指定した副プログラムを呼び出す。
問問12 設問1
プログラム1中の空欄a~dに入れる正しい答えを,解答群の中から選べ。
aに関する解答群
ア SLL GR2,0,GR3
イ SLL GR2,4
ウ SLL GR2,4,GR3
エ SRL GR2,0,GR3
オ SRL GR2,4
カ SRL GR2,4,GR3
b、dに関する解答群
ア ADDL GR5,GR2
イ ADDL GR5,GR3
ウ ADDL GR5,GR4
エ SUBL GR5,GR2
オ SUBL GR5,GR3
カ SUBL GR5,GR4
cに関する解答群
ア JNZ FIN
イ JNZ LOOP
ウ JPL FIN
エ JPL LOOP
オ JZE FIN
カ JZE LOOP
- A-ア SLL GR2,0,GR3
- A-イ SLL GR2,4
- A-ウ SLL GR2,4,GR3
- A-エ SRL GR2,0,GR3
- A-オ SRL GR2,4
- A-カ SRL GR2,4,GR3
- B-ア ADDL GR5,GR2
- B-イ ADDL GR5,GR3
- B-ウ ADDL GR5,GR4
- B-エ SUBL GR5,GR2
- B-オ SUBL GR5,GR3
- B-カ SUBL GR5,GR4
- C-ア JNZ FIN
- C-イ JNZ LOOP
- C-ウ JPL FIN
- C-エ JPL LOOP
- C-オ JZE FIN
- C-カ JZE LOOP
- D-ア ADDL GR5,GR2
- D-イ ADDL GR5,GR3
- D-ウ ADDL GR5,GR4
- D-エ SUBL GR5,GR2
- D-オ SUBL GR5,GR3
- D-カ SUBL GR5,GR4
出典:平成31年度 春期 基本情報技術者試験 午後 問12 設問1
問問12 設問2
対象ビット列の全ビットを0にする副プログラムを新規に作成することを考える。ビット領域内の操作の対象になる語の相対アドレスやビットインデックスを求める処理などは,プログラム1で実装されている。そこで,新規の副プログラムを作成する前に,既存の副プログラム群を再編成し,対象ビット列の全ビットを1にする副プログラム及び0にする副プログラムが,プログラム1の処理を利用できるようにする。プログラム1に変更を加え,それに伴って副プログラムBITSONを,その仕様は変更せずに再実装する方法を,次の(1)~(3)に示す。
(1) 次に示すプログラム3を新たな副プログラムBITSON(以下,新BITSONという)とする。新BITSONは,既存の副プログラムSETOPのアドレスをGR7に設定して変更後のプログラム1を呼び出す。
(2) プログラム1の入口名を変更するために,行番号1のラベルを空欄eにする。
(3) プログラム1の行番号24と行番号38のCALL命令のオペランドを空欄fに変更する。
eに関する解答群
ア BITSON
イ BITSOP
ウ SETOP
fに関する解答群
ア 0,GR5
イ BITSON,GR5
ウ 0,GR6
エ BITSON,GR6
オ 0,GR7
カ BITSON,GR7
- E-ア BITSON
- E-イ BITSOP
- E-ウ SETOP
- F-ア 0,GR5
- F-イ BITSON,GR5
- F-ウ 0,GR6
- F-エ BITSON,GR6
- F-オ 0,GR7
- F-カ BITSON,GR7
出典:平成31年度 春期 基本情報技術者試験 午後 問12 設問2
共通の文章
問13 次の表計算のワークシート及びマクロの説明を読んで,設問1,2に答えよ。
【表計算の説明】小売販売のZ店では,会員として登録した顧客に会員カードを発行して販売促進活動に利用している。このたび,会員への2018年10月1日から2019年3月31日までの期間(以下,対象期間という)の販売データを基に,販売促進キャンペーンを実施することにした。
ワークシート「販売データ」には,対象期間における会員への販売データが,販売日の昇順で格納されている。列Aのレシート番号は,1回の販売ごとに発行される一意の番号である。1回の販売で複数の種類の商品を販売したときは,商品コードごとに行を替えて連続して格納し,同じレシート番号を付ける。列Bの販売日は,商品を販売した日付である。日付は1900年1月1日からの経過日数として記録され,表計算ソフトの機能によってyyyy-mm-dd(年-月-日)の形式で表示される。
列Cの会員番号は1001~9999の一意の数値である。列Dの商品コードは販売した商品の商品コード,列Eの単価は販売単価,列Fの数量は販売数量,列Gは販売金額(単価×数量)である。列Hの会員販売通番は,上位4桁を会員番号,下位3桁を会員ごとの販売の通番とする7桁の数値である。会員ごとの販売の通番は,行2から当該行までに格納された,当該行の会員番号をもつ会員に対する販売回数であり,1,000未満である。ただし,同じレシート番号が続くときの二つ目以降の当該セルの値は0である。同じレシート番号をもつ販売データの販売日及び会員番号は,全て同じである。販売データは9,998件以下であり,販売データが入力されていない行の各セルには空値が格納されている。
ワークシート「会員管理」には,ワークシート「販売データ」のデータを基に,会員の販売状況や販売促進キャンペーンのための情報を格納する。セルB1は販売データの行数,セルE1は会員数であり,会員管理の4行目以降に格納したデータの行数に等しい。会員管理の4行目以降には,全ての会員の会員番号を昇順に格納する。列Bは会員ごとの販売額合計,列Cは販売回数,列Dは最終販売日(対象期間に販売記録がないときは空値),列Eは会員クラス,列Fはクーポンの総額である。クーポンは1枚1,000円として使用できる券であり,販売額合計が50,000円以上100,000円未満で1枚,100,000円以上150,000円未満で2枚,…のように,販売額合計の50,000円ごとに1枚発行する。
【クラス分類のルール】対象期間における各会員の販売額合計と販売回数を,表1のランク分類基準に従ってそれぞれランク1~3に分類する。ワークシート「分類表」を参照して,会員をS,A,B,Cのクラスに分類する。
図1
図1「ワークシート『販売データ』の例」。列A~Hは順に、レシート番号、販売日、会員番号、商品コード、単価、数量、販売金額、会員販売通番。例示行は、2行目: 81001001 / 2018-10-01 / 1115 / BQR4500 / 48,000 / 1 / 48,000 / 1115001。3行目: 81001002 / 2018-10-01 / 1299 / CHN5102 / 2,400 / 3 / 7,200 / 1299001。4行目: 81001002 / 2018-10-01 / 1299 / CAQ5213 / 8,600 / 1 / 8,600 / 0。3334行目: 90331015 / 2019-03-31 / 1318 / ABC1001 / 16,000 / 1 / 16,000 / 1318014。1行目は見出し、3335行目は空行。
図2
図2「ワークシート『会員管理』の例」。A1~F1は順に「件数」「3,333」「件」「会員数」「531」「人」。3行目の見出しはA:会員番号、B:販売額合計、C:販売回数、D:最終販売日、E:会員クラス、F:クーポン。4行目: 1001 / 198,500 / 7 / 2019-03-21 / S / 3,000。5行目: 1002 / 44,100 / 6 / 2019-03-14 / A / 0。6行目: 1003 / 0 / 0 / 空値 / C / 0。534行目: 1531 / 12,000 / 1 / 2019-03-29 / C / 0。535行目は空行。
表1
表1「ランク分類基準」。列はランク、販売額合計のランクの基準(円)、販売回数のランクの基準(回)。ランク1: 0~39,999円、0~5回。ランク2: 40,000~79,999円、6~11回。ランク3: 80,000円以上、12回以上。
図3
図3「ワークシート『分類表』」。列見出しD~Fは販売額合計ランク1~3で、下限は順に0、40,000、80,000。行見出しB4~B6は販売回数ランク1~3で、下限は順に0、6、12。クラス表の値(列D,E,Fの順)は、販売回数ランク1: C,B,A。ランク2: C,A,S。ランク3: B,A,S。
図4
図4「ワークシート『商品別管理』の例」。A1「商品コード」、B1「ABC1001」。A2~C2の見出しは会員番号、商品販売額、商品最終販売日。例: 3行目 1067 / 96,000 / 2019-02-14、4行目 1318 / 80,000 / 2019-03-31、225行目 1327 / 16,000 / 2019-03-30。行3以降は同一会員の項目で構成され、商品販売額の降順、販売額が等しいときは商品最終販売日の昇順で表示する。マクロ開始時にはA3~C9001が空値。
商品別管理の条件
ワークシート「商品別管理」に関する説明。セルB1に商品の商品コードを入力してマクロmanageMembersを実行すると、「販売データ」及び「会員管理」のデータを基に、列Aの3行目以降に当該商品を購入した会員の会員番号、列Bに会員番号ごとの当該商品の販売金額合計(商品販売額)、列Cに会員番号ごとの当該商品の最終販売日を表示する。各行は同一会員の項目で構成され、商品販売額の降順、商品販売額が等しい場合は商品最終販売日の昇順に整列する。
マクロmanageMembers(図示された処理)
マクロmanageMembersの処理(空欄d~fを除く)。数値型変数i,j,k,memNo,index,temp及びsumTab[9001,3]を用いる。① iを1から会員管理!E1まで1ずつ増やし、sumTab[i,0]←相対(会員管理!A3,i,0)、sumTab[i,1]←0。続いてsumTab[会員管理!E1+1,1]←0。② iを1から会員管理!B1まで1ずつ増やす。相対(販売データ!A1,i,3)=B1なら、memNo←相対(販売データ!A1,i,2)、index←照合一致(memNo,会員管理!A4:A9002,0)、空欄dの処理、sumTab[index,2]←相対(販売データ!A1,i,1)。③ iを1から会員管理!E1まで1ずつ、jを1から会員管理!E1-iまで1ずつ繰り返し、空欄eが真なら、kを0から2まで1ずつ繰り返してtemp←sumTab[j,k]、sumTab[j,k]←sumTab[j+1,k]、sumTab[j+1,k]←tempとして隣接する行を交換する。④ i←1。sumTab[i,1]>0の間、jを0から2まで1ずつ繰り返して空欄fの処理を行い、i←i+1。
IF・論理積・論理和(公式別添物理p87)
IF(論理式, 式1, 式2)は真で式1、偽で式2を返す。論理積(論理式1, 論理式2, …)は全て真ならtrue、論理和(論理式1, 論理式2, …)は一つ以上が真ならtrue。それ以外はfalse。
切捨て・表引き・照合検索(公式別添物理p88)
切捨て(算術式, 桁位置)は指定桁で切り捨てた値を返す。桁位置は小数第1位を0とし右方向を正、左方向を負に数える。表引き(セル範囲, 行の位置, 列の位置)は左上端から各軸を1始まりで数え、指定位置の値を返す。照合検索(式, 検索のセル範囲, 抽出のセル範囲)は同じ大きさの1行又は1列の二範囲を取り、検索範囲の左端又は上端から一致する最初のセルと同じ位置にある抽出範囲の値を返す。
照合一致(公式別添物理p89)
照合一致(式, セル範囲, 検索の指定)は、1行又は1列の左端又は上端から条件を満たす最初のセルを探し、1始まりの位置を返す。指定0は一致、指定1は式以下の最大値を昇順の範囲から、指定−1は式以上の最小値を降順の範囲から探す。
ワークシート参照と変数(公式別添物理p85–86、p89–90)
別ワークシートはワークシート名!セル番地又は範囲で参照する。空値はnull。マクロは宣言・注釈・処理から成る。数値型変数と配列を宣言でき、セルは変数として宣言せず使用できる。相対(セル変数, 行の位置, 列の位置)は行方向下と列方向右を正に数え、基準セルから指定位置にあるセルを表す。
問問13 設問1
ワークシート「会員管理」に関する次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。セルB4に販売額合計を求める式を入力し、セルB5~B9002に複写する。セルC4に販売回数を求める式を入力し、セルC5~C9002に複写する。セルD4に最終販売日を求める式を入力し、セルD5~D9002に複写する。セルE4に会員クラスを求める式を入力し、セルE5~E9002に複写する。セルF4にクーポンの総額を求める式を入力し、セルF5~F9002に複写する。
D4の式はIF(論理和(A4=null,C4=0),null,[a])。E4の式はIF(A4=null,null,表引き(分類表!D$4:F$6,[b]))。F4の式はIF(A4=null,null,[c])。
aに関する解答群
ア 照合検索(A4, 販売データ!C$2:C$9999, 販売データ!A$2:A$9999)
イ 照合検索(A4, 販売データ!C$2:C$9999, 販売データ!B$2:B$9999)
ウ 照合検索(A4*1000+1, 販売データ!H$2:H$9999, 販売データ!A$2:A$9999)
エ 照合検索(A4*1000+1, 販売データ!H$2:H$9999, 販売データ!B$2:B$9999)
オ 照合検索(A4*1000+C4, 販売データ!H$2:H$9999, 販売データ!A$2:A$9999)
カ 照合検索(A4*1000+C4, 販売データ!H$2:H$9999, 販売データ!B$2:B$9999)
bに関する解答群
ア 照合一致(B4, 分類表!C$4:C$6, 1), 照合一致(C4, 分類表!D$3:F$3, 1)
イ 照合一致(B4, 分類表!D$3:F$3, 1), 照合一致(C4, 分類表!C$4:C$6, 1)
ウ 照合一致(C4, 分類表!C$4:C$6, 1), 照合一致(B4, 分類表!D$3:F$3, 1)
エ 照合一致(C4, 分類表!D$3:F$3, 1), 照合一致(B4, 分類表!C$4:C$6, 1)
cに関する解答群
ア 切捨て(B4, -4) / 50000 * 1000
イ 切捨て(B4 * 1000, -8) / 50000
ウ 切捨て(B4 / 50000, 0) * 1000
エ 切捨て(B4 / 50000 * 1000, 0)
オ 切捨て(B4 / 50000 * 1000, -4)
- A-ア 照合検索(A4, 販売データ!C$2:C$9999, 販売データ!A$2:A$9999)
- A-イ 照合検索(A4, 販売データ!C$2:C$9999, 販売データ!B$2:B$9999)
- A-ウ 照合検索(A4*1000+1, 販売データ!H$2:H$9999, 販売データ!A$2:A$9999)
- A-エ 照合検索(A4*1000+1, 販売データ!H$2:H$9999, 販売データ!B$2:B$9999)
- A-オ 照合検索(A4*1000+C4, 販売データ!H$2:H$9999, 販売データ!A$2:A$9999)
- A-カ 照合検索(A4*1000+C4, 販売データ!H$2:H$9999, 販売データ!B$2:B$9999)
- B-ア 照合一致(B4, 分類表!C$4:C$6, 1), 照合一致(C4, 分類表!D$3:F$3, 1)
- B-イ 照合一致(B4, 分類表!D$3:F$3, 1), 照合一致(C4, 分類表!C$4:C$6, 1)
- B-ウ 照合一致(C4, 分類表!C$4:C$6, 1), 照合一致(B4, 分類表!D$3:F$3, 1)
- B-エ 照合一致(C4, 分類表!D$3:F$3, 1), 照合一致(B4, 分類表!C$4:C$6, 1)
- C-ア 切捨て(B4, -4) / 50000 * 1000
- C-イ 切捨て(B4 * 1000, -8) / 50000
- C-ウ 切捨て(B4 / 50000, 0) * 1000
- C-エ 切捨て(B4 / 50000 * 1000, 0)
- C-オ 切捨て(B4 / 50000 * 1000, -4)
出典:平成31年度 春期 基本情報技術者試験 午後 問13 設問1
問問13 設問2
新商品の見本の配布などの販売促進キャンペーンに活用するために,ワークシート「商品別管理」を作成し,マクロmanageMembersを格納した。マクロmanageMembers中の空欄に入れる正しい答えを,解答群の中から選べ。
dに関する解答群
ア sumTab[1,index] ← sumTab[1,index] + 相対(販売データ!A1, i, 6)
イ sumTab[1,index] ← sumTab[i,index] + 相対(販売データ!A1, index, 6)
ウ sumTab[i,1] ← sumTab[i,1] + 相対(販売データ!A1, i, 6)
エ sumTab[i,1] ← sumTab[i,1] + 相対(販売データ!A1, index, 6)
オ sumTab[index,1] ← sumTab[index,1] + 相対(販売データ!A1, i, 6)
カ sumTab[index,1] ← sumTab[index,1] + 相対(販売データ!A1, index, 6)
eに関する解答群
ア 論理積(sumTab[j,1] < sumTab[j+1,1], 論理和(sumTab[j,1] = sumTab[j+1,1], sumTab[j,2] > sumTab[j+1,2]))
イ 論理積(sumTab[j,1] > sumTab[j+1,1], sumTab[j,2] > sumTab[j+1,2])
ウ 論理積(sumTab[j,1] > sumTab[j+1,1], 論理和(sumTab[j,1] = sumTab[j+1,1], sumTab[j,2] < sumTab[j+1,2]))
エ 論理和(sumTab[j,1] < sumTab[j+1,1], sumTab[j,2] > sumTab[j+1,2])
オ 論理和(sumTab[j,1] < sumTab[j+1,1], 論理積(sumTab[j,1] = sumTab[j+1,1], sumTab[j,2] > sumTab[j+1,2]))
カ 論理和(sumTab[j,1] > sumTab[j+1,1], 論理積(sumTab[j,1] = sumTab[j+1,1], sumTab[j,2] < sumTab[j+1,2]))
fに関する解答群
ア 相対(A2, i, j) ← sumTab[i,1]
イ 相対(A2, i, j) ← sumTab[i,j]
ウ 相対(A2, i, j+1) ← sumTab[i,j]
エ 相対(A2, i, j) ← sumTab[j,1]
オ 相対(A2, j, i) ← sumTab[j,i]
カ 相対(A2, j+1, i) ← sumTab[j,1]
- D-ア sumTab[1,index] ← sumTab[1,index] + 相対(販売データ!A1, i, 6)
- D-イ sumTab[1,index] ← sumTab[i,index] + 相対(販売データ!A1, index, 6)
- D-ウ sumTab[i,1] ← sumTab[i,1] + 相対(販売データ!A1, i, 6)
- D-エ sumTab[i,1] ← sumTab[i,1] + 相対(販売データ!A1, index, 6)
- D-オ sumTab[index,1] ← sumTab[index,1] + 相対(販売データ!A1, i, 6)
- D-カ sumTab[index,1] ← sumTab[index,1] + 相対(販売データ!A1, index, 6)
- E-ア 論理積(sumTab[j,1] < sumTab[j+1,1], 論理和(sumTab[j,1] = sumTab[j+1,1], sumTab[j,2] > sumTab[j+1,2]))
- E-イ 論理積(sumTab[j,1] > sumTab[j+1,1], sumTab[j,2] > sumTab[j+1,2])
- E-ウ 論理積(sumTab[j,1] > sumTab[j+1,1], 論理和(sumTab[j,1] = sumTab[j+1,1], sumTab[j,2] < sumTab[j+1,2]))
- E-エ 論理和(sumTab[j,1] < sumTab[j+1,1], sumTab[j,2] > sumTab[j+1,2])
- E-オ 論理和(sumTab[j,1] < sumTab[j+1,1], 論理積(sumTab[j,1] = sumTab[j+1,1], sumTab[j,2] > sumTab[j+1,2]))
- E-カ 論理和(sumTab[j,1] > sumTab[j+1,1], 論理積(sumTab[j,1] = sumTab[j+1,1], sumTab[j,2] < sumTab[j+1,2]))
- F-ア 相対(A2, i, j) ← sumTab[i,1]
- F-イ 相対(A2, i, j) ← sumTab[i,j]
- F-ウ 相対(A2, i, j+1) ← sumTab[i,j]
- F-エ 相対(A2, i, j) ← sumTab[j,1]
- F-オ 相対(A2, j, i) ← sumTab[j,i]
- F-カ 相対(A2, j+1, i) ← sumTab[j,1]
出典:平成31年度 春期 基本情報技術者試験 午後 問13 設問2