使复杂问题简单化:自顶向下,逐步求精

来源:互联网 发布:licecap for mac 下载 编辑:程序博客网 时间:2024/05/16 15:15

自顶向下,逐步求精
这里写图片描述

“自顶向下,逐步求精”是一种软件的结构化设计方法吧?
个人觉得这样解释似乎太片面了点
为什么这样说呢


这里写图片描述

我更倾向于认为这是一种解决问题的思维方式,使用它可以使复杂的问题(不仅仅是编程问题)简单化
生活中的不少问题也可以用它解决,例如写一本书、或文章,总要作一个提纲,全书分成几章;然后对每一章又列出本章分几节;对每一节又分出几小节等等,最后再具体着手写每个小节。

接下来我会解释究竟什么是”自顶向下,逐步求精”
很明显它分为两个步骤

1.自顶向下

这一步骤的关键是拆分(大的你刚不过就只能干小的了)
首先我们需要明确目标(就是究竟要解决什么问题)
然后就是将问题的解决过程从上而下的解构,将所谓的”黑箱”分崩离析,即将大问题分解为若干个独立而不交叉的子问题,当所有子问题都解决时,问题就解决了.
(瞎举个例子:大石头我搬不动你,我敲碎你还不行吗,如果还搬不动就继续敲啰.)

2.逐步求精


这里写图片描述

所谓求精,我认为就是细化,即得出解决问题具体过程
四种主要求精技术:

  1. 顺序连接的求精

  2. 分支、选择的求精

  3. 循环的求精

  4. 递归的求精

何时使用

这里写图片描述

个人认为以写书为例可以形象的解释它,所谓的自顶向下不过是写目录(什么提纲啊,章啊,节啊,小节啊),而逐步求精则可以看成是写小节的具体内容.

为什么使用自顶向下,逐步求精构造程序呢?
当然是因为它有自己的优点啦
主要优点有三:

这里写图片描述

最后根据作业要求,扯一波洗衣机
滚筒洗衣机

这里写图片描述

波轮洗衣机
这里写图片描述

洗衣机洗衣机,一听就知道是洗衣服的机器
洗衣机的洗衣过程用可以用伪代码来表示
首先,将洗衣服的过程拆分为子过程
1. 选择程序:1)标准(即正常洗衣)2)快洗3)…
2. 选择水量:(根据衣服的多少)1)多2)中3)少
3. 启动
4. 注水: 通过传感器反馈的数据作为指标,当水到达一定高度触发传感器时就停止注水。
5. 浸泡:浸泡一定时间
6. 漂洗:电机转动,向左转三圈后短暂暂停接着向右转三圈,重复以上操作直至规定时间到
7. 脱水:直到水流极少停止脱水.
8. 循环456步骤直到漂洗干净
9. 洗衣完成,切断电源

water_in_switch(open close) // open 打开上水开关, close关闭
water_out_switch(open close) // open 打开排水开关, close关闭
get_water_volume() //返回洗衣机内部水的高度
motor_run(direction) *// 电机转动。 left左转, right右转, stop停
time_counter() // 返回当前时间计数,以秒为单位
halt(returncode) **//停机, success 成功 failure 失败

伪代码

begin
select 程序
input 水量
water_in_switch(open)
if(水量不变)
发出警报声
halt
else
继续程序
if(get_water_volume() >= 输入水量)
water_in_switch(close)
end if
stop
until (time_counter为120)
end
while(time_counter为4的倍数)
if(motorrun(left))
motor_run(right)
else
motor_run(left)
end if
if(time_counter()>=规定时间)
结束循环
end if
motor_run(stop)
water_out_switch(open)
if(水量不变)
water_out_switch(close)
发出警报声
halt
else
继续程序
end if
repeat
if(水流极小)
water_out_switch(close)
water_in_switch(open)
if(get_water_volume() >=输入水量)
water_in_switch(close)
end if
water_out_switch(open)
if(水流极小)
water_out_switch(close)
发出警报声
halt
else
继续程序
end if
until(水的ph值达到干净标准)
do
motor_run(right)
until(水流极小)
then
发出警报
halt

THE END

原创粉丝点击