問題解決の手順
- 問題を分析する:何が与えられているか(入力)、何を求めるか(出力)、どんなルールがあるかを理解します。
- アルゴリズムを作る:解き方を、はっきりした順番の手順として書きます。
- コードにする:アルゴリズムをPythonなどの言語のプログラムに直します。
- テストする:いろいろな入力で動かします。0、負の数、とても大きい値などの極端な場合も試します。
- デバッグする:エラーを見つけて直し、もう一度テストします。
アルゴリズムには条件があります。入力と出力がはっきりしていること、手順が有限であること(必ず止まる)、手順があいまいでないこと、そして正しい結果が出ることです。
フローチャート
フローチャートは、決まった記号を矢印でつないでアルゴリズムを絵にしたものです。
- 楕円(端子):開始・終了。
- 平行四辺形:入力・出力。
- 長方形:処理(計算や代入)。
- ひし形:判断。入口は1つ、出口は2つ(はい・いいえ)。
- 矢印:流れの向き。
フローチャートは目で見てわかりやすいですが、大きな問題では図が大きくなってしまいます。
擬似コード
擬似コードは、INPUT、COMPUTE、PRINT、IF…ELSE、WHILEなどのキーワードを使い、ふつうの言葉に近い文でアルゴリズムを書く方法です。本物のプログラミング言語ではないので、細かい書き方のルールは気にしません。
INPUT A, B
IF A > B THEN
PRINT A
ELSE
PRINT Bアルゴリズムには、順次(手順を順番に行う)、選択(IFによる判断)、繰り返し(ループ)の3つの組み立て方があります。
問題の分割
問題の分割(分解)とは、複雑な問題を、小さくて簡単な問題に分けることです。それぞれの部分を(別々の人や関数が)解き、最後に組み合わせます。
例:鉄道の予約システムは、列車を探す、空席を調べる、切符を予約する、支払いを受ける、切符を印刷する、に分けられます。
よいところ:理解しやすい、作業を分担できる、エラーを見つけやすい、部品をまた使える。
試験で大切なところ
よく出る問題:簡単な作業のフローチャートや擬似コードを書く(2つの数の大きい方、1からnまでの合計、偶数か奇数か、点数から成績を決める)、記号の名前を答える、問題解決の手順を並べる、例を使って問題の分割を説明する。
重要な公式と用語
- 問題解決:分析 → アルゴリズム → コード → テスト → デバッグ
- アルゴリズム = 入力と出力があり、有限で正確な順番のある手順
- 楕円 = 開始・終了;平行四辺形 = 入出力;長方形 = 処理;ひし形 = 判断
- 組み立ての3要素:順次、選択、繰り返し
例題
1. 長方形の面積を求めるアルゴリズムを書きなさい。
1. 開始。 2. 縦L と横B を入力する。 3. 面積 = L × B。 4. 面積を表示する。 5. 終了。
2. 数が偶数か奇数かを調べる擬似コードを書きなさい。
INPUT N IF N MOD 2 = 0 THEN PRINT "Even" ELSE PRINT "Odd"
3. 1から10までの合計を表示するフローチャートを説明しなさい。
開始 → 処理:sum = 0, i = 1 → 判断:i <= 10 か? → はい:処理 sum = sum + i, i = i + 1 を行い、矢印で判断に戻る → いいえ:sum を出力 → 終了。
4. 「学校の運動会を開く」を小さな問題に分けなさい。
小さな問題:種目を決める、生徒を登録する、グラウンドと道具を準備する、時間割を作る、審判をして結果を記録する、表彰する。それぞれをチームが担当し、最後に1つにまとめる。
5. A = 5、B = 12 のとき、大きい方を表示するフローチャートをたどりなさい。
開始 → 入力 A = 5, B = 12 → 5 > 12 か? いいえ → B = 12 を表示 → 終了。
6. 点数が90以上ならA、75以上ならB、それ以外はCと表示する擬似コードを書きなさい。
INPUT M IF M >= 90 THEN PRINT "A" ELSE IF M >= 75 THEN PRINT "B" ELSE PRINT "C"
よくある間違い
- 判断に長方形を使う。判断は必ずひし形で、出口は「はい」「いいえ」です。
- 終わらないアルゴリズムを書く。アルゴリズムは有限でなければいけません。
- 0や負の数のような変わった入力でテストしない。
- 入力・出力(平行四辺形)と処理(長方形)を取り違える。