其实不应该在这边讲,因为大部份都是常识,不是常识书上一开始也会讲。
- 1 -
流程图一般而言就是从上画到下:
███
↓
███
↓
....
↓
███
开始结束还会用一个圆边的block,那叫终结者(terminator, 端点)
不过这里太难画了,你知道就好。
反正早20年书上就教大家画流程图只要用这个长方格(执行步骤)和菱形(判断)。
那这有什么好讲的呢?你都已经知道了啊
重点在下面。
- 2 -
循环一定会有一个判断(condition),
不管先判断(pre-condition)还是后判断(post-condition),一定会有
███
↓
███
↓
◢◣
◥◤
这个判断有点大,不过意思到就好。
循环画法的重点,就是把判断后的流程画好
*判断- 合乎循环执行的条件吗?
yes: 回到循环头
no: 往下执行
███<─┐
↓ │
███ │
↓yes │
◢◣──┘
◥◤
↓no
███
↓
....
pre-condition就反过来
*判断- 合乎循环执行的条件吗?
yes: 往下执行
no: 往前跳过整个循环,继续执行
no ◢◣<──┐
┌── ◥◤ │
│ ↓yes │
│ ███ │
│ ↓ │
│ ███──┘
│
└─> ███
↓
....
如图所示这样会需要画两条跳跃(传统上的goto),有别于post-condition的一条
因为post-condition当中,判断和“继续执行”的跳跃指令合在一起
而在pre-condition当中和判断结合的跳跃指令却是“停止执行,跳过循环”
而“继续执行”的跳跃指令则在循环尾
为了一致性会希望你把“继续执行”的跳跃都画在同一边
“跳过循环”画在另一边
如果有break,因为他是离开循环,所以也不要跟“继续执行”画在同一边
不然两条跳跃会交叉,你要画个半圆表示跳过对方
↑
│
╭─╮
─┘│└─>
│
这样两条流程交叉的画法叫jog
(或jump,不过组语的跳跃也是jump,会混淆)
除非图很复杂,不然最好不要画。
掌握这些原则之后多层循环也不过就是多画几条跳跃而已
只是那几条不要互相重叠
███<──┐
↓ │
███<─┐│
↓ ││
███ ││
↓YES ││
◢◣──┘│
◥◤ │
↓NO │
███ │
↓YES │
◢◣───┘
◥◤
↓NO
....
因为太懒了而且要上班(开玩笑,有人在盯的),画两层循环就好
三层的,还有混合post-和pre-condition的,就你自己画
- 3 -
注意有的时候两层循环的开头其实没有分开来
因为方框里面大家只会写有实际执行到的叙述,不会把大括号也画一格
所以有时候多层循环继续执行会跳回同一格
███<─┐┐
↓ ││
像这样,可能好几条跳跃都跳到同一格上
- 4 -
如果你觉得线很多很烦(事实上真的是很烦),可以使用connector符号
外观是一个圈圈里面一个数字或字母,例如"㊣"
(这是示意; 里面不要写正)
图上线很多的时候就这样画
....
↓
███ ─>㊣
然后在上面或下面哪里
███<─㊣
↓
....
数字要配合,1就接1,2就接2
他的原始意义就是接图,画到纸不够的时候接到右边最上面继续画
等于一条线,只是中间不画
所以不要有一个1接到好几个1这种情况,那应该包装为判断或switch block。