• 検索結果がありません。

サンプル問題 情報処理技術者能力認定試験 1 級第 2 部 解答時における注意事項 1. この試験は, 次の表のとおり選択問題があります 注意して解答してください 問題番号問 1 問 2~ 問 5 問 6 問 7~ 問 11 選択問題の数 試験時間 必須 4 問中 2 問選択 ( 注 1, 注 2)

N/A
N/A
Protected

Academic year: 2021

シェア "サンプル問題 情報処理技術者能力認定試験 1 級第 2 部 解答時における注意事項 1. この試験は, 次の表のとおり選択問題があります 注意して解答してください 問題番号問 1 問 2~ 問 5 問 6 問 7~ 問 11 選択問題の数 試験時間 必須 4 問中 2 問選択 ( 注 1, 注 2)"

Copied!
61
0
0

読み込み中.... (全文を見る)

全文

(1)

サンプル問題

情報処理技術者能力認定試験

1 級 第2部

解答時における注意事項 1.この試験は,次の表のとおり選択問題があります。注意して解答してください。 問題番号 問1 問2~問5 問6 問7~問11 選択問題の数 必須 4問中2問選択 (注1,注2) 必須 5問中1問選択 (注1,注2) 試験時間 90分 注1:選択した問題は,マークシート左下の<1級選択問題>欄に必ずマー クしてください。 注2:<1級選択問題>欄に選択のマークがない場合,選択問題については 採点の対象になりません。 2.HB の黒鉛筆を使用してください。訂正する場合は,あとが残らないように消 しゴムできれいに消し,消しくずを残さないでください。なお,ボールペンや 万年筆等で記入した場合は,採点されません。 3.マークシート(解答用紙)の所定の欄に,会場コード,受験番号,級種を記入 しマークしてください。また,会場名,氏名及びフリガナ,性別を所定の位置 に記入してください。 4.解答は,次の例題にならって,「解答マーク欄」にマークしてください。 例題 日本の首都はどこか。 ア 東京 イ 京都 ウ 大阪 エ 福岡 正しい答えは“ア 東京”ですから,次のようにマークしてください。 例題 指示があるまで開いてはいけません。 試験終了後,問題冊子を回収します。 受験会場 受験番号 氏 名 ∩ ∩ ∩ ∩ ア イ ウ エ ∪ ∪ ∪ ∪

(2)
(3)

問1は,必須問題です。 各設問の答えは,ア~エの中から一つだけ選び,設問番号に対応したマークシートの解答番 号の「解答マーク欄」にマークしてください。なお,二つ以上マークした場合は不正解になり ます。 問1 リモートアクセスにおける認証及び暗号化通信に関する次の記述を読んで,設問1 ~5に答えよ。 社外から社内のネットワークにアクセスするには,セキュリティの観点からユー ザ認証の方式について検討する必要がある。毎回同じ文字列を入力するパスワード (以下,固定パスワードという)方式では,一度その固定パスワードが他人に盗ま れてしまうと,本人になりすまして不正アクセスされてしまうことになる。また, ユーザ ID や固定パスワードが平文のままネットワーク上を流れてしまうことによる 盗聴の問題もある。 これらの問題に対処するため,S/KEY と呼ばれる毎回異なるパスワードを入力 する(以下,ワンタイムパスワードという)方式を検討する。S/KEY による認証 の手順は,次のとおりである。 〔S/KEY による認証手順〕 (1) ユーザに対して,ログイン可能回数(以下,M という)を決定する。 (2) サーバは,ユーザ ID や固定パスワードを組み合わせた文字列(以下,パスワー ド文字列という)を基に,ハッシュ関数によりハッシュ値を求め,OTP(1)とする。 また,そのハッシュ値を基に次のハッシュ値を求める。これを繰り返し,合わせて M+1 回行い,OTP(M+1)として保存する。 (3) クライアントは,1 回目のログインに際して,OTP(M)を作成し,それをサーバ に送り認証を求める。 (4) サーバは,クライアントから送られてきた OTP(M)のハッシュ値を求め,あら かじめ求めておいた OTP(M+1)と比較する。この二つが一致すれば認証が成功し たことになる。その後,サーバは,クライアントの次のログインに備えて,OTP (M+1)の値を OTP(M)に更新する。 (5) クライアントは,2 回目のログインに際しては,OTP(M-1)をサーバに送 り認証を求める。 こ こ で ,n(1≦n≦M)回目のログインではクライアント は a を サーバに送り,サーバは送られてきた a のハッシュ値を求め,前回 送られてきた値と比較することにより認証を行う。 例えば,簡単にするため,次の式で示すハッシュ関数を利用して,S/KEY に よる認証の仕組みを説明する。 Hash(P) = CHAR(MOD(CODE(P),26) + 65)

(4)

〔ハッシュ関数Hash の説明〕 (1) 関数 CODE は,与えられた文字型の引数 P に対して,次の表で示す文字に対応 する数値を返す。例えば,CODE('A')は 65 となる。 表 関数CHAR 及び CODE の引数と返却値 関数CODE 関数CHAR 引数P 返却値 引数P 返却値 'A' 65 65 'A' 'B' 66 66 'B' … … … … 'Z' 90 90 'Z' (2) 関数 MOD は,除算の結果の剰余を返す関数である。例えば,MOD(15,11)= 4 となる。 (3)関数 CHAR は,与えられた引数に対して,表で示す数値に対応する文字を返す。 例えば,CHAR(65)は'A'となる。 (4) 関数 Hash は,与えられた 1 けたの大文字の英字に対して 1 けたの文字を返す。 例えば,3 けたの文字列のハッシュ値を求めるには,関数 Hash を 3 回使用する。 ログイン回数を 100 としてサーバに保存した OTP(101)が“ b ”のとき, クライアントは,パスワード文字列として OTP(100)である“NOP”を送信する。 サーバはこの“NOP”を基にハッシュ値“ b ”を求め,OTP(101)と比較 する。ログイン後,サーバは,次のログインに備え,この“NOP”を保存する。 このように毎回異なるパスワードを送信するワンタイムパスワードを採用するこ とによって,通信の傍受によるパスワードの漏洩対策を行うことができる。 認証後に行うサーバクライアント間の通信は,セション共通鍵方式による暗号通 信を行う。セション共通鍵方式では,データの暗号化のための共通鍵をセション開 始時に作成し,公開鍵暗号方式を使って暗号化して通信相手に送信する。実際の データ通信は,セション開始時に作成された共通鍵を使って行う。このセション共

通鍵方式と公開鍵の第三者認証を利用した技術にSSL(Secure Socket Layer)があ

り,SSL が Web ブラウザ(以下,ブラウザという)と Web サーバ(以下,サーバ という)に実装されていれば,SSL を利用した秘匿性の高い通信が可能となる。 SSL におけるブラウザとサーバとのやり取りは,次のとおりである 〔SSL におけるブラウザとサーバとのやり取り〕 (1) ブラウザは,サーバにSSL を使用した通信を要求する。 (2) サーバは,ブラウザの要求を受けてサーバの c をブラウザに送信す る。 (3) ブラウザは,サーバから受け取ったサーバの c と,その中の認証機 関の d を基にして c の改ざんの有無を調べることにより, サーバの信頼性を確認する。

(5)

(4) ブラウザは,セションごとに異なる鍵を生成するために乱数データを生成し,生 成した乱数データを基に共通鍵を作成する。 なお,この乱数データは c 中の e を使用し暗号化する。 (5) ブラウザは,生成した乱数データを c 中の e を使用して 暗号化し,サーバに送信する。 (6) サーバは,ブラウザから受け取った暗号化された乱数データで f で 復号し,復号した乱数データを基に通信用の共通鍵を作成する。 (7) この時点において,両者間では同じ共通鍵をもつことになるので,これ以降は, この共通鍵を使って通信を行う。 [設問1]説明文中の a に入れる適切な字句を,解答群の中から選べ。 解答群 ア OTP(n) イ OTP(M-n) ウ OTP(M-n+1) エ OTP(M+n-1) [設問2]説明文中の b に入れる適切な字句を,解答群の中から選べ。 解答群

ア ABC イ BCD ウ CDE エ EFG

[設問3]説明文中の c に入れる適切な字句を,解答群の中から選べ。 解答群 ア ディジタル証明書 イ ディジタル署名 ウ サーバの秘密鍵 エ 認証機関の秘密鍵 [設問4]説明文中の d に入れる適切な字句を,解答群の中から選べ。 解答群 ア クライアントの秘密鍵 イ ディジタル証明書 ウ ディジタル署名 エ 認証機関の秘密鍵 [設問5]説明文中の e , f に入れる適切な字句の組合せを,解 答群の中から選べ。 解答群 e f ア クライアントの公開鍵 クライアントの秘密鍵 イ クライアントの秘密鍵 クライアントの公開鍵 ウ サーバの公開鍵 サーバの秘密鍵 エ サーバの秘密鍵 サーバの公開鍵

