2次元配列の集計|0を入れる場所で決まる【基本情報技術者試験 科目B】

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

前回で、表を全部通る形が分かりました。今回は行ごと・列ごとにまとめる回です。ループの順と、0 を入れる場所だけで決まります。

第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ファイル処理

まず、通しで見る

5分ほどの動画です(音声つき)。同じ表でも、たてに足すか、よこに足すかで答えが変わるところを、1周ずつ動かして見せます。

たてに合計する場合も、配列を出して1マスずつ動かします。最後は、この回でいちばん問われる goukei ← 0 の位置です。外に出した形を実際に動かし、0 に戻らないまま 210 まで積み上がるところまで見せます。

0 を入れる場所で決まる(5分29秒・音声つき)

再生できないときは、この下の図とシミュレータで同じ内容を追えます。

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

行ごとの合計 ── 外が行、内が列

各行の合計を出します。1行目を左から右へ足し終えたら、次の行へ移ります。

行ごとの合計 ── 外が行、内が列

外側が行、内側が列。出力は 60 と 150 の2つ

1行目を、左から右へ足す

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

10 + 20 + 30 で 60。ここで1つ出力する

つぎに2行目を、左から右へ足す

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

40 + 50 + 60 で 150

「行ごと」なので、行が変わるたびに goukei を 0 に戻す

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

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

行ごとの集計を1行ずつ動かす

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


ループ開始前

配列

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

いま計算していること

まだ計算していません

変数の状態

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

出力は 60、150 です。1行目の 10 + 20 + 30 と、2行目の 40 + 50 + 60 が、1行ぶんずつ出てきます。

内側を1周まわし終えたときが、その行の合計

だから 合計を使うのは、内側の endfor の下です。内側の中で使うと、途中の値になります。

答えをあとで全部使うなら、行の数だけの配列に入れます。gyouKei[r] ← goukei のように、行番号をそのまま添字にできます。

列ごとの合計 ── 外と内を入れ替えるだけ

縦に足したいときは、外側を列にします。

列ごとの合計 ── 外と内を入れ替えるだけ

外側が列、内側が行。出力は 50・70・90 の3つ

1列目を、上から下へ足す

1 2 3
1 10① 20 30
2 40② 50 60

10 + 40 で 50

2列目、3列目も同じように

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

20 + 50 で 70、30 + 60 で 90

プログラムで変えるのは、外側と内側の for を入れ替えるところだけ

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

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

出力は 50、70、90 です。表は同じでも、縦に足したので3つ出てきます。1列目の 10 + 40、2列目の 20 + 50、3列目の 30 + 60 です。

添字の順は変わらない

ループを入れ替えても、hyou[r, c] の書き方はそのままです。行が先、列があとは変わりません。

入れ替わるのは for の並び順だけです。ここを一緒に入れ替えてしまうのが、よくある誤りです。

0 を入れる場所で、何ごとの集計かが決まる

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

0 を入れる場所で、何ごとの集計かが決まる

置く場所が1行ちがうだけで、答えの意味が変わる

行ごとに集計する ── 外側の中に置く

for (r を 1 から hyouの行数 まで …)
  goukei ← 0
  for (c を 1 から hyouの列数 まで …)

行が変わるたびに 0 に戻す。だから行ごとの合計になる

全部の合計を出す ── 外側の外に置く

goukei ← 0
for (r を 1 から hyouの行数 まで …)
  for (c を 1 から hyouの列数 まで …)

一度も戻さないので、最後まで足し続ける

試験では、この1行の位置が空欄になる

見分け方は1つだけ

外側の中外側が1周するたびに 0 に戻る → 行ごと(列ごと)の集計

外側の外一度しか 0 にならない → 表全体の集計

試験では、goukei ← 0 の行がどこにあるかを見るだけで、何を求めているかが分かります。プログラム全体を読む前に、この1行の位置を確かめてください。

空欄になりやすいのもここ

goukei ← □ の初期値だけでなく、この行自体が空欄になることがあります。

そのときは問題文の日本語を読んでください。「各行の合計を求める」なら外側の中、「表全体の合計」なら外側の外です。

つまずきポイントまとめ

まちがえ方 正しい読み方
ループを入れ替えたら添字も入れ替える hyou[r, c] はそのまま。行が先、列があと
合計を内側の中で使う まだ途中の値。内側の endfor の下で使う
0 を外側の外に置いて行ごとを求める 行が変わっても0 に戻らない。中に置く
0 を外側の中に置いて全体を求める 毎行消えてしまう。外に置く
答えの箱を1つで済ませる 行ごとに残すなら、行の数だけ要る

次に読む

A4-1 文字列を1文字ずつ見る ─ 文字数と i文字目の文字
A3-1 2次元配列の走査 ─ 外側のループが読む向きを決める
G9-2 2重ループ ─ 内側と外側の回り方
目次 基本情報技術者試験 科目B 攻略ガイド

この記事で引用した資料

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

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

Copied title and URL