平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援...

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

Upload: others

Post on 03-Mar-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

1

プログラミングスキル

文部科学省後援

平成27年度後期 情報検定

<実施 平成28年2月14日(日)>

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

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

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

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

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

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

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

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

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

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

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

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

れません。

<使用を認めない電卓>

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

の電卓

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

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

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

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

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

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

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

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

情報システム試験

Page 2: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

2

プログラミングスキル

<受験上の注意>

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

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

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

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

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

意してください。

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

い。

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

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

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

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

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

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

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

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

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

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

で,ご了承ください。

Page 3: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

1

プログラミングスキル

<問題の構成>

必須問題 全員解答

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

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

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

問題1~問題4

2 ページ~14 ページ

・C言語の問題 17 ページ~19 ページ

・表計算の問題 20 ページ~24 ページ

・アセンブラの問題 25 ページ~27 ページ

Page 4: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

2 2

プログラミングスキル

必須問題

問題1 次のリストに関する記述を読み,設問に答えよ。

リストとは,ノード(リスト要素)同士をポインタで結ぶデータ構造である。1つ

のリスト要素は,図1のような構造になる。

図1 リスト要素の構造

リストの先頭から順番にデータをアクセスし,後戻りできないものを単方向リスト

と呼ぶ(図2)。

図2 単方向リストの構造

ROOT は最初のデータが格納されている場所を示すポインタである。

ポインタは,次のデータの格納場所を示すものであり,最後のリスト要素のポイン

タには NULL が入る。

次の図3は,単方向リストをメモリに展開した図である。1つのリスト要素は 2 つ

の連続した領域に格納され,最初の領域にデータ,次の領域にポインタを格納する。

ポインタに格納するのはデータが格納されている番地である。

ここでは,ROOT の値が 1004 なので,リストの先頭は 1004 番地から始まる。リスト

の先頭からたどると,100,110,120,130,140,150,160 の順番にデータが取り出

される。

ROOT 1004

番地 内容 番地 内容 番地 内容

1000 110 1008 130 1016 160

1001 1006 1009 1010 1017 NULL

1002 180 1010 140 1018 155

1003 NULL 1011 1014 1019 NULL

1004 100 1012 170 1020 165

1005 1000 1013 NULL 1021 NULL

1006 120 1014 150 1022 175

1007 1008 1015 1016 1023 NULL

図3 メモリに展開した単方向リスト

データ ポインタ

ROOT データ ポインタ データ ポインタ ・・・

・・・ データ ポインタ データ NULL

Page 5: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

3

プログラミングスキル

<設問1> 次のリストからのデータ削除に関する記述中の (1) に入れるべき適

切な数値を解答群から選べ。

リストからデータを削除するには,ポインタの値を入れ替えればよい。

図3のように配置されているリストから,1006 番地に格納されている 120 を削除す

るには,「1004 番地→1000 番地→1006 番地→1008 番地→…」となっている参照の順

序から,1006 番地を飛び越すように変更する。具体的には, (1) 番地の値を

(2) に変更すればよい。

なお,リストの先頭データを削除する場合は,ROOT の値を変更する。図3のような

場合で先頭のデータを削除するには,ROOT の値を (3) に変更する。

(1) ~ (3) の解答群

ア.1000 イ.1001 ウ.1002 エ.1003 オ.1004

カ.1005 キ.1006 ク.1007 ケ.1008 コ.1009

<設問2> 次のリストへのデータ挿入に関する記述中の (1) に入れるべき適切

な数値を解答群から選べ。

図3の状態から,1018 番地に格納されている 155 を 150 と 160 のデータの間に参照

されるように挿入する。リストを参照する順番は,「…→1014 番地→1016 番地」となっ

ているので,この間に 1018 番地を参照するようにポインタを変更する。この場合,

1015 番地の値を (4) ,1019 番地の値を (5) に変更する。

(4) ,(5) の解答群

ア.1014 イ.1016 ウ.1018 エ.1020

必須問題

Page 6: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

4 4

プログラミングスキル

