アルゴリズムの表し方
このノートの問いがそのまま復習カードになり、忘れかけたころに出題されます。
0. どういうまとまりか
プログラムを書く前に、どういう手順で解くかを決めます。その手順がアルゴリズムで、
言葉・図・擬似コードのどれで表しても、中身は同じ手順です。
| 表し方 | 何を描くか | 向いているもの |
|---|---|---|
| フローチャート(流れ図) | 処理の流れを記号と矢印で | 1 つの手順の分岐・繰り返し |
| アクティビティ図 | 処理(アクティビティ)の流れを、開始・終了の印と矢印で | 手順の流れ。並行する処理も描ける |
| 状態遷移図 | 状態と、何が起きるとどの状態に移るか | 信号機・自動販売機のように「今どの状態か」で動きが変わるもの |
| 擬似コード | 特定の言語に縛られない、文章に近いプログラムの形 | プログラムに直す一歩手前 |
分かれ目は次の 3 つ。
- どんなアルゴリズムも、順次・分岐(選択)・反復の 3 つの基本構造の組み合わせで書ける。
- フローチャートでは、判断(条件で分かれる)はひし形、処理は長方形、始まりと終わり(端子)は角の丸い長方形。
- アクティビティ図は「処理の流れ」、状態遷移図は「状態の移り変わり」を描く。
1. アルゴリズムとは
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
アルゴリズムは、問題を解くための手順を、誰がやっても同じ結果になるように書いたものです。
同じ問題にも複数のアルゴリズムがあり、正しさのほかに、速さや分かりやすさで比べます。
アルゴリズムとは何か?
問題を解くための手順を、明確で有限な手続きとして表したもの
各段階であいまいさが無く、有限の手順で必ず終わることが求められる。
同じ問題を解くアルゴリズムが複数あるとき、正しさのほかに何で比べるか?
処理の速さ(手順の回数)や、必要な記憶領域、分かりやすさ
同じ結果が出ても、データが増えたときの処理の回数が大きく違うことがある。
2. 3 つの基本構造
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
どれほど複雑な手順も、3 つの基本構造を組み合わせ、入れ子にすれば書けます。
この 3 つだけで書くやり方を構造化プログラミングといいます。
アルゴリズムの 3 つの基本構造は?
順次・分岐(選択)・反復(繰り返し)
この 3 つの組み合わせで、どんなアルゴリズムも表せる。
順次構造とは?
処理を上から順に 1 つずつ実行する構造
途中で飛んだり戻ったりしない、いちばん基本の流れ。
分岐(選択)構造とは?
条件が成り立つかどうかで、実行する処理を選ぶ構造
Python では if・elif・else で書く。
反復構造とは?
条件が成り立つ間、または決めた回数だけ、同じ処理を繰り返す構造
Python では for・while で書く。
3. フローチャート
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
フローチャート(流れ図)は、処理の流れを決まった形の記号と矢印で表す図です。記号の形は JIS で決まっています。
流れは原則として上から下、左から右へ進みます。
| 記号の名前 | 形 | 意味 |
|---|---|---|
| 端子 | 角の丸い長方形 | 開始・終了 |
| 処理 | 長方形 | 計算・代入など |
| 判断 | ひし形 | 条件で流れが分かれる |
| ループ端 | 上下で対になる、角を落とした長方形 | 繰り返しの始まりと終わり |
| データ | 平行四辺形 | データの入力・出力 |
フローチャートで、条件によって流れが分かれる「判断」の記号の形は?
ひし形
出口が 2 つ(Yes/No など)あり、条件の成否で進む先が変わる。
フローチャートで、開始・終了を表す「端子」の記号の形は?
角の丸い長方形
計算や代入を表す「処理」は、角のある長方形。
フローチャートで、データの入力・出力を表す記号の形は?
平行四辺形
「データ」の記号。キーボードからの入力や、画面への表示に使う。
フローチャートのループ端の記号は、どう使うか?
繰り返しの始まりと終わりに、上下で対にして置く
始まりの記号に繰り返しの条件や回数を書き、その間の処理を繰り返す。
4. アクティビティ図・状態遷移図・擬似コード
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
アクティビティ図と状態遷移図は、どちらもソフトウェアの設計で使う図(UML)の一種です。
フローチャートと同じく処理の流れを描けるのがアクティビティ図、
「いまどの状態にあるか」で動きが変わる仕組みを描くのが状態遷移図です。
アクティビティ図は何を表す図か?
処理(アクティビティ)の流れを、開始から終了まで矢印でつないで表す図
開始は黒丸、終了は二重丸(黒丸を円で囲んだもの)、分岐はひし形で描く。並行して進む処理も描ける。
状態遷移図は何を表す図か?
とりうる状態と、どんなきっかけ(イベント)でどの状態に移るか(遷移)を表す図
信号機・自動販売機・エアコンのように、今の状態によって同じ操作への反応が変わるものを描く。
擬似コードとは何か?
特定のプログラミング言語に縛られず、文章に近い形で手順を書いたもの
細かな文法を気にせず手順を考えられ、そのあと実際の言語に直しやすい。