汉诺塔(Hanoi)的实现(一)-SCL

已锁定

1Shadow1

  • 帖子

    81
  • 精华

    4
  • 被关注

    35

论坛等级:侠士

注册时间:2013-12-11

钻石 钻石 如何晋级?

汉诺塔(Hanoi)的实现(一)-SCL

956

6

2023-05-27 20:03:18

        上 C 语言课的时候,都实现过汉诺塔的例子,就在想是不是用PLC也可以实现,因为不确定PLC能否实现递归,所以有了前面的帖子;既然能实现22层,那对汉诺塔来说已经够多了。此处只定义了10层,这样的话应该需要2的10方减1,也就是1023个数组条目,用来存储步骤过程;写这个的目的主要是锻炼逻辑思维,可以把递归当成是有限的多项式展开;

0.题目: 有10个大小不一的托盘位于左侧柱子A, 限制要借助中间柱子B, 把A 边的10个托盘,移动到柱子C.


1.解题思路

    观察移动托盘的过程,总结规律。

    10个托盘步骤太多,可以先假设1,2,3,4

    1个托盘:A->C(1),

    2个托盘:A->B(1),A->C(2),B->(1)

    3个托盘:把前面2个托盘当成一个整体A->B,使得最大托盘露出来后,A->C(3),把中间2 个托盘移动到C.

    4个托盘:、、、、、、、、、


    总结规律:一共分三个步骤,二种情况;

    第一种情况:托盘不止一个

    分三步:有n个托盘,先把n-1 个挪到中间位置,把露出来的第n个挪到目标位置,再把中间位置(n-1)个挪到目标位置; 之后再把n-1当作n,继续完成这种情况,直到n为1 了,调用第二种; 

第二种情况:托盘只剩下一个

    就一步:把托盘挪到目标位置;


2.程序

2.1 先定义变量




2.2 TIA 程序




2.3 运行结果(括号里是第几个托盘)

2个托盘的时候;

3个托盘的时候


5个托盘的时候









汉诺塔(Hanoi)的实现(一)-SCL 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有8668条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。