問題2 次のバブルソートに関する記述を読み,各設問に答えよ。

[バブルソートの説明]

1 次元配列 A[0]~A[N-1]に N 個のデータが格納されている。このデータを,バブル

ソート法により昇順に整列する。バブルソート法とは,データを整列するためのアル

ゴリズムであり,次の手順1,手順2により整列する。

手順 1:配列の先頭から,隣接する要素を順次比較し,最大値を A[N-1]に求める。

図1に N = 5 とした例を示す

図1 N = 5 とした手順1の例

手順2:N を 1 ずつ減らしながら,手順 1 を N = 1 となるまで繰り返す。

Page 7: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

5

プログラミングスキル

<設問1> 次のバブルソートに関する流れ図中の (1) に入れるべき適切な字句

を解答群から選べ。

開 始開 始

k ← N ー 1k ← N ー 1

ループ1k > 0 の間繰り返す

ループ1k > 0 の間繰り返す

m ← 0m ← 0

ループ2m < k の間繰り返す

ループ2m < k の間繰り返す

A[m]:A[m+1]

w ← A[m+1]w ← A[m+1]

(1)(1)

(2)(2)

(3)(3)

ループ2ループ2

(4)(4)

ループ1ループ1

終 了終 了

データを交換する

隣の要素へ添え字を変更

最大値格納要素位置の添え字を変更

図2 バブルソートの流れ図

(1) ,(2) の解答群

ア.A[m] ← w イ.A[m] ← A[m+1]

ウ.A[m+1] ← w エ.A[m+1] ← A[m]

(3) ,(4) の解答群

ア.k ← k + 1 イ.k ← k - 1

ウ.m ← m + 1 エ.m ← m - 1

Page 8: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

6 6

プログラミングスキル

<設問2> 次の流れ図のトレースに関する記述中の (1) に入れるべき適切な字

句を解答群から選べ。

N=6 とし,1 次元配列 A の内容が図3のとき,図2中の空欄(4)を初めて実行する直

前の 1 次元配列 A の内容は (5) である。

添え字 0 1 2 3 4 5

配列 A 6 4 7 3 8 2

図3 1 次元配列 A の内容

(5) の解答群

ア. 4 3 6 2 7 8

イ. 4 3 6 7 2 8

ウ. 4 6 3 2 7 8

エ. 4 6 3 7 2 8

Page 9: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

7

プログラミングスキル

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

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

Page 10: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

8 8

プログラミングスキル

問題3 次の入園料に関する説明を読み,各設問に答えよ。

[入園料の説明]

J遊園地は 9 時から 21 時まで営業しており,大人は 2000 円,子ども(中学生以下)

は 1000 円の入園料を徴収している。また,より多くの人に来園してもらうため,次

のような割引サービスを行っている。

表 割引サービス

条件 割引率

10 時以前に来園 20%

17 時以降に来園 50%

団体割引(10 人以上) 30%

割引券の利用 10%

これらの割引サービスは,割引券の利用を除き併用はできず,条件が重複する場合

は,割引率が一番高いサービスだけを適用する。例えば,9 時に 20 人で来園した場合

は,10 時以前の来園である 20%と団体割引の 30%に該当するが,割引率の大きい 30%

が適用される。

割引券を利用した場合は各割引率をさらに 10%上乗せする。例えば,12 時に 20 人

で来園して割引券を利用した場合は,団体割引の 30%と合わせて,40%の割引率になる。

<設問1> 次の流れ図は,来園時間,来園者数,割引券の有無から割引率を変数

waribiki に求める流れ図である。流れ図中の (1) に入れるべき適切な字句を解

答群から選べ。

(1) ~ (4) の解答群

ア.waribiki:20% イ.waribiki:30%

ウ.来園時間:9 時 エ.来園時間:10 時

オ.来園時間:17 時 カ.来園時間:21 時

キ.来園者数:10 人 ク.来園者数:20 人

Page 11: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

9

プログラミングスキル

[流れ図]

開 始

waribiki ← 0%

waribiki ← 20%

