加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用OP命令的队列移位问题2

(2022-12-05 14:47:38)
标签:

c

fmslogo

mswlogo

pclogo

林老师

分类: WinXP~7~8~10运行Logo语言
使用OP命令的队列移位问题 2
使用OP命令的队列移位问题2
      这是一个值得认真研究的LOGO编程问题。题目十分典型,题目的变化可以有许多种形态,这里面的名堂也很多,最适合作为考题了——这个题目本来就是已经上过试卷的“真题”。如果是要求你编程,任务是:“对于输入的数据 :W 请你编程将第 :K 个元素移位到开头,不用 OP命令输出已经完成队列移位的数据结果。”这个题目的可编程方式很多,我们只举例讲解其中的四种。这次介绍的“答案一”及“答案二”使用的都是 FOR 循环命令,用 FOR 循环逐位“剪取”数据源 :W 中的每一个元素。
答案一:MSWLogo-FMSLogo编程
TO B1 :W :K    ;用FOR_WORD命令的编程 MSWLogo-FMSLogo
  MAKE "N COUNT :W     ;测量输入数据的长度
  MAKE "W2 ITEM :K :W  ;把第:K个元素先提取出来置于:W2的开头
  FOR[I 1 :K-1][
    MAKE "W2 WORD :W2 FIRST :W ;将第:K位之前的元素先组装起来
    MAKE "W BF :W]             ;去掉:W中已经被组装的元素  组装成字符串
  MAKE "W BF :W                ;去掉第:K位元素
  FOR[I :K+1 :N][
    MAKE "W2 WORD :W2 FIRST :W ;将第:K位之后的元素先组装起来
    MAKE "W BF :W]
  OP :W2
END
      上述编程的原理其实非常直观:先用COUNT命令测量输入数据 :W 的常度,也就是包含几个元素。先把第 :K 位的元素“揪”出来先放在 :W2 变量中(这样原来第 :K 位元素在 :W2 中必定是搁在开头的)。接着用 FOR[ I 1 :K-1][]循环将前面的几个元素逐个“揪”出来接在 :W2 的后面。再用FOR[I :K+1 :N][]循环,把后面的若干个元素“揪”出来接在 :W2 的后面。现在 :W2 里面装的就是按照题目要求重新排列过的数据。

输出实例:      
PR B1 "12345678 3
31245678
SHOW B1 "12345678 3
31245678
PR B1 [1 2 3 4 5 6 7 8] 3
31245678
SHOW B1 [1 2 3 4 5 6 7 8] 3
31245678

      从上面的输出实例来看,这个程序不但能够处理字符串数据 "12345678,还能够处理表数据 [1 2 3 4 5 6 7 8]。只不过程序中是都是用 WORD 命令来连接每个数据的,所以输出的都是字符串数据 "31245678 。
      另外,想要输出 OP :W2数据,一定要用到PR或是SHOW命令。

答案一:PCLogo编程
TO B1 :W :K    ;用FOR_WORD命令的编程 MSWLogo-FMSLogo
  MAKE "N COUNT :W     ;测量输入数据的长度
  MAKE "W2 ITEM :K :W  ;把第:K个元素先提取出来置于:W2的开头
  FOR "I 1 :K-1][MAKE "W2 WORD :W2 FIRST :W MAKE "W BF :W] ;组装成字符串
  MAKE "W BF :W                ;去掉第:K位元素
  FOR "I :K+1 :N][MAKE "W2 WORD :W2 FIRST :W MAKE "W BF :W]
  OP :W2
END

    PCLogo的编程和MSWLogo-FMSLogo的编程略有不同。如果你上面的程序都看不懂,那么你的编程基础知识太少,应按本文末提供的方式搜索MSWLOGO或FSWLOGO找到《MSWLogo讲义Plus》或《新编PCLogo教程》从头自己仔细看看,就会明白了。太多的内容这里实在是说不完。

答案二:MSWLogo-FMSLogo编程
TO B1B :W :K    ;用FOR_SE命令的编程 PCLogo
  MAKE "N COUNT :W     ;测量输入数据的长度
  MAKE "W2 ITEM :K :W  ;把第:K个元素先提取出来置于:W2的开头
  FOR[I 1 :K-1][
    MAKE "W2 SE :W2 FIRST :W ;将第:K位之前的元素先组装起来
    MAKE "W BF :W]           ;去掉:W中已经被组装的元素  组装成表
  MAKE "W BF :W              ;去掉第:K位元素
  FOR[I :K+1 :N][
    MAKE "W2 SE :W2 FIRST :W ;将第:K位之后的元素先组装起来
    MAKE "W BF :W]
  OP :W2
END
      答案二是改用SE命令来连接经过移位的各个元素的。 SE 命令连接出来的是“表”数据,输出的也是“表”数据——这就是考试中出题目的“考点”。输出的结果与使用 WORD 的是不一样的:

输出实例:
PR B1B "12345678 3
3 1 2 4 5 6 7 8
SHOW B1B "12345678 3
[3 1 2 4 5 6 7 8]
PR B1B [1 2 3 4 5 6 7 8] 3
3 1 2 4 5 6 7 8
SHOW B1B [1 2 3 4 5 6 7 8] 3
[3 1 2 4 5 6 7 8]

      请仔细体会“表”的输出的格式,如果是用 SHOW 输出命令,输出的表数据一定是带 [ ]“框”的。考试时,靠的就是这些细微的知识点。

使用OP命令的队列移位问题2

使用OP命令的队列移位问题2

使用OP命令的队列移位问题2

使用OP命令的队列移位问题2


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有