本文へスキップ

平成23年度 秋期 ITパスポート試験 問91

この問題の解説と、これまでの解答の記録です。

問91
頻出度★★☆

文字や図形を白黒で縦 7 画素,横 7 画素のディジタル画像で表すとき,数字の“0”を図 1 のように表現する。このディジタル画像を画素データとして出力する処理,画素データを圧縮する処理及びディジタル画像を回転させる処理について考える。 図 1 数字の“0”のディジタル画像

1列2列3列4列5列6列7列
1行□□■■■□□
2行□■□□□■□
3行□■□□□■□
4行□■□□□■□
5行□■□□□■□
6行□■□□□■□
7行□□■■■□□

画素データを出力する処理の概要と圧縮する処理の概要は,次のとおりである。 〔画素データを出力する処理の概要〕 (1) 画素の色が白のときは“w”,黒のときは“b”を画素データとして出力する。 (2) 1 行 1 列,1 行 2 列,…,1 行 7 列,2 行 1 列,2 行 2 列,…,7 行 7 列の順番に各位置の画素データを出力する。 (3) 画素データを出力する際は,各画素データの間をコンマ“,”で区切る。 (4) 図 1 の画素データを出力した結果は次のとおりになり,文字数はコンマを含めて 97 文字になる。 w,w,b,b,b,w,w,w,b,w,w,w,b,w,w,b,w,w,w,b,w,w,b,w,w,w,b,w,w,b,w,w,w,b,w,w,b,w,w,w,b,w,w,w,b,b,b,w,w 〔画素データを圧縮する処理の概要〕 (1) 同じ色の画素データが連続する場合,“w”又は“b”の後に連続する画素の数をつなげて出力する。例えば,“b,b,b”は“b3”になる。 (2) 図 1 の画素データを圧縮した結果の出力は次のとおりになり,文字数はコンマを含めて 64 文字になる。 w2,b3,w3,b,w3,b,w2,b,w3,b,w2,b,w3,b,w2,b,w3,b,w2,b,w3,b,w3,b3,w2 ディジタル画像を右に90度回転させる処理を流れ図で表すとき, 図3のaに入れる適切な字句はどれか。 図3 ディジタル画像を右に90度回転させる処理

開始
  iでの繰返し(i=1,2,…,7)
    jでの繰返し(j=1,2,…,7)
      回転前のi行j列の画素を回転後の[ a ]の画素に設定する
    jでの繰返し
  iでの繰返し
終了
出典 平成23年度 秋期 ITパスポート試験 問91
解説

問 91

  • 不正解ア

    「(8-i)行j列」は行番号だけを 8-i に反転し、列番号 j はそのまま。行と列の入替えが起きていないので回転ではなく、画像を上下にひっくり返す上下反転 (垂直ミラー) になってしまう。実際、回転前の左上 1行1列 はこの式では 7行1列 (左下) へ移るが、右に90度回転した図3 では右上 1行7列 に来るはずで、図と合わない。

  • 不正解イ

    「(8-j)行i列」は行と列を入れ替えてはいるが、反転させる番号を取り違えている。この式では回転前の左上 1行1列 が 7行1列 (左下) へ移り、これは右ではなく左に90度回転 (反時計回り) したときの動きになる。図3 の矢印は「右に90度回転」なので逆向きであり、誤り。正しくは反転するのは列側の 8-i で、行は j のままである。

  • 不正解ウ

    「i行(8-j)列」は列番号だけを 8-j に反転し、行番号 i はそのまま。これも行と列の入替えが無いため回転にはならず、画像を左右にひっくり返す左右反転 (水平ミラー) にしかならない。回転前の左上 1行1列 はこの式では 1行7列 になるものの、続けて 7行1列 (左下) を調べると 7行7列 (右下) へ移ってしまい、右90度回転で期待される 1行1列 (左上) と食い違うので誤り。

  • エ

    正解 正解は エ 「j行(8-i)列」。図3 の画像は縦横とも 7 画素 (行 i=1〜7、列 j=1〜7) の正方形で、これを右に90度 (時計回り) 回すと、もとの「行」がそのまま「列」に、もとの「列」がそのまま「行」になる。したがって行と列が入れ替わり、回転前の i行j列 の画素は回転後の j行 に来る。列については、回転前の一番上の行 (i=1) が回転後は一番右の列 (第7列) に、一番下の行 (i=7) が回転後は一番左の列 (第1列) になるので、列番号は 7+1-i = 8-i と反転する。まとめると (i行, j列) → (j行, (8-i)列)。角で確かめると、回転前の左上 1行1列 は 8-i = 7 より回転後の 1行7列 (右上) へ、回転前の左下 7行1列 は 8-i = 1 より回転後の 1行1列 (左上) へ、回転前の右上 1行7列 は回転後の 7行7列 (右下) へ移り、いずれも図3 の「回転前」と「回転後」の絵柄の対応と合う。よって a に入るのは「j行(8-i)列」。

ここがポイント
  • N×N の画像を右に90度 (時計回り) 回転させる座標変換は (i行, j列) → (j行, (N+1-i)列)。本問は N=7 なので (j行, (8-i)列) となる。左に90度 (反時計回り) なら (i行, j列) → ((N+1-j)行, i列) で、どちらの向きかを角の画素で必ず検算する。
  • 行と列の入替え (i と j の交換) があるかどうかが「回転」と「反転 (ミラー)」の分かれ目。行番号だけを反転すれば上下反転、列番号だけを反転すれば左右反転であり、いずれも90度回転にはならない。
  • 流れ図の二重の繰返し (iでの繰返し 1〜7 の中に jでの繰返し 1〜7) は全画素を 1 つずつ走査する定型パターンで、内側の処理に入る座標式が処理の意味を決める。
用語

解答の記録