基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成21年 春期 基本情報技術者 午後 問08
問08   必須問題

 次のプログラムの説明及びプログラムを読んで,設問に答えよ。

〔プログラムの説明〕

 64(8 × 8)画素からなる表示領域がある。この表示領域中の一つの画素を指定して, その画素を含む同じ色の領域を,指定した色で塗り替えるプログラムである。

 ある一つの画素について,その画素の上下左右の4方向に隣接した画素の中に同じ 色のものがあれば,それらの画素は同じ色の領域内にあるものと判定する。 このようにして領域内にあると判定された隣接する各画素について,同様の判定を繰り返し, 指定した色で塗り替えていく。

(1) 大きさ 10 × 10 の2次元配列 Image(各添字の範囲は0〜9)を用意する。 各画素の色は,配列 Image の一部(各添字の範囲は1〜8)に保持する。

(2) 色は, の3色で,それぞれを値1,2,3で表す。

(3) 塗り替えたい領域中の開始点を示す一つの画素を,変数 VS と HS で指定する。 VS と HS は,その画素に対応する配列 Image の要素の縦と横方向の添字である。

(4) 塗り替えたい色を,変数 NC で指定する。

(5) プログラムは,Image[VS, HS] から現在の画素の色を取得し, その画素を含む同じ色の領域を,色 NC で塗り替える。

(6) 大域変数 Image, NC, VS, HS には,正しい値が設定されているものとする。

(7) 配列 VPos, HPos の添字は,1から始まる。

(8) 図1は,VS=5, HS=3 として,Image[5, 3] を塗り替えたい領域内の開始点に 指定し,NC=1 として,塗り替える色を黒(■)に指定した場合の,プログラムの実行例である。


   図1 プログラムの実行例(NC=1,VS=5,HS=3 の場合)

〔プログラム〕
(行番号)

設問 次の記述中の に入れる正しい答えを,解答群の中から選べ。

 このプログラムに関する先輩技術者(以下,先輩という)と新入技術者(以下,新人という)の会話である。

先輩: プログラムの動作を理解するには,処理の流れを追跡してみることが大切です。 まず,画素の色がどのような順序で塗り替えられていくか,図1のデータが与えられたものとして, 最初の五つが塗り替えられる順序を 1,2,… ,5 で示してみてください。
新人:はい。追跡してみます。結果は, のようになりました。
先輩:そうですね。では,プログラムを検討していきましょう。まず,元の画素数は 8 × 8 ですが, 配列 Image の大きさは 10 × 10 で,行番号 15 〜 23 で最外周の配列要素に値0を 設定しています。これは何のための処理でしょうか。
新人:はい, からです。しかし,表示領域の要素数 64 に対して,32 の 配列要素に値を設定するのは,随分無駄な処理のように思えます。
先輩:では,一般に m × n 画素からなる表示領域を考えたとき,行番号 15 〜 23 で値を 設定する要素数は,どういう式で表せますか。
新人:はい, となります。ということは,表示領域の画素数 m × n が 大きくなるほど,この要素数は相対的に小さくなっていくのですね。
先輩:次に,最外周の配列要素に設定する値について考えてみましょう。行番号 15 では, 変数 Wall に値0を設定しています。与えられた仕様では,画素の 色を表す値は1〜3の範囲だからこれでよいのですが,もしも,符号なし 8 ビットで 表せる値 0 〜 255 がすべて色の指定に使えるとした場合,行番号 15 をどう変更したらよいですか。 例を一つ挙げてみてください。
新人:行番号 15 を と変更するのも一つの方法です。
先輩:次は,行番号 12 〜 14 について考えてみます。これは何の処理ですか。
新人:現在の色と同じ色で塗り替えようとしているなら,以降の処理をせずに呼出し元に戻ります。 塗り替えても,結局元どおりなので無駄ですから。
先輩:それも理由の一つではあるけれど。では,このプログラムから行番号 12 〜 14 を 取り去ってみましよう。そして,図2の@〜Bに示す,1画素,2画素,3画素からなる 三つの白色の領域の例について,同じ色で塗り替えようとした場合のプログラムの動作を 追跡してみてください。変数 VS,HS には, 太枠で示した画素を指定するものとします。


  図2 1画素,2画素,3画素からなる領域

   新入:では,追跡してみます。結果は,次の表のとおりです。この結果から, 行番号 12 〜 14 は省略できない必要な処理であることが分かりました。

      表 追跡の結果
テストケースプログラムの動作
図2の@(1画素からなる領域)
図2のA(2画素からなる領域)
図2のB(3画素からなる領域) 変数 More の値が増加していき配列の添字の上
限を超える。

a に関する解答群

b に関する解答群

ア これらの要素が参照されることはないが,添字から表示領域内かどうかが分かる

イ これらの要素も色 NC での塗替えの対象とすることで,処理を簡素化できる

ウ 配列 Image の各添字の範囲チェックを省略できる

エ 配列 VPos と HPos の各添字の範囲チェックを省略できる

c に関する解答群 ア 2(m+1)(n+1)         イ 2(m+n)

ウ 2(m+n+2)           エ 2(m+n−2)

d に関する解答群 ア ・Wall ← CC          イ ・Wall ← NC

ウ ・Wall ← 256 − CC     エ ・Wall ← 255 − NC

e,f に関する解答群 ア 仕様どおりに同じ色で塗り替えて正しく終了する。

イ 塗替えは一度も実行せずに終了する。

ウ 塗り替えるべき領域に含まれない周辺の画素まで塗り替えて終了する。

エ 変数 More の値が増加していき配列の添字の上限を超える。

オ 変数 More の値は一定値以下であるが処理が無限にループする。

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

解答 e ←クリックすると正解が表示されます

解答 f ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]