超级LOGO编程图形化汉诺塔程序(A)

在学习C++、PASCAL、PYTHON语言等到高级阶段时很可能会讨论到用“递归”来计算著名的“汉诺塔”命题。但是所有的编程教科书中大多都只有文字描述的输出,却少见输出动态图形编程——这是因为图形编程有着极大的难度。在MSWLogo-FMSLogo系统程序自带的演示程序中也只有一个仅能运算4级汉诺塔的动态图形,而且这个图形的缺陷多得不得了,画出来的圆盘到处都是缺口。但是林老师编写的这个程序应是超越洋人编程的水平,夸张点说是代表国人超越洋人。而如果您在看了林老师的这个程序后,又能够拿出不论是洋人或国人编写的比林老师更优越高级的LOGO编程,那么林老师拜他为师。林老师编写的程序有如下几个特点:
A
. 林老师编写的汉诺塔程序是实时动态的,既可以输出文字描述,也可以自动输出GIF动态图形(题头图形就是计算机自动输出的)。
B. 这里向大家演示的汉诺塔图形化模拟程序的层数几乎是无限的(模拟到20层没有问题,模拟到更多层只受屏幕空间和计算机运行时间的限制)。
C. 林老师编制的图形程序不仅能自动确定三根杆的高度、自动分配盘片的直径大小、自动寻找盘片落下的位置、同步显示当前的步骤累计数,且不存在MSWLogo自带演示程序的“图形产生断缺口”的毛病。
上面所说的三个特点,都是洋人编写的留在MSWLogo-FMSLogo示范程序中的汉诺塔程序所没有达到的。
关于汉诺塔程序有如下的描述:
法国数学家爱德华•卢卡斯曾编写过一个印度的传说:在印度北部某古庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
这个传说多半是宗教哲学而并非是科学。现在人们关注的是:如果真的把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。移动次数应是2的64次乘方减去1。假如每秒钟一次,平年、闰年平均每年大约31556952秒,那么所需要的总时间18446744073709551615秒相当于5845.54亿年以上。而宇宙诞生至今不过138亿年,太阳才有50亿岁,地球存在至今不过45亿年,太阳系的预期寿命据说也就是100~150亿年。真的过了5845.54亿年,别说太阳系和银河系,至少地球上的一切生命,连同梵塔、庙宇等,确实都早已经灰飞烟灭。
图形化汉诺塔编程的难点在于图形的刷新。这个程序会根据输入层数的多少自动求出杆的高度及每一个盘的宽度。每移动一个盘至少两根杆上的图像都会变化,MSWLogo系统原版附带的表演程序在这方面没有处理好,在变化的过程中杆和盘的图形都会出现断缺口。现在大家看到的这个程序是每移动一个盘相应的杆的图形就刷新一次,图形输出就完美无缺了。只要我们国人努力,编写出来的程序完全有可能达到微软编程大咖的水平、甚至写得更完善一些。
由于博客框架的限制,不能写入太长的文章,所以这第一次就只能作如上的文字描述。但是看看题头由计算机MSWLogo-FMSLogo编程自动输出的GIF图形就能明白三层的汉诺塔是怎么移动的。如果在最一般的计算机的屏幕上可以看到远比上图流畅的图形,而且能看到10层、20层的汉诺塔它是怎么移动的。
林老师编写的汉诺塔程序在下一篇博客中详细叙述
在林老师编写的教材中有许多这样精彩的程序
查找林老师博客首页
http://blog.sina.com.cn/lzs2099
需要MSWLogo_P及FMSLogo_UP的可联系林老师645082912@qq.com
这是可以运行PLgogo命令的新型LOGO系统软件
林老师的电子书是为了给需要学习编程的孩子们提供系统、正确的教材,提高学习、参赛的竞争力。所以这也是一种公益事业。
加载中,请稍候......