【信息学】第十一课 集合 、记录和文件操作.docVIP

【信息学】第十一课 集合 、记录和文件操作.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【信息学】第十一课 集合 、记录和文件操作

趣味递归算法第一次接触 模仿并调试程序 (1)汉诺(Hanoi)塔问题; 相传,在古代印度布拉玛婆罗门圣庙的僧侣进行一种佛事: 一块黄铜平板上,有三根钻石制成的细柱I、J、K; I柱上套着从上到下的,由小到大的64个金盘。 移动规则要求把I柱上的圆盘全部移到K柱上,移动到K柱上以后仍然从小到大排列,每次只允许移动最上面的一个圆盘,任何一步都不允许将较大的圆盘压在较小圆盘的上面。 并且僧侣宣称“当他们的佛事结束,世界将在一声霹雳中结束,他们的信徒将会升天,而其余人将会下地狱。” 至于最后一句话“世界将在一声霹雳中结束”是对是错,我们可以用计算机的方法来证明,而所谓的升天与地狱纯属无稽之谈。 I J K [解]我们先不去考虑I柱顶部的小盘怎样移动,而是首先考虑I柱底部的大盘到K柱上去。对于N个圆盘,如果能设法把I柱上的N-1个圆盘移动到J柱上,那么要移动剩下的第N个圆盘到K柱上就容易了。那么,N个圆盘的移动问题变成了N-1个圆盘的移动问题了。 将过程描述如下: (1)从I柱移动1至N-1号圆盘到J柱上,K柱作为暂用柱。 (2)从I柱移动第N号圆盘到K柱。 (3)从J柱移动1至N-1号圆盘到K柱上,I柱作为暂用柱。 [当金盘数量为3时移动过程如下图所示] I(K;I(J;K(J;I(K;J(I;J(K;I(K; [进行递归关系式和递归结束条件的构造] 在上述算法中,子任务2只需要移动一次就可以完成,而子任务1与任务3的提法完全相同, 原任务与任务1及任务3的区别在于任务1与任务3移动盘数少1,以及I、J、K三根柱子所处的位置不同。也就是说,原问题被转换成与原问题性质完全相同而规模小一级的问题。如果我们重复进行这种转换,直到无盘可以移动,问题就得到解决。 [源程序] program ex5_11(input,output); var m:integer; procedure move(n,I,j,k:integer); begin if n1 then move(n-1,I,k,j); writeln(I,’-- --’,k); if n1 then move(n-1,j,I,k); end; begin write(‘input m:’); read(m); move(m,1,2,3); end. 趣味扩展,如果我们将M=64,发现程序不停的运行,而我们关心的是它究竟需要移动多少次,而不是每一步的步骤,如何移动。 结果数学家发现这个问题的解与另一道数学题的解惊人的相似? 该数学题描述如下: 有一8*8的棋盘,在第一个格中放入1粒米,而第二格是第一格的两倍,其余格子放入米数是前一格米数的两倍,现在让你求出总米数是多少?(这个米数恰好就是我们所要的次数) 而这个数字是个天文数字,如果乘以人类的时间标准,时间足可以可以看到太阳系的毁灭。所以僧侣所说的最后一句话“世界将在一声霹雳中结束”也是正确的。 第十一课 集合 、记录和文件操作 一、集合类型   集合是由具有某些共同特征的元素构成的一个整体。在pascal中,一个集合是由具有同一有序类型的一组数据元素所组成,这一有序类型称为该集合的基类型。   集合类型的一般形式为:     set of 基类型;   说明: ①基类型可以是任意顺序类型, 255。例如下列说明是合法的: type letters=set of A..Z;   numbers=set of 0..9;   s1=set of char;   ss=(sun,mon,tue,wed,thu,fri,sat);   s2=set of ss;   ②与其它自定义类型一样, 可以将类型说明与变量说明合并在一起.如: type numbers=set of 0..9;   var s:numbers;   与 var s:set of 0..9;等价。   集合的值是用[和]括起来,中间为用逗号隔开的若干个集合的元素。如: [] 空集   [1,2,3]   [a,e,i,o,u]   都是集合。   说明:   ①集合的值放在一对方括号中,各元素之间用逗号隔开。   ②在集合中可以没有任何元素,这样的集合称为空集。   ③在集合中,如果元素的值是连续的,则可用子界型的表示方法表示。例如:       [1,2,3,4,5,7,8,9,10,15]      [1..5,7..10,15] 1,5,8 ]和[5,1,8]的值相等。 1,8,5,1,8]与[1,5,8]的值相等。 1,1+2,4]、[ch]、[succ(ch)]。   ⒈赋值运算   只能通过赋值语句给集合变量赋值,不能通过读语句赋值,也不能通过write(或writeln)语句直接输出集合变

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档