国际象棋棋盘上的麦粒
1、实践目标
(1)理解循环语句的作用,能根据实际情况正确使用For语句。
(2)学会使用VB循环控制结构编写程序,实现简单的算法。
2、任务描述
在印度有一个古老的传说:舍
罕王打算奖赏国际象棋的发明
人——宰相西萨?班?达依尔。
国王问他想要什么。他对国王
说:陛下,请您在这张棋盘
(图7-1)的第1个小格里,
赏给我1粒麦子,在第2个小
格里给2粒,第3小格给4粒,
以后每一小格都比前一小格加
1倍。请您像这样摆满棋盘上所有64格的麦粒,都赏给您的仆人吧~国王觉得这个要求太容易满足了就命令给他这些麦粒。当人们把一袋一袋的麦子搬来开始计数时,国王才发现:就是把全印度甚至全世界的麦粒全拿来,也满足不了那位宰相的要求。
那么,宰相要求得到的麦粒到底有多少呢,尝试
一个程序来计算。
3、操作提示
(1)问
分析
本问题可用累加的方法来求解,即最后得到的麦粒数由每一格赏赐的麦粒数相加得到,而且相邻的格子要求得到赏赐的麦粒数也是有一定规律的,即后一格是前一覆盖麦粒数的2倍。若用i表示当前所处的格子,p表示此格子中应该赏赐的麦粒数,s表示累加得到的麦粒数,分析过程见表7-1。
1
表7-1
格(i) 每格存放麦粒数(p) 累加和(s)
1 1 1
2 2 1+2
3 4 1+2+4
4 8 1+2+4+8
5 16 1+2+4+8+16
6 32 1+2+4+8+16+32
…… …… ……
64 由表7-1的分析可得i= ,p= ,s= 。 (2)设计算法。
根据上面的分析,可画出算法
图如下:
2
开始
输入棋盘上的格子数n
累加得到的麦粒数置初值s?0
当前格子的麦粒数置初值p?1
置初值:i?1
N i?n?
Y 输出麦粒数s
s?s+p
结束 p?p*2
i?i+1
(3)程序实现。
?将下列根据上面算法编写的代码填写完整。 Private Sub Command1_Click( ) Dim n As Integer, i As Integer, p As Double, s As Double
n=Val(Text1.Text) s=0
p=1
For i= To n
s=
p=
Next i
3
Text2.Text=Str(s)
End Sub
?新建
,创建窗体。界面设计参照图7-2,属性设置参照表7-2。
表7-2 窗体中主要控件属性设置
对象 属性名称 属性值 Form1 Caption 国际象棋棋盘上的麦粒 Label1 Caption 请输入当前所处的棋盘格数(n=) Label2 Caption 赏赐的麦粒总数(s=)
Text (空白) Text1 Back Color &H00FFC0C0&(蓝色)
Text (空白) Text2 Back Color &H00FFC0C0&(蓝色) Command1 Caption 计算
?将上面完成的代码段输入到计算按钮的代码窗口中。
?调试运行程序。
(4)假如每颗麦粒的重量为0.2克,每人每天消耗0.5千克,算一算上面棋盘上的麦粒能供全球60亿人吃多少年,(先写出VB表达式再计算)
4
5