跳到正文
IGCSE·Tuition
计算机科学 · 课程

把任务分解为子问题

一道很长的题目看起来像一件大事,直到你发现它其实是依次排好的四件小事。

本页内容
  1. 怎样把任务拆成几部分?
  2. 例题
  3. 要小心的错误
  4. 自我检测
  5. 接下来学什么

分解任务的做法是:列出任务包含的各项独立工作,给每一项一个清楚的单一目的,再排成每一项都能拿到所需内容的顺序。以”设计一个算法……”开头的题目,在伪代码出现之前就已经在考察这个习惯。

这是算法设计的第一步,下一课定义输入、输出和限制条件会让每一部分更精确。

怎样把任务拆成几部分?

读题,给每个动词画线:收集、相加、比较、输出。每个动词通常对应一个子问题。然后对每一部分问三个问题。

  • 它开始之前需要什么?
  • 它交给下一部分什么?
  • 我能单独测试它吗?

如果你答不出第三个问题,说明这一部分太大或太模糊。

例题

老师输入五个测验分数,每个满分 20。如果平均分至少为 10,程序输出 PASS,否则输出 FAIL。

**第 1 步,给任务画线:**收集五个分数,相加,求平均,与 10 比较,输出一个词。

第 2 步,为每个子问题写出输入和输出:

子问题需要产生
收集并相加分数五个分数Total
求平均分TotalAverage
判断通过或不通过Average单词 PASS 或 FAIL
输出该单词屏幕上的文字

**第 3 步,排序。**每一行都需要上一行的结果,所以顺序是固定的。

第 4 步,把每一部分写成伪代码:

Total ← 0
FOR Count ← 1 TO 5
   INPUT Mark
   Total ← Total + Mark
NEXT Count
Average ← Total / 5
IF Average >= 10 THEN
   OUTPUT "PASS"
ELSE
   OUTPUT "FAIL"
ENDIF

**第 5 步,用分数 12、15、9、18、16 测试。**每输入一个分数后的 Total:12、27、36、54、70。Average = 70 / 5 = 14。因为 14 >= 10,输出 PASS。手动再加一遍也得 70,两者吻合。

要小心的错误

一个常见的失误,是子问题只是把任务重述一遍。

**错误的计划:**1. 取得分数。2. 算出结果。3. 输出。

“算出结果”把总分、平均和比较都藏起来了,所以没有任何东西可以测试。

改正的方法是一直拆,直到每一行都有清楚的输入和输出,就像上面的表格。另一个失误是把 Total ← 0 放进循环里。这样每个分数都会让总分重新开始,最后的平均分只用到最后一个分数。

自我检测

1. 图书馆程序要读取一本书逾期的天数,并按每天 RM0.20 输出罚款。列出子问题。

Show answer

读取逾期天数。乘以 0.20 得到罚款。输出罚款。逾期 15 天时,罚款是 15 × 0.20 = RM3.00。

2. 下面的计划顺序乱了,请改正:输出平均值、把数字相加、用总和除以个数、输入数字。

Show answer

输入数字,把数字相加,用总和除以个数,输出平均值。每一步都需要上一步的结果。

3. 在测验例题中,如果 Total ← 0 放在循环内,分数为 12、15、9、18、16,平均分会是多少?

Show answer

每个分数都会重置总分,所以最后一个分数之后 Total = 16。平均分是 16 / 5 = 3.2,错误地得到 FAIL。

接下来学什么

下一步,为每个部分定义输入、输出和限制条件。伪代码追踪训练器可以让你逐步运行这样的算法。

如果拆解任务正是你卡住的地方,我们的老师可以在一对一线上计算机科学补习中和你一起解决,练习题也提供更多可拆分的任务。

常见问题

计算机科学里的分解(decomposition)是什么意思?

分解就是把大问题拆成更小、更容易理解、求解和测试的部分。每一部分只有一个明确任务。所有部分都解决,并按正确顺序连起来,整个问题就解决了。

子问题应该拆到多小?

小到你能用一行话说清它的输入和输出,并且不用再拆就能写出或追踪它。如果某一部分仍然含有“并且”“然后”或“还要”这类词,它很可能包含不止一个任务。

分解就是按顺序写步骤吗?

两者相关,但不完全相同。分解先找出各个独立的任务。排序在后,而且很重要,因为一个部分的输出常常是另一个部分的输入。

更新于:

下一步

如果设计题仍然大到不知从何下手,一对一的老师可以陪你看第一次尝试,帮你找出任务自然分开的地方。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由家长与老师直接确认。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

是家长或监护人?在这里咨询

已通过我们的服务帮助 9,000+ 名学生