令和6年度 春期 応用情報技術者試験 午前 問22

テクノロジハードウェア

この問題は2024(R6)春 応用情報技術者 午前に出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

次の方式で画素にメモリを割り当てる 640×480640 \times 480 のグラフィック LCD モジュールがある。始点 (5,4)(5, 4) から終点 (9,8)(9, 8) まで直線を描画するとき, 直線上の x=7x=7 の画素に割り当てられたメモリのアドレスの先頭は何番地か。ここで, 画素の座標は (x,y)(x, y) で表すものとする。

〔方式〕

  • メモリは 0 番地から昇順に使用する。
  • 1 画素は 16 ビットとする。
  • 座標 (0,0)(0, 0) から座標 (639,479)(639, 479) までメモリを連続して割り当てる。
  • 各画素は, x=0x=0 から xx 軸の方向にメモリを割り当てていく。
  • x=639x=639 の次は x=0x=0 とし, yy を 1 増やす。
画素座標(x,y)とメモリの割り当て関係を示す図
図の説明テキスト

画素座標(x,y)とメモリの割り当て関係を示す図。
左側には「メモリ」として「0番地」「1番地」「2番地」「3番地」…「z番地」のブロックが縦に並び、横幅が「8ビット」であることが示されている。
右側には円で表された画素が格子状に並んでおり、横軸x(0〜639)、縦軸y(0〜479)が設定されている。メモリの0番地から順に、y=0のx=0,1...の画素へ対応付けられていることを示す折れ線の矢印が描かれている。
格子内には、座標(5, 4)に「始点」、座標(9, 8)に「終点」という引き出し線があり、その2点を結ぶ直線上の画素が黒く塗りつぶされて示されている。

解答・解説を読む

正解: 選択肢

正解の根拠

  1. 対象となる画素の座標を求める
    始点 (5,4)(5, 4) から終点 (9,8)(9, 8) までの直線は、xx11 増加するごとに yy11 増加する直線(傾き 11)です。
    したがって、直線上の x=7x=7 の点の yy 座標は、55 から 22 増加して y=6y=6 となります。
    対象となる画素の座標は (7,6)(7, 6) です。

  2. 座標 (7,6)(7, 6) が何番目の画素かを求める
    画面は 640×480640 \times 480 の解像度であり、xx00639639 まで変化してから yy11 増加します。
    つまり、1行(yy が同じ画素のまとまり)あたり 640640 画素 存在します。
    座標 (x,y)(x, y) の画素は、先頭の (0,0)(0, 0) から数えて以下の式で求められます(00 番目から起算)。
    y×640+xy \times 640 + x
    これに (7,6)(7, 6) を代入すると、
    6×640+7=3840+7=3847 番目6 \times 640 + 7 = 3840 + 7 = 3847 \text{ 番目}
    となります。

  3. メモリアドレスの先頭番地を計算する
    コンピュータのメモリは通常 1番地あたり8ビット(1バイト) で管理されます。
    問題文に「1画素は16ビットとする」とあるため、1画素につき 2バイト(2番地) のメモリを消費します。
    0番目の画素が 00 番地から始まるため、38473847 番目の画素の先頭アドレスは以下のようになります。
    3847×2=7694 番地3847 \times 2 = 7694 \text{ 番地}

よって、正解は です。

各選択肢の解説

  • : 38473847
    座標 (7,6)(7, 6) の画素が (0,0)(0, 0) から数えて何番目か(画素のインデックス)を求める計算結果です。1画素あたり2番地を使用することを考慮していないため誤りです。
  • : 76807680
    y=6y=6 の行の先頭である座標 (0,6)(0, 6) の先頭アドレス(6×640×2=76806 \times 640 \times 2 = 7680)です。xx 座標のオフセットを加算していないため誤りです。
  • : 76947694
    正解です。
  • : 89788978
    誤った座標で計算した結果です。例えば、座標を (9,7)(9, 7) と誤認した場合などに近い値(7×640+9=44897 \times 640 + 9 = 44894489×2=89784489 \times 2 = 8978)となります。