最新消息:

汉诺塔问题的两种解法(7)

App Inventor 少儿编程 1360浏览 0评论

第七节 条件限定法——演示移动过程

 

上一节完善了2个已有过程,并新增了6个有返回值的过程,完成了对出发点、落脚点的选择,有了这些结果,本节可以收获成果了。

 

一、两个无返回值过程

 

(1)不连续移动

出发点是唯一的,落脚点是可计算了,下面我们创建一个过程——不连续移动,来处理除首次移动之外的移动操作,代码图39图所示。

汉诺塔问题的两种解法(7)

图39 处理除首次移动以外的移动操作

 

(2)根据状态移动

 

代码如图40所示,根据全局变量步数判断当前移动是否为首次移动。首次移动的落脚点与整个塔高的奇偶有关,塔高为奇数时,首次移动的落脚点为终点,否则为缓冲区。

汉诺塔问题的两种解法(7)

图40 处理包括首次移动在内的全部移动

 

二、事件处理程序

 

(1)计时事件处理程序

首先在开始按钮的点击事件中设计时器的启用计时属性为真,然后在计时器的计时事件中调用相关过程,完整移动任务,代码如图41所示。

汉诺塔问题的两种解法(7)

图41 开始执行移动操作,直到任务完成

 

(2)实现暂停按钮的功能

在开发及测试时,有时需要将程序暂时停下来,思考一下可能存在的问题,然后再让程序继续运行,这正是暂停按钮的功能,代码如图42所示。

汉诺塔问题的两种解法(7)

图42 暂停按钮的点击事件处理程序

 

三、测试

在开始测试之前,在设计视图中将计时器的计时间隔改为500毫秒,连接AI伴侣开始测试。在文本输入框中输入数字6,并点击开始按钮。下面的视频是对测试过程的记录。

 

 

以上我们用7节的篇幅介绍了解决汉诺塔问题的两种方法,递归法以及条件限制法,陶陶同学正在使用另一种编程语言尝试第三种解法,期待着他的成功及分享。

 

== 未完待续 ==

 

项目文件:

汉诺塔.aia

汉诺塔2.aia

您必须 登录 才能发表评论!