310 likes | 778 Views
Logo 程序设计. ( 授课讲稿 ) 吴剑辉. 第八讲 数值计算. Logo 语言是一种绘画功能很强的程序设计语言。同时,它的计算功能也毫不逊色。可以说,其他计算机语言提供的计算能力, Logo 语言都能实现。. 一、 Logo 的数和算术运算. 二、变量、函数及表达式. 三、数值计算程序选编. 一、 Logo 的数和算术运算. 1 、 Logo 的数. ⑴ 、大家熟悉的十进制整数和小数在 Logo 语言中任意使用。 例如: 198913 , –60285 , 4.73 , –13.85 , 18.0 。.
E N D
Logo程序设计 (授课讲稿) 吴剑辉
第八讲 数值计算 Logo语言是一种绘画功能很强的程序设计语言。同时,它的计算功能也毫不逊色。可以说,其他计算机语言提供的计算能力,Logo语言都能实现。 一、Logo的数和算术运算 二、变量、函数及表达式 三、数值计算程序选编
一、Logo的数和算术运算 1、Logo的数 ⑴、大家熟悉的十进制整数和小数在Logo语言中任意使用。 例如:198913,–60285,4.73,–13.85,18.0。 ⑵、Logo可以小数形式表示在1.00E–6到1.00E+6之间的数。超过此范围的数,Logo会自动转换为科学记数法。 例如:1000000应写成:1.00E+06,1356×108应写成:1.36E+11, –4.27 ×106应写成: –4.27E+06, 5. 3×10–15应写成:5.30E–15。 说明:E前面保留两位小数的数,而E后面表示正或负指数。 想一想,做一做: 123×108 12344566 987654321 1000000000 0.000012 – 0.0000034 –765432111 –1.698 ×10–7
十进制数 十进制数 0 0 1 1 2 3 2 4 3 5 4 6 5 7 6 8 7 9 8 10 十六进制数 二进制数 0 0 1 1 10 11 2 100 3 101 4 110 5 111 6 1000 7 1001 8 1011 十进制数 9 10 11 12 13 14 15 16 26 十六进制数 9 0A 0B 0C 0D 0E 0F 10 1A ⑶、各种进位制数:Logo的数可用多种进位制数表示。 ①、十进制数,如123、-123 ②、二进制数,如(1010)2是表示二进制数1010。 1010的值:1*23+0*22+1*2+0=8+2=10,是十进数的10。 ③、十六进制数,如:(12)16表示十六进制数12。 12的值:1*16+2=18,是十进制数18。 ⑷、十进制数与二进制数、十六进制数换算对照表
十进制数 17 38 56 105 二进制数 十六进制数 ⑸、数制函数 ①、输出数定制函数(BASE):[十进制数转换为多进制数] 【格式】:MAKE "BASE数 【功能】:BASE是一个预设的变量,它决定了LOGO输出的数的进制数。BASE的输入数必须是介于2和16之间的整数。 例题: ?MAKE "BASE 16 ?PRINT 10 0A ?MAKE "BASE 2 ?PRINT 10 1010 想一想,做一做:根据下列表中的十进制的数,填写。
十进制数 18 160 二进制数 101010 10000001 十六进制数 3A 63 ②、输入数定制函数(IBASE):[多进制数转换为十进制数] 【格式】:MAKE "IBASE 数 【功能】:IBASE是一个预设的变量,它决定了输入到Logo的数的进制数。IBASE的输入必须是介于2和16之间的整数。Logo输出的数的进制数是由系统变量BASE单独控制的。 ? MAKE "IBASE 16 ? PRINT 12 18 ? MAKE "IBASE 2 ? PRINT 10100 20 例题: 想一想,做一做:把下列表中的补写完整。
加 减 乘 除 数学中的运算符号 + – × ÷ Logo中的运算符号 + – * / 2、基本算术运算 ⑴、基本运算符。 在Logo语言中无论大括号、中括号、小括号, 一律用圆括号。 ⑵、运算规则。 有括号时则括号优先,无括号时则先乘除,后加减,这与数学中的运算顺序相同。 想一想,做一做:写出下列算术运算的结果 ①、(2+(3+(7+9/3)/2)/2)*5 ②、1+2-3*4/5 ③、(5/15+(18-12)/12)/(5/(2*3)) ④、(37+8)/9-2)*4 ⑤、((15+5)*3/2-(12*2+3)) -9/3 ⑥、2/2/2/2/(2/2/2) ⑦、(9/3+3*5+(88-33)/11*3)) ⑧、1*2*3/3*2*1
二、变量、函数及表达式 1、变量 变量即前面程序中用到的形式参数,它可以用在数值和函数运算中。变量名可以用一个或多个字母和数字符号组成。在为变量取名时,必须注意Logo语言的命令不能再作变量名。含有多个字符的变量名中不能夹杂空格或运算符号。 变量名前一定带有冒号,这是Logo变量同其它语言变量最明显的区别。 例如:⑴、以下的变量名是正确的: :X , :Y , :AM , :A2 , :M123 , :3B ⑵、以下的变量名是错误的: :FD , :CS , :A+B , :M N , :4
命 令 格 式 说 明 求随机数 RANDOM :X 产生一个从1~:X之间(包括1和:X)的随机的整数。 取整函数 INT :X 取X的整数部分,小数部分截去。 求余函数 REMAINDER :X :Y 求X除以Y所得的余数。 求平方根 SQRT :X 求X的平方根。 2、基本函数 3、运算与表达式 由常数、变量、函数进行各种运算的式子称为表达式。 表达式的写法与数学中有些不同,注意:参量符号中不要忘了冒号(:),乘号不能省略。下面举例说明: X+Y 应写成 :X+:Y 3a+2b-1 应写成 3*:a+2*:b-1 应写成 1-:X/4+:X*:X/5
三、数值计算程序选编 1、使用Logo计算器:中小学阶段数学课本中的所有算式都可以使用Logo进行计算。 ⑴、计算:数学算式 [(88+7) × 8÷6-9] ×3 结果: 353 ? ((88+7) * 8/6-9) *3 ↙ ⑵、计算:数学算式 ? 2+1/3-(1+1/7) ↙ 结果: 1.19 想一想,做一做:使用Logo计算器计算下列算式的结果
命 令 全 称 简 写 说 明 打印输出 PRINT 输出项 PR 输出项 在屏幕上打印显示输出后面的内容。 显示输出 TYPE 输出项 印出后不换行, 参数间无空格。 显示输入 TURTLETEXT 字或表 TT 字或表 打印它的输入在图形区中当前海龟位置上。 输出数据 OUTPUT 输入项 OP 输入项 把执行的结果应用到其它过程或命令中去, 不直接输出到屏幕上。 赋 值 MAKE “变量名 表达式 把表达式的值赋给变量。 2、在屏幕上打印显示计算。 ⑴、知识点:
⑵、比较PR、TYPE、TT的显示方法及屏幕状态的差异。⑵、比较PR、TYPE、TT的显示方法及屏幕状态的差异。 例题分析:计算两个数(100以内)相加的算术题。(由计算机随机出题并判断正确与否) ①、使用PR命令 ②、使用TYPE命令 TO JF2 MAKE "X RANDOM 101-1 MAKE "Y RANDOM 101-1 MAKE "Z :X+:Y (TYPE :X [+] :Y [=]) MAKE "C READ IF :C=:Z PR [对了!] STOP (PR [错了!正确的答案是] \ :X[+]:Y[=]:Z) PR [再试做一道!] JF2 END TO JF1 MAKE "X RANDOM 101-1 MAKE "Y RANDOM 101-1 MAKE "Z :X+:Y (PR :X [+] :Y [=]) MAKE "C READ IF :C=:Z PR [对了!] STOP (PR [错了!正确的答案是] \ :X[+]:Y[=]:Z[再试做一道!]) JF1 END
③、使用TT命令 TO JF3 DRAW HT PU SETY 120 PD JF3A END TO JF3A MAKE "A RANDOM 101-1 MAKE "B RANDOM 101-1 MAKE "C :A+:B PU SETXY SE -100 YCOR-20 PD (TT :A[+]:B[=]) MAKE "Q READ PU SETX -40 PD TT :Q IF :Q=:C PU SETXY SE -100 YCOR-20 PD TT [对了!] STOP PU SETXY SE -100 YCOR-20 PD (TT [错了!正确的答案是]:A[+]:B[=]:C[ ][再试做一道!]) JF3A END ?JF3 ↙(结果在图形窗口显示) ? 100 ↙ ? 121 ↙
3、使用Logo不同计算方式进行一题多解。 用Logo 过程我们能够写出许多趣味数学题目,让计算机进行复杂的计算,可以用不同的方法或命令进行编程。 例题分析:求前100个自然数的和。 方法二:累加计算用尾部递归 TO JS100B :N MAKE "S 0 MAKE "M 1 E :N END TO E :N IF :M>:N (PR [S=] :S) STOP MAKE "S :S+:M MAKE "M :M+1 E :N END 方法一:简便运算法 TO JS100A TYPE [1+2+3+...+100=] TYPE (1+100)*50 PR " END ? JS100A ↙ 1+2+3+...+100=5050 ? JS100B 100↙ S = 5050
方法三:累加计算用重复命令 TO JS100C MAKE "N 1 MAKE "S 0 REPEAT 100[MAKE "S :S+:N \ MAKE "N :N+1] (PR [S=] :S) END 方法四:用OP命令 TO JSD1 :N IF :N<2 OP 1 OP :N+(JSD1 :N-1) END TO JSD2 :N IF :N>100 OP 0 OP :N+(JSD2 :N+1) END TO JS100D MAKE "X JSD1 50 MAKE "Y JSD2 51 (PR [S=]:X+:Y) END ? JS100C ↙ S = 5050 【指导说明】: ? PR JSD1 69 2415 ? PR JSD1 70 太多的递归过程调用! 在函数JSD1 状态[OP :N + (JSD1 :N - 1)] ? ? JS100D ↙ S = 5050
命 令 格 式 说 明 步长型循环 FOR “变量名 初值 终值[命令序列] (FOR “变量名 初值 终值[命令序列]步长) 变量由初值开始,只要不超过终值就重复执行所规定的命令序列,每执行一次命令序列,变量增加一个步长。 当型循环 WHILE [条件] [命令序列] 当条件为真时,重复执行所规定的命令序列,直到条件为假结束循环。 方法五:用步长型循环语句 TO JS100E MAKE "S 0 FOR "N 1 100[MAKE "S :S+:N] (PR [S=] :S) END 方法六:用当型循环语句 TO JS100F MAKE "S 0 MAKE "N 1 WHILE [:N<=100][MAKE "S :S+:N \ MAKE "N :N+1] (PR [S=] :S) END ? JS100E ↙ S = 5050 ? JS100F ↙ S = 5050 【指导说明】:
图1-连加数的图形 4、在屏幕上用图表显示计算结果。 例题1分析:连加数的图形(如图1)。 编写过程:将1、1+2、1+2+3、……、1+2+3+……+N各数的高度使用直线表示,每根线之间距为10。 TO JGQX :N DRAW FS HT MAKE "A 2 MAKE "S 1 JG :A :S :N+1 END TO JG :A :S :N IF :A>:N STOP FD :S BK :S SETX XCOR+10 JG :A+1 :S+:A :N END ? JGQX 20 ↙ 想一想,试一试: 修改上面的过程,设计出如右图的模式图形。 ? LJTX 20 ↙
例题2分析:日本科学家角谷有个猜想:对于任意正整数N,总可通过若干次以下的变换,使得N变为1。例题2分析:日本科学家角谷有个猜想:对于任意正整数N,总可通过若干次以下的变换,使得N变为1。 变换的规则是:如果N为偶数,N变为它的一半;如果N为奇数,N变为它的3倍加1。 请你编写一个程序,验证角谷猜想,并以每次变换后的N为长度画出一组线段,相邻两条线之间间隔30,同时在每条线段下面用TT命令显示出变换过程中N的值。(如图2) ? CLXD 11 ↙ ? CLXD 9 ↙
TO CLXD2 :N IF :N=1 CLXD1 :N STOP CLXD1 :N IF NOT (INT :N/2)=(:N/2) MAKE "N :N*3+1 \ CLXD1 :N MAKE "N :N/2 CLXD2 :N END 编写过程如下: TO CLXD :N DRAW HT PU SETX -300 PD CLXD2 :N END TO CLXD1 :N FD :N BK :N PU BK 5 PD TT :N PU FD 5 PD PU RT 90 FD 30 LT 90 PD END ? CLXD 35 ↙ 【指导说明】: [复合条件]:(逻辑判断 < 表达式 > < 比较符 > < 表达式 >) ⒈NOT 条件(非): 条件不成立时输出为真(TRUE),条件成立时输出为假 (FALSE)。 ⒉(OR 条件1 条件2 条件3…)(或):有一个成立时, 则输出为真, 否则输出为假。 ⒊(AND 条件1 条件2 条件3…)(与):当多个条件中均成立时则输出为真, 否则为假。
图3-堆木块 例题3分析:堆木块。用每块方砖边长为10,叠成塔形。要求用X块叠造,有剩余的放于一边,并显示说明用去块数(S)、堆叠层数(N)、剩余块数(A)。(如图3所示) TO DM :X DRAW HT MAKE "N 0 MAKE "A 0 DM1 :N :A :X END TO ZFX :X REPEAT 4[FD :X RT 90] END ? DM 20 ↙ TO DM1 :N :A :X IF :A>:X MAKE "N :N-2 MAKE "A :X-(:A-:N-1) DM2 :N DM4 :A STOP MAKE “X :X MAKE "N :N MAKE "A :A+:N DM1 :N+1 :A :X END (计算用X块方木所能堆叠层数及剩余块数)
TO DM2 :N PU SETXY[-200 -65]PD (TT[叠造=]:N[层]) PU SETXY[-200 -50] PD DM5 :N 0 PU FD 15 PD DM3 10 :N END (显示堆放及计算用去方木块数和层数) TO DM3 :X :N IF :N<1 STOP REPEAT :N [ZFX :X PU RT 90 FD :X LT 90 PD] PU LT 90 FD :X*:N-:X/2 RT 90 FD :X PD DM3 :X :N-1 END (用N层堆叠木块) ? DRAW DM2 4 ↙ TO DM4 :A PU SETXY[50 -35]PD PU BK 15 PD (TT[剩余=]:A[块]) PU FD 15 PD IF :A=0 STOP REPEAT :A[ZFX 10 PU RT 90 FD 10 LT 90 PD] END (剩余方木块数的排放) TO DM5 :N :S IF :N<1 (TT[用去=]:S[块]) STOP MAKE "N :N MAKE "S :S+:N DM5 :N-1 :S END (计算所用方木的块数) ? DRAW DM4 5 ↙ ? DRAW DM5 6 0 ↙
4、小学数学问题的应用与求解工具。 ⑴、求自然数的约数。 TO ZRYS :N MAKE "I 1 (TYPE :N[的约数有]) YSH :N :I END TO YSH :N :I IF :I>:N/2 THEN PR :N STOP IF NOT :N/:I=INT :N/:I THEN GO "A (TYPE :I [,]) LABEL "A YSH :N :I+1 END ? ZRYS 48 ↙ 48 的约数有1 ,2 ,3 ,4 ,6 ,8 ,12 ,16 ,24 ,48 ? ZRYS 16 ↙ 16 的约数有1 ,2 ,4 ,8 ,16 【指导说明】: ⑴、GO "W:跳转到标号为W的语句,Logo语言不提倡GO语句。 ⑵、LABEL "W:设置标号W。
⑵、求两数的最大公约数。 [方法一]: TO ZDGYS1 :M :N IF (REMAINDER :M :N)=0 OP :N ZDGYS1 :N REMAINDER :M :N END [方法二]: TO ZDGYS2 :M :N LABEL "L MAKE "Q INT (:M/:N) MAKE "R :M-:Q*:N MAKE "M :N MAKE "N :R IF :R>0 THEN GO "L PR :M END ? PR ZDGYS1 36 54↙ 18 ? ZDGYS2 36 54↙ 18
⑶、求两数的最小公倍数。 TO ZXGBS :M :N MAKE "N1 :N MAKE "M1 :M IF :M>:N THEN GO "A MAKE "T :M MAKE "M :N MAKE "N :T LABEL "A MAKE "S INT (:M/:N) MAKE "R :M-:S*:N IF :R=0 THEN GO "B MAKE "M :N MAKE "N :R GO "A LABEL "B (PR :M1[和]:N1[的最小公倍数是]:M1*:N1/:N) END ? ZXGBS 36 48 ↙ 36 和 48 的最小公倍数是 144
⑷、分解质因数。 TO FJVYS :N TYPE :N TYPE [=] MAKE "I 1 LABEL "A MAKE "I :I+1 LABEL "B IF :I>SQRT :N THEN GO "C IF (NOT :N/:I=INT :N/:I) THEN GO "A TYPE :I TYPE [*] MAKE "N :N/:I GO "B LABEL "C PR :N END ? FJVYS 1092↙ 1092=2*2*3*7*13 ?FJVYS 72 ↙ 72=2*2*2*3*3 ? FJVYS 200 ↙ 200=2*2*2*5*5
⑸、比较三个数的大小。 TO BJDX :A :B :C (PR [A=]:A[B=]:B[C=]:C) IF :A>:B THEN MAKE "X :A MAKE "Y :B GO "P MAKE "X :B MAKE "Y :A LABEL "P IF :Y>:C THEN (PR :X[>]:Y[>]:C) STOP IF :X>:C THEN (PR :X[>]:C[>]:Y) STOP (PR :C[>]:X[>]:Y) END ? BJDX 0 6.3 11 ↙ A=0 B=6.3 C=11 11 > 6.3 > 0 ? BJDX 12 63 11 ↙ A=12 B=63 C=11 63 > 12 > 11
⑹、只要输入角度值,计算机就能画出该角度的图像和平分线。 TO PFJD :JD DRAW HT PU BK 15 PD (TT [输入角度为]:JD[度]) PU BK 20 PD (TT [平分角度为]:JD/2[度]) PU FD 35 PD RT 90 FD 100 BK 100 LT :JD FD 100 BK 100 RT :JD/2 REPEAT 10[FD 5 PU FD 5 PD] PU HOME END ? PFJD 130 ↙
⑺、按图中标注的尺寸画图,并求阴影部分的面积。⑺、按图中标注的尺寸画图,并求阴影部分的面积。 TO JSMJ DRAW HT REPEAT 6[FD 80 RT 90] RT 180 HOME PU RT 90 FD 80 LT 90 PD REPEAT 6[FD 50 RT 90] RT 180 HOME PU RT 65 FD 30 PD FILL PU FD 80 PD FILL PU BK 110 LT 65 PD PU SETXY[40 -4]PD TT 80 PU SETXY[100 -4]PD TT 50 MAKE "SB 50*50 MAKE "S1 80*80/2 MAKE "S2 (80+50)*50/2 MAKE "YS :S1+:SB-:S2 PU SETXY[-10 -20]PD TT [列式= 80*80/2+50*50-(80+50)*50/2] PU SETXY[-10 -40]PD (TT [阴影部分的面积是]:YS[平方厘米]) END ? JSMJ ↙
动脑筋,做一做 1、求 前10项的值。 (FF10) 2、化十进制数为二进制数。(如图A) ? RJZH 100↙ 3、鸡兔同笼问题。鸡比兔多26只,共有274只脚,问鸡、兔各有多少只?(JITU) (图A) 4、输出乘法九九表。(A99、B99) 5、确定算式(如图B)中的数字。(QDSX、QDS) (图B) 6、输出下列前20项,并以此数据为边长画螺旋正方形 (如图C):1,1+2,1+2+3,1+2+3+4‥ 。 (LXF 20) 7、求所有能被7整除的三位数的和。 (QH7) 8、求一组连乘:1×2×3×……×N,当N值是多少时,他们的乘积开始大于3500? (LCHENG 3500) (图C)
9、随机产生10组100以内两位数相加减的算式,并评分。9、随机产生10组100以内两位数相加减的算式,并评分。 10、分别编程打印出数字金字塔1 (如图D)和2 (如图E) 。 SZJZD2 5↙ (图E)-- ?SZJZD2 9↙ SZJZD1 5↙ (图D)-- ?SZJZD1 9↙ 11、按图中标注的尺寸画图,并求阴影部分的面积。 JSY1 ↙ JSY2 ↙ JSY3 ↙