(6)

問2~問5は,選択問題です。この中から2問を選択して解答してください。選択した問題 は,マークシート左下の<1級選択問題>欄に必ずマークしてください。マークがない場合, 選択問題については採点の対象になりません。 各設問の答えは,ア~エの中から一つだけ選び,設問番号に対応したマークシートの解答番 号の「解答マーク欄」にマークしてください。なお,二つ以上マークした場合は不正解になり ます。 問2 論理回路に関する次の記述を読んで,設問6~10 に答えよ。 否定論理積(以下,NAND という)回路を組み合わせて次に示す論理回路素子を 作成し,作成した論理回路を用いて全加算器を作成する。 〔作成する論理回路素子の種類〕 (1) 論理積(以下,AND という),論理和(以下,OR という),排他的論理和 (以下,XOR という),否定(以下,NOT という)の各論理回路素子の回路記 号を図1 に示す。

AND 回路 OR 回路 XOR 回路 NOT 回路

図1 各論理回路素子の回路記号

(2) 図1 の各論理回路素子に対応する真理値表を図 2 に示す。

AND OR XOR NOT

入力 出力 入力 出力 入力 出力 入力 出力 I1 I2 O I1 I2 O I1 I2 O I O 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 図2 真理値表

ここで,NAND 回路は,AND 回路と NOT 回路を直列に接続した回路である。

NAND 回路とその等価回路を,図 3 に示す。

NAND 回路 AND 回路と NOT 回路による等価回路

図3 NAND 回路とその等価回路 I1 I2 O I O I1 I2 O I1 I2 O

(7)

次に,NAND 回路を組み合わせて,各論理回路素子を作成する。ここで, NAND は次に示す論理式で表すことができる。ただし,“ ”は否定を表す。 I1 AND I2 なお,各論理回路素子の作成には,次に示す論理式の等式を利用する。 I1 AND I2 = I1 OR I2 I1 OR I2 = I1 AND I2 I = I 〔NAND 回路による各論理回路素子の作成〕 (1) NOT 回路は,次の式に示すように,一つの NAND 回路で表せる。この式を基 に作成したNOT 回路を図 4 に示す。 I = I AND I 図4 NOT 回路 (2) AND 回路は,次の式に示すように,二つの NAND 回路で表せる。この式を基 に作成したAND 回路を図 5 に示す。 I1 AND I2 = I1 AND I2 図5 AND 回路 (3) OR 回路は,次の式に示すように,三つの NAND 回路で表せる。この式を基に 作成したOR 回路を図 6 に示す。 I1 OR I2 = 図6 OR 回路 (4) XOR 回路は,次の式に示すように,四つの NAND 回路で表せる。この式を基 に作成したXOR 回路を図 7 に示す。 a

(8)

I1 XOR I2 =

= I1 AND I1 AND I2 AND I1 AND I2 AND I2

図7 XOR 回路 次に,作成した論理回路素子を用いて,全加算器回路を作成する。 〔全加算器回路の説明〕 全加算器回路は,けた上がりを考慮した 2 進数 1 けた同士の加算を行う回路で, 論理回路素子を組み合わせて作成する。全加算器回路の回路記号及び真理値表を図 8 に示す。 入力 出力 I1K I2K CK ZK CK+1 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 注記 “K”は,けたを表す。 図8 全加算器回路の回路記号及び真理値表 全加算器回路は,ZK及び CK+1を求める次の二つの式で表せる。これらの式を基に 作成した全加算器回路の回路図を図9 に示す。 ZK = I1K XOR I2K XOR CK

CK+1 =(I1K XOR I2K)AND CK OR I1K AND I2K

図9 全加算器回路の回路図 I1K I2K CK ZK CK+1 I1K I2K CK ZK CK+1 b c d e

(9)

[設問6]図6中の a に入れる適切な字句を,解答群の中から選べ。 解答群

ア I1 AND I2 イ I1 AND I2 ウ I1 OR I2 エ I1 OR I2

[設問7]図7中の b に入れる適切な字句を,解答群の中から選べ。

解答群

ア I1 AND I2 OR I1 AND I2 イ I1 AND I2 OR I1 AND I2

ウ I1 OR I2 AND I1 OR I2 エ I1 OR I2 AND I1 OR I2 [設問8]図8中の c に入れる適切な表の切抜き部分を,解答群の中から選 べ。 解答群 ア 0 0 0 1 1 0 イ 0 1 1 0 0 1 ウ 1 0 0 1 1 0 エ 1 0 0 1 1 1 [設問9]図9中の d に入れる適切な論理回路素子を,解答群の中から選べ。 解答群 ア イ ウ エ [設問10]図9中の e に入れる適切な論理回路素子を,解答群の中から選べ。 解答群 ア イ ウ エ

(10)

問3 社内ネットワークの再構築に関する次の記述を読んで,設問11~15 に答えよ。 ある会社には,営業部,総務部,経理部,開発部,製造部がある。現在,パソ コン及びサーバなどの機器を全部で 100 台保有し,社内ネットワークを構築して運 用している。今回,パソコンを 50 台追加し,機器の数を,営業部に 50 台,その他 の部に 25 台ずつ配置することになった。そこで,これを期に,全面的に社内ネット ワークを再構築することにした。図1 に,ネットワーク構成の再構築案を示す。 図1 ネットワーク構成の再構築案 ネットワークの再構築にあたり,新たに各機器への IP アドレスの割当てを行うこ とになった。図 2 に示すように,IP アドレスの構成は,ネットワーク部及びホスト 部からなる。さらにホスト部はサブネット ID とホスト ID に分けられる。また, ネットワークID とサブネット ID を合わせてサブネットワークアドレスという。 凡例 R:ルータ,H:スイッチングハブ,S:サーバ,C:クライアント 経理部 R31 H31 C3101 C3102 製造部 R41 H41 C4101 C4102 総務部 R11 H11 C1101 C1102 開発部 H21 C2101 C2102 … … R21 営業部 インターネット R02 C0101 R01 R03 … … C0102 R05 R04 H02 S0201 H01

(11)

ネットワーク部 ホスト部 ネットワークID サブネットID ホストID サブネットワークアドレス 図2 IP アドレスの構成 サブネットワークアドレスが LAN を特定し,ホスト ID がその LAN の個々のホ ストを特定する。したがって,五つの LAN それぞれにサブネット ID を,また,そ れぞれの LAN の配下のホストにその LAN 内で一意なホスト ID を付与する。ここ で,ホスト ID には,ビットがすべて“0”又はすべて“1”のパターンは使用できな い。また,サブネット ID も,ビットがすべて“0”又はすべて“1”のパターンを使 用しないものとする。 なお,サブネットワークアドレスの指定は,個々のホストのサブネットマスクを 設定することにより行う。これらの条件に加えて,次に示す IP アドレス付与基準に 従ってIP アドレスを付与する。 〔IP アドレスの付与基準〕 (1) ネットワークID は,“192.168.1.0”である。 (2) 営業部の LAN のサブネットワークアドレスは,できるだけ小さいものを割り当 てる。 (3) サブネット ID は,小さいほうから,総務部,経理部,開発部,製造部の順に付 与する。 再構築案によると,LAN の数は 5 なのでサブネット ID は最低 a ビ ッ ト 必 要 で あ る が , ホ ス ト ID に 使 用 で き る ビ ッ ト 数 か ら 一 つの LAN あた り b 台となる。これでは社内のホストすべてに IP アドレスを割り当てるこ とができない。そこで,表に示すように,LAN ごとにビット数の異なるサブネット ID を付与することにした。 表 各LAN のサブネットワークアドレスの割当て LAN 設置部署 サブネットワークアドレス サブネットマスク 営業部 192.168.1. c 255.255.255. d 総務部 192.168.1. e 255.255.255. f 経理部 192.168.1. g 255.255.255. f 開発部 192.168.1. h 255.255.255. f 製造部 192.168.1. i 255.255.255. f

(12)

[設問11]説明文中の a , b に入れる適切な字句の組合せを,解 答群の中から選べ。 解答群 a b ア 2 30 イ 3 30 ウ 3 62 エ 4 62 [設問12]表中の c , d に入れる適切な字句の組合せを,解答群 の中から選べ。 解答群 c d ア 64 128 イ 64 192 ウ 192 192 エ 192 224 [設問13]表中の e , g に入れる適切な字句の組合せを,解答群 の中から選べ。 解答群 e g ア 32 64 イ 32 128 ウ 64 128 エ 64 192 [設問14]表中の f に入れる適切な字句を,解答群の中から選べ。 解答群 ア 128 イ 192 ウ 224 エ 240

