“自顶向下,逐步求精”——Top-down Design
2017-11-26 21:08
323 查看
Top-down Design就是将一个问题分解成若干个子问题,这些子问题也叫做“模块”,重点是构造一个由问题与子问题(模块)组成的分层结构,总结起来就是“自顶向下,逐步求精”。
而程序设计者便要学习“自顶向下,逐步求精”的思考方法,将一个复杂问题抽离出几个核心问题,逐步分解成几个模块,模块内再不断分解,直至我们容易用计算机实现的、直接的最小模块,从而构建分层结构。
拿生活中的例子来说,“举办一个聚会”就是一个复杂的问题,我们可以把他分成两个小模块“邀请朋友”、“准备食物”,而“邀请朋友”模块下又可以分成“制作朋友清单”、“发送邀请”等更小模块,“准备食物”又可分为“制作菜单”、“购买食材”、“烹饪食材”等更小模块。于是,一个复杂问题最后被分解成具备操作性的、简单的、容易实现的若干个小问题。
以一个简单的程序设计题为例
在本题中,我们需要输出出现次数最多的数字及其次数。
我们分解成三个小问题:
1、输入
2、计算每一个数字出现的次数
3、比较各数字的输出次数,输出
对于第一个问题,它是易实现的
对第二个问题,我们将其再分解成更小的问题:
1、对于每一个数字,再建立一个循环
2、如果第二个循环中有数字相同,次数加一
对第三个问题,我们分解一下:
1、建立一个循环依次比较;
2、每次比较中较大的被取出;
洗衣机问题
观察我们的洗衣机,分析其过程
首先我们进行一次分解问题,可以得到一个大过程
{
注水;
浸泡;
漂洗;
排水;
停机;
}
然后我们将上述子模块进行再次分解:
注水:打开注水开关,满时关闭
浸泡:等待
漂洗:分为左转,停止,右转,停止四个步骤
排水:打开排水开关,排完关闭
停机:满足一定条件停机,返回信息
即:
而程序设计者便要学习“自顶向下,逐步求精”的思考方法,将一个复杂问题抽离出几个核心问题,逐步分解成几个模块,模块内再不断分解,直至我们容易用计算机实现的、直接的最小模块,从而构建分层结构。
拿生活中的例子来说,“举办一个聚会”就是一个复杂的问题,我们可以把他分成两个小模块“邀请朋友”、“准备食物”,而“邀请朋友”模块下又可以分成“制作朋友清单”、“发送邀请”等更小模块,“准备食物”又可分为“制作菜单”、“购买食材”、“烹饪食材”等更小模块。于是,一个复杂问题最后被分解成具备操作性的、简单的、容易实现的若干个小问题。
以一个简单的程序设计题为例
在本题中,我们需要输出出现次数最多的数字及其次数。
我们分解成三个小问题:
1、输入
2、计算每一个数字出现的次数
3、比较各数字的输出次数,输出
对于第一个问题,它是易实现的
对第二个问题,我们将其再分解成更小的问题:
1、对于每一个数字,再建立一个循环
2、如果第二个循环中有数字相同,次数加一
对第三个问题,我们分解一下:
1、建立一个循环依次比较;
2、每次比较中较大的被取出;
洗衣机问题
观察我们的洗衣机,分析其过程
首先我们进行一次分解问题,可以得到一个大过程
{
注水;
浸泡;
漂洗;
排水;
停机;
}
然后我们将上述子模块进行再次分解:
注水:打开注水开关,满时关闭
浸泡:等待
漂洗:分为左转,停止,右转,停止四个步骤
排水:打开排水开关,排完关闭
停机:满足一定条件停机,返回信息
即:
{ //注水 waterinswitch(open); if (getwatervolume() = max) { //max为水的安全最大体积 waterinswitch(close); } //浸泡 //漂洗 if (timecounter() = begintime) { //begintime为开始漂洗的时间,与停止注水有一点时间 int times = 1; timescounter() = 0; while(times <= n) { //n为漂洗次数 if (timecounter() >= begintime * times && timecounter() <= begintime + 5 * t 92d7 imes) { motorrun(left); } if (timecounter() > begintime + 5 * times && timecounter() <= begintime + 30 * times) { motorrun(stop); } if (timecounter() > begintime + 30 * times &&timecounter() <= begintime + 35 * times) { motorrun(right); } if (timecounter() > begintime + 35 * times && timecounter() <= begintime + 60 * times) { motorrun(stop); } times ++; timescounter() = 0; } } //排水 wateroutswitch(open) if (volume = 0) { wateroutswitch(close); } if (times = n) { halt(success); } else{ halt(fail); } }
相关文章推荐
- 自顶向下,逐步求精(Top-down)的程序设计方法简介
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精:从洗衣机工作程序看面向过程程序设计方法
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 深入“自顶向下,逐步求精”——面向过程程序设计方法
- 【编程思想】自顶向下 逐步求精
- 自顶向下 逐步求精
- 自顶向下,逐步求精
- 自顶向下 逐步求精编程方法
- “自顶向下,逐步求精“的方法简介
- 自顶向下,逐步求精的程序设计方法
- 自顶向下,逐步求精
- 自顶向下,逐步求精
- 以洗衣机为例介绍“自顶向下,逐步求精”
- C++程序设计实践学材系列(23)——1.5.3 体会“自顶向下,逐步求精”思想
- 自顶向下,逐步求精