waribiki ← 50%

waribiki ← 30%

割引券あり

 waribiki ←  waribiki + 10%

Yes

No

終 了

( 2 )

( 1 )

( 3 )

( 4 )

図1 割引率を求める流れ図

Page 12: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

10 10

プログラミングスキル

<設問2> 次のテストケースの作成に関する記述中の (1) に入れるべき適切な

字句を解答群から選べ。

図1の流れ図の動作を検証するため,テストケースを作成する。テストケースの作

成にあたって,デシジョンテーブルを作成した。

割引サービスに関する条件は 4 種類なので,それぞれの真偽(Yes と No)を組み合

わせると,条件指定は全部で (5) 通りになるが,10 時以前の来園と 17 時以降の

来園は両方とも真(Yes)になることは無いので,条件指定は次の 12 通りである。

10 時以前の来園 Y Y Y Y N N N N N N N N

17 時以降の来園 N N N N Y Y Y Y N N N N

10 人以上で来園 Y Y N N Y Y N N Y Y N N

割引券あり Y N Y N Y N Y N Y N Y N

割引なし - - - - - - - - - - - ○

10%割引 - - - - - - - - - - ○ -

20%割引 - - - ○ - - - - - - - -

30%割引 - ○ ○ - - - - - - ○ - -

40%割引 ○ - - - - - - - ○ - - -

50%割引 - - - - - ○ - ○ - - - -

60%割引 - - - - ○ - ○ - - - - -

図2 割引率のデシジョンテーブル

図2のデシジョンテーブルを動作に着目して整理したのが,図3のデシジョンテー

ブルである。

10 時以前の来園 Y Y

(6)

N -

(7)

N N

17 時以降の来園 N N Y N N N

10 人以上で来園 N N - Y N N

割引券あり Y N N Y Y N

割引なし - - - - - - - ○

10%割引 - - - - - - ○ -

20%割引 - ○ - - - - - -

30%割引 ○ - - - - ○ - -

40%割引 - - - - ○ - - -

50%割引 - - - ○ - - - -

60%割引 - - ○ - - - - -

図3 整理した割引率のデシジョンテーブル

Page 13: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

11

プログラミングスキル

これにより,デシジョンテーブルのすべての条件を網羅するには,12 種類のテスト

パターンを図3に従って 8 種類にまとめたものを用意すれば良いことが分かる。

ここで,来園時間,来園者数,割引券の値を次の値を使用する。

・来園時間 … 9 時,13 時,18 時の 3 つ

・来園者数 … 4 人,15 人の 2 つ

・割引券 … 1(割引券あり),0(割引券なし)の 2 つ

図1の流れ図に与えるデータを(来園時間,来園者数,割引券)と表した場合,

(8) を与えた場合は 10%, (9) を与えた場合は 20%の割引率になることを

確認する。

なお,割引率が 40%になる場合の入園時間は (10) である。

(5) の解答群

ア.16 イ.18 ウ.24 エ.32

(6) ,(7) の解答群

ア. - イ. - ウ. N エ. N

N N - -

Y Y Y Y

Y N Y N

オ. N カ. N キ. N ク. N

Y Y Y Y

- - Y N

Y N - -

(8) ,(9) の解答群

ア.(9 時,4 人,0) イ.(9 時,4 人,1)

ウ.(9 時,15 人,0) エ.(13 時,15 人,1)

オ.(13 時,4 人,0) カ.(13 時,4 人,1)

キ.(18 時,4 人,1) ク.(18 時,15 人,0)

(10) の解答群

ア.9 時のみ イ.13 時のみ

ウ.18 時のみ エ.9 時または 13 時

Page 14: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

12 12

プログラミングスキル

問題4 次のプログラムの説明および擬似言語の記述形式の説明を読み,各設問に答えよ。

[プログラムの説明]

Jスーパーでの商品ごと月別売上高の集計表を出力するため,ファイルを集計する

処理である。なお,月別売上高の集計表は商品コードの昇順に出力する。

レシートデータのレコード形式は以下のとおりであり,レシート番号の昇順に並ん