(13)

[設問15]表中の h , i に入れる適切な字句の組合せを,解答群 の中から選べ。 解答群 h i ア 128 192 イ 160 192 ウ 192 224 エ 192 240

(14)

問4 工程管理に関する次の記述を読んで,設問16~20 に答えよ。 ある会社では,現在稼働中のあるシステム(以下,旧システムという)を新しい システム(以下,新システムという)に置き換えることになった。新システムの置 換え作業は,休日を利用して行う。この作業の工程管理を行うため,新システムの 置換え作業にあたり実施しなければならない作業を洗い出し,表に示す作業リスト を作成した。この作業リストには,洗い出した作業項目ごとに割り振った ID(以下, 作業 ID という),作業項目,その作業を実施する前に完了していなければならない 作業(以下,先行作業という)の作業ID,見積もった作業時間(分)を記入した。 表 作業リスト 作業ID 作業項目 先行作業ID 作業時間(分) W1 サーバ側データのバックアップ処理 - 120 W2 サーバデータの変換処理 W1 120 W3 サーバ側ソフトのバージョンアップ W1 180 W4 クライアント側ソフトのバージョンアップ - 90 W5 新データのサーバへのロード W2,W3 90 W6 サーバ/クライアント接続確認 W3,W4 60 W7 新データの確認 W5 60 W8 システム稼働確認 W6,W7 120 注記“-”は,先行作業がないことを表す。 図 アローダイアグラム この作業を 9:00 に開始すると,このアローダイアグラムから,作業全体が終了す る時刻は, a になることがわかり,クリティカルパスは, b で あることがわかる。また,作業 W2 以外の作業が見積もった時間で完了するとすれ ば,作業 W2 の遅れが c 分以内であれば,全体の作業時間に影響しない ことがわかる。 次に,作業 W3 及び W4 の作業時間を,それぞれ 60 分及び 30 分短縮し,それ 以外の作業は見積もった時間で完了するとした場合,作業全体が終了する時刻は, W5 4 6 7 8 W3 W2 注記 は,ダミー作業を表す。 W1 W4 2 W6 W7 W8 5 1 3

(15)

d になる。このとき,上記(空欄b)以外のクリティカルパスとして, e が存在することになる。 [設問16]説明文中の a に入れる適切な字句を,解答群の中から選べ。 解答群 ア 18:00 イ 18:30 ウ 19:30 エ 20:00 [設問 17]説明文中の b に入れる適切な字句を,解答群の中から選べ。 解答群 ア ①→②→③→④→⑥→⑦→⑧ イ ①→②→④→⑤→⑦→⑧ ウ ①→②→④→⑥→⑦→⑧ エ ①→⑤→⑦→⑧ [設問 18]説明文中の c に入れる適切な字句を,解答群の中から選べ。 解答群 ア 30 イ 60 ウ 90 エ 120 [設問 19]説明文中の d に入れる適切な字句を,解答群の中から選べ。 解答群 ア 17:00 イ 17:30 ウ 18:00 エ 18:30 [設問 20]説明文中の e に入れる適切な字句を,解答群の中から選べ。 解答群 ア ①→②→③→④→⑥→⑦→⑧ イ ①→②→④→⑤→⑦→⑧ ウ ①→②→④→⑥→⑦→⑧ エ ①→⑤→⑦→⑧

(16)

問5 損益分岐点分析に関する次の記述を読んで,設問21~25 に答えよ。 化粧品メーカのP 社では,来期より,新たに製品 X 及び製品 Y の製造販売を検討 することになり,これらの製品に対して,損益分岐点分析を行うことにした。損益 分岐点分析を行うための前提条件は,次のとおりである。 〔損益分岐点分析を行うための前提条件〕 (1) 製造にかかる費用が,固定費と変動費に分けられる。 (2) 固定費が一定である。 (3) 変動費が製造数量に比例して変動する。 (4) 製品の販売単価が一定である。 (5) a 。 P 社では,製品 X 及び製品 Y に関して,上記の前提条件を満たすことがわかった。 そこで,早速,製品X 及び製品 Y に対し,損益分岐点分析を行うことになった。 〔損益分岐点分析の説明〕 (1) 売上高が総費用(変動費+固定費)と等しくなる点を損益分岐点という。 (2) 損益分岐点における売上高では,利益が0 となることを意味する。 (3) 損益分岐点における売上高に対して,実際の売上高が少ないと損失,それを上回 ると利益になる。 (4) 図1 に,固定費,変動費及び売上高による損益分岐点を表すグラフを示す。 図1 損益分岐点を表すグラフ なお,対象とする期間は来期のみとする。したがって,固定費は来期分のみを求 める。ここで,来期における,製品 X 及び製品 Y にかかる費用の内訳を次のように 整理した。 売上高 固定費 変動費 損益分岐点 製造数量/販売数量 費用/売上高 固定費 + 変動費 = 総費用 損失 利益

(17)

〔費用の内訳〕 (1) 製品 X 及び製品 Y ともに,同じ機械設備で製造する。この機械設備の購入価額 は 400,000(千)円であり,耐用年数 8 年(償却率 0.125)として,定額法により 1 期分の減価償却費を算出する。 (2) 機械設備以外に製品 X 及び製品 Y の製造にかかわる固定費は,合計で 50,000 (千)円とする。 (3) X 製品と Y 製品への固定費の配賦の割合を 2:3 とする。 (4) 製品X 及び製品 Y の 1 個当たりの材料費は,それぞれ 100 円及び 200 円である。 (5) 材料費以外に製品X 及び製品 Y の製造にかかわる変動費は,それぞれ 20 円及び 40 円である。 営業部,設計部及び製造部による価格設定会議において,製品 X 及び製品 Y の販 売価格を決定することになった。価格の決定には,営業部が調査した来期における 販売価格別の販売予測数量を参考にした。図 2 に,製品 X 及び製品 Y の販売価格別 の販売予測数量を示す。ここで,これらの製品 X 及び製品 Y の販売予測数量のいず れの組合せに対しても,購入する機械設備で十分に製造できるものとする。 製品X 製品Y 販売価格(円) 販売予測数量(千個) 販売価格(円) 販売予測数量(千個) 240 400 600 180 320 250 720 140 420 150 960 100 540 100 1,200 70 図2 製品X 及び製品 Y の販売価格別の販売予測数量 最も利益が得られるように製品 X,及び製品 Y の販売価格を,それぞれ 320 円, b 円に設定した。このときの予測利益は,それぞれ 10,000(千) 円, c (千)円となる。また,そのときの製品 X 及び製品 Y の損益分岐点 売上高を求めると,それぞれ d (千)円,80,000(千)円となる。 なお,製品 X 及び製品 Y の安全余裕率について,小数第 3 位を四捨五入して 小数第 2 位まで求めると,それぞれ 0.20 及び e となる。ここで,安 全余裕率は,売上高が損益分岐点売上高をどのくらい上回っているかを示す比率で, 次の式で求められる。 安全余裕率 = 1 - 損益分岐点売上高 売上高

(18)

[設問21]説明文中の a に入れる適切な字句を,解答群の中から選べ。 解答群 ア 在庫維持費用が無視できる イ 製造数量と販売数量が一致する ウ 販売数量より製造数量が多い エ 変動費より固定費が多い [設問22]説明文中の b に入れる適切な字句を,解答群の中から選べ。 解答群 ア 600 イ 720 ウ 960 エ 1,200 [設問23]説明文中の c に入れる適切な字句を,解答群の中から選べ。 解答群 ア 4,800 イ 7,200 ウ 12,000 エ 16,000 [設問24]説明文中の d に入れる適切な字句を,解答群の中から選べ。 解答群 ア 56,000 イ 60,000 ウ 64,000 エ 96,000 [設問25]説明文中の e に入れる適切な字句を,解答群の中から選べ。 解答群 ア 0.16 イ 0.17 ウ 0.19 エ 0.20

(19)

