構造化チャート(PAD)

プログラムの基本構造と
構造化チャート(PAD)
1
復習
• プログラムの3つの基本構造
処理1
条件
成立
ループ
条件
不成立
処理2
処理2
処理1
処理
ループ
順次構造
選択構造
繰り返し構造
2
• 選択構造
IF 条件 Then
条件
成立
処理1
Else
不成立
処理2
処理1
処理2
End If
条件
成立
IF 条件 Then
不成立
処理1
処理1
End If
3
• 選択構造
もし、Aが60以上ならTextBox1に“合格” 、
そうでないなら、 “不合格” と表示する。
Start
A>=60
成立
IF A>=60 Then
TextBox1.text=“合格”
不成立
不合格と表示
合格と表示
Else
TextBox1.text=“不合格”
End If
End
4
• 繰り返し構造
回数を指定しての繰り返し
For Next 文を使う
条件を指定しての繰り返し
Do Loop 文を使う
前判定の繰り返し
後判定の繰り返し
ループ
条件
ループ
処理
処理
ループ
条件
ループ
前判定
後判定
5
• 回数を指定しての繰り返し処理
ループ
変数 = 初期値~最終値
For 変数 = 初期値 To 最終値
処理
処理
ループ
Next 変数
6
• 回数を指定しての繰り返し
処理1を10回実行する
Start
ループ
i=1~10
処理1
ループ
For i = 1 To 10
処理1
Next i
End
7
• 回数を指定しての繰り返し
1から10までの整数の合計を計算し,TextBox1に出力する
Start
s←0
ループ
i=1~10
s←s+i
ループ
TextBox1.Text ← s
End
s=0
For i= 1 To 10
s=s+i
Next i
TextBox1.Text = s
8
• 回数を指定しての繰り返し
TextBox1に入力された10個のデータの合計をTextBox2に出力する
Start
s←0
ループ
i= 0~9
s ← s +TextBox1.Lines(i)
ループ
TextBox2.Text ← s
s=0
For i = 0 To 9
s = s +TextBox1.Lines(i)
Next i
TextBox2.Text = s
End
9
• 回数を指定しての繰り返し
TextBox1に入力された10個のデータの平均をTextBox2に出力する
Start
s←0
ループ
i= 0~9
s ← s +TextBox1.Lines(i)
ループ
h ← s / 10
TextBox2.Text ← h
End
s=0
For i = 0 To 9
s = s + TextBox1.Lines(i)
Next i
h = s / 10
TextBox2.Text = h
10
• 条件を指定しての繰り返し
条件が成立している間繰り返す
ループ
条件
前
判
定
不成立
条件
成立
処理
成立
不成立
処理
処理
ループ
ループ
後
判
定
条件
条件が成立するまで繰り返す
条件が成立している間繰り返す
処理
処理
条件
ループ
条件が成立するまで繰り返す
成立
条件
不成立
不成立
ループ端記号を使った表現
処理
条件
成立
判断記号を使ったループの表現
11
• 条件を指定しての繰り返し
条件が成立している間繰り返す
ループ
条件
Do While 条件
処理
ループ
条件が成立するまで繰り返す
Do Until 条件
処理
Loop
処理
Loop
前判定
条件が成立している間繰り返す
ループ
処理
条件
ループ
Do
条件が成立するまで繰り返す
Do
処理
Loop While 条件
処理
Loop Until 条件
後判定
12
• 条件を指定しての繰り返し
整数xの2乗が100を超える最小のxを求めよ.
Start
x←1
x2 >
ループ
100 が成立するまで
x← x + 1
ループ
TextBox1.Text ← x
x=1
Do Until x^2 > 100
x = x + 1
Loop
TextBox1.Text = x
End
13
TextBox1に入力された10個のデータの最大値を求め,Textbox2に表示せよ.
Start
Max = TextBox1.Lines(0)
Max←TextBox1.Lines(0)
For i= 1 to 9
ループ
i = 1~ 9
Max < TextBox1.Lines(i)
不成立
成立
IF Max < TextBox1.Lines(i) Then
Max = TextBox1.Lines(i)
Max←TextBox1.Lines(i)
End If
ループ
TextBox2.Text ← Max
Next i
TextBox2.Text = Max
End
14
TextBox1に入力された10個のデータの最小値を求め,Textbox2に表示せよ.
Start
Max = TextBox1.Lines(0)
Max←TextBox1.Lines(0)
For i= 1 to 9
ループ
i = 1~ 9
Max > TextBox1.Lines(i)
不成立
成立
IF Max >TextBox1.Lines(i) Then
Max = TextBox1.Lines(i)
Max←TextBox1.Lines(i)
End If
ループ
TextBox2.Text ← Max
Next i
TextBox2.Text = Max
End
15
TextBox1に入力された10個のデータの最小値を求め,Textbox2に表示せよ.
Start
Min= TextBox1.Lines(0)
Min←TextBox1.Lines(0)
For i= 1 to 9
ループ
i = 1~ 9
Min > TextBox1.Lines(i)
成立
IF Min > TextBox1.Lines(i) Then
Min = TextBox1.Lines(i)
不成立
Min←TextBox1.Lines(i)
End IF
ループ
TextBox2.Text ← Min
Next i
TextBox2.Text = Min
End
16
TextBox1に入力された10個のデータの最大値、最小値を求めTextBox2,3に表示せよ.
Start
1
Max←TextBox1.Lines(0)
Min←TextBox1.Lines(0)
ループ
ループ
i = 1~ 9
Max < TextBox1.Lines(i)
不成立
i = 1~ 9
成立
Max←TextBox1.Lines(i)
ループ
TextBox2.Text ← Max
1
Min > TextBox1.Lines(i)
不成立
成立
Min←TextBox1.Lines(i)
ループ
TextBox3.Text ← Min
End
17
最大値
最小値
Start
Max = TextBox1.Lines(0)
Max←TextBox1.Lines(0)
Min = TextBox1.Lines(0)
Min←TextBox1.Lines(0)
ループ
For i= 1 to 9
i = 1~ 9
Max < TextBox1.Lines(i)
不成立
成立
IF Max < TextBox1.Lines(i) Then
Max = TextBox1.Lines(i)
Max←TextBox1.Lines(i)
End If
Min > TextBox1.Lines(i)
不成立
成立
IF Min > TextBox1.Lines(i) Then
Min←TextBox1.Lines(i)
ループ
TextBox2.Text ← Max
TextBox3.Text ← Min
End
Min = TextBox1.Lines(i)
End If
Next i
TextBox2.Text = Max
TextBox3.Text = Min
18
• プログラムの3つの基本構造
処理1
条件
成立
ループ
条件
不成立
処理2
処理2
処理1
処理
ループ
順次構造
選択構造
繰り返し構造
• 各基本構造の処理の部分に3つの基本構造
のいずれかを入れてよい。
19
階層構造
条件
成立
不成立
処理2
条件
処理1
不成立
処理2
選択構造
ループ
条件
処理
成立
ループ
条件
処理3
ループ
選択構造の中に繰り返し構造が入った形
ループ
繰り返し構造
20
階層構造
ループ
条件
ループ
条件
処理
条件
ループ
不成立
処理2
繰り返し構造
条件
成立
成立
処理1
ループ
不成立
処理2
処理1
繰り返し構造の中に選択構造が入った形
選択構造
21
• 構造化されていないアルゴリズム
条件A
成立
不成立
処理1
処理2
条件B
成立
不成立
処理4
処理3
• JISフローチャートだと構造化されてないアルゴリズムも記述
できてしまう。
22
• 構造化されていないプログラムを構造化する
条件A
条件A
成立
処理234
成立
処理13
不成立
不成立
処理2
処理1
処理2
処理1
処理34
条件B
条件B
成立
処理3
不成立
不成立
処理4
成立
処理3
処理4
処理3
• Visual Basic は、構造化されていないプログラムを書くのは難しい。
• アルゴリズムを構造化すると プログラムの保守性が増す。
23
構造化チャート
○順次構造、選択構造、繰り返し構造の3構造のみを記述できる。
○プログラムの構造を把握しやすい。
縦軸は処理の流れを、横方向は制御の主従関係を表す。
NSチャート (アメリカ)
PAD (日立)
HCP(NTT)
SPD(NEC)
YACⅡ(富士通)
HIPO(アメリカ IBM)
24
PAD
処理1
条件
成立
不成立
処理2
順次構造
処理2
処理
処理
ループ
条件
ループ
繰り返し構造
(前判定)
繰り返し構造
(後判定)
処理1
条件
処理2
ループ
処理1
選択構造
処理1
ループ
条件
処理2
条件
処理
条件
処理
25
• 選択構造
もし、Aが60以上ならTextBox1に“合格” 、
そうでないなら、“不合格” と表示する。
合格と表示
Start
A>=60
A>=60
成立
IF A>=60 Then
TextBox1.text=“合格”
不成立
不合格と表示
不合格と表示
合格と表示
Else
TextBox1.text=“不合格”
End If
End
26
• 回数を指定しての繰り返し
処理1を10回実行する
Start
ループ
i=1~10
処理1
ループ
For i = 1 To 10
i=1~10
処理1
処理1
Next i
End
27
• 回数を指定しての繰り返し
1から10までの整数の合計を計算し,TextBox1に出力する
Start
s=0
s←0
ループ
i=1~10
s←s+i
ループ
s←0
i=1~10
For i = 1 To 10
s←s+i
TextBox1.Text ← s
s=s+i
Next i
TextBox1.Text = s
TextBox1.Text ← s
End
28
• 条件を指定しての繰り返し
整数xの2乗が100を超える最小のxを求めよ.
Start
x=0
x←0
ループ
2
x > 100 が成立するまで
x← x + 1
ループ
TextBox1.Text ← x
x← 0
Do Until x^2 > 100
x2 > 100 が
成立するまで
x←x+1
TextBox1.Text ← x
x = x + 1
Loop
TextBox1.Text = x
End
29
最大値
Start
Max←TextBox1.Lines(0)
Max = TextBox1.Lines(0)
ループ
i = 1~ 9
Max < TextBox1.Lines(i)
不成立
For i= 1 to 9
成立
IF Max < TextBox1.Lines(i) Then
Max = TextBox1.Lines(i)
Max←TextBox1.Lines(i)
End IF
ループ
TextBox2.Text ← Max
Next i
TextBox2.Text = Max
End
Max←TextBox1.Lines(0)
Max←TextBox1.Lines(i)
i=1~9
Max < TextBox1.Lines(i)
TextBox2.Text ← Max
30
最大値
最小値
Start
Max = TextBox1.Lines(0)
Max←TextBox1.Lines(0)
Min←TextBox1.Lines(0)
Min = TextBox1.Lines(0)
ループ
For i= 1 to 9
i = 1~ 9
Max < TextBox1.Lines(i)
不成立
成立
Max←TextBox1.Lines(i)
IF Max < TextBox1.Lines(i) Then
Max = TextBox1.Lines(i)
End IF
Min > TextBox1.Lines(i)
不成立
成立
Min←TextBox1.Lines(i)
ループ
TextBox2.Text ← Max
TextBox3.Text ← Min
IF Min > TextBox1.Lines(i) Then
Min = TextBox1.Lines(i)
End IF
Next i
TextBox2.Text = Max
31
End
TextBox3.Text = Min
最大値
最小値
Max←TextBox1.Lines(0)
Min←TextBox1.Lines(0)
Max←TextBox1.Lines(i)
i=1~9
Max < TextBox1.Lines(i)
Min←TextBox1.Lines(i)
Min > TextBox1.Lines(i)
TextBox2.Text ← Max
TextBox3.Text ← Min
プログラムのインデント(字下げ)とPADの列が同じ.
インデント,PADの列は制御の主従関係を表す.
<左が命令をする側><右が命令をされる側>
Max = TextBox1.Lines(0)
Min = TextBox1.Lines(0)
For i= 1 to 9
IF Max < TextBox1.Lines(i) Then
Max = TextBox1.Lines(i)
End IF
IF Min > TextBox1.Lines(i) Then
Min = TextBox1.Lines(i)
End IF
Next i
TextBox2.Text = Max
32
TextBox3.Text = Min