プログラミングの基礎(擬似言語のトレース)
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
- A7
- B11
- 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 です。