配列の合計と最大値を求める可視化 — フローチャートで
プログラムの超基本、「配列を1つずつ見て集計する」アルゴリズムです。ここでは合計と最大値を同時に求めます。i を 0 から n まで進めながら、各要素を合計に足し、最大値かどうかを判定する——このループと分岐を、右のフローチャートを1ステップずつ通過しながら確かめてください。科目Bのトレース問題の土台になる形です。
🔀 フローチャート(いま実行中の処理が光ります)
いま何をしているか
「配列を1つずつ見て集計する」基本形
合計・最大・最小・平均・個数……集計の多くは、ループで配列を先頭から末尾まで走査し、変数に足したり比べたりするだけで求まります。ここで押さえるべきは2つ。①繰り返しの判定(i < n の間くり返す)と、②その中での処理(合計に足す・最大かどうか比べる)です。上のフローチャートの「くり返し」の矢印が、ループの本体を何度も通る様子を表しています。
初期値の置き方がポイント
合計は 0 から始めます(何も足していない状態)。最大値は 先頭要素 a[0] で初期化するのが定石です(「まだ何も見ていない」を表すのに、とても小さい値を入れる方法もあります)。初期値を間違えると答えがずれるので、トレース問題では最初の値をよく確認しましょう。
つまずきやすいポイント
最大値を「0」で初期化すると、全部マイナスの配列で壊れる。 合計は「まだ何も足していない」ので 0 から始めて問題ありません。しかし最大値を 0 から始めると、要素がすべて負の数(例:-5, -2, -8)のとき、正しくは -2 のはずが答えが 0 になってしまいます。だから最大値は「0」ではなく先頭要素 a[0] で初期化するのが安全です。この可視化もその形にしています。
空の配列(要素0個)に注意。 先頭要素で初期化する方式は、配列が空だと a[0] が存在せず破綻します。試験のトレース問題では「要素が1つ以上ある」前提がほとんどですが、実際のプログラムでは、走査を始める前に「要素が1つ以上あるか」を確認しておかないとエラーの原因になります。
トレース表で追ってみる
配列 a = [3, 8, 2, 9, 5] で、合計を0、最大を a[0]=3 から始めたときの変化です。試験のトレース問題も、この表を手で書けば確実に解けます。
| i | a[i] | 合計 | a[i] > 最大? | 最大 |
|---|---|---|---|---|
| 0 | 3 | 3 | No(3 > 3 ではない) | 3 |
| 1 | 8 | 11 | Yes | 8 |
| 2 | 2 | 13 | No | 8 |
| 3 | 9 | 22 | Yes | 9 |
| 4 | 5 | 27 | No | 9 |
i=5 で「i < n」が成り立たなくなり、合計27・最大9で終わります。平均が欲しければ、最後に 合計 ÷ 要素数(27 ÷ 5 = 5.4)を計算します。最小値は、比較の向きを「<」に変えるだけで同じ形で求められます。
基本情報技術者試験ではこう出る
科目Bでは、配列を走査して合計・最大・個数などを求める擬似言語を読んで、変数の値を1行ずつ追う「トレース」が頻出です。ループの判定条件とループ内の処理・分岐を分けて追う習慣がつくと、確実に解けるようになります。関連:擬似言語ステッパー / 探索 / 可視化一覧。
よくある質問
Q. 最大値が複数あるときはどうなる?
A. 比較が「>」なら、同じ値が後から出てきても更新しないので、最初に見つかった最大値が残ります。「≧」にすると、最後に見つかったほうに更新されます。値だけなら結果は同じですが、「最大値の位置(添字)」を答える問題では違いが出るので注意してください。
📖 記事で深掘り:擬似言語の読み方 / 科目Bの解き方ガイド