在用计算机编写解决复杂的实际问题的编程时,往往不能直接得出解决问题的最优方案,甚至不能得出一个结论。在这时,可以尝试使用“自顶向下,逐步求精”的方法进行解决。
什么是“自顶向下,逐步求精”呢
“自顶向下,逐步求解”就是在解决某一具体问题时,按以下步骤来执行:
- 从问题的整体(最顶层)出发,将问题分为若干个子问题,每个子问题解决整个问题的一部分或一种情况;
- 将子问题当做新的问题的整体,继续对其分解(求精),得到更低一级的子问题;
- 持续执行步骤2直至可用计算机语言解决每一个子问题;
- 将所有子问题的解决方法汇总到一起,就构成最开始问题的解决方法。
求精技术
- 顺序连接的求精
- 分支、选择的求精
- 循环的求精
- 递归的求精
用图表示出来便是:
优点
- 程序层次清晰,结构分明;
- 便于查错,可快速将错误位置指定到某一子问题,从而快速纠错;
- 便于集体开发程序,在小组分工合作中,可将某些子问题分发给不同的组员进行解决,互不影响,提高工作效率。
实例(智能洗衣机)
分解过程
- 轻触开关,打开电源;
- 用户控制,选择水量;
开始清洗
(1)洗涤
(2)漂洗
(3)脱水清洗完成,响铃,断开电源。
伪代码
power(open)//用户打开电源
V water (by user)//用户选择水量
/*洗涤*/
water switch(open)//水夹打开
input(V water)//注入用户所需水量
water switch(close)//水夹关闭
start (time)//计时开始
while(time<=10min)
do 滚筒旋转,洗涤
tine=0
output//排水
/*漂洗*/
water switch(open)//水夹打开
input(V water)//注入用户所需水量
water switch(close)//水夹关闭
start (time)//计时开始
while(time<=10min)
do 滚筒旋转,漂洗
time=0
output//排水
/*脱水*/
start(time)//计时开始
while(time<5min)
do 滚筒旋转,脱水
ring//响铃
power(close)//电源关闭
4775

被折叠的 条评论
为什么被折叠?



