通常,我们会把一个大问题划分为几个能解决的小单元。打扫一个栋房子或一个公寓的任务看起来很繁重,而打扫起居室、餐厅、厨房、卧室和浴室的独立任务看起来就容易多了。项原则尤其适用于计算机领域:把大的问题分割成能够单独解决的小问题。
自顶向下
按照一定的顺序,把一个大问题分解成很多的小问题,确保我们对这些小问题有充分的把握能够解决,既将复杂问题逐层拆分为若干个更简单的子问题。
逐步求精
尽可能地将现实问题转化为逻辑空间或求解空间的问题,进而转化成简单的编程问题,即将现实中的问题逐步求精变化成能够以一定算法或者其组合解决的问题。
案例分析
洗衣机运行过程
- 首先,将洗衣服的过程分为一下的子过程:
- 启动洗衣机
- 选择模式
- 模式一
- 模式二……
- 注水
- 浸泡
- 离心
- 计时
- 排水
- 结束
其中模式一模式二还可以有子程序
- 电机转动
- 计时器计时
- 水位控制
伪代码:
INT MAIN(){
IF(START){
INT READ= OPTION;
EXCUTE (READ) ;
}
}
VOID WATER(INT LITTER){
POUR LITTER WATTER ;
}
VOID PAISHUI(){
ROTATE THE WASHING MACHINE ;
IF(WATER HEIGHT == 0){
STOP
}
}
VOID EXCUTE(INT READ){
IF(READ== 1){
WATER(15);
}
IF(READ == 2){
WATER(25);
}
IF(READ == 3){
WATER(35);
}
IF(WATERHEIGHT == READ*10+5){
PAISHUI();
}
}