組織情報論
第5回 アルゴリズムとデータ構造
フローチャートとプログラムの基本
1
講師 佐枝三郎
https://sites.google.com/site/jiusaedasoshikiron2017/
フローチャート
2
フローチャートの基本
• フローチャートの基本
– フローチャートの記号は,日本では日本工業規格(JIS)で決められて いる
– フローチャートで用いられる主な記号は後述する
• フローチャートは,プログラムのソースを作成する前の段階,
すなわち,設計の段階で作成する。
• フローチャートを作成する理由としては,以下のようなものが
あげられる。
– 図で示されているので,文章だけよりもわかりやすく、プログラムにし やすい
– プログラムを改良する際に効率よくできる
– 1つのプログラムを複数人で作るときに手分けしやすい
3
フローチャートの簡単な例
目が覚める 開始
着替え・洗顔
傘を持つ 雨か
大学に出かける
終了
「 朝、やること 」
朝食を食べる
NO
YES
4
フローチャートの記号
5
フローチャートの作り方
• フローチャートを作成する際の基本手順は、次の通りで
ある。
– フローの最初と最後を明記する。
– 処理の流れは原則として、上から下へ、左から右とする。
– このルールに逆行する際は、矢印をつける。(ただしすべて
の処理の流れに矢印をつけることもある。)
– 線が交差しないようにする。
• フローチャート作成の注意点
– 入力の線や矢印は上から入れ、横からは入れない。
– 分岐のときはYes/Noを正しく書く。
– 分岐の条件に記述する内容は、正しく理解しやすいものと
する。
– 線や矢印が箱から離れないようにする。
6
処理の構造 ①順次構造
順次構造
・順番に処理を行う
・前の処理の結果を後ろの処理
で使う場合が多い
・例
①入力データを読み込む
②最初の計算をする
③2番目の計算をする
④計算結果を印刷する
処理1
処理2
処理3
処理4 開始
終了
7
処理の構造 ②選択構造(分岐構造)
選択構造
・ある条件によって、実行する処
理を変更する
・事前の処理で計算された結果
で後ろの処理を変更する
・例
①ある計算をする
②計算結果がプラスなら
処理2を実行する
③計算結果がマイナスなら
処理3を実行する
④計算結果を印刷する
処理3 処理2
条件 Yes
No 開始
終了 処理1
8
処理4
処理の構造 ③多岐選択構造(case)
多岐選択構造
・ある条件によって、実行する
処理を変更する
・条件の評価結果が2通りでは
なく、3通り以上の場合
・条件を評価した結果、行う処
理は必ずしも、後ろの処理で
なく、前の処理でもよい
処理2 条件1
条件
処理3 処理4 条件2
条件3 開始
終了 処理1
9
処理の構造 ④繰返し構造(while)
繰り返し構造(while)
・条件を評価した結果、前の処
理に戻る場合
・ある条件が成立する(正しい)
間はいつまでも前に戻る
(ぐるぐる回る)
・従って処理2で条件が成立し
ないような計算が行われる
必要がある
・処理の前に(最初に)条件を
評価する
処理2 .. 処理1
条件
Yes No 開始
終了 処理3
10
処理の構造 ④繰返し構造(until)
繰り返し構造(until)
・条件を評価した結果、前の処
理に戻る場合
・ある条件が成立しない(誤り)
間はいつまでも前に戻る
(ぐるぐる回る)
・従って処理2で条件が成立す
るような計算が行われる必要
がある
・処理の後に(最後)条件を
評価する
処理2 .. 処理1
条件 Yes No 開始
終了 処理3
11
プログラムの基礎
12
プログラムとは
• プログラムとは、コンピュータを動かすための、基本的な指示方法
である
– 一般に「プログラミング言語」と呼ばれる、コンピュータのための言語 を使用してコンピュータを操作する
• 「プログラミング言語」は「自然言語」と違う点が多いため、周りのこ
とが分からないと、簡単にはプログラムが理解出来ない
– 普通に人間が使う言葉のことを「自然言語」と呼ぶ
• 「自然言語」と「プログラム」言語の違い
– 「プログラミング言語」は「自然言語」より文法が単純である
• 「プログラミング言語」の文法は、単語の記述順が決まっているなどのいくつ かのルールのみ
– 登場する用語(指示する言葉や関連する言葉)も限定されている – どのプログラム言語でも100個以下
– プログラミング言語は自然言語に比べ、意味が明確である
• 曖昧さが発生する余地はなく、厳格で明確な意味が決められている
– プログラミング言語は、計算、あるいは論理処理のための言語である こと
• コンピュータでは数値が全てであり、数値以外の概念は一切存在しない
• データベースの講義で説明したSQLもプログラム言語である
13
プログラム言語を構成する用語1
• コンピュータの中にあるデータに関するもの
– データを格納する単位 変数、配列、その他のデータ構造
– データのデータ型 数値(整数、浮動小数点実数)、文字型、論理型など
100
100 200 300
変数:データを入れる箱
配列:複数のデータを 入れる箱
箪笥のようなもの
100 100 100 リスト:複数のデータを入れる
別のデータ構造の例(次回説明)
データの格納単位 データのデータ型
整数 -125 -21 0 10 12123 浮動小数点(実数)
-10.25 0.00099 20.251468 文字型 JIU 城西国際大学 論理型 TRUE(真) FALSE(偽)
1 0
14
プログラム言語を構成する用語2
• 人間の指示に関するもの
– 計算に用いる演算子(+ , -, *, /)と式、代入指示( = )など
– コンピュータへのデータの読み込み、書き出しに関する指
示 (read, print…)
X = (10 – 5) * 18
Y = 3 + 6
Z = X / Y
・5×18を計算し、90をX変数に入れる
・3+6を計算し、9をY変数に入れる
・X(90)/Y(9)を計算し、10をZ変数に入れる
・数学の
・数学の
・数学の
・数学の === は、右辺と左辺が等しいことを示すが= は、右辺と左辺が等しいことを示すがは、右辺と左辺が等しいことを示すがは、右辺と左辺が等しいことを示すが
・プログラム言語の
・プログラム言語の
・プログラム言語の
・プログラム言語の === は、右辺の式の計算結果を左辺の変数に代入する= は、右辺の式の計算結果を左辺の変数に代入するは、右辺の式の計算結果を左辺の変数に代入するは、右辺の式の計算結果を左辺の変数に代入する
(箱に入れる)ことを示す。
(箱に入れる)ことを示す。(箱に入れる)ことを示す。
(箱に入れる)ことを示す。
15
プログラム言語を構成する用語3
• 条件などに関するもの
– 条件分岐のための指示 もし、それ以外(if, else)
– 繰り返し実行(ループ) のための指示(while, until, for)
– 条件式の演算子(>, <,
>=, <=, not, and, or) – プログラムの一部を繰
り返し使うための指定
• 関数、サブルーチン
処理2 処理3 条件
Yes
No 開始
終了 処理1
処理2 .. 処理1
条 件
Yes No 開始
終了 処理3
条件分岐 繰り返し実行
16
プログラム言語Python
• アルゴリズムに関する講義では、Pythonというス
クリプト言語を用いて説明する
• Pythonの特徴としては、以下の点があげられる
– オブジェクト指向スクリプト言語
– 豊富なライブラリがある
– 欧米で人気があり、Google、 Microsoft、 Yahoo!、
YouTubeなどで使用されている
– Pythonは開発者が教育用の言語を想定しており、初
心者の方も覚えやすい。
17
スマートフォンでPythonを使う
• WebでPythonなどプログラム言語を動かすサイトがある
• サイトのURLは https://paiza.io
• スマートフォン、タブレットでも利用できる
• 使い方
– ブラウザで https://paiza.ioを開くを開くを開くを開く – 「コード作成「コード作成「コード作成「コード作成......」..」」」
– をクリックをクリックをクリックをクリック
18
19
言語をpython2に変更し、
プログラムを作成し、動かすことができる
言語の変更
プログラム 作成領域 実行ボタン
結果表示 領域
スマートフォンでのPaiza.io
20
Pythonにおける計算
• データの計算に使うは、定数、変数、演算子、代入子があ
る
– 変数は計算結果を入れる領域(箱のようなもの)
– 定数は、整数、浮動小数点実数がある
• 記述方法: 10 1.235 -5 1.0e5(10の5乗) など
– 演算子は四則演算: + - * /
– 代入子 = = は等号ではなく、右辺の式を計算した結果を
ある変数(配列)などに代入することを示す
– 計算に用いる様々な関数がある
• 三角関数 y = sin(x), y = cos(x), y = tan(x)
• 平方根 y = sqrt(x)
• ログ関数 y = log(x)
• 絶対値 y = abs(x) など色々
21
Pythonにおける計算
• 計算の例
– a = 100
– b = 300
– c = a + b
a
こんにちは こ ん に ち は
• 数値以外のデータ型に、文字列がある
– 文字は1文字が一つの領域を取り、文字列は次に述
べる配列に格納される
100
b 300
c 400 100+300
22
23
Pythonにおける計算
• 複数のデータを取り扱う
– どのようなプログラムでも、数学などの計算、文字列の処理などを、一つ の変数のみではできない
– 複数のデータ(集合)を取り扱う必要があり、この集合の構造を「データ 構造」という (データ構造の詳細は後で説明)
– この集合の一つに配列がある(数学ではベクトル、2次元配列はマトリッ クス)
– 配列の一つの要素は、数値(整数、浮動小数点実数、文字列など、いず れでもよい)
– 配列の要素が配列の場合もある
• Pythonの配列
– 通常のプログラム言語には、明示的な配列の宣言がある – Pythonの場合は、「リスト」という概念を配列に用いる
• リストについての詳細も後で説明
ひとつの変数の場合 X 100
・値の設定 X=100
・値の読み込み Y=X
配列変数の場合 X
・値の設定 X[1]=100 X[2]=200
・値の読み込み Y=X[1]
100 200 300
24
Pythonの文(ステートメント)
• 代入文と式
– ある変数に定数、または式を計算した結果を格納す
ることが代入である
– 式は定数、変数、演算子(+, -, *, /, **, (, ), )、関
数などを用いた計算式(数学、EXCELの式と同じ)
– 記述例
• X=100
• Y=10*x*x+5x+10
• Y=(x-2)**(Z-5)
• print文
– 変数(配列)の内容を画面などに印刷する
** は、べき乗の記号
25
Pythonの文(ステートメント)
• if文と論理式
– if文はプログラムの重要な要素で、論理式で指定した条件の計算結果 が正しい(真)か、誤り(偽)を判断して、次に行う処理を変えることがで きる
– 論理式は、計算結果の変数や、定数などと論理演算子で構成される
• 利用できる論理演算子
– == ⇒ 等しい、
– <> または != ⇒ 等しくない
– > ⇒ 大なり
– >= ⇒ 大あるいは等しい、
– < ⇒ 小なり
– <= ⇒ 小あるいは等しい
– & ⇒ and(かつ)
– | ⇒ or (あるいは)
• 複雑な論理式の例
– ((x > y) & (z <= w)) | ((a==100) & (b < 10))
26
Pythonの文(ステートメント)
• if文の使用例
if x == 10: y = x * x z = x + 100
if x == 10: y = x * x z = x + 100 else:
y = x z = x + 500 真のみ処理を行う
三つ以上の場合に分けて異なった 処理を行う
真の場合と偽の場合、別の処理を行う
if x == 10: y = x * x z = x + 100 elif x == 20:
y = x z = x + 500 else:
y = 0 z = x
If文の用語は、プログラム言語によって 微妙に異なっており、この記法は
Python
独特なものである27
処理の構造 ①順次構造
Pythonの例
例:( 100 + 200) / 10 を計算し、すべての変数の内 容を表示する
① x = 100 # xに100を代入
② y = 200 # yに200を代入
③ z = ( x + y ) / 10 # zに (x+y)/10を計算し代入
④ print x,y,z # x,y,zを表示 処理1
処理2
処理3
処理4 開始
終了
28
処理の構造 ②選択構造(分岐構造)
Pythonの例
例:0から1の間の乱数を発生させ、その値が 0.5未満の場合はyをxの10倍、0.5以上の 場合はyをxの10分の1にし、表示する
① x = random.random() #乱数発生 if x < 0.5: # xが0.5未満
② y = x * 10
print x,y # x,yを表示 else: # xが0.5以上
③ y = x / 10
④ print x,y # x,yを表示 処理2 処理3
条件 Yes
No 開始
終了 処理1
29
処理4
処理の構造 ③多岐選択構造(case)
Pythonの例
例:0から80までの数を発生させ、その値16未満は 子供、16-65は大人、65以上は高齢者と、年齢 と共に表示する
① x = random.random() * 80 #乱数で年齢を発生 if x < 16: # xが16未満
② print x, ‘歳 子供です’ if x < 65: # xが65未満
③ print x, ‘歳 大人です’ else: # xが65以上
④ print x, ‘歳 高齢者です’ 処理2
条件1
条件
処理3 処理4 条件2
条件3 開始
終了 処理1
30
Pythonの文(ステートメント)
• whileループ
– Whileループとは、論理式で記述されたある条件が成立する間、指定 した処理を繰り返し行うループである
– 使用例: 10の要素がある配列 x[] に順番に1から10を代入する i = 0
while i <= 10: i = i + 1 x[i] = i
• forループ
– forループとは、ある要素の集合について、順番に要素を使って指定 した処理を行うループである
– 使用例: 5個の集合 [1,2,3,4,5]の要素を集計する s = 0
for i in [ 1,2,3,4,5]: s = s + i
結果は55
結果は15
31
処理の構造 ④繰返し構造(while)
Pythonの例
○whileはループに入る最初で、定義された条件が 真であるかを評価し、真の場合のみ処理を行う 例: 1から10までの数を加算し、合計を計算する
① sum = 0 #集計用変数を初期化 i = 0 #カウント用変数を初期化 while i < 10: #10未満の間、処理を行う i = i + 1 # i に1を加える sum = sum + i # sum にiを加える print i,sum # 中間結果表示
③ print ‘合計値は’, sum # 集計値表示 処理2 ..
処理1
条件
Yes No 開始
終了 処理3
32
処理の構造 ④繰返し構造(until)
プログラム例
○untilはループから出る最後に、定義された条件 が真であるかを評価し、真の場合にループを抜け 出し、偽の場合は処理を行う
○Pythonには、untilループは定義されていないが、 whileとifとbreakを使ってuntilを記述できる
例:1から10までの数を加算し、合計を計算する
① sum = 0 i = 0
while True:
② i = i + 1
sum = sum + i print i,sum
if i >= 10: break
③ print ‘合計値は’, sum 処理2 ..
処理1
条件
Yes No 開始
終了 処理3
33
フローチャートの例 条件付き集計の例題
• 1から20までの数値の中で、奇数のみを集め、集計する
1 2 3 4 5 6 7 8
19 20
・
・
・
集計用変数
34
フローチャートの例 ①条件付き集計 フロー図
開始
sum ← 0
iは2の 倍数? i ← i + 1
Yes No
○ sumは、集計用変数
○ i は、作業用の変数
○ 矢印は代入することを示す i ← 0
sum ← sum + i i > 20 Yes
終了 No
35
条件付き集計のPythonプログラム
例: 1から20までの奇数を加算し、合計を表示する
sum = 0 # 集計用変数を初期化
i = 0 # カウント用変数を初期化
while i < 20: # 20未満の間、処理を行う i = i + 1 # i に1を加える
if i % 2 != 0: # i を2で割った余りが0でない場合 sum = sum + i # sum にiを加える
print i,sum # 中間結果表示 print ‘合計値は’, sum # 集計値表示
結果は 100 となる
36
37