2次元配列の走査|外側のループが読む向きを決める【基本情報技術者試験 科目B】

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-08-30

縦横に並んだ表を扱う回です。Excel の表とまったく同じで、行と列でマスが決まります。新しい考え方は出てきません。くり返しが2重になるだけです。

第2部 定番処理の型 全26回

A1-1トレース表の書き方A1-2繰返しのトレースA1-3配列のトレースA2-1配列を全部見るA2-2最大・最小を見つけるA2-3探す(線形探索)A2-4入れる・消すA3-12次元配列の走査A3-22次元配列の集計A4-1文字列を1文字ずつA4-2文字列照合A5-1交換して並べるA5-2挿入ソートA6分割して並べるA7-12分探索A7-2ハッシュ表探索A8-1再帰とはA8-2再帰のトレースA9スタックとキューA10-1リストを読むA10-2リストの挿入と削除A11木構造A12木の巡回A13グラフA14AI・データを題材にしたプログラムA15ファイル処理

まず、通しで見る

2分ほどの動画です(音声つき)。2重のくり返しで、どちらが先に動くのかが分かります。ここを取り違えると、出てくる順がまるで変わります。同じ表なのに答えが違う、という形で試験に出ます。

動画で追いかけるのは、このプログラムです。

整数型の二次元配列: hyou ← {{10, 20, 30}, {40, 50, 60}}
整数型: r, c

for (r を 1 から hyouの行数 まで 1 ずつ増やす)
  for (c を 1 から hyouの列数 まで 1 ずつ増やす)
    hyou[r, c]の値 を出力する
  endfor
endfor

出力は 10 20 30 40 50 60 になります。

2次元配列の走査(2分18秒・音声つき)

再生できないときは、この下の図と説明で同じ内容を追えます。

ここから、同じ内容を1つずつ確かめていきます。

行と列で、1つのマスが決まる

記述形式に、はっきり書かれています ── 「二次元配列の要素番号は,行番号,列番号の順に “,” で区切って」。

行と列で、1つのマスが決まる

整数型の二次元配列: hyou ← {{10, 20, 30}, {40, 50, 60}}

hyou[1, 2] は「1行目の2列目」

1 2 3
1 10 20 30
2 40 50 60

行が先、列があと。左と上の数字が、そのまま要素番号

記述形式にも「行番号,列番号の順」と書かれている

順番を取り違えない

hyou[1, 2] は 1行目の2列目。行が先、列があとです。

迷ったら表を書いてしまうのがいちばん確実です。A1-3 のとおり、2次元配列はそのまま表の形で書けます。

くり返しは2重になる

全部のマスを見るには、行のループの中に、列のループを入れます。

整数型の二次元配列: hyou ← {{10, 20, 30}, {40, 50, 60}}
整数型: r, c

for (r を 1 から hyouの行数 まで 1 ずつ増やす)
  for (c を 1 から hyouの列数 まで 1 ずつ増やす)
    hyou[r, c]の値 を出力する
  endfor
endfor

2次元配列の走査を1行ずつ動かす

当サイトオリジナルの例題


ループ開始前

配列

▲ いま読んでいる▲ いま書いた

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

出力は 10, 20, 30, 40, 50, 60 の順です。1行目を左から右へ、そのあと2行目を左から右へ並んでいます。

内側のループは、外側が1周するあいだに、まるごと1回まわります。だから 2行3列 なら、内側は合計6回実行されます。

外側のループが、読む向きを決める

ここが、この回でいちばん問われるところです。

外側のループが、読む向きを決める

同じ表でも、外側と内側を入れ替えると通る順が変わる

外が行なら、横に読む

1 2 3
1 10① 20② 30③
2 40④ 50⑤ 60⑥

出力は 10 20 30 40 50 60。1行目を左から右へ読み終えてから、2行目へ

外が列なら、縦に読む

1 2 3
1 10① 20③ 30⑤
2 40② 50④ 60⑥

出力は 10 40 20 50 30 60。1列目を上から下へ読んでから、2列目へ

どちらでも6マス全部を1回ずつ通る。変わるのは順番だけ

外側が行なら、横に読みます。1行目を左から右へ読み終えてから、2行目に移ります。

外側と内側を入れ替えると、縦に読みます。1列目を上から下へ読んでから、2列目に移ります。

入れ替えても、マスは全部通る

どちらでも6マス全部を1回ずつ通ります。違うのは通る順番だけです。

だから「合計を出す」なら答えは同じ。「順に出力する」なら答えが変わります。問われているのがどちらかを見てください。

行数と列数の書き方

行数と列数の書き方

実際の出題では 整数型: row ← dataの行数 のように、先に変数へ入れる形もよく出る

hyouの行数 は縦、hyouの列数 は横

1 2 3
1 10 20 30
2 40 50 60

この表なら 行数 は 2、列数 は 3

取り違えると、外側と内側の上限が入れ替わる

実際の出題では 整数型: row ← dataの行数 のように、先に変数へ入れてから使う形もよく出ます。

用意するときの書き方

空の2次元配列は {row行col列の 未定義の値} のように書かれます。「何行何列を、何で埋めるか」という読み方です。

つまずきポイントまとめ

まちがえ方 正しい読み方
[2, 1] を2列1行と読む 行が先、列があと
要素番号を0から数える 行も列も1から
内側のループが1回しか回らないと思う 外側が1周するあいだにまるごと1回
入れ替えても同じだと思う 通る順番が変わる。出力の順は変わる
行数と列数を取り違える hyouの行数 は縦、hyouの列数 は横

次に読む

A3-2 2次元配列の集計 ─ 0を入れる場所で決まる
A2-1 配列を全部見る ─ 番号を1つずつ変えて読む
G9-1 2次元配列 ─ 行と列の書き方
G9-2 2重ループ ─ 内側と外側の回り方
目次 基本情報技術者試験 科目B 攻略ガイド

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

本文の例題は当サイトのオリジナルです。

Copied title and URL