でいる順編成ファイルである。

レシート番号 日時 商品1

・・・ 商品n

年 月 日 時間 商品コード 個数 商品コード 個数

商品マスタのレコード形式は以下のとおりであり,索引編成ファイルである。

商品コード 商品名 単価

売上ファイルのレコード形式は以下のとおりであり,順編成ファイルである。この

ファイルには,複数年分のレコードが存在する。

集計ファイルのレコード形式は以下のとおりであり,順編成ファイルである。

各処理の内容は,次のとおりである。

表 処理内容

処 理 処 理 内 容

分割・

計算処理

レシートファイルを商品ごとのレコードに分割するとともに,商品

マスタより商品名・単価を読み込み,売上金額を求め,売上ファイ

ルを作成する。

整列処理 売上ファイルを並べ換えて,整列済み売上ファイルを作成する。売

上ファイルと整列済み売上ファイルのレコード形式は同じである。

集計処理 商品ごとの月別売上個数と売上金額を集計し,集計ファイルを作成

する。

編集・

出力処理

集計ファイルを,商品ごとの月別売上高の集計表の形式に編成し出

力する。

年 月 商品コード 商品名 個数 売上金額

年 月 商品コード 商品名 個数計 金額計

Page 15: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

13

プログラミングスキル

商品ごと月別売上高の集計表を出力するための流れは,次のようになる。

売上データは複数年分存在するものとする。

レシートデータ

分割・計算処理

売上ファイル

整列済み売上ファイル

集計ファイル

整列処理

集計処理

編集・出力処理

商品ごと月別売上高の集計表

商品マスタ

図 商品ごと月別売上高の集計表の作成処理の流れ図

<設問1> 整列処理における並べ替えのキーとして必要な最低の項目を解答群から

選び,(1)に答えよ。なお,複数の項目がある場合は,左から順に並べ替えのキーの

優先順位を示す。

(1) の解答群

ア.商品コード イ.商品コード,年,月

ウ.商品コード,月 エ.商品コード,年

Page 16: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

14 14

プログラミングスキル

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

記述形式 説明

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

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

/* 文 */ 注釈を記述する

条件式

・処理1

・処理2

選択処理を示す。

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

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

■ 条件式

・処理

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

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

<設問2> 次の集計処理のプログラム中の (1) に入れるべき適切な字句を解答

群から選べ。なお,プログラム中の※の部分は,問題の関係上表示していない。

[プログラム]

○プログラム名:Shukei()

○整数型:kosu, urikin, kosu_ttl, urikin_ttl,

nen, tuki, old_nen, old_tuki

○文字型:scode, sname, old_scode, old_sname

○ファイル:u-file, s-file

○手続き:FileRead(u-file, nen, tuki, scode, sname, kosu, urikin)

/* 売上ファイル(u-file)から 1 レコードずつ読み込み */

/* 年を nen, 月を tuki, 商品コードを scode, 商品名を sname, */

/* 個数を kosu, 売上金額を urikin に設定する。 */

/* ファイルの最後を示す識別子を入力した場合は,nen, tuki */

/* scode に最高値が設定される。 */

○手続き:FileWrite(s-file, ※ )

/* 年, 月, 商品コード, 商品名, 個数計, 金額計を設定し, */

/* 集計ファイル(s-file)に 1 レコード書き出す。 */

/* 引数の「※」は問題で使用するため表示しない。 */

Page 17: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

15

プログラミングスキル

・ファイルを開く

・FileRead(u-file, nen, tuki, scode, sname, kosu, urikin)

■ scode ≠ 最高値

・old_scode ← scode

・ (2)

■ (3)

・old_nen ← nen

・old_tuki ← tuki

・kosu_ttl ← 0

・urikin_ttl ← 0

■ (3) かつ (4)

・kosu_ttl ← kosu_ttl + kosu

・urikin_ttl ← urikin_ttl + urikin

・FileRead(u-file, nen, tuki, scode, sname, kosu, urikin)

