フローチャートの配列練習問題10問 | 動かしてわかる添字・繰り返し・条件分岐

最終更新日

配列の練習問題10問。添字2が値12を指す図

配列を使ったフローチャートで、「iは位置なのか、値なのか」「最後の要素まで読むには、どこで止めるのか」と迷ったことはありませんか。計算そのものよりも、今どの位置を読み、どの値を使っているかを見失うと、答えが合わなくなります。

この記事では、添字の読み方から、合計・個数・条件分岐・範囲外参照まで、10問の練習問題で確認します。まず答えを予想し、フローチャートを1ステップずつ動かして、配列の位置と集計結果の変化を追ってみましょう。特定のプログラミング言語の知識は必要ありません。

最初に確認|配列の「添字」と「値」は別のもの

配列は、複数のデータを順番に並べて扱うためのものです。たとえば、5日分の問い合わせ件数が「8、3、12、5、9」なら、それぞれの位置に番号を付けて参照できます。この位置を指定する番号を「添字(そえじ)」と呼びます。

先頭からの順番 添字 その位置の値
1番目 0 8
2番目 1 3
3番目 2 12
4番目 3 5
5番目 4 9

この教材では添字を0から数えます。iは「今調べる位置」を覚える変数で、値[i]はその位置に入っているデータです。i = 2なら位置は2、読み出す値は12。添字2だから値も2、という意味ではありません。配列の添字が何から始まるかは言語や問題の約束によるため、ほかの問題を解くときも最初に確認してください。

図に出てくる記号の読み方

  • i ← 0:iに0を入れる。「←」は代入です。
  • i ← i + 1:今のiに1を足し、結果をiに入れる。次の位置へ進みます。
  • 合計 ← 合計 + 値:これまでの合計に、今読んだ値を足します。
  • i < 要素数:iが配列の要素数より小さい間は処理を続けます。
  • 値 ≥ 5:値が5以上。5も含みます。値 > 5なら5は含みません。

配列が5要素なら有効な添字は0〜4です。最後の添字4を読んだ後、iを5に増やすと、5 < 5は成り立たなくなって終了します。要素数と最後の添字は1つ違うことが、後半の問題のポイントです。

配列の練習問題10問|予想してから動かそう

問題を選び、予想する答えを入力してください。複数の値は「4,7,2」のようにカンマで区切ります。「1ステップ」で処理を進めると、青枠の位置・添字i・今読んだ値・結果が変わります。「最後まで」では途中のアニメーションを省略し、最終状態と全履歴を表示します。問題を切り替えると回答欄と実行状態はリセットされます。

「今読んだ値」が「—」のときは、そのステップではまだ読み取っていません。問題9だけは誤った終了条件を扱うため、配列の範囲外を読もうとする位置で教材が停止します。任意のコードを入力・実行する画面ではありません。

添字 i—今読んだ値—集計値—

値の変化を追う

実行した処理i値結果
この問題の解答・解説

問題1・2|添字から値を取り出す

問題1:添字2にある値は?

配列は「8、3、12、5、9」。iを2にし、値[i]を表示します。表示される値を答えてください。

問題1の解答・解説

12です。添字0が8、添字1が3、添字2が12です。「2番目の値」なら3ですが、「添字2の値」なら12になります。問題が聞いているのが順番か添字かを区別しましょう。

問題2:配列を順番に表示すると?

配列は「4、7、2」。iを0から始め、iが要素数未満の間、値[i]を表示してiを1増やします。表示する順番を答えてください。

問題2の解答・解説

4、7、2の順です。iが0、1、2のときにそれぞれの値を表示します。最後にiが3になり、3 < 3が成り立たないので終了します。条件を確認する回数は4回、配列の値を読む回数は3回です。

問題3〜5|合計と個数を混同しない

問題3:すべての値を合計する

配列は「3、5、2、4」。合計を0にして、先頭からすべての値を足します。終了時の合計はいくつでしょうか。

問題3の解答・解説

14です。合計は0→3→8→10→14と変わります。合計の初期化は繰り返しに入る前の1回だけです。ループ内で毎回0にすると、それまでに足した分が消え、最後の値4だけが残る別の手順になってしまいます。

問題4:5以上の値の個数を数える

配列は「5、2、8、5、1」。5以上の値に出会うたび、個数を1増やします。終了時の個数を答えてください。

問題4の解答・解説

