アルゴリズムの表現方法
アルゴリズムを思いついたら、それを他の人やコンピュータに正確に伝える必要があります。頭の中にあるだけでは、チームで共有することも、プログラムとして実装することもできません。ここでは、アルゴリズムを「目に見える形」にするための代表的な表現方法を学びます。
流れ図(フローチャート)
Section titled “流れ図(フローチャート)”流れ図(フローチャート)は、処理の流れを図形と矢印で表現する方法です。視覚的にアルゴリズムの全体像を把握できるため、ITパスポート試験でもよく登場します。
流れ図で使う基本的な図形は次の4種類です。
| 図形 | 名前 | 意味 | 使用例 |
|---|---|---|---|
| 楕円(角丸の長方形) | 端子 | 処理の「開始」や「終了」 | 「開始」「終了」 |
| 長方形 | 処理 | 計算や代入などの操作 | 「合計 ← 合計 + 点数」 |
| ひし形(菱形) | 判断 | 条件によって分岐する | 「点数 ≧ 60?」 |
| 平行四辺形 | 入出力 | データの読み込みや表示 | 「点数を入力」「結果を表示」 |
これらの図形を矢印(→)でつなぐことで、処理が進む順番を表します。
試験で出るポイント
アルゴリズムの三つの基本構造
Section titled “アルゴリズムの三つの基本構造”流れ図でも擬似言語でも、アルゴリズムは次の3つの基本構造の組み合わせで表現されます。
順次とは、処理を上から下へ1つずつ順番に実行する構造です。最もシンプルな流れで、特別な制御は行いません。
処理A → 処理B → 処理C選択(分岐)
Section titled “選択(分岐)”選択とは、条件によって実行する処理を切り替える構造です。日常生活でいえば「もし雨が降っていたら傘を持つ、そうでなければ持たない」という判断にあたります。
プログラムでは if(もし〜ならば)や if-else(もし〜ならば〜、そうでなければ〜)として表現します。
もし 点数 ≧ 60 ならば 「合格」と表示そうでなければ 「不合格」と表示繰返し(ループ)
Section titled “繰返し(ループ)”繰返しとは、一定の条件が満たされている間、同じ処理を何度も実行する構造です。
代表的な繰返しには2種類あります。
| 種類 | 特徴 | 使い分け |
|---|---|---|
| for(回数指定の繰返し) | 繰り返す回数があらかじめ決まっている | 「1から10まで順に処理する」 |
| while(条件指定の繰返し) | 条件が成り立つ間ずっと繰り返す | 「入力が0になるまで処理する」 |
この3つの基本構造(順次・選択・繰返し)だけで、あらゆるアルゴリズムを表現できることが理論的に証明されています。
試験で出るポイント
擬似言語は、プログラミング言語に似た書き方でアルゴリズムを記述する方法です。流れ図が「図」で表現するのに対し、擬似言語は「文字」で表現します。ITパスポート試験では、擬似言語で書かれたプログラムを読み取る問題が毎年出題されます。
式とは、値や変数を演算子で組み合わせたもので、計算の内容を表します。
合計 + 点数 ← 算術演算の式点数 ≧ 60 ← 条件式演算子には主に次の種類があります。
| 種類 | 演算子の例 | 意味 |
|---|---|---|
| 算術演算子 | +、-、×、÷、mod(余り) | 数値の計算 |
| 比較演算子 | =、≠、>、<、≧、≦ | 大小や等しさの比較 |
| 論理演算子 | and、or、not | 条件の組み合わせ |
値同士を比較して「正しい(真)」か「正しくない(偽)」かを判定する式を条件式と呼びます。選択や繰返しの判断条件として使われます。
代入とは、変数に値を格納する操作です。擬似言語では矢印(←)を使って表します。
合計 ← 0 … 変数「合計」に 0 を入れる合計 ← 合計 + 点数 … 合計に点数を足した結果を、改めて合計に入れる代入では、右辺を先に計算し、その結果を左辺の変数に格納します。数学の「=」とは意味が異なる点に注意してください。
試験で出るポイント
注釈(コメント)
Section titled “注釈(コメント)”注釈(コメント)は、プログラムの動作には影響しない補足説明のことです。「この処理は何をしているのか」「なぜこの計算が必要なのか」といったメモを残すために使います。擬似言語では /* と */ で囲んで記述します。
/* ここで合計を初期化する */合計 ← 0注釈はアルゴリズムの意図を伝えるために書かれるもので、コンピュータはこの部分を無視します。チーム開発や後から見返すときに、プログラムの意図を理解しやすくする重要な役割があります。
入出力とは、外部からデータを受け取ったり(入力)、結果を外部に出したり(出力)する操作です。たとえば、キーボードから数値を読み込む操作が「入力」、計算結果を画面に表示する操作が「出力」にあたります。流れ図では平行四辺形の記号で表します。
点数を入力する … キーボードなどからデータを受け取る合計を表示する … 画面などに結果を出す擬似言語での選択と繰返し
Section titled “擬似言語での選択と繰返し”擬似言語では、選択と繰返しを次のように記述します。
選択(if-else)の例:
もし 点数 ≧ 60 ならば 結果 ← "合格"そうでなければ 結果 ← "不合格"繰返し(for)の例:
i を 1 から 5 まで 1 ずつ増やす 合計 ← 合計 + iこの例では、i が 1, 2, 3, 4, 5 と変化しながら、合計に i を足す処理を5回繰り返します。
繰返し(while)の例:
合計 < 100 の間 合計 ← 合計 + 10この例では、合計が100未満である限り、10を足し続けます。
試験で出るポイント
手続(プロシージャ)とは、一連の処理をひとまとめにして名前を付けたものです。何度も使う処理を手続として定義しておけば、必要なときに呼び出すだけで同じ処理を実行できます。
関数は手続と同様に処理をまとめたものですが、処理の結果として値を返す点が異なります。この返される値を戻り値と呼びます。
引数と戻り値
Section titled “引数と戻り値”引数(ひきすう)とは、手続や関数を呼び出すときに渡す入力データのことです。戻り値とは、関数が処理の結果として返すデータのことです。
具体例で見てみましょう。「1 から指定した数までの合計を求める関数」を考えます。
○整数型: sigma(整数型: max) 整数型: 合計 ← 0 i を 1 から max まで 1 ずつ増やす 合計 ← 合計 + i return 合計この関数 sigma では次のようになっています。
| 要素 | この例での内容 |
|---|---|
| 関数名 | sigma |
| 引数 | max(合計を求める範囲の上限) |
| 戻り値 | 合計(1 から max までの総和) |
たとえば sigma(5) と呼び出すと、引数 max に 5 が入り、1+2+3+4+5 = 15 が戻り値として返されます。
手続と関数の違いは、関数は戻り値を持つのに対し、手続は戻り値を持たない(処理を実行するだけ)という点です。
試験で出るポイント
変数に格納できるデータの種類をデータ型と呼びます。擬似言語では、変数を使うときにデータ型を指定します。
| データ型 | 格納できるデータ | 具体例 |
|---|---|---|
| 整数型 | 小数点のない数値 | 1、-5、100 |
| 実数型 | 小数点を含む数値 | 3.14、-0.5、2.0 |
| 論理型 | 真(true)か偽(false) | true、false |
| 文字型 | 文字や文字列 | ”合格”、“A” |
データ型を正しく使い分けることで、プログラムが意図しない動作をすることを防げます。たとえば、試験の点数は小数を使わないので整数型、円周率のような値には実数型、合否の判定には論理型が適しています。
配列と要素番号
Section titled “配列と要素番号”複数のデータをまとめて扱いたいとき、配列を使います。配列は、同じデータ型の値を一列に並べて管理する仕組みです。
配列の各データには要素番号(添字、インデックス)が割り振られており、番号を指定して個々のデータにアクセスします。
点数[1] ← 80点数[2] ← 65点数[3] ← 90この例では、配列「点数」の1番目に80、2番目に65、3番目に90を格納しています。
試験で出るポイント
アルゴリズムのトレース
Section titled “アルゴリズムのトレース”アルゴリズムのトレース(逐次実行)とは、アルゴリズムを1ステップずつ手動で追いかけ、各変数の値がどのように変化するかを確認する作業です。試験では、流れ図や擬似言語を見てトレースし、最終的な変数の値や出力結果を答える問題が出題されます。
トレースの手順は次のとおりです。
- 変数の初期値を書き出す
- 処理を上から順に1行ずつ実行し、変数の値を更新する
- 条件分岐では、条件式を評価して進む方向を決める
- 繰返しでは、ループ変数の変化に注目しながら、ループを抜ける条件を確認する
- 最終的な変数の値や出力を確認する
実際にトレースの練習をしてみましょう。次の擬似言語を追いかけます。
整数型: 合計 ← 0i を 1 から 3 まで 1 ずつ増やす 合計 ← 合計 + i × i| ステップ | i の値 | i × i | 合計の値 |
|---|---|---|---|
| 初期状態 | ─ | ─ | 0 |
| 1回目 | 1 | 1 | 0 + 1 = 1 |
| 2回目 | 2 | 4 | 1 + 4 = 5 |
| 3回目 | 3 | 9 | 5 + 9 = 14 |
このように、1ステップずつ丁寧に追いかけることで、最終的に合計が14になることが分かります。
試験で出るポイント
流れ図と擬似言語の対応
Section titled “流れ図と擬似言語の対応”流れ図と擬似言語は、表現方法が異なるだけで、同じアルゴリズムを表しています。試験ではどちらの形式でも出題されるため、両方を読めるようにしておくことが大切です。
| 要素 | 流れ図での表現 | 擬似言語での表現 |
|---|---|---|
| 処理の開始・終了 | 楕円(端子) | ─(明示しないことが多い) |
| 計算・代入 | 長方形 | 変数 ← 式 |
| 条件分岐 | ひし形(判断) | もし 条件式 ならば |
| 繰返し | ひし形 + 矢印の戻り | for / while |
| 入出力 | 平行四辺形 | 入力する / 表示する |
流れ図は全体の処理の流れを視覚的に把握しやすく、擬似言語は細かい処理の内容を正確に記述できるという特徴があります。どちらも試験対策として読み慣れておきましょう。
試験で出るポイント