・FileWrite(s-file, (5) )

・ファイルを閉じる

(2) の解答群

ア.old_sname ← sname イ.scode ← 0

ウ.tuki ← 最高値 エ.urikin ← 0

(3) ,(4) の解答群

ア.old_scode = scode

イ.old_scode ≠ scode

ウ.old_nen = nen

エ.old_nen ≠ nen

オ.old_nen = nen かつ old_tuki = tuki

カ.old_nen ≠ nen または old_tuki ≠ tuki

(5) の解答群

ア.nen, tuki, scode, sname, kosu, urikin

イ.nen, tuki, scode, sname, kosu_ttl, urikin_ttl

ウ.old_nen, old_tuki, old_scode, old_sname, kosu_ttl, urikin_ttl

エ.old_nen, old_tuki, old_scode, sname, kosu, urikin

Page 18: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

16 16

プログラミングスキル

< 選 択 問 題 >

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

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

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

各構成は以下のとおり。

選択問題

・C言語の問題 17 ページ~19 ページ

・表計算の問題 20 ページ~24 ページ

・アセンブラの問題 25 ページ~27 ページ

Page 19: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

17

プログラミングスキル

選択問題 C言語の問題

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

[プログラムの説明]

置換対象文字列に含まれる検索文字列を置換文字列に置き換える関数replaceであ

る。

① 置換対象文字列から検索文字列を検索する開始位置をiとする。

② 置換対象文字列のi番目からの文字列と検索文字列の先頭からの文字列を1文字ず

つ比較する。

③ 途中で不一致の文字が出現した場合は,置換対象文字列のi番目の文字を置換後の

文字列に格納し,iに1を加える。置換対象文字列と完全に一致した場合は,置換

文字列を全て置換後の文字列に格納し,検索文字列の文字数をiに加える。

④ 置換対象文字列の文字数をL,検索文字列の文字数をCとした場合,iの値がL-C以

下であれば①~③を繰り返す。

<実行例>

置換対象文字列 'A' 'B' 'X' 'A' 'B' 'C' 'X' 'Y' 'Z' '\0'

検索文字列 'A' 'B' 'C' '\0'

置換文字列 'P' 'Q' '\0'

置換後の文字列 'A' 'B' 'X' 'P' 'Q' 'X' 'Y' 'Z' '\0'

[関数の説明]

replace 関数

引 数:置換対象文字列,検索文字列,置換文字列,置換後の文字列

機 能:置換対象文字列に含まれる検索文字列を置換文字列に置き換え,その結果

を置換後の文字列に格納する。

戻り値:なし

選択問題

C言語

Page 20: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

18 18

プログラミングスキル

[プログラム]

void replace(unsigned char *text, unsigned char *srch,

000000000000unsigned char *repl, unsigned char *after) {

0000int0000text_len, srch_len, repl_len;

0000int i, k, p, flg;

0000text_len = strlen(text);

0000srch_len = strlen(srch);

0000repl_len = strlen(repl);

0000p = 0; /* after の添え字 */

0000i = 0; /* text の添え字 */

0000while(i <= text_len - srch_len) {

00000000flg = 0;

00000000k = 0;

00000000/* 検索文字列と一致するかを判断する繰り返し */

00000000while( k < srch_len && (1) ) {

000000000000if ( text[i + k] == srch[k] ) (2) ;

0000000000000000else flg = 1;

00000000}

00000000if ( flg == 0) {

000000000000/* 検索文字列を発見した場合の処理 */

000000000000for(k=0; k< (3) ; k++) {

0000000000000000 (4) ;

0000000000000000p++;

000000000000}

000000000000 (5) ; /* 検索文字列の文字数分iを進める */

00000000} else {

000000000000/* 検索文字列に一致しない場合の処理 */

000000000000 (6) ;

000000000000p++;

000000000000i++;

00000000}

0000}

0000/* 残っている文字を転送 */

0000for(; i<text_len; i++) {

00000000after[p] = text[i];

00000000p++;

0000}

0000 (7) ;

}

Page 21: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

19

