跳到正文

平成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)是逐个扫描全部像素的固定套路,而决定处理含义的是内层处理中的坐标表达式。
用語
解答問91エ
练这一题

作答记录