プログラミングの実践

変数・配列・関数を使い、簡単なアルゴリズムを書く。

この単元の目標
  • 変数と配列の値を追跡できる
  • 初期値と繰り返し範囲を説明できる
  • 境界条件を含むテストを考えられる

このレッスンの擬似コードでは配列の添字は1から始め、for i = 1 to n は両端を含みます。← は右辺を計算して左辺の変数に代入する記号で、等式ではありません。実際の言語では添字が0から始まる場合もあるため、規則を先に確認しましょう。

よく出るアルゴリズム

  • 合計・平均: ループで累積する
  • 最大値探索: 先頭を仮の最大値にし、より大きい値が出たら更新
  • カウント: 条件を満たしたらカウンタを +1
  • ソート: 隣接交換(バブルソート)など。バブルソートの最悪時間計算量は O(n²) だが、すべての整列法がこの計算量ではない
疑似コード問題では「変数の値の変化を表で追跡」するのが最短ルート。特に while 文では終了条件がいつ成り立つかを先に確認しましょう。
例題

配列 data = [5, 3, 8, 1] の最大値を求める擬似コードを示せ。

解答・解説

`max ← data[1]` `for i = 2 to 4` ` if max < data[i] then max ← data[i]` → **max = 8**

累積と条件の追跡

例題:条件を満たす値の平均

data = [5, 3, 8, 1] のうち5以上の値の平均を求めたい。s ← 0、count ← 0から始め、各値が5以上ならsにその値を加え、countを1増やす。最終的なs、count、平均を求めよ。

解答・解説

5で (s, count) = (5, 1)、3では変化なし、8で (13, 2)、1では変化なし。合計13、個数2なので平均は13 ÷ 2 = **6.5**。配列全体の個数4では割りません。

読んだ値scount
初期状態00
551
351
8132
1132
該当する値が0個なら平均を計算せず「該当なし」とします。最大値を先頭要素で初期化する方法は、空でない配列が前提です。最大値を0で初期化すると、全要素が負の場合に誤ります。

関数は処理を名前のついたまとまりにする仕組みです。引数で値を受け取り、戻り値で結果を返します。例えば「空でない数値配列を受け取り最大値を返す関数」なら、入力の条件と結果を明確にして再利用できます。通常の例だけでなく、要素1個・全要素が負・同じ値の繰り返しもテストします。

練習:追跡とテスト
  1. data = [−5, −3, −8] の最大値を0で初期化すると何が起きるか。修正方法も述べよ。

    解答・解説

    どの要素も0より大きくないため、配列にない0が答えになってしまいます。先頭の−5で初期化すれば、次の−3で更新され、正しい最大値**−3**が得られます。

  2. s ← 0、i ← 1 とし、i ≤ 3 の間「s ← s + i、i ← i + 1」の順で繰り返す。終了時のsとiを求めよ。

    解答・解説

    各反復後の (s, i) は (1, 2)、(3, 3)、(6, 4)。i = 4で条件が偽になるので、**s = 6、i = 4**です。

  3. 5以上の値の平均を求める例題に data = [1, 2, 3] を与えるとどうすべきか。

    解答・解説

    count = 0なので0で割らず、「該当なし」を返すなどの分岐を入れます。条件を満たす値がない入力は大切な境界テストです。

📝 メモこの端末のみに保存
メモ欄はページ読み込み後に使えるようになります。