プログラミングスキル

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

(1) の解答群

ア.flg == 0 イ.flg == 1

ウ.repl[k] == NULL エ.text[i] == NULL

(2) ,(5) の解答群

ア.i++ イ.k++

ウ.p++ エ.i += text_len

オ.i += repl_len カ.i += srch_len

(3) の解答群

ア.text_len イ.text_len - srch_len

ウ.srch_len エ.repl_len

(4) ,(6) ,(7) の解答群

ア.after[p] = text[i] イ.after[p] = text[k]

ウ.after[p] = text[p] エ.after[p] = repl[i]

オ.after[p] = repl[k] カ.after[p] = repl[p]

キ.after[p] = NULL ク.after[p] = p

<設問2> 検索文字列が置換対象文字列中に複数存在した場合,関数 replace はどの

ように処理するかを解答群から選べ。

(8) の解答群

ア.1つも置換文字列に置き換えないで終了する

イ.全ての検索文字列を置換文字列に置き換える

ウ.最初に発見した検索文字列のみを置換文字列に置き換える

エ.最後に発見した検索文字列のみを置換文字列に置き換える

Page 22: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

20 20

プログラミングスキル

選択問題 表計算の問題

次の表計算ソフトの記述を読み,設問に答えよ。

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

COUNTIF 関数

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

書式:COUNTIF(範囲,条件)

HOUR 関数

時刻のシリアル値を,0(午前0時)~23(午後11時)の値で返す。

書式:HOUR(シリアル値)

INDEX 関数

範囲の中から,指定した行位置・列位置のセルの値を返す。

書式:INDEX(範囲, 行番号, 列番号)

MATCH 関数

検索値を範囲内(1列または1行を設定)で検索し,範囲内での相対的な位置を返す。

位置は範囲の左上を1とする。照合の型は,0で検索値と完全に一致する値,1で検索

値以下の最大値,-1で検索値以上の最小値を検索する。検索値が見つからない場合は

エラーを返す。

書式:MATCH(検索値, 範囲, 照合の型)

RANK 関数

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

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

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

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

VLOOKUP 関数

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

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

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

当する行が見つからなかった場合は,エラーを返す。

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

Page 23: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

21

プログラミングスキル

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

&

文字列の結合をする演算子。

セル番地の参照

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

他のワークシートの参照

「ワークシート名!セル番地」とすることで他のワークシートのセルを参照する

ことができる。

Jスポーツクラブでは,表計算ソフトを利用して会員管理などを行っている。今回,

10 月の参加者表を使用し,人気プログラムランキングを表示することになった。なお,

会員は,各プログラムの利用前にカードリーダーにカードをかざすことにより参加者

表にデータが追加される。また,時間をずらしてかざすことはない。

A B C D E1 会員番号 プログラム コース 日付 時間2 12002 P004 W 2015/10/1 15:533 12010 P004 W 2015/10/1 15:554 13011 J002 B 2015/10/1 13:585 15005 S002 I 2015/10/1 17:546 13003 S009 A 2015/10/2 9:537 12013 J003 C 2015/10/2 9:538 15012 S003 A 2015/10/2 9:54…… ……… …

1000 12009 P003 B 2015/10/31 17:54

図1 「参加者表」ワークシート

Jスポーツクラブで用意しているプログラムは 24 種類である。

A B C D1 プログラム プログラム名 コース コース名2 F001 フィールド T テニス3 F002 フィールド G ゴルフ4 F003 フィールド S サッカー5 F004 フィールド F フットサル6 J001 ジム P ポジティブ7 J002 ジム P+ ボディプラス8 J003 ジム C コンディショニング…… … … …

25 S009 ダンス A 上級者

図2 「プログラム表」ワークシート

選択問題

表計算

Page 24: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

22 22

プログラミングスキル

<設問1> 次の「人気プログラムランキング」ワークシートの作成に関する記述中の

(1) に入れるべき適切な字句を解答群から選べ。ただし,同順はないものとする。

