プログラミングの基礎(擬似言語のトレース)

4行5列の二次元配列 m の要素を、次のプログラムで要素数20の配列 b に移す。m[i, j] は i 行目 j 列目の要素を表し、要素番号は1から始まる。m[3, 2] が代入される b の要素番号はどれか。

整数型: k ← 0
for (i を 1 から 4 まで 1 ずつ増やす)
  for (j を 1 から 5 まで 1 ずつ増やす)
    k ← k + 1
    b[k] ← m[i, j]
  endfor
endfor
  1. A7
  2. B11
  3. C12
答えと解説を見る

正解:C. 12

外側の i が行、内側の j が列を表すので、1行目の5個、2行目の5個、3行目の要素の順に b へ詰めていきます(行優先の順)。m[3, 2] の前には1行目と2行目の10個と m[3, 1] があるので、k = 10 + 2 = 12 です。一般に (i − 1) × 5 + j で求められます。要素番号が0から始まるときの式 (i − 1) × 5 + (j − 1) をそのまま使うと、1つずれた11になります。

  • A. 列ごとに詰める(列優先の)場合の (j − 1) × 4 + i の値です。
  • B. 要素番号が0から始まるときの式で計算した値で、1つずれています。
  • C. 正しい。(3 − 1) × 5 + 2 = 12 です。
この分野を解く 分野ページへ

関連する計算ツール

プログラミングの基礎(擬似言語のトレース)の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

プログラミングの基礎(擬似言語のトレース)のほかの問題

  1. 配列の要素番号は1から始まり、+ は文字列を連結する。次のプログラムを実行した後の r の値はどれか。
  2. 次の関数 isPal は、文字列型の配列 s の文字の並びが前から読んでも後ろから読んでも同じ(回文)なら true を返す。配列の要素番号は1から始まる。プログラム中の【a】に入れる字句はどれか。
  3. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 f を f(9087) として呼び出したときの戻り値はどれか。
  4. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 toBin を toBin(12) として呼び出したときの戻り値はどれか。
  5. 2つの整数 a、b を引き算で等しくしていく次のプログラムを実行した後の k の値はどれか。