上海戏剧学院附属戏曲学校 郭 毅
相传国际象棋是由印度舍罕王手下的大臣萨.班达依尔发明的,舍罕王准备奖赏达依尔,问他想得到怎样的奖赏,达依尔说:“陛下,请您在这张棋盘的第一个小格内赏给我一粒麦子,在第二个小格内给两粒,在第三个小格内给四粒,照这样下去,每一小格内都比前一小格内的麦粒数加一倍,直到把每一小格都摆上麦粒为止。并把这样摆满棋盘上六十四格的麦粒赏给您的仆人”。国王认为这位大臣的要求不算多,就爽快地答应了。国王叫人抬来麦子并按这位大臣的要求,在棋盘的小格内摆放麦粒,在第一个格内放一粒,在第二格内放两粒,第三格内放四粒……第十格内放五百一十二粒,还没摆到第二十格,一袋麦子已经用光了。国王这才发现,即使把全国的麦子都拿来,也兑现不了他对这位大臣的奖赏承诺,这位大臣所要求的麦粒数究竟是多少呢?
1.窗体设置
2.程序清单
累加器为:0,计数器为第一项的值:1
在上述算法一的设计中,我们考虑到了每一个格子中的麦粒数目是成等比级数的递增,但是,同时我们也考虑到对于前后格子中的麦粒数目的表达式中,等比级数的指数是一个等差数列。
1.程序清单一:
累加器为0:S=0
计数器为1:I=1
2.程序清单二:
累加器为0:S=0
计数器为0:I=0
3.程序清单三:
累加器为1:S=1
计数器为0:I=0
4.程序清单四:
累加器为1:S=1
计数器为1:I=1
综上所述,循环程序中的三要素:变量初始化、循环体、循环条件可以说是一环套着一环,只要有一个要素变化了,其它二者也要做相应的变化才能实现相同的程序运算结果。该问题的解决中牵扯到累加器和计数器的初值设置,并且二者之间在程序中是有关联的,这种关联的关系也就决定了所附的初值引发了循环体的变化。在此基础上,不仅仅可以设计单纯数字的变化,也可以让学生尝试图形的变化,试着让学生利用循环程序绘制不同的图形效果等,让学生深刻体会不管是怎样实现视觉上还是抽象的数字上面的循环变化,都离不开变量初始化、循环体、循环条件的关联。至此利用多种算法来编写程序,无疑给学生带来更多解决问题的思路,开拓学生的视野,培养学生的一种发散性思维能力。同时,让学生切身感受到针对一个问题可以有多种算法,体验算法的多样性。算法给学生留下“条条大路通罗马”的经验,因此,也激励着学生在思考问题的时候,会想到更多更好更精简的算法来解决它。有了自己独有的算法,自然而然会调动其极大的学习兴趣,这也是我们教师如何把枯燥的算法程序的学习转变为学习兴趣的切入点。毋庸置疑,能够把学生引入算法设计的殿堂,对于我们教师来说,前期艰辛的准备工作不可缺少,教学多纳入“授之以渔,而不是授之以鱼”的方法,首先,让学生对算法结构有个清晰的概念,其次,自己应该想到各种解决问题的方法。只有这样,才能把问题的来龙去脉透彻详尽的加以把握。