A B C D E F G H1 プログラム 参加人数 順位 順位 プログラム プログラム名 参加人数2 F001 83 4 1 J003 ジムコンディショニング 1373 F002 57 5 2 S005 エアロビクス中級者 1284 F003 28 13 3 S001 エクササイズ初級者 1135 F004 43 7 4 F001 フィールドテニス 836 J001 56 6 5 F002 フィールドゴルフ 577 J002 39 98 J003 137 1…… ……

25 J005 25 16

図3 「人気プログラムランキング」ワークシート

セル A2 は,次の式を入力し,セル A3~A25 まで複写した。

= プログラム表!A2

セル B2 は,参加人数を求めるため次の式を入力し,セル B3~B25 まで複写した。

= (1)

セル C2 は,参加人数の多い順に順位を付けるため次の式を入力し,セル C3~C25

に複写した。

= (2)

次に,参加人数が上位 5 位に入るプログラムだけを表示するため,セル E2~E6 に 1

~5 を入力し,セル F2 は順位のプログラムを表示するため次式を入力し,セル F3~

F6 まで複写した。

= (3) ($A$2:$C$25, (4) (E2, $C$2:$C$25, 0), 1)

同様に,セル H2 は参加人数を表示するため次式を入力し,セル H3~H6 まで複写し

た。

= (3) ($A$2:$C$25, (4) (E2, $C$2:$C$25, 0), 2)

また,G 列のプログラム名は,「プログラム表」のプログラム名とコース名の文字列

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

= (5) (F2, プログラム表!$A$2:$B$25, (6) , 0)

& (5) (F2, プログラム表!$A$2:$D$25, (7) , 0)

Page 25: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

23

プログラミングスキル

(1) の解答群

ア.COUNTIF(参加者表!B2:B1000, A2)

イ.COUNTIF(参加者表!$B2:$B1000, A2)

ウ.COUNTIF(参加者表!$B2:$B1000, A$2)

エ.COUNTIF(参加者表!$B$2:$B$1000, A2)

(2) の解答群

ア.RANK(B2, B2:B25, 0) イ.RANK(B2, $B$2:$B$25, 0)

ウ.RANK($B$2, B2:B25, 0) エ.RANK($B$2, $B$2:$B$25, 0)

(3) ~ (5) の解答群

ア.COUNTIF イ.IF ウ.INDEX エ.MATCH

オ.SUMIF カ.VLOOKUP

(6) , (7) の解答群

ア.1 イ.2 ウ.3 エ.4

<設問2> 次の「時間帯別利用者数」ワークシートの作成に関する記述中の (1) に

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

初めに,「時間帯別利用者数」ワークシートの A 列と B 列に次のように入力した。

図4 「時間帯別利用者数」ワークシート

次に,「参加者表」ワークシートの時間から時間帯を求めるために F 列を追加する。

Page 26: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

24 24

プログラミングスキル

図5 変更後の「参加者表」ワークシート

セル F2 に次式を入力し,セル F3~F1000 まで複写した。

= (8)

さらに,時間帯別利用者数を求めるために,「時間帯別利用者数」ワークシートの

セル C2 に次式を入力し,セル C3~C15 まで複写した。

= (9)

(8) の解答群

ア.VLOOKUP(E2, 時間帯別利用者数!$A$2:$B$15, 2, 0)

イ.VLOOKUP(E2+1, 時間帯別利用者数!$A$2:$B$15, 2, 0)

ウ.VLOOKUP(HOUR(E2), 時間帯別利用者数!$A$2:$B$15, 2, 0)

エ.VLOOKUP(HOUR(E2)+1, 時間帯別利用者数!$A$2:$B$15, 2, 0)

(9) の解答群

ア.COUNTIF(参加者表!F2:F1000, B2)

イ.COUNTIF(参加者表!$F2:$F1000, B2)

ウ.COUNTIF(参加者表!$F2:$F1000, B$2)

エ.COUNTIF(参加者表!$F$2:$F$1000, B2)

Page 27: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

25

プログラミングスキル

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

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

[プログラムの説明]

