使复杂问题简单化:自顶向下,逐步求精
来源:互联网 发布:licecap for mac 下载 编辑:程序博客网 时间:2024/05/16 15:15
说“自顶向下,逐步求精”是一种软件的结构化设计方法吧?
个人觉得这样解释似乎太片面了点
为什么这样说呢
我更倾向于认为这是一种解决问题的思维方式,使用它可以使复杂的问题(不仅仅是编程问题)简单化
生活中的不少问题也可以用它解决,例如写一本书、或文章,总要作一个提纲,全书分成几章;然后对每一章又列出本章分几节;对每一节又分出几小节等等,最后再具体着手写每个小节。
接下来我会解释究竟什么是”自顶向下,逐步求精”
很明显它分为两个步骤
1.自顶向下
这一步骤的关键是拆分(大的你刚不过就只能干小的了)
首先我们需要明确目标(就是究竟要解决什么问题)
然后就是将问题的解决过程从上而下的解构,将所谓的”黑箱”分崩离析,即将大问题分解为若干个独立而不交叉的子问题,当所有子问题都解决时,问题就解决了.
(瞎举个例子:大石头我搬不动你,我敲碎你还不行吗,如果还搬不动就继续敲啰.)
2.逐步求精
所谓求精,我认为就是细化,即得出解决问题具体过程
四种主要求精技术:
顺序连接的求精
分支、选择的求精
循环的求精
递归的求精
何时使用
个人认为以写书为例可以形象的解释它,所谓的自顶向下不过是写目录(什么提纲啊,章啊,节啊,小节啊),而逐步求精则可以看成是写小节的具体内容.
为什么使用自顶向下,逐步求精构造程序呢?
当然是因为它有自己的优点啦
主要优点有三:
最后根据作业要求,扯一波洗衣机
滚筒洗衣机
波轮洗衣机
洗衣机洗衣机,一听就知道是洗衣服的机器
洗衣机的洗衣过程用可以用伪代码来表示
首先,将洗衣服的过程拆分为子过程
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
- 使复杂问题简单化:自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- “自顶向下,逐步求精”
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精方法
- 自顶向下 逐步求精
- 自顶向下 逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- CentOS7下安装PostGis
- div内图片和文字水平垂直居中
- SQL 查询时间段及客户端(服务端)验证
- Markdown
- Java获取项目路径
- 使复杂问题简单化:自顶向下,逐步求精
- rem灵活移动端适配
- 内部静态类和内部类
- 梦境
- 基于Arduino Due的FreeRTOS程序设计(AtmelSAM3X8E)之二
- Robotframework使用DatabaseLibrary连接mysql数据库
- 以太坊源码(01):P2P网络及节点发现机制
- Fibonacci Again(多次取模控制范围)
- 1018. 锤子剪刀布 (20)