1-2 アルゴリズムとプログラミング

最終更新 2026-07-22内容の作り方 →

アルゴリズムとプログラミング

アルゴリズムは、入力から目的の結果を得るための有限で明確な処理手順です。ITパスポートでは複雑なコードを書くことより、順次・分岐・繰返し、変数、配列、探索、整列の動きを追跡し、どの処理が正しいかを判断する力が問われます。

この節の目標は、擬似言語やフローチャートを一行ずつ追い、変数と配列の値を表に記録し、条件・終了判定・探索方法を説明できるようになることです。

1. アルゴリズムの三つの基本構造

構造 内容
順次 記述された順に処理する 数量を入力し、金額を計算し、表示する
選択 条件の真偽で処理を分ける 在庫が0なら「売切れ」を表示する
繰返し 条件や回数に応じて同じ処理を行う 全商品の売上を合計する

複雑な処理も、基本的にはこの三つを組み合わせます。問題では「条件を判定するタイミング」と「繰返しを終了する条件」を確認します。

2. 変数と代入を式として読まない

代入x ← x + 1は、数学の等式ではなく、「現在のxに1を加えた値を新しいxとして保存する」という意味です。

最初にx ← 3、その後でx ← x + 2を実行すると、xは5になります。

追跡表を使う

次の処理を考えます。

sum ← 0
for i を 1 から 4 まで繰り返す
  sum ← sum + i
endfor
繰返し後 i sum
初期状態 - 0
1回目 1 1
2回目 2 3
3回目 3 6
4回目 4 10

頭の中だけで追わず、変化する変数を列にした表を作ると誤りを減らせます。

3. 分岐条件を境界値で確認する

次の条件を比べます。

score >= 80
score > 80

80点は前者では真、後者では偽です。境界値で結果が変わるため、79、80、81のように条件の前後を確認します。

複数条件では、論理演算も使います。

  • age >= 18 AND consent = true:18歳以上で、かつ同意済み
  • member = true OR amount >= 10000:会員または1万円以上購入
  • NOT deleted:削除済みではない

4. 繰返しの種類と無限ループ

繰返し 特徴 注意点
回数指定 決まった回数を繰り返す 開始値と終了値を含むか確認する
前判定 実行前に条件を確認する 最初から偽なら一度も実行しない
後判定 実行後に条件を確認する 少なくとも一度は実行する

繰返し条件に使う変数が更新されないと、終了できない無限ループになる可能性があります。

完全ケース:入力値の合計と平均

正の整数を繰り返し入力し、0が入力されたら終了して平均を表示する処理を考えます。

sum ← 0
count ← 0
value を入力する
while value != 0
  sum ← sum + value
  count ← count + 1
  value を入力する
endwhile
if count > 0
  average ← sum / count
  average を表示する
endif

確認すべき点は次のとおりです。

  • 終了用の0は合計と件数へ含めない。
  • 次の入力をループ内で行う。
  • 最初に0が入力された場合、0で割らない。

5. 配列と添字を追う

配列は同じ種類の複数データを一つの名前で管理します。問題文で添字が0から始まるか1から始まるかを確認します。

配列price = [120, 300, 80, 500]で0から数える場合、price[0]は120、price[2]は80です。

最大値を求める手順

max ← data[0]
for i を 1 から 要素数-1 まで繰り返す
  if data[i] > max
    max ← data[i]
  endif
endfor

最初の要素を仮の最大値とし、残りと順番に比較します。max ← 0とすると、全要素が負の数の場合に誤った結果になるため注意します。

6. 関数で処理を部品化する

用語 意味
関数 一つの目的を持つ処理の部品
引数 関数へ渡す値
戻り値 関数から返される結果
ローカル変数 関数内だけで使う変数
再帰 関数が自分自身を呼び出す処理

関数を使うと、重複を減らし、テストしやすくなります。ただし、入力、戻り値、副作用を明確にします。

7. 探索方法をデータの状態で選ぶ

探索 方法 条件・特徴
線形探索 先頭から順に比較する 未整列でも使えるが、件数が多いと比較回数が増える
二分探索 中央と比較し、対象範囲を半分にする あらかじめ整列されている必要がある

完全ケース:二分探索

昇順配列[3, 8, 12, 17, 25, 31, 40]から25を探します。

  1. 中央の17と比較する。
  2. 25は17より大きいので、右半分[25, 31, 40]へ絞る。
  3. 中央の31と比較する。
  4. 25は31より小さいので左へ絞り、25を発見する。

データが未整列なら、同じ手順では正しく絞れません。

8. 整列方法の違い

手法 基本的な考え方 特徴
バブルソート 隣同士を比較し、逆なら交換する 単純だが比較・交換が多くなりやすい
選択ソート 未確定部分から最小値を選び、先頭へ置く 交換回数を抑えやすい
挿入ソート 整列済み部分へ新しい要素を挿入する 小規模・ほぼ整列済みのデータで扱いやすい
クイックソート 基準値で小さい群と大きい群へ分割する 一般に高速だが分割方法で性能が変わる

試験では細かな計算量より、比較・交換・分割の考え方を読み取ります。

9. プログラミング言語とデータ表現

種類 主な用途
プログラミング言語 Python、Java、JavaScript、C 処理やアルゴリズムを記述する
マークアップ言語 HTML、XML 文書やデータの構造を表す
スタイルシート CSS 表示方法や見た目を指定する
データ交換形式 JSON、CSV システム間でデータを受け渡す
SQL SELECT、UPDATEなど 関係データベースを操作する

HTMLはページ構造、CSSは見た目、JavaScriptは動作を担当するという違いを押さえます。

10. 問題を解く判断手順

  1. 入力、出力、初期値を確認する。
  2. 変化する変数と配列を書き出す。
  3. 条件式を日本語へ置き換える。
  4. 境界値と終了条件を確認する。
  5. 一回ずつ追跡表へ記録する。
  6. 配列の添字と要素数を確認する。
  7. 空データ、0件、負の値など例外を試す。

11. よくある誤りと理由

  • 代入を数学の等式として読む:右辺を計算して左辺へ保存する処理です。
  • ループ回数を一つ多く・少なく数える:開始値と終了値を含むか確認します。
  • 終了条件の変数を更新しない:無限ループになります。
  • 0件で平均を計算する:0除算を避ける条件が必要です。
  • 配列の添字を常に1始まりと決めつける:問題文の定義を確認します。
  • 未整列データへ二分探索を使う:範囲を正しく絞れません。
  • 最大値の初期値を常に0にする:負数だけの配列で誤ります。

12. セルフチェック

  • 初期値、終了条件、1回ごとの更新を確認したか。
  • 条件式の境界値を試したか。
  • 変数の値を追跡表へ記録したか。
  • 配列の添字範囲を超えていないか。
  • 探索方法とデータの整列状態が合っているか。
  • 0件・空データ・異常値を考えたか。

理解を確認したら、第1章の練習問題第1章の知識カードで処理を追跡してください。数値・論理の基礎は基礎理論、実行環境はソフトウェアで確認できます。

公式範囲との対応

本節は、IPA「ITパスポート試験シラバス Ver.6.5」のアルゴリズムとプログラミング、プログラム言語、その他の言語に対応し、基本構造、擬似言語、変数、配列、関数、探索、整列、マークアップ言語などを扱います。

この章の理解を確認しよう
練習問題で知識を定着させましょう