More Related Content
Similar to Usp友の会勉強会、ジャクソン構造図の巻(前編)
Similar to Usp友の会勉強会、ジャクソン構造図の巻(前編) (20)
Usp友の会勉強会、ジャクソン構造図の巻(前編)
- 3. 本日の予定
1. USP友の会の紹介(10分)
2. アイスブレイク(一言自己紹介)(30分)
3. 前回の振り返り(15分)
4. 講義1(状態遷移図とその限界)(40分)
5. 講義2(ジャクソン構造図の紹介) (30分)
6. 演習(1時間ぐらい)
7. まとめ(15分)
- 13. 例題:整数判定の状態遷移図
0~9
0~9
0~9 EOS
+|-
開始
S0 S1 S2 S3
その他
その他
その他
S4
- 14. 例題を素直にプログラムにすると
#!/usr/bin/perl s1: s3:
$c = shift @c; exit 0;
@c = split //, shift; if ('0' le $c && $c le '9') {
goto s2; s4:
s0: } else { exit 1;
$c = shift @c; goto s4;
if ($c eq '+' || $c eq '-') { }
goto s1;
} elsif ('0' le $c && $c le '9') { s2:
goto s2; $c = shift @c;
} else { if ('0' le $c && $c le '9') {
goto s4; goto s2;
} } elsif ($c eq '') {
goto s3;
} else {
goto s4;
}
- 18. 実際にやってみると
#!/usr/bin/perl if ($s == 1) { if ($s == 3) {
$c = shift @c; exit 0;
@c = split //, shift; if ('0' le $c && $c le '9') { }
$s = 2; if ($s == 4) {
} else {
$s = 0; exit 1;
$s = 4;
while () { }
}
if ($s == 0) { } }
$c = shift @c; if ($s == 2) {
if ($c eq '+' || $c eq '-') { $c = shift @c;
$s = 1; if ('0' le $c && $c le '9') {
} elsif ('0' le $c && $c le '9'){ $s = 2;
$s = 2; } elsif ($c eq '') {
} else { $s = 3;
$s = 4; } else {
} $s = 4;
}
}
}
- 22. 構造化定理に対する識者の評価
• E.W. ダイクストラ
機械的にgoto文のないものに変換することは推奨
できない。
『Go To Statement Considered Harmful』より
• D.E.クヌース
実用的な見地からは、この定理は意味を持たない。
『文芸的プログラミング』より
- 24. gotoを取り除く発見的な方法の方針
1. 全体的に上から下に処理が流れるように
順番を整理する。
2. 上向きのgoto文について反復構文を使っ
て同じ処理を実現できないか検討する。
3. 下向きのgoto文について以下を検討する。
– ジャンプ先の処理で置き換えられないか。
– 条件構文を使って同じ処理を実現できないか。
4. その他いろいろ考えてみる。
- 25. 実際にやってみると
#!/usr/bin/perl while ('0' le $c && $c le '9') {
$c = shift @c;
@c = split //, shift; }
$c = shift @c; if ($c eq '') {
if ($c eq '+' || $c eq '-') { exit 0;
$c = shift @c; } else {
} exit 1;
}
if ('0' le $c && $c le '9') {
$c = shift @c;
} else {
exit 1;
} 読みやすいと思いますがどうですか?
- 28. 五感とは
• 視覚 眼で感じるもの
• 聴覚 耳で感じるもの
• 嗅覚 鼻で感じるもの
• 味覚 舌で感じるもの
• 触覚 皮膚で感じるもの
情報収集の際に一番よく使うのは?
- 41. 分割の方法
複雑な 複雑な
入力データ 処理 出力データ
複雑な 単純な 複雑な
入力データ
処理1 中間データ
処理2 出力データ
- 54. ジャクソン構造図による整数表現
整数
符号 絶対値
○ ○
明示符号 暗示符号 1文字目 2文字目
数字 以降数字群
○ ○ ○ ○ ○ *
+ - なし 0 … 9 数字
○ ○ ○
0 … 9
- 57. 実際にやってみると
#!/usr/bin/perl while ('0' le $c && $c le '9') {
$c = shift @c;
@c = split //, shift; }
$c = shift @c; if ($c eq '') {
if ($c eq '+' || $c eq '-') { exit 0;
$c = shift @c; } else {
} exit 1;
}
if ('0' le $c && $c le '9') {
$c = shift @c;
} else {
exit 1;
} 先ほどと同じプログラムになります
- 61. 演習問題1解答例
食事
前菜+ メイン 食後の
スープ ディッシュ 飲み物
○ ○ ○ ○
前菜 前菜 複数の 複数の 複数の 紅茶 コーヒー
キャビア 非キャビア 冷菜 パン バター
コース コース
* * *
前菜 スープ 前菜 スープ 冷菜 パン バター
○ ○ ○ ○ ○ ○ ○ ○ ○
キャビア キャビア キャビア キャビア キャビア キャビアの キャビア キャビア
以外の 以外の 以外の 以外の … キャビア
以外の スープ 以外の 以外の
スープ1 スープ2 前菜1 前菜2 前菜n スープ1 スープ2
- 63. 演習問題2(資料1)
0~9 E|e 0~9
0~9 0~9 0~9
+|- 0~9 ・ E|e +|- 0~9
開始
S0 S1 S2 S4 S5 S6 S7
EOS
・ EOS
・ 0~9
S3 EOS OK
- 66. 演習問題2解答例
浮動
小数点数
仮数部 指数部
○
符号 絶対値 省略可能
指数部
○ ○ ○
+ or - 整数部付 小数部のみ 指数文字 指数
絶対値 絶対値
整数部 小数部 小数部 E or e 符号 整数部
○ ○
1文字目 2文字目 省略可能 小数点 小数 + or - 1文字目 2文字目
数字 以降数字群 小数部 数字 以降数字群
* *
0~9 0~9 小数点 小数 ・ 1文字目 2文字目 0~9 0~9
数字 以降数字群
* *
・ 0~9 0~9 0~9
- 69. 補足 チョムスキーの言語階層
言語階層 機械 文法 備考
タイプ0 チューリングマシン 句構造文法
タイプ1 線形有界オートマトン 文脈依存文法
プッシュダウンオート
タイプ2 状態遷移図と等価 文脈自由文法 プログラミング言語の階層
ジャクソン構造図と等価
マトン
タイプ3 有限オートマトン 正規文法
- 72. 参考文献
• M.A.ジャクソン(1985/02) 『構造的プログラム設計の原理』 (日本コン
ピュータ協会)
• 若林糧(2000/03) 『C言語プログラミング演習』 (日経BP社)
• 飯泉 純子、大槻 繁(2011/08) 『ずっと受けたかったソフトウェア設計の授
業』 (翔泳社)
• E.W.ダイクストラ、C.A.R.ホーア、O.J.ダール(1975/05) 『構造化プログラミン
グ』 (サイエンス社)
• ドナルド・E. クヌース(1994/03) 『文芸的プログラミング』 (アスキー出版局)
• 野口健一郎(1990/05) 『ソフトウェアの論理的設計法』 (共立出版)
• P.J. プローガ(1995/09) 『プログラミングの壺〈1〉ソフトウェア設計編』 (共立
出版)
• 玉井哲雄(2004/03) 『ソフトウェア工学の基礎』 (岩波書店)
• 真野正(2003/03 ) 『実践的データモデリング入門』 (翔泳社)
• きだあきら(1995/05) 「特集 Cプログラム設計技法」 『C MAGAZIN 1993
MAY Vol.5 No.5』 (ソフトバンク )