連続した領域に格納された N 語のデータの各語に対して,指定した 4 ビットのビッ

ト列が含まれているかを探索し,含んでいるデータの語数を求める副プログラム

BSRCH である。

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

び出される。

アドレス

(GR1) + 0 連続した領域のデータの語数(N)

+ 1 連続した領域の先頭アドレス

+ 2 探索したい4ビットのビット列(下位 4ビット)

+ 3 探索結果の語数を格納するアドレス

図1 パラメタの構造

[探索の手順]

探索は,1 語の領域に対して左端から開始し,一致するビット列を見つけるまで 1

ビットずつシフトしながら行う。見つけた時点で結果のカウントを行い,その語に関

しては残りのビットは探索せずに次の語へ移る。探索したいデータが 4 ビットなので,

1語で 13 回の比較が終了したら次の語へ移る。

[プログラム]

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

100 BSRCH START

110

RPUSH

120

LD GR3,0,GR1 ;データ数の設定

130

LD GR2,1,GR1 ;データの先頭アドレス

140

ADDL GR3,GR2 ;探索終了アドレス

150

LD GR0,2,GR1 ;探索ビット列(4 ビット)の設定

160

(1)

170

LD GR6,=0 ;見つけた語数のカウンタ設定

180 LOOP1 LD GR5,0,GR2

190

(2) ;1語の中での探索カウンタ設定

200 LOOP2 LD GR4,GR5

210 AND GR4,MASK

選択問題

アセンブラ

Page 28: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

26 26

プログラミングスキル

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

220

CPL GR0,GR4

230

JZE FIND

240

(3)

250

SUBA GR7,=1

260

JMI NEXT

270 JUMP LOOP2

280 FIND ADDA GR6,=1 ;見つかったので語数をカウント

290 NEXT ADDL GR2,=1 ;次のデータ(語)への準備

300

CPL GR2,GR3 ;終了判定

310

(4)

320

ST GR6,3,GR1 ;見つけた語数を格納

330

RPOP

340

RET

350 MASK DC (5)

360 END

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

(1) の解答群

ア.SLL GR0,4 イ.SLL GR0,12

ウ.SRL GR0,4 エ.SRL GR0,12

(2) の解答群

ア.LD GR7,=0 イ.LD GR7,=1

ウ.LD GR7,=12 エ.LD GR7,=16

(3) の解答群

ア.SLL GR5,1 イ.SLL GR5,4

ウ.SRL GR5,1 エ.SRL GR5,4

(4) の解答群

ア.JMI LOOP1 イ.JMI LOOP2

ウ.JPL LOOP1 エ.JPL LOOP2

(5) の解答群

ア.#000F イ.#00F0

ウ.#0F00 エ.#F000

Page 29: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

27

プログラミングスキル

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

句を解答群から選べ。

現在のプログラムは,探索ビット列を含んでいる語数を求めているが,探索ビット

列の出現回数を求めるように変更する。ただし,1 語の中で見つかったビット列を除

いたビット列から続けて探すものとする。

探索ビット列 1010

ある 1 語 1010 1001 1010 1101

この場合は 2 個見つかる

図2 出現回数の探索に変更

この変更は,次のように連続した 4 命令を行番号 280 の後に追加すればよい。

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

281

SLL GR5,4

282 (6)

283 JMI NEXT

284

(7)

図3 追加する命令群

(6) の解答群

ア.SUBA GR7,=1 イ.SUBA GR7,=2

ウ.SUBA GR7,=3 エ.SUBA GR7,=4

(7) の解答群

ア.JUMP LOOP1 イ.JUMP LOOP2

ウ.JZE LOOP1 エ.JZE LOOP2

Page 30: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

28 28

プログラミングスキル

<メモ欄>

Page 31: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

29

プログラミングスキル

<メモ欄>

Page 32: 平成27年度後期 情報検定 - sgec.or.jp1 プログラミングスキル 文部科学省後援 平成27年度後期 情報検定 <実施 平成28年2月14日(日)> プログラミングスキル

30 30

プログラミングスキル