講義資料ppt

Download Report

Transcript 講義資料ppt

アルゴリズムと
データ構造
第1回
オリエンテーション
アルゴリズムとは
本科目の目標

学習目標
 プログラミングの基礎であるアルゴリズムと、それ
に伴うデータ構造について、正しい認識をもつ

到達目標
 基本的なアルゴリズムおよびデータ構造を理解し、
それらを活用したプログラム作成ができるように
なる
教科書・成績評価

教科書
新・明解 C言語によるアルゴリズムとデータ構造
(柴田望洋・辻亮介 共著 ソフトバンククリエイティブ)

成績評価
 毎回講義後に演習問題を提示、最終日に期末試
験を実施
 演習問題40%・期末試験60%の比率で評価
アルゴリズムとは

明確に定義された有限個の規則の集まりで
あって、有限回適用することによって問題を
解くもの
簡単なアルゴリズムの例

3値の最大値
int a, b, c;
int max;
max = a;
If (b > max)
max = b;
If (c > max)
max = c;
/* maxにaの値を代入*/
/* bの値がmaxより大きければ */
/* maxにbの値を代入
*/
/* cの値がmaxより大きければ */
/* maxにcの値を代入
*/
フローチャート
開始
a → max
Yes
b > max
処理の流れ
b → max
No
Yes
c > max
c → max
No
終了
フローチャート
b > c > aの場合
開始
a → max
Yes
b > max
b → max
No
Yes
c > max
c → max
No
終了
フローチャート
c > a > bの場合
開始
a → max
Yes
b > max
b → max
No
Yes
c > max
c → max
No
終了
3値の大小関係の組み合わせ
a>b>c
Yes:
No:
b>c
a>b=c
b≧c
a>c>b
a≧c
a>c
a=c>b
c>a>b
a>b
a=b>c
a≧c
a≧b
a>c
a=b=c
c>a=b
b>a>c
a>c
b>a=c
a≧c
b>c>a
b≧c
b>c
b=c>a
c>b>a
繰り返し

1からnまでの整数の和
int sum = 0;
Int i = 1, n;
while (i <= n) {
sum += i;
i++;
}
/* iの値がn以下の間繰り返し */
/* sumにiを加算 */
/* iの値をインクリメント */
フローチャート
開始
0 → sum
1→i
i≦n
No
Yes
sum + i → sum
i+1→i
終了
for文による繰り返し

1からnまでの整数の和
int sum = 0;
int i, n;
for (i = 1; i <= n; i++) {
sum += i;
}
/* i = 1, 2, ... , n */
/* sumにiを加算 */
フローチャート
開始
0 → sum
合計
i : 1, 1, n
sum + i → sum
合計
終了
変数名 : 初期値, 増分, 終値
iの値を1から始めてnになるまで
1ずつ増やしながら処理を行う
想定外入力への対処

nに負の値が入った場合の処理
 たとえば1から-5までの和を求める→おかしい
 想定外の入力は排除する必要あり

想定外入力も予測した対処
 負の値が入力できないようにする
→負の値が入力されたら、正の値が入力されるま
で入力を再要求
想定外入力への対処

正の値の読み込み
int n;
do {
printf(“nの値 : “);
scanf(”%d”, &n);
} while (n <= 0);
フローチャート
(b)
(a)
読み込み
nを入力
n≦0
Yes
No
nを入力
n≦0
読み込み
多重ループ

繰り返しの中での繰り返し
 繰り返しの入れ子
 深さに応じて二重ループ、三重ループ、・・・
→総じて多重ループ
多重ループ

n段の直角三角形の出力
int i, j, n;
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++)
putchar(‘*’);
putchar(‘\n’);
}
多重ループ

5段の直角三角形の出力
iが1のとき : jを1から1まで増やして繰り返し→ *
iが2のとき : jを1から2まで増やして繰り返し→ **
iが3のとき : jを1から3まで増やして繰り返し→ ***
iが4のとき : jを1から4まで増やして繰り返し→ ****
iが5のとき : jを1から5まで増やして繰り返し→ *****
フローチャート
開始
行ループ
i : 1, 1, n
列ループ
j : 1, 1, i
*を表示
列ループ
改行を表示
行ループ
終了