前回で、表を全部通る形が分かりました。今回は行ごと・列ごとにまとめる回です。ループの順と、0 を入れる場所だけで決まります。
期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円第2部 定番処理の型 全26回A3-22次元配列の集計一覧を開く
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コントロールブレーク処理
この回の内容を動画で見る
次のページで講義の目次と無料の講義を見られます。受講ボタンとクーポンコードもそこにあります。
この回の内容を動画で見る
解くための再現性が身につく講義29本小テスト86問模試3回分IT資格の森で見る
講義「2次元配列の走査と集計」(全5分59秒)は、IT資格の森(月額1,280円)の会員向けです。科目Bは、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行ぶんずつ出てきます。
内側の for を抜けたときが、その行の合計
だから 合計を使うのは、内側の 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 に戻す。だから行ごとの合計(60 と 150)になる
全部の合計を出す ── 外側の外に置く
goukei ← 0 for (r を 1 から hyouの行数 まで …) for (c を 1 から hyouの列数 まで …)
一度も戻さないので、最後まで足し続ける。2重の for を抜けたあとの goukei は、6マス全部の 210
外側の中なら行ごとの合計、外側の外なら全体の合計
見分け方は1つだけ
外側の中外側が1周するたびに 0 に戻る → 行ごと(列ごと)の集計
外側の外一度しか 0 にならない → 表全体の集計
試験では、goukei ← 0 の行がどこにあるかを見るだけで、何を求めているかが分かります。プログラム全体を読む前に、この1行の位置を確かめてください。
この行の位置が穴埋めになったら、問題文の日本語で決めます。「各行の合計を求める」なら外側の中、「表全体の合計」なら外側の外です。
つまずきポイントまとめ
| まちがえ方 | 正しい読み方 |
|---|---|
ループを入れ替えたら [r, c] も入れ替える |
hyou[r, c] はそのまま。行が先、列があと |
| 合計を内側の中で使う | まだ途中の値。内側の endfor の下で使う |
| 0 を外側の外に置いて行ごとを求める | 行が変わっても0 に戻らない。中に置く |
| 0 を外側の中に置いて全体を求める | 毎行消えてしまう。外に置く |
| 答えの箱を1つで済ませる | 行ごとに残すなら、行の数だけ要る |
次に読む
| A4-1 | 文字列を1文字ずつ見る ─ 文字数と i文字目の文字 |
| A3-1 | 2次元配列の走査 ─ 外側のループが読む向きを決める |
| G9-2 | 2重ループ ─ 内側と外側の回り方 |
| 目次 | 基本情報技術者試験 科目B 攻略ガイド |
この記事で引用した資料
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。
本文の例題は当サイトのオリジナルです。