問6は,必須問題です。 各設問の答えは,ア~エの中から一つだけ選び,設問番号に対応したマークシートの解答番 号の「解答マーク欄」にマークしてください。なお,二つ以上マークした場合は不正解になり ます。 問6 次の後置表記法のアルゴリズムに関するプログラムの説明,擬似言語の記述形式な どの説明及びプログラムを読んで,設問26~30 に答えよ。 〔プログラムの説明〕 一般的な形式で記述された(以下,中置表記法という)数式を,後置表記法数式に 変換する副プログラム RPol である。 (1) 項1,項 2 からなる 2 項の演算式において,中置表記法では,項 1,演算子,項 2 の順に記述するが,後置表記法では,項1,項 2,演算子の順に記述する。例えば, 中置表記法数式“2+3×4”,“(1+2×(3+4))÷5”をそれぞれ後置表記法数式で 表現すると次のようになる。 234×+ 1234+×+5÷ (2) 副プログラム RPol で処理される中置表記法数式の仕様は,次のとおりである。 ① 数字は1 けたの整数のみである。 ② 演算子は2 項演算子のみである。 ③ 数式として正しく記述されている。 ④ 数式が格納されている文字列の終端には,文字列の終了を意味する文字 NULL が格納されている。 (3) スタックを利用して,次に示す手順で中置表記法数式を後置表記法数式に変換す る。ここで,スタックの領域は十分あり,この処理によってあふれることはない。 ① 入力文字が数字の場合は,そのまま出力する。 ② 入力文字が開き括弧“(”の場合は,開き括弧“(”をスタックに格納する。 ③ 入力文字が閉じ括弧“)”の場合は,最後にスタックに格納された内容(以下, スタックの先頭位置という)が開き括弧“(”でない間,スタックから取り出し て出力する。 ④ 演算子の場合は,次の処理を行う。 ・スタックへの格納数が0 でないときは,スタックの先頭位置の演算子の優先度 がこの演算子の優先度以上で,かつ,スタックへの格納数が0 でない間,スタッ クから取り出して出力する。 ・演算子をスタックに格納する。 ⑤ 全文字を処理した後,スタックに格納されている演算子があれば,それを順に 出力する。

(20)

(4) 後置表記法数式の終端には,NULL を格納する。 (5) 文字型配列 Stk[]の要素数は十分に大きいものとする。なお,配列の添字は 0 か ら始まる。 (6) 副プログラム RPol は,次に示す関数を使用する。 ① 関数 NChk は,与えられた文字が数字かどうかをチェックする。 ② 関数 OChk は,与えられた文字が演算子かどうかをチェックする。 ③ 関数 OPri は,与えられた演算子の優先度を数値で返す。 (7) 副プログラム RPol の引数の仕様を表 1 に,RPol で使用する関数を表 2~4 に示 す。 表1 RPol の引数の仕様 引数 データ型 入出力 意味 IExp[]  文字型 入力 中置表記法で表現された数式の文字列で,文字 列の終端には,NULL が格納されている。 PExp[]  文字型 出力 後置表記法に変換された数式で,文字列の終端 には,NULL を格納する。 表2 NChk の引数と返却値の仕様 引数/返却値 データ型 入出力 意味 InChr  文字型 入力 調べられる文字 返却値 整数型 出力 InChr が数字の場合は 1, InChr が数字以外の場合は 0 表3 OChk の引数と返却値の仕様 引数/返却値 データ型 入出力 意味 InChr  文字型 入力 調べられる文字 返却値 整数型 出力 InChr が演算子の場合は 1, InChr が演算子以外の場合は 0 表4 OPri の引数と返却値の仕様 引数/返却値 データ型 入出力 意味 InChr  文字型 入力 調べられる演算子 返却値 整数型 出力 演算子の優先度で,大きいほど優先度が高い。 InChr が演算子でない場合は最も低い値とな る。

(21)

〔擬似言語の記述形式などの説明〕 (1) 記述形式 記述形式 説明 ○ 手続,変数などの名前,型などを宣言する。 /* 文 */ 文に注釈を記述する。 処 理 ・変数 ← 式 変数に式の値を代入する。 ・手続( 引数, ・・・ ) 手続を呼び出し,引数を受け渡す。 ▲ 条件式 単岐選択処理を示す。 条件式が真のときは処理を実行する。 処理 ▼ ▲ 条件式 双岐選択処理を示す。 条件式が真のときは処理 1 を実行し,偽のとき は処理 2 を実行する。 処理 1 処理 2 ▼ ■ 条件式 前判定繰返し処理を示す。 条件式が真の間,処理を繰り返し実行する。 処理 ■ ■ 処理 ■ 条件式 後判定繰返し処理を示す。 処理を実行し,条件式が真の間,処理を繰り返 し実行する。 ■ 変数: 初期値, 条件式, 増分 処理 ■ 繰返し処理を示す。 開始時点で変数に初期値(定数又は式で与え られる)が格納され,条件式が真の間,処理 を繰り返す。また,繰り返すごとに,変数に 増分(定数又は式で与えられる)を加える。 (2) 演算子と優先順位 演算の種類 演算子 優先順位 単項演算 +,-,not 高 乗除演算 ×,÷,% 加減演算 +,- 関係演算 >,<,≦,≧,=,≠ 論理積 and

 

論理和 or

 

低 注記 整数同士の除算では,商を結果として返す。%演算子は,剰余算を表す。 (3) 論理型の定数 true,false

(22)

〔プログラム〕 ・PExp[j] ← IExp[i]  ・Stk[SNum] ← IExp[i] ■ a ▲ SNum ≠ 0

α

β

γ

δ

○RPol(文字型: IExp[], 文字型: PExp[])  /* 中置表記法を後置表記法に変換 */ ○文字型: Stk[] ○整数型: i, j, SNum ・SNum ← 0 ・i ← 0 ・j ← 0 ■ IExp[i] ≠ NULL ▲ NChk(IExp[i]) = 1     /* 数字判定 */ ・j ← j + 1  ▼ ▲ IExp[i] = '('      /* 開き括弧判定 */ ・SNum ← SNum + 1 ▼ ▲ IExp[i] = ')'      /* 閉じ括弧判定 */ ・PExp[j] ← Stk[SNum - 1] ・j ← j + 1 ・SNum ← SNum - 1 ■ ・SNum ← SNum - 1 ▼ ▲ OChk(IExp[i]) = 1     /* 演算子判定 */ ■ b ・PExp[j] ← Stk[SNum - 1] ・j ← j + 1 ・SNum ← SNum - 1 ■ ・Stk[SNum] ← IExp[i]  ・SNum ← SNum + 1 ▼ ▼ ・i ← i + 1 ■

(23)

このプログラムの仕様では,入力される中置表記法数式における数字のけた数は 1 けたとなっているが,次の 2 行を d が示す位置の直前に追加することに よって,出力される後置表記法数式の項間に区切り文字として空白文字を挿入するこ とになり,2 けた以上の整数を識別することができるようになる。 後置表記法では,最初に現れた演算子の前の2 項の演算結果を 1 項に置き換えるこ とを繰り返して解を求める。ここで,後置表記法における演算過程において,“1 2 3 4 + × + 5 ÷”を例に示す。 回 演算前 演算後 1 1 2 3 4 + × + 5 ÷ → 1 2 7 × + 5 ÷ 2 1 2 7 × + 5 ÷ → 1 14 + 5 ÷ 3 1 14 + 5 ÷ → 15 5 ÷ 4 15 5 ÷ → 3 図 後置表記法における解の求め方 この例に倣い,次に示す後置表記法数式 12 3 4 + 5 × + 65 + 4 - 3 ÷ 2 - 1 + の解を求めると, e になる。 ・PExp[j] ← ' ' ・j ← j + 1 ■ c       /* スタックの残りを取り出す */ ・PExp[j] ← Stk[i] ・j ← j + 1 ■ ・PExp[j] ← NULL

(24)

[設問26]プログラム中の a に入れる適切な字句を,解答群の中から選べ。 解答群 ア Stk[SNum] = '(' イ Stk[SNum] ≠ '(' ウ Stk[SNum - 1] = '(' エ Stk[SNum - 1] ≠ '(' [設問27]プログラム中の b に入れる適切な字句を,解答群の中から選べ。 解答群 ア OPri(Stk[SNum]) ≧ OPri(IExp[i]) and SNum ≠ 0 イ OPri(Stk[SNum]) < OPri(IExp[i]) or SNum = 0 ウ OPri(Stk[SNum - 1]) ≧ OPri(IExp[i]) and SNum ≠ 0 エ OPri(Stk[SNum - 1]) < OPri(IExp[i]) or SNum = 0 [設問28]プログラム中の c に入れる適切な字句を,解答群の中から選べ。 解答群 ア i ← SNum, i > 0, -1 イ i ← SNum - 1, i > 0, -1 ウ i ← SNum - 1, i ≧ 0, -1 エ j ← SNum - j, j ≧ 0, -1 [設問29]説明文中の d に入れる適切な字句を,解答群の中から選べ。 解答群 ア α イ β ウ γ エ δ [設問30]説明文中の e に入れる適切な字句を,解答群の中から選べ。 解答群 ア 33 イ 34 ウ 35 エ 36

(25)

問7~問11は,選択問題です。この中から1問を選択して解答してください。選択した問題 は,マークシート左下の<1級選択問題>欄に必ずマークしてください。マークがない場合, 選択問題については採点の対象になりません。 各設問の答えは,ア~エの中から一つだけ選び,設問番号に対応したマークシートの解答番 号の「解答マーク欄」にマークしてください。なお,二つ以上マークした場合は不正解になり ます。 問7 次のC プログラムの説明及びプログラムを読んで,設問 31~35 に答えよ。 〔プログラムの説明〕 テキストファイルに格納されているキーとデータを基に,2 分探索木を生成する関 数 BtrGen,及び 2 分探索木内のデータのキーを基に検索する関数 BtrSrch である。 (1) テキストファイルの仕様は,次のとおりである。 ① 1 レコードにキー(5 文字以内)及びデータ(30 文字以内)がコンマ区切り形 式で格納されている。 ② キーの値が同じレコードは存在しない。 ③ テキストファイルには,少なくとも1レコードは存在する。 (2) 一つの節から枝分かれを繰り返し,樹木が枝を伸ばすように広がっていくデータ構 造を木構造といい,次のような構造となっている。 ① 階層構造をもち,節(以下,ノードという)と枝からなる。 ② ノードは,複数の下位のノード(以下,子という)をもつことができる。 ③ 子は,上位のノード(以下,親という)を一つのみもつことができる。 ④ 親のないノードを根という。 ⑤ 子のないノードを葉という。 ⑥ ノードは,値(以下,キーという)をもつ。 (3) 木構造の中で,子の数が最大で 2 個あるものを 2 分木といい,任意のノード(以 下,ノード x という)に対して,あるノード(以下,ノード y という)が,左側の 子孫であれば,条件“ノードy のキー < ノード x のキー”が成り立ち,また,ノー ド x に対して,ノード y が,右側の子孫であれば,条件“ノード y のキー > ノー ドx のキー”が成り立つ 2 分木を 2 分探索木という。 図 2 分探索木の例 10 ノード1 ノード0 ノード3 ノード4 ノード2 ノード7 25 16 ノード6 ノード5 30 21 15 19 17

(26)

(4) ノードは,次に示す構造体 Node で表現する。   struct Node {        char Key[6];      /* キー */        char Dat[31];     /* データ */        struct Node *L;    /* 左側の子へのポインタ */        struct Node *R;    /* 右側の子へのポインタ */    };  (5) 左側の子が存在しない場合は,左側の子へのポインタに,右側の子が存在しない場 合は,右側の子へのポインタに NULL を設定する。 (6) 関数 BtrGen 及び BtrSrch の引数と返却値の仕様を,それぞれ表 1,表 2 に示す。 表1 BtrGen の引数と返却値の仕様 引数と返却値 入出力 意味 Fnm[]  入力 Key と Dat が格納されているファイルの ファイル名 返却値 出力 2 分木の根のアドレスを返す。 表2 BtrSrch の引数と返却値の仕様 引数と返却値 入出力 意味 Root  入力 2 分木の根のアドレス Key[]  入力 検索するキー 返却値 出力 キーに一致するノードのアドレス 見つからない場合は,NULL 〔プログラム1〕 #include <stdio.h>  #include <malloc.h>  #include <string.h>  #define BL 256  #define KL 6  #define DL 31    struct Node {       char Key[KL];    /* キー */       char Dat[DL];    /* データ */       struct Node *L;   /* 左側の子へのポインタ */       struct Node *R;   /* 右側の子へのポインタ */  }; 

(27)

struct Node *BtrGen(char Fnm[])  {    FILE *Fp;    struct Node *Root, *Ptr, *Old;    char Buff[BL], Key[KL];      Fp = fopen(Fnm, "r");    if (Fp == NULL) return NULL;    if (fgets(Buff, BL, Fp) == NULL) {      fclose(Fp);      return NULL;    }    Root = malloc(sizeof(struct Node));    /* ルートノード */    a ;    strcpy(Key, strtok(Buff, ","));    strcpy(Root‐>Key, Key);    strcpy(Root‐>Dat, strtok(NULL, ",¥n"));    while (fgets(Buff, BL, Fp ) != NULL) {      strcpy(Key, strtok(Buff, ","));      b ;       /* 木の探索 */      while (Ptr != NULL) {        Old = Ptr;        if (  c  )          Ptr = Ptr‐>L;        else          Ptr = Ptr‐>R;      }      Ptr = malloc(sizeof(struct Node));  /* ノードを追加 */      strcpy(Ptr‐>Key, Key);      strcpy(Ptr‐>Dat, strtok(NULL, ",¥n"));      d ;      if (strcmp(Key, Old‐>Key) < 0)        Old‐>L = Ptr;      else        Old‐>R = Ptr;    }    fclose(Fp);    return Root;  } 

(28)

〔プログラム2〕 #include <stdio.h>  #include <string.h>    struct Node *BtrSrch(struct Node *Root, char Key[])  {       struct Node *Ptr;         Ptr = Root;       while (Ptr != NULL) {            if (strcmp(Key, Ptr‐>Key) == 0)        return Ptr;            else              if (  e  )            Ptr = Ptr‐>L;       /* 左側の子へ移動 */              else            Ptr = Ptr‐>R;       /* 右側の子へ移動 */       }       return NULL;  }   

(29)

[設問31]プログラム中の a に入れる適切な字句を,解答群の中から選べ。 解答群 ア Ptr‐>L = Ptr‐>R = NULL  イ Root‐>L = Root‐>R ウ Root‐>R = Root‐>L  エ Root‐>L = Root‐>R = NULL [設問32]プログラム中の b に入れる適切な字句を,解答群の中から選べ。 解答群 ア Old = Ptr    イ Old = Root ウ Ptr = Root    エ Old = Ptr [設問33]プログラム中の c に入れる適切な字句を,解答群の中から選べ。 解答群 ア strcmp(Key, Ptr‐>Key) < 0  イ strcmp(Key, Ptr‐>Key) > 0 ウ strcmp(Key, Root‐>Key) < 0  エ strcmp(Key, Root‐>Key) > 0 [設問34]プログラム中の d に入れる適切な字句を,解答群の中から選べ。 解答群 ア Ptr‐>L = Ptr‐>R  イ Ptr‐>R = Ptr‐>L ウ Ptr‐>L = Ptr‐>R = NULL  エ Root‐>L = Root‐>R = NULL [設問35]プログラム中の e に入れる適切な字句を,解答群の中から選べ。 解答群 ア strcmp(Key, Ptr‐>Key) < 0  イ strcmp(Key, Ptr‐>Key) > 0 ウ strcmp(Key, Root‐>Key) < 0  エ strcmp(Key, Root‐>Key) > 0

(30)

問8 次のCOBOL プログラムの説明及びプログラムを読んで,設問 36~40 に答えよ。 〔プログラムの説明〕 源泉ファイルと給与ファイルから税額ファイルを作成するプログラムである。 (1) 源泉ファイル(GEN‐F)のレコード様式は,図 1 に示すとおりである。 給与金額 (未満) 9 けた 税額 (1) (2) (3) (4) (5) (6) (7) (8) 7 けた 7 けた 7 けた 7 けた 7 けた 7 けた 7 けた 7 けた 図1 源泉ファイルのレコード様式 ① レコードは,給与金額の昇順に整列済である。なお,源泉ファイルのレコード 件数は400 件以下である。 ② 税額(1)~税額(8)には,それぞれ扶養人数が(添字-1)人のときの税額が格 納されている。例えば,税額(1)には,扶養人数なしのときの税額,税額(8)には, 扶養人数が7 人のときの税額が格納されている。次に,税額表(TBL‐ZEI)の内 容の一部を示す。 表 税額表(TBL-ZEI) 扶養人数 給与金額 0 1 2 ~ 7 以上 未満 税額 0 88,00 0 0 0 ~ 0 88,00 89,00 130 0 0 ~ 0 89,00 90,00 180 150 0 ~ 0 ~ ~ ~ ~ ~ ~ ~ (2) 給与ファイル(KYU‐F)のレコード様式は,図 2 に示すとおりである。 社員番号 給与金額 扶養人数 5 けた 9 けた 2 けた 図2 給与ファイルのレコード様式 (3) 税額ファイル(ZEI‐F)のレコード様式は,図 3 に示すとおりである。 社員番号 源泉税額 5 けた 7 けた 図3 税額ファイルのレコード様式

(31)

(4) 税額ファイルは,次の手順で作成する。 ① 源泉ファイルを読み込み,配列 TBL‐ZEI に格納し,配列への格納数を変数 T‐MAX に設定する。 ② 給与ファイルを読み込み,次の条件に従って税額を計算する。 ・条件1:扶養人数が 7 人を超える場合,7 人のときの税額から,超えた人数× 1,500 円を減額する。ただし,この値が負になるとき,税額は 0 円とする。 ・条件2:給与ファイルの給与金額(以下給与とする)が,配列の T‐MAX 番目の 給与金額の値を超える場合は,税額は T‐MAX 番目の値で計算し,その税額に, (給与 - 配列の T‐MAX 番目の給与金額の値)× 0.3 を加算する(小数点以 下は切り捨て)。 〔プログラム〕 DATA DIVISION.  FILE SECTION.  FD   GEN‐F.  01   GEN‐R.       03  GEN‐KYUYO        PIC  9(09).       03  GEN‐ZEIGAKU          PIC  9(07) OCCURS 8.  FD   KYU‐F.  01   KYU‐R.       03  KYU‐SNUM        PIC  X(05).       03  KYU‐KYUYO       PIC  9(09).       03  KYU‐FUYO       PIC  9(02).  FD   ZEI‐F.  01   ZEI‐R.       03  ZEI‐SNUM       PIC  X(05).       03  ZEI‐ZEIGAKU        PIC  9(07).  WORKING‐STORAGE SECTION. 

01   FLG‐GEN        PIC  9(01)  VALUE 0. 

     88  GEN‐EOF       VALUE 1. 

01  FLG‐KYU        PIC  9(01)  VALUE 0. 

     88  KYU‐EOF       VALUE 1.  01   TBL‐ZEI.       03  OCCURS 400.         05  TBL‐KYUYO          PIC  9(09).         05  TBL‐ZEIGAKU        PIC  9(07) OCCURS 8.  01   T‐MAX        PIC  9(03) VALUE 0.  01   IX       PIC  9(03).  01   W‐ZEIGAKU        PIC  S9(07).  PROCEDURE DIVISION.  PRO‐STA.       OPEN INPUT GEN‐F.    READ GEN‐F      AT END SET GEN‐EOF TO TRUE 

(32)

  END‐READ.       PERFORM UNTIL GEN‐EOF            COMPUTE T‐MAX = T‐MAX + 1            MOVE GEN‐KYUYO TO TBL‐KYUYO(T‐MAX)            PERFORM VARYING IX FROM 1 BY 1 UNTIL IX > 8         MOVE GEN‐ZEIGAKU(IX) TO TBL‐ZEIGAKU(T‐MAX IX)            END‐PERFORM       READ GEN‐F        AT END SET GEN‐EOF TO TRUE      END‐READ       END‐PERFORM.       CLOSE GEN‐F.       OPEN INPUT KYU‐F OUTPUT ZEI‐F       PERFORM UNTIL KYU‐EOF        READ KYU‐F          AT END         SET KYU‐EOF TO TRUE          NOT AT END        PERFORM VARYING IX FROM 1 BY 1             UNTIL  a                  CONTINUE         END‐PERFORM         IF IX > T‐MAX THEN         b            PERFORM CALC‐ZEIGAKU         c          ELSE         PERFORM CALC‐ZEIGAKU         END‐IF         MOVE KYU‐SNUM TO ZEI‐SNUM         MOVE W‐ZEIGAKU TO ZEI‐ZEIGAKU          WRITE ZEI‐R          END‐READ       END‐PERFORM.       CLOSE KYU‐F ZEI‐F.       STOP RUN.  CALC‐ZEIGAKU.       IF KYU‐FUYO > 7 THEN         d         IF W‐ZEIGAKU < 0 THEN          e           END‐IF       ELSE            MOVE TBL‐ZEIGAKU(IX KYU‐FUYO + 1) TO W‐ZEIGAKU       END‐IF. 

(33)

[設問36]プログラム中の a に入れる適切な字句を,解答群の中から選べ。 解答群 ア IX < T‐MAX AND TBL‐KYUYO(IX) < KYU‐KYUYO イ IX > T‐MAX AND TBL‐KYUYO(IX) > KYU‐KYUYO ウ IX > T‐MAX OR TBL‐KYUYO(IX) > KYU‐KYUYO エ IX > T‐MAX OR TBL‐KYUYO(IX) < KYU‐KYUYO [設問37]プログラム中の b に入れる適切な字句を,解答群の中から選べ。 解答群 ア MOVE IX TO T‐MAX  イ MOVE T‐MAX TO IX ウ MOVE 1 TO I  エ MOVE 1 TO T‐MAX [設問38]プログラム中の c に入れる適切な字句を,解答群の中から選べ。 解答群 ア COMPUTE W‐ZEIGAKU = W‐ZEIGAKU + KYU‐KYUYO * 1.3 イ COMPUTE W‐ZEIGAKU = W‐ZEIGAKU    + (KYU‐KYUYO ‐ TBL‐KYUYO(1)) * 0.3  ウ COMPUTE W‐ZEIGAKU = W‐ZEIGAKU    + (KYU‐KYUYO ‐ TBL‐KYUYO(T‐MAX)) * 0.3  エ COMPUTE W‐ZEIGAKU = W‐ZEIGAKU + TBL‐KYUYO(T‐MAX) * 1.3 [設問39]プログラム中の d に入れる適切な字句を,解答群の中から選べ。 解答群 ア COMPUTE W‐ZEIGAKU = TBL‐ZEIGAKU(IX 7)    ‐ (KYU‐FUYO ‐ 7) * 1500  イ COMPUTE W‐ZEIGAKU = TBL‐ZEIGAKU(IX 7)    ‐ (KYU‐FUYO ‐ 8) * 1500  ウ COMPUTE W‐ZEIGAKU = TBL‐ZEIGAKU(IX 8)    ‐ (KYU‐FUYO ‐ 7) * 1500  エ COMPUTE W‐ZEIGAKU = TBL‐ZEIGAKU(IX 8)    ‐ (KYU‐FUYO ‐ 8) * 1500 

(34)

[設問40]プログラム中の e に入れる適切な字句を,解答群の中から選べ。 解答群 ア MOVE 0 TO W‐ZEIGAKU イ MOVE TBL‐ZEIGAKU(IX 1) TO W‐ZEIGAKU  ウ MOVE TBL‐ZEIGAKU(IX 7) TO W‐ZEIGAKU エ MOVE TBL‐ZEIGAKU(IX 8) TO W‐ZEIGAKU

(35)

問9 次のJava プログラムの説明及びプログラムを読んで,設問 41~45 に答えよ。なお, Java プログラムで使用する API の説明は,この冊子の末尾を参照する。 〔プログラムの説明〕 スキー場に関する情報を,名前の辞書順と積雪量の多い順で並べ替えるプログラム である。 名前の辞書順に並べ替える場合は,java.util.Arrays.sort(Object[])を使用す る。 積 雪 量 の 多 い 順 に 並 べ 替 え る 場 合 は , java.util.Arrays.sort(Object[],  java.util.Comparator) を 使 用 す る 。 こ の メ ソ ッ ド は , 引 数 で 与 え ら れ た Comparator のインスタンスのメソッド compare を呼び出し,配列中の要素を比較し て 並 べ 替 え る 。 こ こ で は , イ ン タ フ ェ ー ス Comparator を 実 装 す る ク ラ ス SkiComparator を定義する。 (1) クラス SkiComparator コンストラクタの引数で与えられたスキー場と積雪量からマップを作成する。積雪 量を取得するメソッド getSnowryou と,積雪量の降順でスキー場を並べ替えるメ ソッド compare をオーバライドする。 (2) クラス TestSort スキー場の名前を文字列配列で,それに対応する積雪量を数値配列で作成する。最 初 に , ス キ ー 場 の 辞 書 順 に 並 べ 替 え , 次 に , ス キ ー 場 と 積 雪 量 か ら ク ラ ス SkiComparator のインスタンスを作成して,積雪量の多い順に並べ替える。 このプログラムの実行結果を以下に示す。ただし,%はシステムのコマンドプロンプ トである。 %java TestSort  SORT SKIAREA_NAME ASC  [Biwako, Hakuba, Nozawa, Shigakougen, Zaou]    SORT SNOW_RYOU DESC  [Hakuba, Zaou, Shigakougen, Biwako, Nozawa]  [150, 120, 100, 100, 30] 

(36)

〔プログラム〕 import java.util.*;    public class TestSort {    public static void main(String[] args) {        String[] skiarea = {        "Zaou", "Shigakougen", "Nozawa", "Hakuba", "Biwako"      };      int[] snowryou = {120, 100, 30, 150, 100};      String[] skiarea2 =  a ;        Arrays.sort(skiarea);      System.out.println("SORT SKIAREA_NAME ASC");      System.out.println(Arrays.toString(skiarea) + "¥n");        SkiComparator skicomparator =        new SkiComparator(skiarea2, snowryou);      Arrays.sort(  b  );      System.out.println("SORT SNOW_RYOU DESC");      System.out.println(Arrays.toString(skiarea2));      System.out.println("[" +        skicomparator.getSnowryou(skiarea2) + "]");    }  }    class SkiComparator implements  c   {    private Map<String, Integer> map =      new HashMap<String, Integer>();    SkiComparator(String[] skiarea, int[] snowryou) {      for (int i = 0; i < skiarea.length; i++) {        map.put(skiarea[i], snowryou[i]);      }    }    public String getSnowryou(String[] skiarea2) {      String snowstring = "";      int i = 0;      for ( ; i <  d ; i++) {        snowstring += map.get(skiarea2[i]);        snowstring += ", ";      }      snowstring += map.get(skiarea2[i]);      return snowstring;    }    public int compare(String skiplace1, String skiplace2) {      return  e ;    }  } 

(37)

[設問41]プログラム中の a に入れる適切な字句を,解答群の中から選べ。 解答群 ア ""    イ null ウ skiarea    エ skiarea.clone() [設問42]プログラム中の b に入れる適切な字句を,解答群の中から選べ。 解答群 ア skiarea    イ skiarea, skicomparator ウ skiarea2    エ skiarea2, skicomparator [設問43]プログラム中の c に入れる適切な字句を,解答群の中から選べ。 解答群 ア Comparator<int>  イ Comparator<Integer> ウ Comparator<String>  エ Comparator<Object> [設問44]プログラム中の d に入れる適切な字句を,解答群の中から選べ。 解答群 ア map.size()      イ map.size() ‐ 1 ウ map.size() + 1      エ map.size() ‐ 2 [設問45]プログラム中の e に入れる適切な字句を,解答群の中から選べ。 解答群 ア map.get(skiplace1) ‐ map.get(skiplace2) イ map.get(skiplace2) ‐ map.get(skiplace1) ウ skiplace1.length() ‐ skiplace2.length() エ skiplace2.length() ‐ skiplace1.length()

(38)

問10 次のアセンブラプログラムの説明及びプログラムを読んで,設問46~50 に答えよ。 〔プログラムの説明〕 コンマによって区切られた数値(以下,CSV 形式のデータという)を集計する副プ ログラム CSVSUM である。 (1) 副プログラム CSVSUM は,GR1 に CSV 形式のデータの先頭アドレスが設定されて 主プログラムから呼び出される。 (2) 副プログラム CSVSUM は,GR0 に CSV 形式のデータ中の各数値の和を集計して主 プログラムに戻る。 (3) CSV 形式のデータの仕様は,次のとおりである。 ① 数値は,符号なし整数又は符号付き整数のいずれかである。 ② コンマによって区切られた文字列の長さが0 の(コンマが連続する)場合,そ の値は0 とする。 ③ データの末尾には,#0000 が格納されている。 ④ CSV 形式のデータの例を図に示す。この例では,1,-12,0,+123 の 4 個 の数値が格納されている。 +0  +1  +2 +3 +4 +5 +6 +7 +8 +9 +10  (GR1) 1  ,   ‐  1 2 , , + 1 2 3  Nl  注記“Nl”は,#0000 を表す。 図 CSV 形式のデータの例 (4) CSV 形式のデータは,仕様どおりに格納されているものとする。 (5) 和を求める計算において,けたあふれは発生しないものとする。 (6) 副プログラムから戻るとき,汎用レジスタ GR1~GR7 の内容は元に戻す。

(39)

〔プログラム〕 CSVSUM  START    RPUSH    LAD  GR0,0  ;  集計値を初期化  NEXT  LAD  GR2,0  ;  CSV 値を初期化    LAD  GR3,0  ;  符号フラグを初期化  LOOP  LD  GR4,0,GR1    JZE  LAST    CPL  GR4,=','  ;  区切り文字か    JZE  SUM    CPL  GR4,='+'  ;  正符号か    JNZ  PASS1    a     JUMP  LOOP  PASS1  CPL  GR4,='‐'  ;  負符号か    JNZ  PASS2    LAD  GR1,1,GR1    b     JUMP  LOOP  PASS2  c     SLA  GR2,3    SLA  GR5,1    d     AND  GR4,=#000F  ;  数値抽出    ADDA  GR2,GR4    LAD  GR1,1,GR1    JUMP  LOOP 

SUM  CALL  ADVAL 

  LAD  GR1,1,GR1 

  JUMP  NEXT 

LAST  CALL  ADVAL 

FIN  RPOP    RET  ADVAL  e     JZE  RTN    XOR  GR2,GR3    LAD  GR2,1,GR2  RTN  ADDA  GR0,GR2    RET    END 

(40)

[設問46]プログラム中の a に入れる適切な字句を,解答群の中から選べ。 解答群 ア LAD  GR1,1,GR1  イ LAD  GR2,1,GR2 ウ LAD  GR3,0    エ LAD  GR3,1,GR3 [設問47]プログラム中の b に入れる適切な字句を,解答群の中から選べ。 解答群 ア LAD  GR2,0    イ LAD  GR3,0 ウ LAD  GR3,#FFFF  エ LAD  GR4,#FFFF [設問48]プログラム中の c に入れる適切な字句を,解答群の中から選べ。 解答群 ア LD  GR2,GR3   イ LD  GR2,GR5 ウ LD  GR5,GR2   エ SUBA  GR5,GR2 [設問49]プログラム中の d に入れる適切な字句を,解答群の中から選べ。 解答群 ア ADDA  GR2,GR5   イ ADDA  GR5,GR2 ウ SUBA  GR2,GR5   エ SUBA  GR5,GR2 [設問50]プログラム中の e に入れる適切な字句を,解答群の中から選べ。 解答群 ア CPA  GR2,=0    イ CPA  GR3,=0 ウ CPA  GR3,=#FFFF  エ CPA  GR4,=#0000

(41)

問11 次の表計算,ワークシートの説明及びマクロの説明を読んで,設問51~55 に答えよ。 〔表計算の説明〕 家電製品を販売しているU 社では,前年度の売上実績を基にして,主力商品の売上分 析を行うことになった。 (1) 売上分析の方法は,次のとおりである。 ① 売上金額を,商品別月別に集計(以下,商品別月別売上金額という)する。 ② 商品別月別売上金額を,年単位で集計する(以下,商品別前年度売上金額という)。 ③ 売上金額による重点管理を行うため,商品別前年度売上金額の降順に整列する。 ④ 全商品の売上合計に対する比率を商品ごとに求める(以下,売上構成比率という)。 ⑤ 売上金額の上位から順に売上金額を累計し,全商品の売上合計に対する,1 位か ら当該商品までの合計の比率(以下,累計構成比率という)を求める。 ⑥ 累計構成比率を基に,ABC 分析を行い,商品を A 群,B 群及び C 群に分類する。 (2) 各ワークシートの内容は,次のとおりである。 ① ワークシート“前年度売上集計”の内容は,次のとおりである。 ・対象とする主力商品について,商品別,月別に売上金額を入力する。 ・商品ごとに,期首から期末までの12 か月分の売上金額を合計する。 ・売上金額の合計による降順順位を求める。 ・ワークシート“ABC 分析”に順位順に整列して表示するため,次に示す算出式に より“一意値”を求める。さらに,一意値の昇順順位を求めて,“位置”に表示す ることにより,当該行のワークシート“ABC 分析”での表示位置を定める。なお, 商品番号は3 けたの数値であり,商品番号同士が重複することはない。 一意値 = 順位 × 1000 + 商品番号 ② ワークシート“ABC 分析”の内容は,次のとおりである。 ・ワークシート“前年度売上集計”を基に,ワークシート“ABC 分析”の明細行の “番号(№)”と一致する“位置”を探索し,該当する商品番号及び売上金額合 計を表示する。 ・売上金額の合計を求め,売上金額の合計に対する構成比率を商品ごとに求める。 ・先頭行からの構成比率の累計(以下,累計構成比率という)を求めて表示する。 ・商品の累計構成比率と群境界0.7 との差の絶対値が最小になるまでを A 群,累計 構成比率と群境界0.9 との差の絶対値が最小になるまでを B 群,残りを C 群の商 品とする。例えば,ワークシート“ABC 分析”で,商品 X,商品 Y の順に連続 して並んでいるとし,その累計構成比率がそれぞれ0.69(群境界 0.7 との差の絶 対値0.01),0.72(群境界 0.7 との差の絶対値 0.02)の場合,商品 X は A 群, 商品Y は B 群となる。なお,これらの値が同じ場合は,ともに A 群とする。 〔ワークシート:前年度売上集計〕 ワークシート“前年度売上集計”を作成した。作成したワークシートの例を,図1 に 示す。

(42)

A B C … M N O P Q 1 前年度売上集計 2 商品番号 4 月 5 月 … 3 月 合計 順位 一意値 位置 3 101 105,756 127,521 161,750 1,679,603 25 25,101 25 4 102 124,148 168,612 183,638 1,674,987 27 27,102 27 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 30 128 135,623 158,553 185,641 1,732,641 22 22,128 22 31 129 105,626 189,729 122,621 1,641,018 30 30,129 30 32 130 150,615 161,965 193,122 1,826,780 14 14,130 14 図1 ワークシート“前年度売上集計” (1) 図 1 中の各項目の説明は,次のとおりである。 ① 売上金額の合計を表示するため,セルN3 に次の計算式を入力し,セル N4~N32 に複写する。 合計(B3~M3) ② 売上金額の合計による降順順位を表示するため,セルO3 に次の計算式を入力し, セルO4~O32 に複写する。 順位(N3,N$3~N$32, a ) ③ 一意値を表示するため,セルP3 に次の計算式を入力し,セル P4~P32 に複写す る。 O3*1000+A3 ④ 位置を表示するため,セル Q3 に次の計算式を入力し,セル Q4~Q32 に複写す る。 順位(P3,$P$3~$P$32, b ) 〔ワークシート:ABC 分析〕 (1) ワークシート“前年度売上集計”を基に,ワークシート“ABC 分析”を作成した。 作成したワークシートの例を,図2 に示す。 A B C D E F G H 1 ABC分析 群境界 0.7 0.9 2 № 商品 番号 売上 金額 構成 比率 累計構 成比率 絶対値 (A 群) 絶対値 (B 群) 群 3 1 123 2,054,879 0.0381 0.0381 0.6619 0.8619 A 群 4 2 122 1,984,546 0.0368 0.0749 0.6251 0.8251 A 群 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 31 29 112 1,647,145 0.0306 0.9696 0.2696 0.0696 C 群 32 30 129 1,641,018 0.0304 1.0000 0.3000 0.1000 C 群 33 合計 53,896,316 図2 ワークシート“ABC 分析”

(43)

(2) 図 2 中の各項目の説明は,次のとおりである。 ① 商品番号を表示するため,セルB3 に次の計算式を入力し,セル B4~B32 に複写 する。ここで,№(セルA3~A32)は,1~30 の連続する数値である。 照合検索(A3,前年度売上集計!$Q$3~$Q$32,前年度売上集計!A$3~A$32) ② 売上金額を表示するため,セルC3 に次の計算式を入力し,セル C4~C32 に複写 する。 照合検索(A3,前年度売上集計!$Q$3~$Q$32,前年度売上集計!N$3~N$32) ③ 売上金額合計を表示するため,セルC33 に計算式“合計(C3~C32)”を入力す る。 ④ 構成比率を表示するため,セルD3 に計算式“C3/C$33”を入力し,セル D4~ D32 に複写する。 ⑤ 先頭行の累計構成比率を表示するため,セルE3 に計算式“D3”を入力する。 さらに,次行以降の累計構成比率を表示するため,セルE4 に計算式“E3+D4”を 入力し,セルE5~E32 に複写する。 ⑥ 絶対値(A 群)及び絶対値(B 群)を表示するため,セル F3 に次の計算式を入 力し,セルF3~G32 に複写する。 IF( c ) ⑦ A 群,B 群,C 群(ABC 分析)を表示するため,セル H3 に次の計算式を入力し, セルH4~H31 に複写する。なお,セル H32 には文字列“C 群”を入力する。 IF( d (F3>F4,F3=最小(F$3~F$32)),'A 群', IF( e (G3>G4,G3=最小(G$3~G$32)),'B 群','C 群')) 当年度も前年度と同じ主力商品を対象として売上分析を行うことになった。今回は, 当年度の売上明細が格納されているワークシート“当年度売上明細”にマクロを作成し, このワークシートより,ワークシート“当年度売上集計”に売上を集計する。ここで, ワークシート“当年度売上集計”は,予め“前年度売上集計”を複写して見出しを変更 し,さらに,売上金額のすべてを null にしてある。 〔マクロの説明〕 ワークシート“当年度売上明細”を,図3 に示す。ここで,このワークシートには, 主力商品以外の商品も含まれている。 A B C D E F 1 当年度売上明細 2 年 月 日 商品番号 数量 金額 3 2012 4 1 103 18 25,200 4 2012 4 1 109 13 26,000 5 2012 4 1 145 15 22,500 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 図3 ワークシート“当年度売上明細”

(44)

マクロ“Summary”は,ワークシート“当年度売上明細”の月及び商品番号に基づき, ワークシート“当年度売上集計”の該当するセルに売上金額を集計する。図3 のワーク シート“当年度売上明細”の内容を基に,マクロ“Summary”を実行したときのワーク シート“当年度売上集計”の例を,図4 に示す。 A B C … M … 1 当年度売上集計 2 商品番号 4 月 5 月 … 3 月 … 3 101 90,200 17,600 … … 4 102 120,000 18,000 … … ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 32 130 80,600 45,500 … … 図4 マクロ“Summary”を実行したときの例 〔マクロ: Summary〕                                                   ◯マクロ: Summary ◯整数型: i, Mon, Row, Col, Flg ・i ← 0 ■ 相対(A3, i, 0) ≠ null ・Row ← 0 ・Flg ← 0 ■ Flg = 0 ▲ 相対(当年度売上集計!A3, Row, 0) = null ・Flg ← 1 ▲  f ・Flg ← 2 ・Row ← Row + 1 ▼ ▼ ■ ▲ Flg = 2 ▲ Mon < 4 ・ g ・Col ← Mon - 4 ▼ ・相対(当年度売上集計!B3, Row, Col) ← 相対(当年度売上集計!B3, Row, Col) + 相対(F3, i, 0) ▼ ・i ← i + 1 ■ ・Mon ← 相対(A3, i, 1)

(45)

[設問51]ワークシート“前年度売上集計”のセルO3 及びセル Q3 に入力する計算式中 の a , b に入れる適切な字句の組合せを,解答群の中から 選べ。 解答群 a b ア 0 0 イ 0 1 ウ 1 0 エ 1 1 [設問52]ワークシート“ABC 分析”のセル F3 に入力する計算式中の c に入れ る適切な字句を,解答群の中から選べ。 解答群 ア E3≧$F1,E3-$F1,F$1-E3 イ $E3<F$1,$E3-F$1,F$1-$E3 ウ $E3≧F$1,$E3-F$1,F$1-$E3 エ $E3>F$1,E$3-F$1,F$1-E$3 [設問53]ワークシート“ABC 分析”のセル H3 に入力する計算式中の d , e に入れる適切な字句の組合せを,解答群の中から選べ。 解答群 d e ア 論理積 論理積 イ 論理積 論理和 ウ 論理和 論理積 エ 論理和 論理和 [設問54]マクロ“Summary”中の f に入れる適切な字句を,解答群の中から選 べ。 解答群 ア 相対(当年度売上集計!A3, Row, 0) = 相対(D3, i, 0) イ 相対(当年度売上集計!A3, Row, 0) = 相対(D3, Mon, 0) ウ 相対(当年度売上集計!A3, Col, 0) = 相対(D3, i, 0) エ 相対(当年度売上集計!A3, Col, 0) = 相対(D3, Mon, 0)

(46)

[設問55]マクロ“Summary”中の g に入れる適切な字句を,解答群の中から選 べ。

解答群

ア Col ← Mon + 6 イ Col ← Mon + 7 ウ Col ← Mon + 8 エ Col ← Mon + 9

参照

関連したドキュメント

例えば,立証責任分配問題については,配分的正義の概念説明,立証責任分配が原・被告 間での手続負担公正配分の問題であること,配分的正義に関する

(4) 現地参加者からの質問は、従来通り講演会場内設置のマイクを使用した音声による質問となり ます。WEB 参加者からの質問は、Zoom

問題集については P28 をご参照ください。 (P28 以外は発行されておりませんので、ご了承く ださい。)

けることには問題はないであろう︒

 筆記試験は与えられた課題に対して、時間 内に回答 しなければなりません。時間内に答 え を出すことは働 くことと 同様です。 だから分からな い問題は後回しでもいいので

平成 26 年 2 月 28 日付 25 環都環第 605 号(諮問第 417 号)で諮問があったこのことに

難病対策は、特定疾患の問題、小児慢性 特定疾患の問題、介護の問題、就労の問題