40
文部科学省後援 平成28年度後期 情報検定 <実施 平成29212日(日)> プログラミングスキル (説明時間 10001010(試験時間 10101140・試験問題は試験開始の合図があるまで開かないでください。 ・解答用紙(マークシート)への必要事項の記入は,試験開始の合図と同時 に行いますので,それまで伏せておいてください。 ・試験開始の合図の後,次のページを開いてください。<受験上の注意>記載されています。必ず目を通してから解答を始めてください。 ・試験問題は,すべてマークシート方式です。正解と思われるものを1つ選 び,解答欄の をHBの黒鉛筆でぬりつぶしてください。2つ以上ぬりつ ぶすと,不正解になります。 ・辞書,参考書類の使用および筆記用具の貸し借りは一切禁止です。 ・電卓の使用が認められます。ただし,下記の機種については使用が認めら れません。 <使用を認めない電卓> 1.電池式(太陽電池を含む)以外 .. の電卓 2.文字表示領域が複数行ある電卓(計算状態表示の一行は含まない) 3.プログラムを組み込む機能がある電卓 4.電卓が主たる機能ではないもの *パソコン(電子メール専用機等を含む),携帯電話(PHS), スマートフォン,タブレット,電子手帳,電子メモ,電子辞書, 翻訳機能付き電卓,音声応答のある電卓,電卓付き腕時計,時計型 ウェアラブル端末等 5.その他試験監督者が不適切と認めるもの 一般財団法人 職業教育・キャリア教育財団 情報システム試験

平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

1

プログラミングスキル

文部科学省後援

平成28年度後期 情報検定

<実施 平成29年2月12日(日)>

プログラミングスキル (説明時間 10:00~10:10)

(試験時間 10:10~11:40)

・試験問題は試験開始の合図があるまで開かないでください。

・解答用紙(マークシート)への必要事項の記入は,試験開始の合図と同時

に行いますので,それまで伏せておいてください。

・試験開始の合図の後,次のページを開いてください。<受験上の注意>が

記載されています。必ず目を通してから解答を始めてください。

・試験問題は,すべてマークシート方式です。正解と思われるものを1つ選

び,解答欄の をHBの黒鉛筆でぬりつぶしてください。2つ以上ぬりつ

ぶすと,不正解になります。

・辞書,参考書類の使用および筆記用具の貸し借りは一切禁止です。

・電卓の使用が認められます。ただし,下記の機種については使用が認めら

れません。

<使用を認めない電卓>

1.電池式(太陽電池を含む)以外..

の電卓

2.文字表示領域が複数行ある電卓(計算状態表示の一行は含まない)

3.プログラムを組み込む機能がある電卓

4.電卓が主たる機能ではないもの

*パソコン(電子メール専用機等を含む),携帯電話(PHS),

スマートフォン,タブレット,電子手帳,電子メモ,電子辞書,

翻訳機能付き電卓,音声応答のある電卓,電卓付き腕時計,時計型

ウェアラブル端末等

5.その他試験監督者が不適切と認めるもの

一般財団法人 職業教育・キャリア教育財団

情報システム試験

Page 2: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

2

プログラミングスキル

<受験上の注意>

1.この試験問題は36ページあります。ページ数を確認してください。

乱丁等がある場合は,手をあげて試験監督者に合図してください。

※問題を読みやすくするために空白ページを設けている場合があります。

2.解答用紙(マークシート)に,受験者氏名・受験番号を記入し,受験番号下欄の数字

をぬりつぶしてください。正しく記入されていない場合は,採点されませんので十分注

意してください。

3.試験問題についての質問には,一切答えられません。自分で判断して解答してくださ

い。

4.試験中の筆記用具の貸し借りは一切禁止します。筆記用具が破損等により使用不能と

なった場合は,手をあげて試験監督者に合図してください。

5.試験を開始してから30分以内は途中退出できません。30分経過後退出する場合は,も

う一度,受験番号・マーク・氏名が記載されているか確認して退出してください。なお,

試験終了5分前の合図以降は退出できません。試験問題は各自お持ち帰りください。

6.試験後にお知らせする合否結果(合否通知),および合格者に交付する「合格証・認定

証」はすべて,Webページ(PC,モバイル)での認証によるデジタル「合否通知」,

デジタル「合格証・認定証」に移行しました。

①団体宛にはこれまでと同様に合否結果一覧ほか,試験結果資料一式を送付します。

②合否等の結果についての電話・手紙等でのお問い合わせには,一切応じられませんの

で,ご了承ください。

Page 3: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

1

プログラミングスキル

<問題の構成>

必須問題 全員解答

選択問題 次の問題から1問選択し解答せよ。

(選択した問題は解答用紙「選択欄」に必ずマークすること...............

※選択欄にマークがなく,解答のみマークした場合は採点を行いません。

問題1~問題4

2 ページ~19 ページ

・C言語の問題 21 ページ~26 ページ

・表計算の問題 28 ページ~33 ページ

・アセンブラの問題 34 ページ~36 ページ

Page 4: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

2 2

プログラミングスキル

必須問題

問題1 次の二分木に関する記述を読み,各設問に答えよ。

二分木とは,1つの親ノードから分岐する子ノードが2つ以下のものを指す。ここ

では,ノードの値が必ず「左子ノード<親ノード<右子ノード」となる順序木を扱う

ものとする。また,ノードの値に同じものは無いものとする。

図1 二分木

<設問1> 次の順序木へのノードの追加に関する記述中の (1) に入れるべき適

切な字句を解答群から選べ。

図2 追加前の順序木

図2の状態にある順序木に対してノードを追加する。なお,ここではノードの値や

位置を入れ替えることはしないものとする。

「3」をノードに追加する位置は, (1) の値を持つノードの右子ノードであり,

「9」をノードに追加する位置は, (2) の値を持つノードの左子ノードである。

(1) ,(2) の解答群

ア.2 イ.4 ウ.6

エ.8 オ.10 カ.12

8

2 6

4 10

12

7

3 11

左子ノード 右子ノード

親ノード

Page 5: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

3

プログラミングスキル

<設問2> 次の順序木からのノードの削除に関する記述中の (1) に入れるべき

適切な字句を解答群から選べ。

図3 削除前の順序木

子ノードを持つ親ノードを削除する場合,そのノード以下のノードから,新しく親

になるノードを選択して移動する。例えば,図3の状態で「9」のノードを削除する

場合,「3」または「12」を「9」の位置に移動する。

「20」のノードを削除する場合,そのノード以下のノードは複数存在するが,順序

木になるようにするためには, (3) のノードを「20」の位置に移動する。

(3) の解答群

ア.「3」または「28」 イ.「9」または「35」

ウ.「12」または「28」 エ.「12」または「39」

<設問3> 次の順序木からの探索に関する記述中の (1) に入れるべき適切な字

句を解答群から選べ。

頂点から最深部までの距離が同じである二分木を完全二分木という。ノードの値を

探索する回数を考える。

図4 完全二分木の例

図4の場合,ノード数は 15 であり,最深部までの階層数は 4 である。この二分木

の一層目から値の大小関係により子ノードを選択しながら値を探索する場合,最大で

も階層の数である 4 回探索することで,値が存在するか判断できる。

2 6 10 14 18 22 26 30

4 12 20 28

8 24

16

20

3 12

9

28 39

35

必須問題

Page 6: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

4 4

プログラミングスキル

一般的にノードの数をnとした場合,最大探索回数は「log2nを超える最小の整数」

で表される。これは,「n<2x」となる最小の x を求めることである。

図4の場合,n=15 であるから,15 を超える2のべき乗の値で一番小さい整数値

を考えると,16(24)なので x=4,つまり,最大探索回数は 4 回となる。

n=1000 とした場合,1000 を超える2のべき乗の値で一番小さい整数値は 1024 で

ある。よって,最大探索回数は (4) 回となる。

なお,ノードの数が2倍になると,最大探索回数は (5) 。

(4) の解答群

ア.9 イ.10 ウ.11 エ.12

(5) の解答群

ア.1 回増える イ.2 倍になる

ウ.変わらない エ.半分になる

Page 7: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

5

プログラミングスキル

問題2 整列アルゴリズムである挿入法およびシェルソートの説明を読み,各設問に答え

よ。

[挿入法の説明]

1 次元配列 t[0]~t[4]に数値データが 5 個格納されている(図1)。このデータを,

挿入法により昇順に整列する。挿入法とは,整列済みのデータに対して,新たなデー

タを適切な位置に挿入し,整列済みの範囲を広げていく方法で,次の手順1,手順2

を実行し,未整列部分が無くなったら終了する。

手順 1:最初の段階では,整列されていないため,最初の要素だけを整列済みの要素

と考える。

添字→ 0 1 2 3 4

配列 t 5 9 7 3 6

図1 配列 t の初期状態

手順2:未整列部分の要素を,先頭から順番に整列済み部分の適切な位置に挿入する。

添字→ 0 1 2 3 4

配列 t 5 9 7 3 6

添字→ 0 1 2 3 4

配列 t 5 7 9 3 6

添字→ 0 1 2 3 4

配列 t 3 5 7 9 6

添字→ 0 1 2 3 4

配列 t 3 5 6 7 9

図2 整列が進んでいく過程

整 列 済

み部分 未整列部分

整列済み部分 未整列部分

整列済み部分 未整列部分

整列済み部分

未整列

部分

整列済み部分

Page 8: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

6 6

プログラミングスキル

<設問1> 次の挿入法に関する記述中の [1] に入れるべき適切な字句を解答群

から選べ。

挿入法における要素の比較回数を考えると,比較回数が最も多くなるのは降順に整

列済みの配列を昇順に整列する場合であり,要素数を 5 個とすると配列内の要素の比

較回数は (1) 回である。

(1) の解答群

ア.4 イ.5 ウ.10 エ.15

[シェルソートの説明]

シェルソートは,配列から一定間隔で抽出された部分配列に対して挿入法を繰り返

す整列アルゴリズムである。挿入法で要素を移動する場合は隣り合う位置で行うが,

シェルソートでは離れた位置へ要素を移動する。要素位置の間隔をいくつに設定する

かで効率も変わり,いくつかの値設定が推奨されている。

1 次元配列 t[0]~t[9]に数値データが格納されており(図3),最初の間隔 d を 4 と

し(図4,図5),次に 2(図6,図7),最後に 1(図8)として,それぞれ挿入法を適

用した例を示す。

添字→ 0 1 2 3 4 5 6 7 8 9

配列 t 38 13 25 32 19 21 15 35 27 12

図3 配列 t の初期状態

1 回目 d=4

添字→ 0 4 8 挿入法適用 0 4 8

配列 t1 38 19 27 19 27 38

添字→ 1 5 9 1 5 9

配列 t2 13 21 12 12 13 21

添字→ 2 6 2 6

配列 t3 25 15 15 25

添字→ 3 7 3 7

配列 t4 32 35 32 35

図4 d=4 の部分配列

添字→ 0 1 2 3 4 5 6 7 8 9

配列 t 19 12 15 32 27 13 25 35 38 21

図5 1 回目終了時の配列 t

Page 9: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

7

プログラミングスキル

2 回目 d=2

添字→ 0 2 4 6 8 挿入法適用 0 2 4 6 8

配列 t5 19 15 27 25 38 15 19 25 27 38

添字→ 1 3 5 7 9 1 3 5 7 9

配列 t6 12 32 13 35 21 12 13 21 32 35

図6 d=2 の部分配列

添字→ 0 1 2 3 4 5 6 7 8 9

配列 t 15 12 19 13 25 21 27 32 38 35

図7 2 回目終了時の配列 t

3 回目 d=1(全要素を対象とした挿入法)

添字→ 0 1 2 3 4 5 6 7 8 9

配列 t 12 13 15 19 21 25 27 32 35 38

図8 3 回目終了時の配列 t

Page 10: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

8 8

プログラミングスキル

<設問2> 次のシェルソートの流れ図(図9)中の [1] に入れるべき適切な字句

を解答群から選べ。

開 始

終 了

シェルループ1

d ← d ÷ 2

q ← p - d

挿入ループ2q≧0 かつ sw=0の間繰り返す

wk ← t[p]

挿入ループ1 p<10 の間繰り返す

(2)

sw ← 0

挿入ループ2

(3)

p ← p + d

挿入ループ1

t[q+d] ← t[q]

d ← 4

シェルループ1d≧1 の間繰り返す

シェルループ2s<d の間繰り返す

s ← 0

シェルループ2

(5)

wk : t[q]

sw ← 1

(4)

図9 シェルソートの流れ図

(3)

(4)

(5)

s ← s + 1

Page 11: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

9

プログラミングスキル

(2) ,(3) の解答群

ア.sw ← 0 イ.sw ← 1

ウ.p ← s - d エ.p ← s + d

(4) の解答群

ア.q ← q - 1 イ.q ← q + 1

ウ.q ← q - d エ.q ← q + d

(5) の解答群

ア.t[q] ← t[s] イ.t[q] ← wk

ウ.t[q+d] ← t[s] エ.t[q+d] ← wk

Page 12: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

10 10

プログラミングスキル

問題3 次のファイル処理に関する各設問に答えよ。

<設問1> 次のファイルの併合(マージ)に関する記述中の (1) に入れるべき適

切な字句を解答群から選べ。

2つの順編成ファイルを1つの順編成ファイルにまとめる処理である。

図1 マージ処理

ここでは,ファイル1およびファイル2は数値の昇順に並んでおり,ファイル3へ

の出力も数値の昇順に並ぶようにする。

ファイル1

1

3

ファイル2

2

4

ファイル3

1

2

3

4

図2 昇順になるマージ処理

この処理は,次のように行う。

1.ファイル1およびファイル2から1件ずつ入力する。

2.以下の処理を2つのファイルに格納されたデータが無くなるまで繰り返す。

・小さい方の値をファイル3へ出力し,出力されたデータが格納されていたファ

イルから次のデータを入力する。なお,同じ値の場合は,どちらを先に出力し

ても構わない。

ファイル1 ファイル2

マージ処理

ファイル3

Page 13: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

11

プログラミングスキル

ファイルから入力すべきデータがなくなったら(ファイルの終わり),データの代

わりに,9999 を使用する。ただし,ファイル1およびファイル2に 9999 以上のデー

タは無いものとする。

今,ファイル1およびファイル2の内容が図3のように並んでおり,ファイル1か

ら入力したデータは V1,ファイル2から入力したデータは V2 へ格納するものする。

ファイル1

1

2

5

ファイル2

3

4

6

図3 ファイル1とファイル2の内容

最初にファイル1とファイル2を入力するので,V1 は 1,V2 は 3 となる。以下の表

は,処理をトレースしたものである。

表 トレースした表

回数 V1 V2 出力する値 次に入力するファイル

1 1 3 1 ファイル1

2 2 3 2 ファイル1

3 (1)

4 (2)

5 (3)

6 9999 6 6 ファイル2

注意 網掛けの部分は表示していない

6 回目の処理後,ファイル2が終わりになるので,V2 も 9999 になる。V1,V2 とも

に 9999 になることで処理を終える。

(1) ~ (3) の解答群

ア.3 イ.4 ウ.5 エ.6 オ.9999

<設問2> 次のマージ処理を行う流れ図中の (1) に入れるべき適切な字句を解

答群から選べ。

Page 14: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

12 12

プログラミングスキル

[流れ図の説明]

値の昇順に整列済みのファイル1とファイル2をマージし,ファイル3へ値の昇順

に並ぶように出力するものである。

なお,ファイル1から入力したデータは V1,ファイル2から入力したデータは V2

へ格納される。また,9999 以上の値は含まれていない

[流れ図]

開 始

ファイルを開く

ファイル1入力

ファイル2入力

マージループ

      の間繰り返す

マージループ

V1を出力

ファイル1入力

V2を出力

ファイル2入力

終 了

ファイル1入力

ファイル1を読む

ファイルの終わり

V1 ← 9999

戻る

Yes

No

Yes No

ファイル2入力

ファイル2を読む

ファイルの終わり

V2 ← 9999

戻る

Yes

No

(5)

(4)

ファイルを閉じる

図4 マージ処理の流れ図

(4) の解答群

ア.V1=9999 または V2=9999 イ.V1=9999 または V2≠9999

ウ.V1≠9999 または V2=9999 エ.V1≠9999 または V2≠9999

(5) の解答群

ア.V1<V2 イ.V1>V2

ウ.V1=V2 エ.V1≠V2

Page 15: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

13

プログラミングスキル

<設問3> 次の更新処理に関する記述中の (1) に入れるべき適切な字句を解答

群から選べ。

マージの考え方を応用して,マスタファイルの内容をトランザクションファイルの

内容で更新する。

図5 更新処理図

旧マスタファイルのレコードにはキーとなる項目があり,この項目の昇順に整列済

みである。

トランザクションファイルは,マスタファイルの内容を書き換える情報を集めたも

ので,マスタファイルと同様にキーとなる項目があり,この項目の昇順に整列済であ

る。

図6は,旧マスタファイルの内容にトランザクションファイルの内容を加算し,新

マスタファイルへ出力した例である。

各ファイルのレコード項目は,キー項目と値の項目からなり,旧マスタファイルは

M-KEY と M-VALUE,トランザクションファイルは T-KEY と T-VALUE,新マスタファイル

は N-KEY と N-VALUE とする。更新内容は,T-KEY と一致する M-KEY の値(M-VALUE)に

T-VALUE を加え,キーと一緒に新マスタファイルへ出力するものである。

なお,各ファイルともレコードキー項目に重複する値は存在しないものとする。

旧マスタファイル

M-KEY M-VALUE

C001 150

C004 120

C005 300

C008 250

トランザクション

ファイル

T-KEY T-VALUE

C001 100

C005 200

新マスタファイル

N-KEY N-VALUE

C001 250

C004 120

C005 500

C008 250

図6 更新処理の例

旧マスタファイル

更新処理

トランザクションファイル

新マスタファイル

Page 16: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

14 14

プログラミングスキル

処理手順は,次のようになる。

1.旧マスタファイル,トランザクションファイルから 1 レコードずつ入力する。

2.以下の3つの処理のいずれかを2つのファイルともファイルの終わりになるま

で繰り返す。なお,ファイルが終わりになった場合,レコードキー項目には最

高値を設定するものとする。

(a) M-KEY と T-KEY が等しい場合は,M-KEY と加算した値を新マスタファイルへ

出力し,旧マスタファイルとトランザクションファイルから次のレコードを

入力する。

(b) M-KEY が T-KEY より小さい場合は,M-KEY と M-VALUE を新マスタファイルへ

出力し,旧マスタファイルから次のレコードを入力する。

(c) M-KEY が T-KEY より大きい場合は,新マスタへ出力は行わず,トランザク

ションファイルから次のレコードを入力する。

(b)は M-KEY と同じ値を持つレコードがトランザクションファイル中に存在しない

場合である。これは, (6) ためであり,そのまま旧マスタファイルの該当レコー

ドを新マスタファイルへ出力する。

(c)は T-KEY の値がマスタファイル中に存在しない場合である。これは, (7) た

めであり,エラー表示などを行う。

(6) ,(7) の解答群

ア.M-KEY に設定した値に誤りがある

イ.T-KEY に設定した値に誤りがある

ウ.更新の対象になるレコードである

エ.更新の対象とならないレコードである

<設問4> 次の更新処理の流れ図中の (1) に入れるべき適切な字句を解答群か

ら選べ。

[流れ図の説明]

旧マスタファイルをトランザクションファイルの内容で更新し,新マスタファイル

を作成するものである。各ファイルのレコード形式は,次のようになっている。

旧マスタファイル 商品コード(M-KEY) 数量(M-SURYO)

トランザクションファイル 商品コード(T-KEY) 数量(T-SURYO)

新マスタファイル 商品コード(N-KEY) 数量(N-SURYO)

図7 各ファイルのレコード形式

Page 17: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

15

プログラミングスキル

更新処理は,旧マスタファイルの数量(M-SURYO)にトランザクションファイルの

数量(T-SURYO)を加えるものとする。

なお,各ファイル内での商品コードに重複はないものとする。

また,流れ図中で使用する最高値はシステムで表現できる一番大きい値であり,商

品コードとして使用しない。

[流れ図]

開 始

ファイルを開く

MASTER入力

TRAN入力

更新ループ

      の間繰り返す

M-KEY:T-KEY< >

    

MASTER入力

TRAN入力

    

MASTER入力 TRAN入力

マージループ

終 了

ファイルを閉じる

(8)

(9) (10) (11)

Page 18: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

16 16

プログラミングスキル

MASTER入力

ファイルの終わり

M-KEY ← 最高値

戻る

Yes

No

マスタファイルを読む

TRAN入力

ファイルの終わり

T-KEY ← 最高値

戻る

Yes

No

トランザクションファイルを読む

図8 ファイル更新の流れ図

(8) の解答群

ア.M-KEY=最高値 または T-KEY=最高値

イ.M-KEY=最高値 または T-KEY≠最高値

ウ.M-KEY≠最高値 または T-KEY=最高値

エ.M-KEY≠最高値 または T-KEY≠最高値

(9) ~ (11) の解答群

ア.M-KEY を N-KEY,M-SURYO を N-SURYO に設定して新マスタファイルへ出力

イ.M-KEY を N-KEY,M-SURYO+T-SURYO を N-SURYO に設定して新マスタファイルへ

出力

ウ.M-KEY をエラー表示

エ.T-KEY を N-KEY,M-SURYO を N-SURYO に設定して新マスタファイルへ出力

オ.T-KEY をエラー表示

Page 19: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

17

プログラミングスキル

問題4 次のプログラムの説明を読み,プログラム中の に入れるべき適切な字

句を解答群から選べ。

[プログラムの説明]

1次元配列 text(長さ len_t)に文字列が格納されている。この文字列の先頭から

配列 s_text(長さ len_s)に格納されている文字列を探索し,配列 c_text(長さ len_c)

に格納されている文字列で置換し,配列 after に格納するプログラム exchange であ

る。

また,各配列の添字は0から始まり,処理に十分な大きさを持っているものとする。

置換の例

置換前

0 1 2 3 4 5 6 7

配列 text A A B C C D E E len_t = 8

0 1 2

配列 s_text A B C len_s = 3

0 1 2 3

配列 c_text Z Z Z Z len_c = 4

置換後

0 1 2 3 4 5 6 7 8

配列 after A Z Z Z Z C D E E

[擬似言語の記述形式の説明]

記述形式 説明

○ 手続き,変数などの名前,型などを宣言する

・変数 ← 式 変数に式の値を代入する

{文} 注釈を記述する

▲ 条件式

・処理1

・処理2

選択処理を示す。

条件式が真の時は処理1を実行し,

偽の時は処理2を実行する。

■ 条件式

・処理

前判定繰り返し処理を示す。

条件式が真の間,処理を実行する。

Page 20: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

18 18

プログラミングスキル

[プログラム]

〇プログラム名:exchange

〇文字型配列:text, s_text, c_text, after

〇整数型:len_t, len_s, len_c, k, m, p, flg

・m ← 0

・p ← 0

■ (1)

・flg ← 0 {文字列が含まれているかを探索処理}

・k ← 0

■ k < len_s and flg = 0

▲ text[m+k] = s_text[k]

・ (2)

・flg ← 1

▲ (3) {文字列が含まれていなかった場合}

・after[p] ← text[m]

・m ← m + 1

・p ← p + 1

・k ← 0 {文字列が含まれていた場合}

■ k < len_c

・after[p] ← c_text[k]

・k ← k + 1

・p ← p + 1

・ (4)

■ m < len_t {残っている文字を転送}

・ (5)

・m ← m + 1

・p ← p + 1

Page 21: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

19

プログラミングスキル

(1) の解答群

ア.m < len_t - len_s イ.m < len_t + len_s

ウ.m <= len_t - len_s エ.m <= len_t + len_s

(2), (4)の解答群

ア.k ← k + 1 イ.k ← k + len_s

ウ.m ← m + 1 エ.m ← m + len_s

オ.p ← p + 1 カ.p ← p + len_s

(3) の解答群

ア.flg = 0 イ.flg = 1

ウ.k > len_s エ.k > len_t

(5) の解答群

ア.after[m] ← c_text[p] イ.after[m] ← text[p]

ウ.after[p] ← c_text[m] エ.after[p] ← text[m]

Page 22: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

20 20

プログラミングスキル

< 選 択 問 題 >

選択問題は問題から1つ選択し解答せよ。

選択した問題は必ず,解答用紙「選択欄」にマークすること。

※選択欄にマークがなく,解答のみの場合は採点を行いません。

各構成は以下のとおり。

選択問題

・C言語の問題 21 ページ~26 ページ

・表計算の問題 28 ページ~33 ページ

・アセンブラの問題 34 ページ~36 ページ

Page 23: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

21

プログラミングスキル

選択問題 C言語の問題

次のC言語プログラムの説明を読み,各設問に答えよ。

[プログラムの説明]

日本語の符号化方式として存在するJISコードとShift-JISコードの変換を行うプ

ロ グ ラ ム で あ る 。 Jis_to_SJisは JISコ ー ド か ら Shift-JISコ ー ド へ 変 換 し ,

SJis_to_JisはShift-JISコードからJISコードへ変換する。JISコードとShift-JIS

コードでは,1バイト文字(以下,半角文字)と2バイト文字(以下,全角文字)を

混在させて使用するための工夫がなされている。

[JISコードについて]

日本語が使われる電子メールでは広く使われる符号化方式の一種である。全角文字

列の前にエスケープ文字(0x1B,以下ESC)に続けて「$B」を置き,全角文字列の後

にESCに続けて「(B」を置く

例)「ABC分析」という文字をJISコードで表す場合(ABCは半角文字)

文字 A B C ESC $ B 分 析 ESC ( B

コード 41 42 43 1B 24 42 4A 2C 40 4F 1B 28 42

※ コードは16進数で表示してある。網掛け部分はエスケープシーケンスである。

[Shift-JISコードについて]

パソコン用の日本語オペレーティングシステムの符号化方式として用いられてお

り,半角文字のコードとして使用する領域で未定義になっている部分(0x81~0x9Fと

0xE0~0xEF)を使って全角文字を表現することで,エスケープシーケンスを使わずに

半角文字と全角文字の混在を可能にする。

例)「ABC分析」という文字をShift-JISコードで表す場合(ABCは半角文字)

文字 A B C 分 析

コード 41 42 43 95 AA 90 CD

※ コードは16進数で表示してある。

[JISコードの全角文字をShift-JISコードへ変換する手順]

エスケープシーケンスで全角文字を判断する。

① 1バイト目の値が奇数であれば,1バイト目の値に0x01を加えて1ビット右シフ

トした結果に0x70を加えたものを新しい1バイト目の値とし,2バイト目の値に

0x1Fを加えたものを新しい2バイト目の値とする。そうでなければ,1バイト目の

値を1ビット右シフトした結果に0x70を加えたものを新しい1バイト目の値とし,

2バイト目の値に0x7Dを加えたものを新しい2バイト目の値とする。

② 新しい1バイト目の値が0xA0以上になった場合は,新しい1バイト目の値に0x40

をさらに加える。

選択問題

C言語

Page 24: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

22 22

プログラミングスキル

③ 新しい2バイト目の値が0x7F以上になった場合は,新しい2バイト目の値に0x01

をさらに加える。

図1 「分」をJISコードからShift-JISコードへ変換

[Jis_to_SJis 関数の説明]

引 数:in(JIS コードの文字列),out(Shift-JIS コードの文字列)

機 能:in に格納された JIS コードの文字列を Shift-JIS コードに変換して out

に格納する。

戻り値:なし

<設問1> プログラム Jis_to_SJis 中の に入れるべき適切な字句を解答群

から選べ。

[プログラムJis_to_SJis]

#define ESC_CODE 0x1B

#define ZENKAKU 0x24

void Jis_to_SJis(unsigned char *in, unsigned char *out) {

0000unsigned char w1, w2;

0000int in_p = 0, out_p = 0, zenkaku_flg = 0;

0000while( in[in_p] != '¥0' ) {

00000000/*--- 全角文字か半角文字かの判断 ---*/

00000000if (in[in_p] == ESC_CODE) {

000000000000if (in[in_p+1] == ZENKAKU) {

0000000000000000zenkaku_flg = 1;

000000000000} else {

0000000000000000zenkaku_flg = 0;

0100 1010 (0x4A)

0010 0101 (0x25)

1001 0101 (0x95)

0x4A2C(1 バイト目は偶数)

1ビット右シフト

0x70 を加算

0010 1100 (0x2C)

1010 1001 (0xA9)

1010 1010 (0xAA)

0x7D を加算

0x7F 以上なので 0x01 を加算

2バイト目 1バイト目

0x954A

Page 25: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

23

プログラミングスキル

000000000000}

000000000000 (1) ; /*--- エスケープシーケンス分ずらす ---*/

00000000}

00000000if (zenkaku_flg == 0) { /*--- 半角文字の場合 ---*/

000000000000out[out_p] = in[in_p];

000000000000in_p++;

000000000000out_p++;

00000000} else { /*--- 全角文字の場合 ---*/

000000000000w1 = in[in_p];

000000000000w2 = in[in_p+1];

000000000000if ( (w1 & 0x01) == 0x01) {

0000000000000000 (2)

000000000000} else {

0000000000000000 (3)

000000000000}

000000000000if (w1 >= 0xa0) {

0000000000000000w1 += 0x40;

000000000000}

000000000000if (w2 >= 0x7F) {

0000000000000000w2 += 0x01;

000000000000}

000000000000out[out_p] = w1;

000000000000out[out_p + 1] = w2;

000000000000 (4) ;

000000000000out_p += 2;

00000000}

0000}

0000out[out_p] = '¥0';

}

(1) ,(4) の解答群

ア.in_p++ イ.in_p += 2

ウ.in_p += 3 エ.in_p += 4

(2) ,(3) の解答群

ア.w1 = (w1 >> 1) + 0x70; イ.w1 = ((w1 + 0x01) >> 1) + 0x70;

w2 += 0x7D; w2 += 0x7D;

ウ.w1 = (w1 >> 1) + 0x70; エ.w1 = ((w1 + 0x01) >> 1) + 0x70;

w2 += 0x1F; w2 += 0x1F;

Page 26: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

24 24

プログラミングスキル

[Shift-JISコードの全角文字をJISコードへ変換する手順]

全角文字かどうかは,1バイト目の値が0x81以上0x9F以下,または,0xE0以上0xEF

以下であるかにより判断する。全角文字列と判断した場合には前と後にエスケープ

シーケンスを挿入する。

① 1バイト目の値が0xE0以上であれば,0x40を引いて新しい1バイト目の値とする。

② 2バイト目の値が0x80以上であれば,0x01を引いて新しい2バイト目の値とする。

③ 2バイト目の値が0x9E以上であれば,1バイト目の値から0x70を引いた結果を1

ビット左シフトした値を新しい1バイト目の値,2バイト目の値から0x7Dを引いた

値を新しい2バイト目の値にする。そうでなければ,1バイト目の値から0x70を引

いた結果を1ビット左シフトして0x01を引いた値を新しい1バイト目の値,2バイ

ト目の値から0x1Fを引いた値を新しい2バイト目の値とする。

図2 「分」をShift-JISコードからJISコードへ変換

[SJis_to_Jis 関数の説明]

引 数:in(Shift-JIS コードの文字列),out(JIS コードの文字列)

機 能:in に格納された Shift-JIS コードの文字列を JIS コードに変換して out

に格納する。

戻り値:なし

[Esc_Set 関数の説明]

引 数:buff(出力領域),p(出力領域の添え字),ch(符号文字)

機 能:buff[p]から buff[p+2]にエスケープシーケンスを格納する。buff[p]に 0x1B,

buff [p+1]に ch,buff[p+2]に 0x42 が入る。

戻り値:次に出力する値を格納する位置。

<設問2> プログラム SJis_to_Jis 中の に入れるべき適切な字句を解答群

から選べ。なお, (4) は設問1と同じ内容が入る。

1001 0101 (0x95)

0x95AA(1 バイト目は 0xE0 未満,2 バイト目は 0x80 以上)

2バイト目 1バイト目

1010 1010 (0xAA)

0x70 を引く

0010 0101 (0x25)

1 ビット左シフト

0100 1010 (0x4A)

0x01 を引く

1010 1001 (0xA9)

0x7D を引く

0010 1100 (0x2C)

0x4A2C

Page 27: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

25

プログラミングスキル

[プログラムSJis_to_Jis]

#define ESC_CODE 0x1B

#define ZENKAKU 0x24

#define HANKAKU 0x28

#define CHAR_FLAG 0x42

void SJis_to_Jis(unsigned char *in, unsigned char *out) {

0000unsigned char w1, w2;

0000int in_p = 0, out_p = 0, zenkaku_flg = 0;

0000while( in[in_p] != '¥0') {

00000000if ( in[in_p] >=0x81 && in[in_p] <= 0x9F ||

0000000000000in[in_p] >= 0xE0 && in[in_p] <= 0xEF) { /* 全角 */

000000000000w1 = in[in_p];

000000000000w2 = in[in_p+1];

000000000000if (w1 >= 0xE0) {

0000000000000000w1 -= 0x40;

000000000000}

000000000000if (w2 >= 0x80) {

0000000000000000w2 -= 0x01;

000000000000}

000000000000if (w2 >= 0x9E) {

0000000000000000 (5)

000000000000} else {

0000000000000000 (6)

000000000000}

000000000000if (zenkaku_flg == 0) {

0000000000000000out_p = Esc_Set(out, out_p, ZENKAKU);

0000000000000000zenkaku_flg = 1;

000000000000}

000000000000out[out_p] = w1;

000000000000out[out_p + 1] = w2;

000000000000 (4) ;

000000000000out_p += 2;

00000000} else { /* 半角 */

000000000000if (zenkaku_flg == 1) {

0000000000000000out_p = Esc_Set(out, out_p, HANKAKU);

0000000000000000zenkaku_flg = 0;

000000000000}

000000000000out[out_p] = in[in_p];

000000000000in_p++;

000000000000out_p++;

00000000}

0000}

Page 28: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

26 26

プログラミングスキル

0000if ( (7) ) {

00000000out_p = Esc_Set(out, out_p, HANKAKU);

0000}

0000out[out_p] = '¥0';

}

/* エスケープシーケンスを格納する関数 */

int Esc_Set(unsigned char *buff, int p, unsigned char ch) {

0000buff[p] = ESC_CODE;

0000buff[p+1] = ch;

0000buff[p+2] = CHAR_FLAG;

0000return (8) ;

}

(5) ,(6) の解答群

ア.w1 = (w1 - 0x70) << 1; イ.w1 = ((w1 - 0x70) << 1) - 1;

w2 -= 0x1F; w2 -= 0x1F;

ウ.w1 = (w1 - 0x70) << 1; エ.w1 = ((w1 - 0x70) << 1) - 1;

w2 -= 0x7D; w2 -= 0x7D;

(7) の解答群

ア.in[in_p] == '¥0' イ.out_p > in_p

ウ.zenkaku_flg == 0 エ.zenkaku_flg == 1

(8) の解答群

ア.p + 1 イ.p + 2

ウ.p + 3 エ.p + 4

Page 29: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

27

プログラミングスキル

問題を読みやすくするために,

このページは空白にしてあります。

Page 30: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

28 28

プログラミングスキル

選択問題 表計算の問題

この問題で使用する表計算ソフトの仕様は下記のとおりである。

COUNT 関数

範囲内のセル中に数値が入力されているセルの個数を返す。

書式:COUNT(範囲)

COUNTIF 関数

範囲内のセルの中で条件に一致するセルの数を返す。

書式:COUNTIF(範囲,条件)

IF 関数

条件が真のときに真の場合,偽のときに偽の場合の計算結果や値を返す。

書式:IF(条件,真の場合,偽の場合)

RANK 関数

範囲内の数値を並べたときに何番目になるか(順位)を返す。順序は,降順の場

合は0,昇順の場合は1 を設定する。なお,範囲内の検査値に同じものがあれば

同じ順位を返し,以降の順位に欠番が生じる。

書式:RANK(検査値,範囲,順序)

SUMIF 関数

指定した検索範囲の中で,条件に一致するセルの合計範囲に対応するセルの値の合

計値を返す。

書式:SUMIF(検索範囲,条件,合計範囲)

VLOOKUP 関数

検索値を左端に含む行を範囲の中から検索し,指定した列位置の値を返す。検索の

型に 0 を指定すると検索値と完全に一致する値を検索し,1 を指定すると検索値と

一致する値がない場合に,検索値未満で一番大きい値を検索する。

書式:VLOOKUP(検索値,範囲,列位置,検索の型)

=に続いて計算式や関数などを入力する。

セル番地の絶対参照

セル番地に$を付けることで,絶対番地(絶対参照)を表す。

Page 31: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

29

プログラミングスキル

別シートの参照

ワークシート名に「!」を付けてセル位置を指定することにより別シートを参照で

きる。

例:シート名「集計」のセル A1 を参照する場合は,「集計!A1」と記述する。

J社では,会社が推奨する資格の取得を社員に勧めている。その支援として,資格

に対する講習会を実施している。

昨年,資格の改訂があり,内容が一新されるのを機会に,資格取得をポイント制に

するとともに,資格取得状況に関する情報を表計算ソフトでまとめることにした。な

お,キャリアが 15 年以上の社員は 10 ポイント,キャリアが 10 年以上の社員は8ポ

イント,キャリアが5年以上の社員は5ポイントを目指して資格取得を推奨し,評価

として利用している。5年未満の場合は,評価はしない。

ポイント付与処理を行う期間は,毎年 10 月の第1週に1度のみ行う。

現在の資格取得状況は図1のようになっている。「資格取得一覧」ワークシートは,

2行目からA列に社員番号,B列に資格名,C列に資格取得日(試験実施日)が38行まで

入力されている。

A B C

1 社員番号 資格名 資格取得日

2 13589 技能2 2015/12/6

3 16372 技能2 2015/12/6

4 17794 情報3 2015/12/6

5 23443 情報2 2015/12/6

6 32098 技能2 2015/12/6

7 41141 技能3 2015/12/6

8 42407 情報3 2015/12/6

9 46953 技能3 2015/12/6

10 56097 情報3 2015/12/6

…… … …

36 56201 技能3 2016/8/14

37 59218 技能3 2016/8/14

38 64422 技能3 2016/8/14

図1 「資格取得一覧」ワークシート

次に,社員情報の一部を「社員表」ワークシートに示す。2行目からA列に社員番

号,B列に氏名,C列に部署コード,D列に性別,E列にキャリアが26行まで入力されて

いる。

選択問題

表計算

Page 32: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

30 30

プログラミングスキル

A B C D E

1 社員番号 氏名 部署コード 性別 キャリア

2 13589 小田 広之 2004 男 25

3 16372 本山 獅童 2001 男 26

4 17794 藤井 まひる 2001 女 15

5 18575 岩瀬 美月 2003 女 15

6 21594 吉野 獅童 2002 男 12

7 23113 三田 れいな 2002 女 21

8 23443 久保田 慢太郎 2001 男 8

9 26968 森脇 雅彦 2005 男 9

10 29967 布施 早紀 2002 女 1

…… … … ……

24 59218 菅野 圭 2004 男 6

25 59305 藤村 朝陽 2002 女 16

26 64422 相原 さやか 2001 女 3

図2 「社員表」ワークシート

なお,全てのワークシートの中でパーセント表示しているセルは,表示形式を小数

点以下第1位までのパーセント表示にしている。

<設問1> 次の「資格取得一覧」ワークシートの拡張に関する記述中の (1) に

入れるべき適切な字句を解答群から選べ。

「資格取得一覧」ワークシートに,取得ポイント,資格ごとの取得人数と取得割合

を追加する。

A B C D E F G H

1 社員番号 資格名 資格取得日 取得ポイント 資格名 取得人数 取得割合

2 13589 技能2 2015/12/6 8 情報1 1 4%

3 16372 技能2 2015/12/6 8 情報2 9 36%

4 17794 情報3 2015/12/6 4 情報3 10 40%

5 23443 情報2 2015/12/6 7 技能1 3 12%

6 32098 技能2 2015/12/6 8 技能2 5 20%

7 41141 技能3 2015/12/6 5 技能3 9 36%

8 42407 情報3 2015/12/6 4

9 46953 技能3 2015/12/6 5

10 56097 情報3 2015/12/6 4

…… … … …

36 56201 技能3 2016/8/14 5

37 59218 技能3 2016/8/14 5

38 64422 技能3 2016/8/14 5

図3 拡張した「資格取得一覧」ワークシート

Page 33: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

31

プログラミングスキル

取得ポイントは,「資格ポイント表」ワークシートを検索して表示する。

A B

1 資格名 ポイント

2 情報1 10

3 情報2 7

4 情報3 4

5 技能1 10

6 技能2 8

7 技能3 5 図4 「資格ポイント表」ワークシート

取得したポイントを表示するため,セル D2 に次の式を入力し,セル D3~D38 まで

複写した。

= (1)

次に,資格取得一覧に入力された資格名から,資格ごとの取得人数を集計するため,

セル G2 に次の式を入力し,セル G3~G7 まで複写した。

= (2)

さらに,社員数における取得割合を求めるため,セル H2 に次の式を入力し,セル

H3~H7 まで複写した。

= (3)

(1) の解答群

ア.VLOOKUP(B2,資格ポイント表!A2:B7, 2, 0)

イ.VLOOKUP(B2,資格ポイント表!A$2:B$7, 2, 0)

ウ.VLOOKUP(B$2,資格ポイント表!A$2:B$7, 2, 1)

エ.VLOOKUP($B$2,資格ポイント表!$A$2:$B$7, 2, 1)

(2) の解答群

ア.COUNTIF(B2:B38, F2) イ.COUNTIF($B2:$B38, F2)

ウ.COUNTIF(B$2:B$38, F2) エ.COUNTIF($B2:B$38, F2)

(3) の解答群

ア.G2/COUNT(社員表!$A2:A$26) イ.G2/COUNT(社員表!A$2:A$26)

ウ.G2/COUNTIF(社員表!$A2:$A26, F2) エ.G2/COUNTIF(社員表!A$2:A$26, F2)

Page 34: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

32 32

プログラミングスキル

<設問2> 次の「社員表」ワークシートへの取得ポイントと順位,評価の追加に関す

る記述中の に入れるべき適切な字句を解答群から選べ。

A B C D E F G H

1 社員番号 氏名 部署コード 性別 キャリア 取得ポイント 順位 評価

2 13589 小田 広之 2004 男 25 22 2 ○

3 16372 本山 獅童 2001 男 26 8 14 ×

4 17794 藤井 まひる 2001 女 15 16 4 ○

5 18575 岩瀬 美月 2003 女 15 11 8 ○

6 21594 吉野 獅童 2002 男 12 4 20 ×

7 23113 三田 れいな 2002 女 21 7 15 ×

8 23443 久保田 慢太郎 2001 男 8 7 15 ○

9 26968 森脇 雅彦 2005 男 9 10 11 ○

10 29967 布施 早紀 2002 女 1 7 15

…… … … …… … ……

24 59218 菅野 圭 2004 男 6 12 7 ○

25 59305 藤村 朝陽 2002 女 16 0 22 ×

26 64422 相原 さやか 2001 女 3 9 12

図5 取得ポイントなどを追加した「社員表」ワークシート

資格取得一覧から,取得したポイントを集計し社員表に追加するため,セル F2 に

次の式を入力し,セル F3~F26 まで複写した。

= (4)

次に,取得ポイントの多い順の順位を追加するため,セル G2 に次の式を入力し,

セル G3~G26 まで複写した。

= (5)

さらに,キャリアと取得ポイントから評価を求めるため,セル H2 に次の式を入力

し,セル H3~H26 まで複写した。評価は,推奨通りに資格が取得できた場合は“○”,

そうでない場合は“×”,該当しない場合は空白とする。

= IF( (6) ,IF(F2>=10,"○","×"),

IF( (7) ,IF(F2>=8,"○","×"),

IF( (8) ,IF(F2>=5,"○","×"),"")))

(4) の解答群

ア.SUMIF(資格取得一覧!A2:A38, A2, 資格取得一覧!D2:D38)

イ.SUMIF(資格取得一覧!A$2:A$38, A2, 資格取得一覧!D$2:D$38)

ウ.SUMIF(資格取得一覧!A$2:A$38, A$2, 資格取得一覧!D2:D38)

エ.SUMIF(資格取得一覧!A$2:A$38, A$2, 資格取得一覧!D$2:D$38)

Page 35: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

33

プログラミングスキル

(5) の解答群

ア.RANK(F2, F2:F26, 0) イ.RANK(F2, F$2:F$26, 0)

ウ.RANK(F2, F2:F26, 1) エ.RANK(F2, F$2:F$26, 1)

(6) ~ (8) の解答群

ア.E2<5 イ.E2<=5 ウ.E2>=5 エ.E2<10

オ.E2<=10 カ.E2>=10 キ.E2>15 ク.E2>=15

Page 36: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

34 34

プログラミングスキル

選択問題 アセンブラの問題

次のアセンブラ言語CASLⅡプログラムの説明を読み,各設問に答えよ。

[プログラムの説明]

DAT 番地から始まる連続した N 語の領域に格納されたデータに対して,垂直方向に

パリティチェックを行い,結果を PARITY 番地に求める副プログラム VPARI である。

VPARI は,図1のような形式でパラメタが格納された先頭番地を GR1 に設定して呼

び出される。

アドレス

(GR1) + 0 DAT 番地から始まる連続した領域の語数(N)

+ 1 DAT 番地のアドレス

+ 2 PARITY 番地のアドレス

図1 パラメタの構造

[パリティチェックの説明]

パリティチェックとは,対象データに含まれる 1 のビットの個数を数えて,偶数個

または奇数個になるように,結果となるパリティビットで調整するビット誤り検出方

式である。

このプログラムでは,図2に示すように偶数パリティ方式を採用する。反転部分が

1 回分の対象データとパリティビットであり,他の 15 ビットに対しても同様に行う。

アドレス

DAT+0 1001001011100011

+1 0011010101000010

+2 1110101011110100

+3 1000010000111101

+4 0010111011001100

PARITY 1110011110100100

図2 パリティチェック

Page 37: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

35

プログラミングスキル

[プログラム]

行番号 ラベル 命令 オペランド コメント

100 VPARI START

110

RPUSH

120

(1)

130

ADDL GR2,0,GR1 ;DAT 番地以降の最後のアドレス+1

140

LD GR3,1,GR1 ;DAT 番地のアドレスを設定

150

LD GR4,2,GR1 ;PARITY 番地のアドレスを設定

160

LD GR5,=#0000

170 LOOP1 (2)

180 LOOP2 LD GR6,0,GR1

190

AND GR6,MASK ;対象の 1 ビットだけ取り出す

200

JZE L1

210 (3)

220 L1 LAD GR1,1,GR1

230

CPA GR1,GR2 ;対象ビットの垂直方向終了判定

240

JMI LOOP2

250

LD GR6,MASK

260

(4) ;新しいマスクの準備

270 ST GR6,MASK

280

JPL LOOP1

290

ST GR5,0,GR4

300

RPOP

310

RET

320 MASK DC #8000

330

END

<設問1> プログラム中の (1) に入れるべき適切な字句を解答群から選べ。

(1) の解答群

ア.LD GR2,=0 イ.LD GR2,0,GR1

ウ.LD GR2,1,GR1 エ.LD GR2,2,GR1

(2) の解答群

ア.LD GR1,GR2 イ.LD GR1,GR3

ウ.LD GR1,GR4 エ.LD GR1,GR5

選択問題

アセンブラ

Page 38: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

36 36

プログラミングスキル

(3) の解答群

ア.ADDL GR5,MASK イ.AND GR5,MASK

ウ.OR GR5,MASK エ.XOR GR5,MASK

(4) の解答群

ア.ADDL GR6,=1 イ.SLL GR6,1

ウ.SRL GR6,1 エ.SUBL GR6,=1

<設問2> 次のプログラムの機能変更に関する記述中の (1) に入れるべき適切

な字句を解答群から選べ。

現在の偶数パリティ方式を奇数パリティ方式に変更するには,次のように行番号

160 を変更するだけでよい。

行番号 ラベル 命令 オペランド コメント

160 (5)

図3 変更する命令

(5) の解答群

ア.LD GR5,=#0001 イ.LD GR5,=#000F

ウ.LD GR5,=#8000 エ.LD GR5,=#FFFF

<設問3> 次のプログラムのアルゴリズム変更に関する記述中の (1) に入れる

べき適切な字句を解答群から選べ。

偶数パリティを求めるプログラムは,パリティビットの設定に 1 のビットの個数を

カウントする代わりに,同等の結果が得られる別のアルゴリズムを採用している。こ

こで GR7 を使って 1 のビットの個数をカウントするアルゴリズムに変更した場合,GR7

とビット列 (6) との (7) 演算の結果の最下位ビットがパリティビットと

なり,それを適切なビット位置までシフトする必要がある。

(6) の解答群

ア.#0001 イ.#000F

ウ.#8000 エ.#F000

(7) の解答群

ア.ADDL イ.AND

ウ.OR エ.XOR

Page 39: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

37

プログラミングスキル

<メモ欄>

Page 40: 平成28年度後期 情報システム試験 プログラミングスキルの …1 プログラミングスキル 文部科学省後援 平成28年度後期 情報検定 <実施

38 38

プログラミングスキル