技术论坛

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

作者 主题
侠士

经验值: 1130
发帖数: 81
精华帖: 4
主题:【分享】汉诺塔(Hanoi)的实现(一)-SCL


只看楼主 楼主 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个托盘的时候










谋定而后动,精益求精。
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1826670&b_id=66&s_id=0&num=6

版主

经验值: 69061
发帖数: 12270
精华帖: 59
回复:汉诺塔(Hanoi)的实现(一)-SCL


只看楼主 1楼 2023-05-27 23:08:25

嗯,感谢分享


Q群:https://jq.qq.com/?k=9BDuEgf6
以下网友喜欢您的帖子:

  
侠圣

经验值: 3029
发帖数: 294
精华帖: 1
回复:汉诺塔(Hanoi)的实现(一)-SCL


只看楼主 2楼 2023-05-28 06:20:01

SCL赋予PLC更多可能


 
以下网友喜欢您的帖子:

  
至圣

经验值: 13937
发帖数: 2008
精华帖: 43
回复:汉诺塔(Hanoi)的实现(一)-SCL


只看楼主 3楼 2023-05-29 13:53:53

学会了SCL 就没必要编写这些程序


人生就像一场旅行!
以下网友喜欢您的帖子:

  
侠客

经验值: 698
发帖数: 104
精华帖: 0
回复:汉诺塔(Hanoi)的实现(一)-SCL


只看楼主 4楼 2023-11-15 15:34:32

9999,6翻了


此后如竟没有炬火,我便是唯一的光
以下网友喜欢您的帖子:

  
侠客

经验值: 799
发帖数: 234
精华帖: 0
回复:汉诺塔(Hanoi)的实现(一)-SCL


只看楼主 5楼 2023-11-16 09:03:22

感谢分享。


 
以下网友喜欢您的帖子:

  
侠客

经验值: 639
发帖数: 32
精华帖: 0
回复:汉诺塔(Hanoi)的实现(一)-SCL


只看楼主 6楼 2023-11-16 09:25:06

厉害,感谢分享


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
汉诺塔(Hanoi)的实现(一)-SCL
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。