纵观国内外少年儿童学LOGO语言编程,总体思维最为超前卓越的莫过于已经在国内流行近20年的“写生作图”了。如果你要深入了解“写生作图”是一种什么样的概念,请你仔细地看看从2005年开始至今的厦门地区的小学生信息学竞赛复赛试卷。以往国内林林总总的小学生LOGO语言竞赛,多半是像PASCAL试卷的复刻或翻版,内容艰深乏趣。但是厦门地区的复赛题却充满着新意,凡是目光所能及几的无尽的画面都能作为试题:路面的斑马线、电视上播送的空间课堂、网购新颖的LED手表、扫地机、拟人化的摘苹果……,无论是试卷题目的范例图片、还是编程成功后输出的图形,都好像是要求使用LOGO编程来“写生”画图。这种“写生”式的LOGO编程理念在国内外都是独树一帜的,内中散发出中国编程教育工作者深邃思维的芬芳。
这样的“写生”式的LOGO编程优点多多:“写生”必定是画图,这就充分调用了LOGO编程语言的第一功能——画图;此类视觉类LOGO编程考题贴近了小学生人日常生活认知,易于理解接受;其中有简单的送分题,也不乏难度极高的编程题;不但有画静态画面的作图题,更有动态动画作图题,还有不少需要调动鼠标或键盘功能的命题。题目的内容亲切感人,这些题目全会做的孩子将来绝对是编程的优秀苗子。
这方面新颖超前的思维方式即便是在国外最新潮的LOGO专业网站或编程书籍中也绝对是从来没有见到过的。
如果你对“写生作图”还没有印象,可以看看下面的范例,或是找到林老师编著的《复赛详解》把所有的题目都翻出来仔细地琢磨琢磨,必定会感知到这些“写生作图”编程题中洋溢着的童趣,并感受到和以往的经典LOGO作图编程题所不一样的超前卓越理念。
范例一:3D斑马线(2018年复赛)
交通规则规定,驾驶员驾车在遇到斑马线前要礼让行人并减速慢行。不少城市交警部门为了减少交通事故,设计了3D斑马线,即在地上画的是立体斑马线,使驾驶员误以为前方有路障而自然而然的减速慢行。请用LOGO语言,让海龟模拟画出3D斑马线。
说明与要求:
1.立体斑马线的立方体尺寸为
20X50X200,立方体之间的间距为130,阴影部分的尺寸同立方体的一个底面,距离立方体底部为15。其他参数参考图形酌情决定。
2. 整个图形只需在屏幕居中完整显示。
3. 执行过程bmx,则输出如图所示图形。
点评分析:初级规律作图题。考验作图者的空间驾驭能力。
范例二:打印动车车票(2011年复赛)
下表给出福厦动车线路各站站名和每相邻两站间的票价(简化),编程时可将各站名及票价作为固定的表写到您的程序中。
购票时只需输入过程名及起点站和终点站的编号,期待您的程序能打印出如下图所示的动车车票。要求:
(1)开车日期和时间固定为“2012年01月01日16时开”。
(2)车厢号在1-16之间随机产生;座位号在1-60号之间随机产生。
(3)打印站名起点在左,终点在右,例如输入TICKET 4 2
则站名应打印:泉州 ——〉厦门北。
(4)票价计算方法是:两站间的所有相邻站的票价之和。
(5)最后一行文字与票样内容一致。如果你的系统不能打印汉字,可用拼音代替。
(6)例如,执行过程TICKET
2 4,则打印如图所示的票样:
点评分析:编程要考虑正程购票厦门→莆田,或逆程福州→晋江。注意!这不是输出文本,而是输出图形。
范例三:飞行棋(2006复赛)
某飞行棋的棋盘如下。假设游戏为单人游戏,并且只有一架飞机(用海龟代之)。过程有一个输入表,表中元素的个数表示掷骰子的次数,每个元素的值表示飞机应前进的格子数。飞机按所掷骰子点数在格子中前进。当飞机停在红色格子时,飞机后退5格;当飞机停在绿色格子时,则向前再进5格;若所停的格子有虚线与其它格子相连接,则沿虚线(由左至右)飞行到指定的格子。
要求:
1、棋盘的画法参看右图:每一格子边长为50,起点和终点的格子边长为100。绿色(色码2)和红色(色码4)(注意!PCLogo和MSWLogo-FMSLogo的颜色码值是不相同的)格子须填色,图中所有汉字均不必显示。整个棋盘水平方向居中,并能在屏幕中完整显示。
2、主过程名为FXQ, 参数为一个表,表内每个元素的值由不大于6的数字组成。例如:FXQ [3
5 2 4] 表示掷了4次骰子,每个骰子的点数分别为 3,5,2,4。
3、海龟模拟下棋的全过程。从起点出发,按上述规则在每一格子中跳动或沿虚线飞行。要求能观察到海龟在每一格跳动的过程和沿虚线飞行的过程。当一次点数完成后,稍停片刻(约0.5秒),再跳下一点数。如果已经到达或超过终点,则停留在终点格子内,不再往前或折返跳动。不能到达终点的就停留在最终的格子内。
点评分析:有相当难度的编程题。有动态的图片如下。难度一点不亚于任何一次小学生C++、PYTHON的竞赛题。不信的话请自己试编写一下这道题目。(FMSLogo-MSWLogo编写的动画)
范例四:陶陶摘苹果(2018年复赛)
陶陶家院子里有一棵苹果树,树上结满了苹果。陶陶最想摘的5个苹果在树上一字排开。陶陶手持金箍棒站在滑行的滑板车上,当他的金箍棒触碰到苹果时,苹果就会自动掉落在滑板车上。陶陶能收获几个苹果?
说明与要求:
1.苹果由半径为20的圆表示,它们的间距为100,每个苹果的高度由参数表输入,范围在160~260之间。高度指苹果的最低端距离地面的高度。
2.小车从左向右匀速前行(动画),小车的高度是30(含车轮),金箍棒的长度为200,这样苹果的高度只要低于230就会被金箍棒触碰到了(不含230)。
3.落到滑板车上的苹果(快速搬动,滑落不作动画)会自动整齐排列,并跟着车前行。当到达最后一个苹果的位置后,小车停止前行,你就可以数数摘了几个苹果啦!
4.除了上述尺寸,其余尺寸都由你决定,评委评测时不会计较陶陶的头有多大。
5.例如,执行过程taotao [220 260 180 240
200],则输出如图所示图形及动画。
点评分析:动态动画作图题,内涵生动有趣。(FMSLogo-MSWLogo编写的动画)
范例五:世博队列(2010复赛题)
世博会每天都有数十万参观者。为了使参观有序,大部分场馆入口处的排队区都装有隔离栏,下图是某场馆隔离栏内100人排队的示意图。请你编程画出n个人排队的示意图(0<=n<=100)。
要求:
(1)展馆与隔离栏轮廓图的线宽为2,排队要求按图示的位子一人紧接一人,人用圆圈表示,直径为20,线宽为1,圆圈间距为5。圆圈与隔离栏不能交叉或重叠。除题目要求和图中标出的尺寸外,其它尺寸由你决定。
(2)隔离栏南面设有4个可临时打开的入口。当排队人数不多的情况下,可以打开4个临时入口的其中一个。规定:0-21人打开A入口;22-41人打开B入口;42-61人打开C入口;62-81人打开D入口,82人以上不打开任何临时入口。
点评分析:指定任意的人数都能正确地画准所有的圆圈并在隔离栏中蜿蜒排队,难度系数相当高。这样“绕”着排圆圈看似不可为,但事实是没有编程的人编写不出来的程序。下面是动态的示意图(FMSLogo-MSWLogo编写的动画)。
范例六:水池储水(2019复赛题)
水池是由左右两个凹槽构成,如图是水池的横截面图,三片挡板高度可能不一致(由输入参数决定)。水龙头在左边凹槽上方,打开水龙头可以对水池注水,请你编程序,演示注水的全过程。
演示过程:水先注入左边凹槽,如果可能还会漫过中间挡板注入右边的凹槽,当两侧挡板都高于中间挡板时,注水还有可能使两边的凹槽整体水面上升。当某一种情况不可能再装水时,(水不可溢出两侧挡板之外)此时注水立刻停止(注水水柱消失)。
说明与要求:
1.水池挡板厚度10,底总长400,三片挡板高度由输入参数决定(范围50-250)。水龙头出水口宽20,注水水柱由六条垂线表示,水面上升过程可以不断画出的水平线表示。水柱和水面都是蓝色的,其余黑色。(未及尺寸自酌定,具体见图八所示)
2.运行程序后,先画出水龙头和水池,等待鼠标点击水龙头(也可屏幕任意位置)时,开始注水。
点评分析:难点在于不同的挡板高度都能自动适应画出正确的动画。由于给的参数不一样,可能有多达9种不同的注水状态。(FMSLogo-MSWLogo编写的动画)
优秀的例子太多,不能全部展示。如要深入全面了解,请详见《复赛详解》。书中每道题目都有PCLogo-MSWLogo-FMSLogo三种源程序及详尽的说明注解。
其它写生作图实例: