使用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
输出命令,输出的表数据一定是带 [ ]“框”的。考试时,靠的就是这些细微的知识点。
加载中,请稍候......