データ構造とアルゴリズム論 第1章 アルゴリズムの表現-流れ図 データ構造とアルゴリズム論 第1章 アルゴリズムの表現-流れ図 平成15年9月30日 森田 彦
アルゴリズムとは? 問題を解決するための手順 例:1缶110円のジュースの(自動)販売を行う <処理の流れ(アルゴリズム)> 料金を投入する 問題を解決するための手順 例:1缶110円のジュースの(自動)販売を行う <処理の流れ(アルゴリズム)> 料金を投入する 料金が不足していないかどうかを判定し、 料金≧110なら「ありがとうございます」と表示。 それ以外(料金<110)なら「お金が不足しています」と表示。
流れ図による表現 開始 料金を入力 料金≧110 No 「お金が不足しています」と表示 Yes 「ありがとうございました」と表示 終了
プログラムとは? アルゴリズムをプログラミング言語で表現したもの Javaで記述 C++で記述
本章(本日)の学習のねらい 標準的な流れ図(JIS規格に準拠)の記述の仕方を学ぶ。 流れ図を用いて簡単なアルゴリズムを記述できるようになる。 アルゴリズムの(処理の)流れをつかむため、トレースの仕方を身につける。 重要!
基本制御構造 連接構造(順次処理) 選択構造(分岐処理) 反復構造(繰り返し処理) これら3つの制御構造の組み合わせであらゆるアルゴリズムが表現可能。
1-2 連接構造(順次処理) 例:朝起きて顔を洗って歯を磨く 開始 上から下へ順番に処理 朝起きる (一般に)順序が意味を持つ。 顔を洗う 1-2 連接構造(順次処理) 例:朝起きて顔を洗って歯を磨く 開始 朝起きる 上から下へ順番に処理 (一般に)順序が意味を持つ。 顔を洗う 歯を磨く 終了
1-3 選択構造(分岐処理) 2分岐処理 例:テストの得点Xが50点以上なら合格、50点未満なら不合格と表示する。 No Yes 開始 1-3 選択構造(分岐処理) 2分岐処理 例:テストの得点Xが50点以上なら合格、50点未満なら不合格と表示する。 開始 Xの値を入力 X:50 ≧ < X≧50 No Yes “合格”と表示 “不合格”と表示 終了
選択構造その2 多分岐処理1 例:テストの得点Xが80点以上なら「よくできました」、80>X≧50なら「合格」、50点未満なら「不合格」と表示する。 開始 Xの値を入力 X≧80 No X≧50 No Yes Yes “よくできました” と表示 “合格”と表示 “不合格”と表示 終了
多分岐処理2 選択構造その3 変数の値に応じて処理を分ける。 「その他」は省略可 Java言語ではswitch文で表現 開始 Xの値を入力 0 1 2 その他 処理1 処理2 処理3 処理4 Java言語ではswitch文で表現 終了
【基礎課題1-1 】 Xを入力すると、それが偶数か奇数かを表示するアルゴリズム No Y=0 Yes 開始 Xの値を入力 Y← X % 2 “偶数です”と表示 “奇数です”と表示 終了
1-4 反復構造(繰り返し処理) 決まった回数の繰り返し 例:腕立て伏せを5回行う。 トレース表 開始 i ← 1 iの値 腕立て伏せ回数 1-4 反復構造(繰り返し処理) 決まった回数の繰り返し 例:腕立て伏せを5回行う。 開始 トレース表 i ← 1 iの値 腕立て伏せ回数 4 2 1 3 5 6 No No i≦5 2 3 5 4 1 Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes 腕立て伏せをする。 腕立て伏せをする。 腕立て伏せをする。 腕立て伏せをする。 腕立て伏せをする。 腕立て伏せをする。 腕立て伏せをする。 腕立て伏せをする。 腕立て伏せをする。 腕立て伏せをする。 腕立て伏せをする。 終了 終了 i ← i+1 i ← i+1 i ← i+1 i ← i+1 i ← i+1 i ← i+1 i ← i+1 i ← i+1 i ← i+1 i ← i+1 i ← i+1
トレースとは? アルゴリズム(流れ図)の処理過程をたどって行くこと。 具体的には、変数の値の変化をたどること。 → トレース表 反復構造その2 アルゴリズム(流れ図)の処理過程をたどって行くこと。 具体的には、変数の値の変化をたどること。 → トレース表 アルゴリズムの理解 ← トレースが不可欠 本講義で学習するアルゴリズムを理解できるかどうか? → 理解できるまでトレースするかどうかにかかっている。
【基礎課題1-3】 反復構造その3 1~5までを順に表示させる 開始 開始 i ← i ← 0 i ← 1 No No i≦ i≦4 i≦5 Yes Yes i ← i+1 iを表示 iを表示 終了 i ← i+1 終了 ※ 「iを表示」と「i ← i+1」を入れ替え
ループ端記号を使った表現 反復構造その4 例:処理AをN回繰り返す 理解度チェック → 【基礎課題1-5】 (2)「変数名:初期値,増分,終値」 提示型 (3)終了条件提示型 (1)列挙型 i ← 1 ループi=1,2,3,・・・,N ループ i:1,1,N ループ i>N (となるまで) 処理A 処理A 処理A ループ ループ i ← i+1 ループ 理解度チェック → 【基礎課題1-5】
一般的な終了条件による繰り返し 反復構造その5 例:可能な限り腕立て伏せを行う Java言語ではwhile文で表現 開始 Java言語ではwhile文で表現 続行可能 No Yes 腕立て伏せをする。 終了 理解度チェック → 【基礎課題1-4】、【応用課題1-E】
演習にとりかかってください。 少なくとも、基礎課題のチェックは終えること。 演習の時間内に基礎課題を終了できなかった場合は、必ず次週までに課題を終えておいて下さい。基礎課題を翌週に持ち越すと、本科目の修学が困難になります。