3個です。添字0の5、添字2の8、添字3の5を数えます。求めているのは値の種類ではなく、条件に合う要素の個数なので、5も2回数えます。足すのは値そのものではなく1です。

問題5:5より大きい値だけを合計する

配列は問題4と同じ「5、2、8、5、1」。今度は5より大きい値だけを足します。合計はいくつでしょうか。

問題5の解答・解説

8です。「より大きい」は同じ値を含まないため、2つの5は足しません。もし条件が「5以上」なら5+8+5で18になります。比較記号だけでなく、個数を数えるのか合計するのかも合わせて読みましょう。

問題6・7|条件に合わないとき、どこへ進む?

問題6:偶数だけを表示する

配列は「3、0、6、7、2」。2で割った余りが0の値だけを表示します。表示順を答えてください。

問題6の解答・解説

0、6、2の順です。0も偶数です。3と7では表示を飛ばしますが、iを増やす処理は行います。表示しないことと、繰り返しを終えることは別です。「いいえ」の矢印が終了ではなく次の位置へ向かう点を確認してください。

問題7:最初に7が見つかる添字を答える

配列は「4、7、2、7」。先頭から探し、最初の7が見つかったら添字を表示して終了します。表示される添字はいくつでしょうか。

問題7の解答・解説

1です。先頭の4は一致しないので次へ進み、添字1の7で終了します。添字3にも7がありますが、そこは読みません。「最初の一致だけを探す」処理と「すべての一致を数える」処理では、見つかった後の行き先が異なります。

問題8・9|開始位置と終了条件のずれを見つける

問題8:iを1から始めた合計は?

配列は「6、2、4」。合計を0、iを1にして、iが要素数未満の間だけ加算します。正しい全要素の合計ではなく、この手順が実際に出す結果を答えてください。

問題8の解答・解説

6です。読むのは添字1の2と添字2の4だけです。全要素の合計12を求めたいなら、iの初期値を0にします。必ずしも1始まりが常に誤りなのではなく、「先頭も対象にする」という目的に対して、この開始位置が合っていないのです。

問題9:i ≤ 要素数だと、どこで範囲外になる?

配列は「2、4、6」。iを0から始め、繰り返す条件を「i ≤ 要素数」にします。存在しない位置を初めて読もうとする添字を答えてください。

問題9の解答・解説

3です。3要素の有効な添字は0、1、2です。しかしi ≤ 3では、iが3でも条件を満たして読み取りへ進みます。その直前までの合計は12ですが、処理全体が正常終了したわけではありません。教材は範囲外参照の直前で停止します。実際の言語によっては例外や未定義の値など扱いが異なるため、本教材の停止表示をすべての言語の実行結果と考えないでください。

問題10|2つの条件を満たす値の個数と合計

配列は「4、8、5、6、2」。「偶数である」と「5以上である」の両方を満たす値について、個数と合計を求めます。「個数,合計」の順で答えてください。

問題10の解答・解説

2,14です。8と6が両方の条件を満たします。4と2は偶数でも5未満、5は5以上でも奇数です。8を処理すると個数1・合計8、6を処理すると個数2・合計14になります。個数と合計は目的が異なるので、別々の変数に保存します。

「かつ」を「または」に変えた場合、この配列ではすべての値が少なくとも一方を満たすため、個数5・合計25になります。これは別の条件です。問題文の言葉と図の条件を対応させましょう。

間違えたときに確認する4つのポイント

  1. 添字と値を分ける。iの列には位置、値の列にはその位置から読んだデータを書きます。
  2. 初期値の置き場所を確認する。合計・個数を0にするのは、原則として集計の繰り返しに入る前です。
  3. 条件が偽のときの矢印を追う。値を処理しないだけなのか、探索そのものを終了するのかを見ます。
  4. 最後の1回を手で確かめる。要素数が3なら、iが2のときと3のときを並べて確認します。

たとえば「条件に合う注文の合計金額」と「条件に合う注文の件数」は、同じ配列を見ても異なる結果です。フローチャートを読むときは、最初に求めるものを言葉にし、それを残す変数がどこで更新されるかを見つけてください。

まとめ|位置・値・結果の3つを追う

配列の問題では、計算を急ぐより、位置を表す添字、今読んだ値、これまでの結果を分けると流れが見えます。まずは短い配列で正解までの過程を確かめ、開始位置や比較条件が変わったときに、どの要素が対象から外れるのかを説明できるようにしましょう。

あわせて読みたい記事

シェアする