270 likes | 443 Views
Logo 程序设计. ( 授课讲稿 ) 吴剑辉. 第九讲 字表处理. 使用 Logo 绘制图形和计算是很方便的。此外, Logo 还具有较强的文字处理能力。 这里的文字是指由英文字母、数字和其他字符组成的字符串,当然也可包括汉字的拼音。. 一、字表处理的基本命令. 二、字表合成与选取命令. 三、字表处理的应用选编. 一、字表处理的基本命令. 1 、什么是字和表. 字与表: Logo 处理的字符型数据像数值型数据一样,也有两种表现形式:字符常量和字符变量。
E N D
Logo程序设计 (授课讲稿) 吴剑辉
第九讲 字表处理 使用Logo绘制图形和计算是很方便的。此外,Logo还具有较强的文字处理能力。 这里的文字是指由英文字母、数字和其他字符组成的字符串,当然也可包括汉字的拼音。 一、字表处理的基本命令 二、字表合成与选取命令 三、字表处理的应用选编
一、字表处理的基本命令 1、什么是字和表 字与表:Logo处理的字符型数据像数值型数据一样,也有两种表现形式:字符常量和字符变量。 在处理字符型数据时,其值不能被改变的量称为字符常量;其值可以改变的量称为字符变量。 字符常量分为字和表两类。 ⑴、字:以一个双引号开头的一个字符串称为字。 ? “Hello (哈罗) 结果: HELLO ? “Beijing (北京) 结果: BEIJING
⑵、表:用空格字符间隔的几个字符串用方括号括起来称为表。(通俗地说,把若干个字组成的一句话,称为“表”) ?[How are you?] (你好吗?) 结果: [HOW ARE YOU?] ?[shuru shuju] (输入数据) 结果: [SHURU SHUJU] ? [50 5] 结果: [50 5] 【指导说明】: 1、一个双引号是“字”的标记,它不属于“字”的本身。组成“字”的字符串中不允许嵌入空格、圆括号、方括号和运算符号。字中的每个字符称为“字”的元素,如H、e、l、l、o等字符均为字Hello的元素。 2、方括号是“表”的定界符号,它不属于“表”。表中各字符串称为“表”的元素,如How、are、you?是表How、are、you?的元素。
2、字表的打印显示 为了在人机对话时能够使Logo语言输出字和表显示出来,就需要使用PRINT(PR)、TYPE或TURTLEXT(TT)。 ⑴、注意Logo语言中的命令与字相区别。 ? PR FD 50↙ (打印空行后,认定FD为Logo命令执行) (空行) ? PR "FD 50↙ FD (FD前加上一个双引号认定为Logo字打印显示) 结果: 50 ⑵、如果双引号后面或方括号里面没有任何东西,则称为空字或空表,用PR打印空字或空表则都产生一条空行。 ? PR " PR "ABC ↙ (空行) ABC ? PR [ ] PR [A B C] ↙ (空行) A B C
⑶、显示输出字符常量与字符变量的值。 ? PR "XIAMEN XIAMEN ? PR [Bye Bye] BYE BYE ? MAKE "X "XIAMEN ? PR :X XIAMEN ? MAKE "Y [Bye Bye] ? PR :Y BYE BYE ⑷、实现多个对象的联合输出。 ? (TYPE 12[+]26[=]) 12 + 26 =? ? MAKE "X [SHURU SUUJU] ? (PR "QING :X) QING SHURU SUUJU ? ⑸、输出一个表,只去掉了最外一层的括号。 ? PR [WO SHI XUESHENG] WO SHI XUESHENG ? PR [ZHE SHI BIAO:[ZHE SHI BAIO]] ZHE SHI BIAO [ZHE SHI BAIO] ?
3、键盘输入命令 为了更好地进行人机对话,Logo提供键盘输入命令,以便在程序执行中接受用户的输入。 ⑴、等待输入数据命令(READ) 【格式】:MAKE "变量名 READ 【功能】:变量接受从键盘输入的一个数值、字或表,直到按回车键结束。 举例说明: ? MAKE "M READ ? 25 ? PR :M 25 ? MAKE "N READ ? ABCD ? PR :N ABCD ? MAKE "P READ ? [WANG LAOSHI] ? PR :P WANG LAOSHI 【注意】:键入一个字时不必加带双引号表示。
应用题例分析:猜数。由计算机随机产生一个100以内的数,你能几次猜中!应用题例分析:猜数。由计算机随机产生一个100以内的数,你能几次猜中! TO CAISHI TS MAKE "X(RANDOM 101)-1 MAKE "N 0 LABEL "A MAKE "Y READ IF :Y>:X PR [大,再来一次!] MAKE "N :N+1 GO "A IF :Y<:X PR [小,再来一次!] MAKE "N :N+1 GO "A IF :Y=:X MAKE "N :N+1 (PR [猜对了!你猜了=]:N[次]) STOP END ? CAISHI ? 10 小,再来一次! ? 50 大,再来一次! ? 25 小,再来一次! ? 30 小,再来一次! ? 35 猜对了!你猜了 = 5 次 ? CAISHI ? 50 大,再来一次! ? 20 大,再来一次! ? 15 大,再来一次! ? 10 猜对了!你猜了 = 4 次
⑵、等待输入字符命令 READCHAR(RC) 【格式】:MAKE "变量名 RC 【功能】:变量接受从键盘输入的一个字符。 举例说明:按不同的键符分别实现前进10步、后退10步、右转10度、左转10度、抬笔、落笔、清屏和停止。利用它来作图。 TO HGZT MAKE "Q RC IF :Q="F FD 10 IF :Q="B BK 10 IF :Q="R RT 10 IF :Q="L LT 10 IF :Q="U PU IF :Q="D PD IF :Q="C CS IF :Q="S STOP HGZT END ⑴、在同一屏幕上画一个正方形和一个矩形。 ⑵、在同一屏幕上画一个平行四边形和一个正九角星。 【注意】: 计算机等待用户键入一个字符。输入字符后不用按回车键,Logo 会继续执行,直到终止。
③ ② ① ⑥ ④ ⑤ 应用题例分析:俄罗斯方阵。写出一个过程,按不同的键(1~6)来实现如图所示的俄罗斯方阵状态图。 TO FVT HT MAKE "N RC IF :N=1 THEN CS A1 IF :N=2 THEN CS A2 IF :N=3 THEN CS A3 IF :N=4 THEN CS A4 IF :N=5 THEN CS A5 IF :N=6 THEN CS A6 IF :N=0 THEN CS ST STOP FVT END TO A3 REPEAT 3[ZF RT 90 FD 20 \ LT 90] LT 90 FD 20 REPEAT 2[ZF RT 90 FD 20 \ LT 90] END TO A5 REPEAT 4[ZF RT 90 FD 20 \ LT 90] END TO A6 REPEAT 4[ZF FD 20] END TO A4 REPEAT 4[ZF FD 20 RT 90 \ FD 20 LT 90] END TO ZF REPEAT 4[FD 20 RT 90] END TO A1 REPEAT 3[ZF RT 90 FD 20 LT 90] RT 180 ZF END TO A2 REPEAT 3[ZF RT 90 FD 20 LT 90] FD 20 LT 90 ZF END
二、字表合成与选取命令 1、知识点:
2、题例说明与分析 ⑴、输出除第一个元素以外其它内容。 ? PR [A B C D E F G H] A B C D E F G H ? PR BF[A B C D E F G H] B C D E F G H ? PR BF BF[ A B C D E F G H] C D E F G H ? PR "ABCDEFGH ABCDEFGH ? PR BF "ABCDEFGH BCDEFGH ? PR BF BF "ABCDEFGH CDEFGH ⑵、输出除最后一个元素以外其它内容。 ? PR [A B C D E F G H] A B C D E F G H ? PR BL[A B C D E F G H] A B C D E F G ? PR BL BL[ A B C D E F G H] A B C D E F ? PR "ABCDEFGH ABCDEFGH ? PR BL "ABCDEFGH ABCDEFG ? PR BL BL "ABCDEFGH ABCDEF
⑶、输出该字或表的第一个元素。 ? PR "ABCDEFGH ABCDEFGH ? PR FIRST "ABCDEFGH A ? PR FIRST [A B C D E F G H] A ? PR FIRST BF "ABCDEFGH B ? PR BF FIRST "ABCDEFGH ? ⑷、输出该字或表的最后一个元素。 ? PR "ABCDEFGH ABCDEFGH ? PR LAST "ABCDEFGH H ? PR LAST [A B C D E F G H] H ? PR BL LAST[A B C D E F G H] G ? PR LAST BL[A B C D E F G H] ? ⑸、把几个短字合成一个较长的字。 ? PR WORD "AB "CD ABCD ? PR (WORD "AB "CD "EF "GH) ABCDEFGH
⑹、把几个表、字或数字, 形成一个新表。 ? PR SE "AB "CD AB CD ? PR SE "AB [CD] AB CD ? PR SE [AB] "CD AB CD? ? MAKE PR (SE "AB [CD] [EF] "GH) AB CD EF GH ? MAKE "Y 49+37 ? PR (SE 49[+]37[=]:Y) 49 + 37 = 86 ⑺、将参数合成一个表, 带上外层中括号输出。 ? PR LIST "AB "CD AB CD ? PR LIST "AB [CD] AB [CD] ? PR LIST [AB] [CD] [AB] [CD] ? PR LIST [AB] 35 [AB] 35 ? PR (LIST "AB [CD] 25) AB [CD] 25 ? PR (LIST "AB "CD "EF "GH) AB CD EF GH ? PR (LIST [AB][CD][EF][GH]) [AB] [CD] [EF] [GH]
⑻、输出为第一个参数作为一个元素放置在第二个参数表的前面。 ? PR FPUT "AB "CD ABCD ? PR FPUT "AB [CD] AB CD ? PR FPUT [AB][CD] [AB] CD ? PR FPUT [AB][CD] [AB] CD ? PR FPUT("AB "CD)[EF] AB EF ? PR FPUT "AB ([CD][EF]) AB CD ? PR FPUT([AB][CD])([EF][GH]) [AB] EF ⑼、输出为第一个参数作为一个元素放置在第二个参数表的后面。 ? PR LPUT ("AB "CD) "EF EFAB ? PR LPUT "AB ([CD][EF]) CD AB ? PR LPUT ([AB][CD])([EF][GH]) EF [AB] ? PR LPUT "AB "CD CDAB ? PR LPUT [AB][CD] CD [AB] ? PR LPUT "AB [CD] CD AB
想一想,做一做 1、PR SE BL WORD BL "AB "CD "EF 结果:___ 2、PR FIRST FIRST [YOU ARE A STUDENT] 结果:___ 3、PR LAST BL BL WORD "AA "BB 结果:___ 4、PR FPUT FPUT "A [B C][D E] 结果:___ 5、PR SE [A B] BF SE [C D] BL [E F] 结果:___ 6、PR WORD "A LAST SE BL [B] "C 结果:___ 7、PR (SE "A WORD "B "C "DE [F]) 结果:___ 8、PR LPUT "AA FPUT "BB [CC DD] 结果:___ 9、PR BF SE BL BL[AB BC CD DE EF][XX YY] 结果:___ 10、PR SE "A LPUT "B [C D E F] 结果:___ 11、PR WORD "AA BF WORD WORD "BB "CC "DD 结果:___ 12、PR SE FPUT "QQ [RR SS TT] WORD "U "V 结果:___ 13、PR ((FIRST "98)+(BF "78))*BL "98 结果:___ 14、PR (WORD "11 "22)*BF BL BF BL "12345 结果:___ 15、PR OR (RANDOM 7)>1 (BF "123)=23 结果:___ 16、PR NOT (FIRST[12 23 34])=12 结果:___ 17、PR AND (BF [A B])="B 3>5 结果:___ 18、PR OR (FIRST BF [A B])="B 3>5 结果:___
三、字表处理的应用选编 Logo语言作为一门初学者的电脑入门语言,你肯定已经体检到了它的优越性,生动、形象、富有情趣。但它的生命力还在于应用。也只有使用,才能使你的聪明才智有发挥之地。 1、将一个字符串中字母从右到左依次去掉。 TO QWZ :N IF EMPTY? :N STOP PR :N QWZ BL :N END ? TS QWZ "ABCDEFGH ABCDEFGH ABCDEFG ABCDEF ABCDE ABCD ABC AB A ? 【指导说明】: EMPTY?:X(是否空字表命令):考察X是否为空字或空表。 例如:IF EMPTY?:X STOP (判断如果X为空字或空表时过程执行终止。)
2、打印表元素的字头(缩写)。 TO SUX :D IF EMPTY? :D STOP MAKE "A WORD :A FIRST (FIRST :D) SUX BF :D END TO SUXX :D MAKE "A BF "X SUX :D PR :A END ? TS SUXX [BEGINNER' S ALLPURPOSE SYMBOLIC INSTRUCTION CODE] BASIC 【指导说明】:过程运行分解 ? TS SUXX [BEGINNER'S ALLPURPOSE SYMBOLIC INSTRUCTION CODE] B BA BAS BASI BASIC BASIC TO SUX :D IF EMPTY? :D STOP MAKE "A WORD :A FIRST (FIRST :D) PR :A SUX BF :D END
3、构筑字母金字塔⑴(如图所示)。 TO ZMJZDA :N DRAW HT MAKE "M COUNT :N ZGC2 :N :M PU HOME PD ZGC4 :N :M END ? ZMJZDA "ABCD ? ZMJZDA "ABCDEFGH TO ZGC1 :N IF EMPTY? :N STOP MAKE "S LAST :N TT :S PU RT 90 FD 12 LT 90 PD ZGC1 BL :N END TO ZGC2 :N :M IF EMPTY? :N STOP ZGC1 :N PU LT 90 FD :M*12 RT 90 FD 15 PD ZGC2 BL :N :M-1 END ? ZGC2 "ABCDEF 6 TO ZGC4 :N :M IF EMPTY? :N STOP ZGC3 :N PU RT 90 FD :M*12 LT 90 FD 15 PD ZGC4 BL :N :M-1 END TO ZGC3 :N IF EMPTY? :N STOP MAKE "S LAST :N TT :S PU LT 90 FD 12 RT 90 PD ZGC3 BL :N END ? ZGC4 "ABCDEF 6
4、构筑字母金字塔⑵(如图所示)。 TO ZMMB :N IF :N<65 STOP MAKE "N :N MAKE "M CHAR :N MAKE "A LPUT :A :M ZMMB :N-1 END TO ZMMA :N MAKE "N :N MAKE "M ASCII :N OP ZMMB :M END TO ZMJZDB :N MAKE "A BF "X ZMMA :N ZMJZDA :A END ? DRAW MAKE "A " ZMMA "F PR :A ABCDEF 【指导说明】: ⑴、COUNT:N输出字或表n的元素个数。例如, ? COUNT "ABCDEF ? COUNT [AB CD EF] 结果: 6 结果: 3 ⑵、ASCII "X输出单个字母的ASCII码。例如, ? ASCII "A ? ASCII "D 结果: 65 结果: 68 ⑶、CHAR :N输出ASCII码为n的字符。例如, ? CHAR 65 ? CHAR 90 结果: A 结果: Z ? ZMJZDB "D ? ZMJZDB "H
5、计数器 (如图所示)。 TO JSQ :N IF EMPTY? :N PU BK 10 LT 90 PE \ SETW 3 FD 22 RT 90 PD HT STOP MAKE "N :N MAKE "M FIRST :N JSQ1 0 :M PU BK 10 LT 90 FD 5 RT 90 PD TT :M PU LT 90 BK 5 RT 90 FD 10 PD PU RT 90 FD 24 LT 90 PD JSQ BF :N END ? DRAW JSQ [0 1 2 3 4 5 6 7 8 9 ] TO JSQ1 :M :N IF :N<1 PU BK 10*:M PD SETW 2 \ T SETW 1 STOP IF :N=0 SETW2 FD 110 BK 110 SETW 1 SXTY 12 5 FD 10 MAKE "M :M+1 JSQ1 :M :N-1 END TO SXTY :X :Y (STAMPOVAL :X :Y "TRUE) END TO T FD 110 BK 120 RT 90 FD 24 BK 24 LT 90 FD 10 END
6、石头-剪刀-布 。 计算机与人玩 “ 石头-剪刀-布 ” 的游戏。计算机出什么由随机数决定,人出什么从键盘输入,每比一次赢家可得一颗(五角)星,看谁先得到三颗星谁就是全盘游戏的胜利者,游戏结束。(如图:S代表石头,J代表剪刀,B代表布) TO JSB DRAW HT PU SETXY[-245 90]PD TT JSBS1 PU SETXY[-250 72] PD TT [石头-S] PU SETXY[-250 0]PD TT JSBJ2 PU SETY -8 PD TT [剪刀-J] PU SETXY[-250 -85]PD TT JSBB3 PU SETY -92 PD TT [布-B] PU SETXY[-100 110]PD TT [JI:] PU SETXY[-100 20]PD TT [REN:] MAKE "V 100 MAKE "W 100 MAKE "I 0 MAKE "Y 0 JSB6 END ? JSB↙
? JSBS1 ? JSBJ2 ? JSBB3 ? JSBX TO JSBS1 PU FD 20 RT 90 FD 10 LT 90 PD FD 10 RT 90 FD 20 RT 90 FD 40 RT 90 FD 35 RT 90 FD 30 RT 90 FD 20 RT 90 FD 15 RT 90 FD 10 RT 90 FD 5 PU BK 5 LT 90 BK 10 LT 90 BK 15 LT 90 BK 5 LT 90 PD PU RT 90 BK 10 LT 90 BK 20 PD END TO JSBJ2 REPEAT 180[FD 20*PI/180 RT 1] RT 135 FD 50 BK 25 RT 95 FD 25 BK 50 LT 45 PU BK 2 LT 90 FD 2 RT 90 PD SETH 0 END TO JSBB3 REPEAT 4[FD 40 RT 90] END TO JSBX SETH 0 RT 18 REPEAT 5[FD 50 RT 144] LT 18 END
TO JSB6 MAKE "P RC IF :P="Q STOP IF :I=3 PU SETXY[0 -70] PD TT [REN SHENG!] STOP IF :Y=3 PU SETXY[0 -70] PD TT [JI SHENG!] STOP IF :P="S MAKE "A "S PU HOME PD SETPC 15 SXTY 60 250 SETPC 0 JSBS1 IF :P="J MAKE "A "J PU HOME PD SETPC 15 SXTY 60 250 SETPC 0 JSBJ2 IF :P="B MAKE "A "B PU HOME PD SETPC 15 SXTY 60 250 SETPC 0 JSBB3 MAKE "X RANDOM 3 IF :X="1 PU SETXY[0 100]PD SETPC 15 SXTY 50 40 SETPC 0 JSBS1 IF :X="2 PU SETXY[0 100]PD SETPC 15 SXTY 50 40 SETPC 0 JSBJ2 IF :X="3 PU SETXY[0 100]PD SETPC 15 SXTY 50 40 SETPC 0 JSBB3 IF AND :A="S :X="1 PU PD IF AND :A="S :X="2 PU SETXY[0 0]RT 90 FD :V MAKE "V :V+70 PD JSBX MAKE "I :I+1 IF AND :A="S :X="3 PU SETXY[0 100]RT 90 FD :W MAKE "W :W+70 PD JSBX MAKE "Y :Y+1 IF AND :A="J :X="1 PU SETXY[0 100]RT 90 FD :W MAKE "W :W+70 PD JSBX MAKE "Y :Y+1 IF AND :A="J :X="2 PU PD IF AND :A="J :X="3 PU SETXY[0 0]RT 90 FD :V MAKE "V :V+70 PD JSBX MAKE "I :I+1 IF AND :A="B :X="1 PU SETXY[0 0]RT 90 FD :V MAKE "V :V+70 PD JSBX MAKE "I :I+1 IF AND :A="B :X="2 PU SETXY[0 100]RT 90 FD :W MAKE "W :W+70 PD JSBX MAKE "Y :Y+1 IF AND :A="B :X="3 PU PD JSB6 END
动脑筋,做一做 ⑶ ⑴ ⑵ ?ZFT [150 80 180 60 90 30] 直方图填颜色,正确的是: 蓝、绿、青、红、洋红、棕。 ? QW "F ? DRAW QWZA "ABCDEF ⑷、字表操作:找出并显示给定的两个表中都有的元素。(假设每个表本身没有重复的元素,不必判断输入的正误)例如,执行ZB ……↙(如右所示) ? ZB [A B C D] [B D E F] B D ? ZB [12 34 21 57] [34 50 12] 12 34
0 1 2 3 4 5 6 7 8 9 ⑸、制作条形码。条形码用来表示数某些数字以便计算机识别。条形码是由粗线和细线组成。一般设每四条粗线或细线的不同排列可对应表示一个数字(如图 1)。输入一串数字,制作(画出) 所对应的条形码。(如图2) 要求:①、粗线和细线都是实心长方形,高度均为60,粗线的宽为4,细线的宽为2;②、线与线的间隔均为4步;③、参数是一字串(图例)。 ? DRAW TIAOMA "1038↙ 图2 图 1 ⑹、阅读程序,在下列表格空格的位置上填上相应的命令参数或图形。、 TO DY :X IF EMPTY? :X STOP DY2 DY3 FIRST :X PU IF (FIRST :X)=0 [RT 180] [FD 30] PD DY BF :X END TO DY2 :X REPEAT :X[DY1 15] PU RT 90 BK :X*30 LT 90 PD END ? DY [1 2 3 4] TO DY3 :X IF :X<5 THEN [OP :X] [OP 5] END TO DY1 :R REPEAT 36[RT 5 FD :R*0.174 RT 5] PU RT 90 FD :R*2 PD LT 90 END ? DY [2 4 6 8] ? DY [4 4 0 3 3]