小学生Pascal程序设计竞赛辅导初探.docx

上传人:b****0 文档编号:9964870 上传时间:2023-05-22 格式:DOCX 页数:15 大小:215.47KB
下载 相关 举报
小学生Pascal程序设计竞赛辅导初探.docx_第1页
第1页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第2页
第2页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第3页
第3页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第4页
第4页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第5页
第5页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第6页
第6页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第7页
第7页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第8页
第8页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第9页
第9页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第10页
第10页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第11页
第11页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第12页
第12页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第13页
第13页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第14页
第14页 / 共15页
小学生Pascal程序设计竞赛辅导初探.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

小学生Pascal程序设计竞赛辅导初探.docx

《小学生Pascal程序设计竞赛辅导初探.docx》由会员分享,可在线阅读,更多相关《小学生Pascal程序设计竞赛辅导初探.docx(15页珍藏版)》请在冰点文库上搜索。

小学生Pascal程序设计竞赛辅导初探.docx

小学生Pascal程序设计竞赛辅导初探

小学生Pascal程序设计竞赛辅导初探

黎志敏

【摘要】

东莞市小学生程序设计竞赛活动题型和考试形式与NOIP

类似,难度比NOIP略低,结合Pascal语言程序结构严谨,流程清晰,便于阅读和理解,与其它各学科联系紧密等特点,笔者总结出以下一些辅导经验:

在平时辅导时应注意选材与培养并举,增强小学生入门的趣味性、降低入门的难度;应注重学生逻辑思维的培养、应充分考虑小学生学习心理和认知特点;讲解应弃难从易、弃繁从简;适当“跳跃教学”等。

【关键词】小学生Pascal程序设计竞赛辅导

每年一次的东莞市小学生计算机程序设计竞赛活动,凸显了该市基础教育的信息技术特色,对提高学生分析问题能力、数学抽象能力、编程语言能力以及程序技巧、想象力和创造性都有显著的促进和提高。

东莞市小学生计算机程序设计竞赛所用语言由当初的Basic语言,转为Basic语言与Pascal语言并用,到如今Pascal语言完全取代Basic语言以来。

经实践证实,从小学习Pascal程序设计的思想,对小学生将来打开思路、挖掘潜能、提高科学素养和动手能力是不无裨益的。

笔者从小学生的心智特点、Pascal语言特点及笔者感悟的辅导经验等几个方面进行了初步探究,总结如下:

一、精挑细选,找苗子

Pascal程序设计的枯燥性及抽象性决定了学习Pascal程序设计苗子的选拔要科学化、现实化。

如果单凭一两次数学自查成绩就确定学生的程序设计竞赛方向而进行选材,结果就会因匆忙上阵而造成人才和时间的浪费。

为了做到有的放矢地进行选拔工作,笔者以为需要从以下几个方面去着手:

(一)学生必须有足够的对程序设计的学习兴趣

选择Pascal程序设计辅导的苗子首先应该考虑的是学生对信息技术及程序设计的兴趣。

作为小学生,这种兴趣可能是多方面的,比如对科学技术的向往、对我国航天事业发展及科学研究探求欲望以及对自身能力的肯定等等。

学生从接触Pascal程序设计到参加镇选拔需要一定时间的强化训练,这段时间中,学习的知识面很广、很深,涉及解决问题的方法也很抽象,遇到诸多的困难是可想而知的。

这就需要学生自觉地钻研课外知识,积极主动地去处理各种数学及逻辑问题,并以极大地毅力坚持下去,如果学生对Pascal程序设计没有浓厚的学习兴趣,这种执著的追求是不可能的。

(二)辅导的学生聪明和勤奋同等重要

笔者几年来的辅导过程中,曾经有部分同学半途而废,他们觉得太难跟不上进度而放弃;也有的学生虽然坚持下来,却像读天书一样混日子。

不要以为凡是聪明的学生就一定是好的Pascal竞赛苗子,聪明加勤奋才是成才的必要条件。

曾经有许多灵气很足的学生,他们起初对Pascal的兴趣很浓,也表现出一定的求知欲,只是在漫长的枯燥的学习过程中受外界干扰,不能持之以恒。

另外学生家长的支持以及学生家中是否有供学生练习用电脑也很重要,要学好Pascal程序设计,学生家长自然是要做出一定时间上的牺牲来辅导或给学生自学提供条件。

(三)扎实的数学功底及足够强的逻辑思维能力

所选的Pascal程序设计培训对象必须具备扎实的数学功底及足够强的逻辑思维能力。

程序设计离不开数学算法,比如:

素数、负数、实数、阶乘等都是普通小学生闻所未闻的数学知识,而我们Pascal程序设计辅导过程中却又是必不可少的。

如:

《2010年东莞市小学生计算机程序设计竞赛镇区选拔赛试题》第二题填空题第3小题:

5个男同学和3个女同学排成一排,3个女同学都不能相邻的排列有多少?

要解答此题就必须涉及到加法原理和乘法原理相关知识,缺少足够的数学功底是解不出结果的。

在数学老师处获得学生数学成绩的同时,笔者同时搜集了一些“找规律”习题以考查学生逻辑推理能力。

如:

1×3=12+2×1、2×4=22+2×2、3×5=32+2×3、4×6=42+2×4……规律:

n(n+2)=n2+2n

1×3+1=22、2×4+1=32、3×5+1=42、4×6+1=52、5×7+1=62……规律:

n(n+2)+1=(n+1)2

……规律:

152=100×1(1+1)+25、252=100×2(2+1)+25、352=100×3(3+1)+25、452=100×4(4+1)+25……规律:

(10n+5)2=100n(n+1)+25

……

规律:

通过对数学和逻辑思维以及家长配合程度的考察,最终确定程序设计竞赛辅导学生名单,做好辅导最关键的准备工作。

二、劳逸结合,保兴趣

Pascal作为程序设计语言相对于LOGO的图形编程来讲要抽象、难懂些。

作为自控能力不是很强的小学生,教师在教学过程中要有针对性,要尽量劳逸结合,想方设法让学生保持高昂的学习兴趣。

(一)寓教于乐,贴近生活

电脑最吸引孩子的当然是游戏了,在一段时间讲解之后,适当让他们放松一下,玩一小段时间游戏。

这一小段游戏时间一方面是对优者的奖励,另一方面是让心底有疑问的同学还可以继续向老师提问或自己思考。

所谓游戏也不是随便找个枪战游戏,而是在网上找的有Pascal源码游戏,如超级玛丽,要么就是些益智游戏,有条件的老师还可以顺带进行围棋知识的教学,以下棋的方式锻炼他们的思考能力。

有时,笔者也会给同学们带来一些程序员的故事、事迹。

从雷军加盟裘伯君的WPS撑起民族软件旗帜,到我国时下最流行的即时通讯软件QQ是如何从作者一个不经意的仿MirabilisICQ程序成长到风靡全国的龙头软件的,再到已故反病毒专家王江民怎样成为全国青年自学成才标兵的故事。

不断坚定他们学好程序设计的信心,培养他们的编程兴趣。

(二)交叉学习,预防疲劳

到了解决问题阶段,通常一段讲下来,学生们要花上很大的一段时间去理解、消化。

如果再讲新知识,学生也恐怕接受不了或记不住。

这时可以准备一些趣味逻辑问题,激发同学们的学习兴趣。

请看以下三个问题:

问题一

:

一天,一位女士在纽约城招呼一辆过往的出租车。

这位女士在通往目的地的途中喋喋不休地谈着,使司机感到十分厌烦。

司机说:

“对不起,女士!

您的话,我连一个字也没听见,我像根木头一样聋,我的助听器已经一天没工作了”。

这位女士听后,便停止了闲扯。

当她到达目的地下车后,她突然意识到出租车司机对她说谎。

她是怎么知道的呢?

问题二:

安德鲁、伯纳德和克劳德,这朋友三人骑自行车出行。

各人骑提一位朋友的车,戴的又是另一位朋友的帽子。

戴了克劳德的帽子的人骑的是伯纳德的自行车。

谁骑了安德鲁的自行车?

问题三:

决斗

这样的题可以训练学生的横向思维能力,对提高编程算法分析能力很有帮助。

三、因材施教巧辅导

(一)降低难度,弃难从易

首先,要从教材和辅导内容上降低难度。

小学生Pascal程序设计竞赛辅导的过程其实也是一个探究如何找到小学生心智所能达到的思维及创造力的临界点。

既要灌输一般人认为只有初、高中学生才能学及的数学知识及思维方式,又要让学生乐此不疲,吃得饱,撑不到。

在众多Pascal函数和过程中,笔记选择了19个数学函数以及9个字符函数打印在一页纸上,让学生去尝试理解,在编程时随时取用,不必强行背诵。

(A)十九个数学函数:

a1.Inc(i)使I:

=I+1;例:

Inc(I,b)使I:

=I+b;

a2.Abs(x)求x的绝对值例:

abs(-3)=3

a3.Chr(x)求编号x对应的字符。

例:

Chr(65)=’A’chr(97)=’a’chr(48)=’0’

a4.Ord(x)求字符x对应的编号。

例:

ord(‘A’)=65ord(‘a’)=97另外:

ord(false)=0ord(true)=1

a5.Sqr(x)求x的平方。

例:

sqr(4)=16

a6.Sqrt(x)求x的开方.例:

sqrt(16)=4

a7.round(x)求x的四舍五入例:

round(4.5)=5

a8.trunc(x)求x的整数部分例:

trunc(5.6)=5结果是integer型

a9.int(x)求x的整数部分例:

int(5.6)=5.0结果是real型

a10.frac(x)求x的小数部分例:

frac(5.6)=0.6

a11.pred(x)求x的前导pred(‘b’)=’a’pred(5)=4pred(true)=false

a12.succ(x)求x的后继succ(‘b’)=’c’succ(5)=6succ(false)=true

a13.odd(x)判断x是否为奇数。

如果是值为true,反之值为false.Odd

(2)=falseodd(5)=true

a14.power(a,n)求a的n次方power(2,3)=8

a15.random取0~1之间的随机数(不能取到1)

a16.randomize随机数的种子函数,在每次设置随机数时都要把这个函数放在最前面.

a17.Fillchar(a,size(a),0)数组初始化,即把数组a的值全部置为0

a18.SHR:

xSHRn把x换成二进制后向右移n位,相当于把x除以2n

a19.SHL:

xSHLn把x换成二进制后向左移n位,相当于把x乘以2n

(B)九个字符串函数

b1.连接运算concat(s1,s2,s3…sn)相当于s1+s2+s3+…+sn.

例:

concat(‘11’,’aa’)=’11aa’;

b2.求子串。

Copy(s,I,L)从字符串s中截取第I个字符开始后的长度为l的子串。

例:

copy(‘abdag’,2,3)=’bda’

b3.删除子串。

过程Delete(s,I,l)从字符串s中删除第I个字符开始后的长度为l的子串。

例:

s:

=’abcde’;delete(s,2,3);结果s:

=’ae’

b4.插入子串。

过程Insert(s1,s2,I)把s1插入到s2的第I个位置

例:

s:

=abc;insert(‘12’,s,2);结果s:

=’a12bc’

b5.求字符串长度length(s)例:

length(‘12abc’)=5

b6.搜索子串的位置pos(s1,s2)如果s1是s2的子串,则返回s1的第一个字符在s2中的位置,若不是子串,则返回0.例:

pos(‘ab’,’12abcd’)=3

b7.字符的大写转换。

Upcase(ch)求字符ch的大写体。

例:

upcase(‘a’)=’A’

b8.数值转换为数串。

过程Str(x,s)把数值x化为数串s.

例:

str(12345,s);结果s=’12345’

b9.数串转换为数值。

过程val(s,x,I)把数串s转化为数值x,如果成功则i=0,不成功则I为无效字符的序数例:

val(‘1234’,x,I);结果x:

=1234

以上函数应付一般的数学问题绰绰有余了。

至于其他相对复杂点的函数和过程一律被笔者所有意忽视。

在2010东莞市大朗镇信息技术学科的一次教研会议上,来自实验小学的李智老师总结了一句话叫做“准备是成功之母”,这句话很适合于小学生信息技术教学。

说说准备教材吧。

要想在竞赛辅导中脱颖而出,其中另一个重要的准备工作就是找一本适合小学生心智的教材。

为学生选好一本适宜难度的教材,学生才不会被吓跑,教师备课也方便,且切合实际。

笔者早年使用东莞新世纪英才学校所编撰的《信息学奥林匹克竞赛辅导教程(PASCAL语言)》,感觉有点象大中专信息技术课程教科书,用来辅导小学生很不顺手。

几经周折,终于发现了一本适合小学生辅导Pascal程序设计的教材,不妨推荐一下:

张文双、车辉主编,北京理工大学出版社出版的《青少年信息学奥林匹克竞赛培训教材—Pascal语言(小学版)》。

东莞市小学生程序设计竞赛一个必考内容是现行学校教育中的高中二年级《数学》课本中提到的分类计数原理和分步计数原理部分知识。

经过比较,窃以为人教版的高二《数学》教材中关于排列组合的内容相对于目前东莞市某些高中所用《数学》教材更适合小学生理解。

以下是人教版现行数学教材高二下B84页内容:

其中涉及到2种交通工具的乘车问题对小学生来讲相对容易理解点,而东莞市大朗镇第一中学同样高二数学教材相关内容是以高考相关现实来举例讲解,不大适合小学生使用。

在精选教材的基础上,软件方面,笔者为学生准备了乐滋滋工作室(lezizi.org)

的CPPascalEditor和FreePascal。

CPPascalEditor是一个优秀的Pascal语言的编辑环境。

CPPreview它采用独立的开源编译器CPPascalCompiler。

相比起其他Pascal语言编译器,它支持中文编译错误,中文运行时错误且更加稳定。

其编辑器首创了“批量赋值”与“三联不等式”等快速输入功能,大大提高了编辑效率。

独有的初学者知识库功能使得CP适合用于Pascal教学和小学生使用。

CPPascal有以下特性:

(1)中文界面,中文错误提示信息

(2)稳定性好(3)支持代码中输入中文(4)支持语法高亮(5)具有Math与Crt等常用单元(6)初学者知识库功能可显示变量数据范围等信息(7)独家提供快速输入模式(8)独家提供实时语法检查。

还拥有以下特殊功能:

(1)初学者知识库在代码的任意关键字处双击鼠标左键,提示面板上将会显示与该关键词相关的知识,例如数据类型范围等。

(2)CP代码快速输入模式 这项功能使学生可以在编写Pascal程序时使用来自其他语言的语法,甚至一些伪代码表达方式。

当您完成输入时,CP会自动将这些代码转换为符合语法的Pascal代码。

允许不保存直接调试,提供一次性显示多个编译错误提示功能,拥有实时代码语法检查功能。

加上友好的中文界面为留住学生增分不少。

至于FreePascal则是在学生在使用CPPascal后习惯Pascal编程思路后,为适应IOI或NOIP以及市程序设计竞赛强化训练使用。

其次,要从教育和辅导方法上寻找突破。

比如,我们常见的两个变量交换值的问题。

简单的

c:

=a;

a:

=b;

b:

=c;

三行即可,要让刚入门的小学生弄懂弄透着实不容易。

我们可以通过用三个玻璃杯A,B,C来演示两个变量a,b交换值的过程。

假设A杯盛的一杯酱油,B杯盛的是一杯自来水,如何让两个杯子里液体交换呢?

聪明的学生很快会想到利用第三个杯子C。

通过这样的演示学生很快就能理解a,b交换变量值必须用到第三变量c的原理,从而轻易解决这个抽象的教学难题。

再如:

求100以内的素数PASCAL程序。

Programprime(input,output);

{输出1-100中的素数}

Var

i,j,count:

integer;

flag:

boolean;

Begin

count:

=0;

Fori:

=2to100do

Begin

{用2到sqrt(i)去除i,看能否除尽}

flag:

=true;

FORj:

=2toround(sqrt(i))DO

IfiModj=0

Thenflag:

=false;

IFflag

ThenBegin

write(i:

4);

count:

=count+1;

IfcountMod5=0

Thenwriteln

End

End

End.

以上为较为严谨的算法,大型程序或数据庞大时必须节约每一毫秒的CPU开销!

但我们一时无法给小学生解释用2,3,4,…,根号i去除(为什么是i的开方,不是i),如果都除不尽,则i是素数。

在此,笔者选择以下程序:

Programzhisu(input,output);

Varj,n,x:

integer;

Begin

Write(‘输出素数:

’,2,’,’);

Forj:

=3to100do

Begin

X:

=0;

Forn:

=2tojdo

Ifjmodn=0then

X:

=X+1;

Ifx=1then

Write(j,’,’);

End

End.

实际程序设计中,我们也不能追求最佳算法。

解决问题的算法设计可以弃难从易,化繁为简。

小学生最好理解的那种算法就是最佳算法,而且小学生的可塑性是非常强的,适当给学生思维和创造力留白,给中学教师再教育留下可塑空间也是对学生的一种负责。

(二)坚持训练,百炼成金

足够的训练时间是学生学懂学会Pascal程序设计的重要保证,所以跟各科任老师以及班主任做好沟通,保证学生的出勤率也是一个不容忽视的问题。

通常,下午训练的学生要稍晚于其他同学回家,这就要求接送学生的家长配合,从另一个侧面说明了在选苗子时充分考虑家长、家庭因素也是十分必要的。

完成一个解决问题的程序过程一般为:

1.分析问题2.算法设计3.编写程序

有时按一般顺序讲了一两遍学生仍不懂的居多,就不必再从头讲起了,----直接将代码输出到大屏幕或写到黑板上,一句一句分析讲解,不断反复,在逐行分步解析程序变量的变化过程中让学生有所领悟,最终了解、懂得算法,达到解决问题的教学目标。

如讲到冒泡法排序知识点时,我们知道,冒泡排序的基本思想:

将待排序的数据看成一个个竖直排列重量不等的气泡,较小的数看作轻气泡要向上浮。

对这一串气泡从底部向上进行检查,顺次比较相邻的两个气泡的重量,若发现轻气泡在下则进行交换。

第一遍检查结束后,最轻的气泡(最小的数)浮到了最位置。

第二遍检查后,次轻的气泡浮到了次高位置。

如此反复进行下去,直到全部满足轻气泡在上重气泡在下为止。

有时在讲了基本思想后,学生仍不懂如何将其应用到编程应用去,只有在将实例讲解N篇过后,学生才能有所领悟。

此时,我们再返回来讲冒泡法排序原理就轻松多了。

讲冒泡法很抽象,尚未入门的同学很难接受。

诀窍就是以几组不同顺序的具体整数进行冒泡重复演示,跟踪变量的变化过程,不妨在循环体内加上一段此类代码如:

Wirte('第',i,’次循环:

’,a[i],a[j],);

以达到解说排序过程的变量的变化情况,最终达到学生弄懂弄透的效果,当然这里的I,j值不能太大,否则程序结果太长,造成时间的浪费,也不方便学生看。

如有一组数13,8,10,1,11,6,要将它们按从小到大的顺序排序。

冒泡排序过程如下:

第一遍检查,6和11比较,6<11,交换6与11;然后6和1比较,6>1,不交换;下面1和10比较,1<10,进行交换;同理1<8,进行交换;1〈13,进行交换。

第一遍检查结束时,1在最上,即有:

因为每一遍检查都会使上面的有序区增加一个气泡,在经过5遍检查后,有序区中就有5个气泡,下面剩下一个就是最重的气泡了,所以整个冒泡排序过程最多需要进行5遍。

如果在某一遍检查中未发现气泡位置的交换,则说明待排序的所有气泡均满足轻者在上,重者在下,因此,冒泡排序过程可至此终止。

具体程序为:

Programex1(input,output);

Var

I,j,n:

integer;

A:

array[0..50]ofinteger;

Begin

N:

=6;

Fori:

=1tondo

Read(a[i]);

Fori:

=1ton-1do

Forj:

=ndowntoi+1do

Ifa[j-1]>a[j]then

Begin

A[0]:

=a[j-1];

A[j-1]=a[j];

A[j]=a[0];

End;

Fori:

=1tondo

Wirte(a[i]:

4);

End.

以上程序,学习对象为小学生的情况下,就需要换几组不同的整数,反复讲解,最后结合冒泡排序原理才能使学生有所领悟。

由简单入手然后再讲难点,反复讲解学生仍不懂的不妨权且放过,待到时机成熟再回过头来渗透,这也就是笔者所谓的“跳跃教学”法。

结束语

小学阶段是孩子智力和能力发展关键时期,此时进行适当的结构化程序设计学习对于孩子来说非常有益。

它可以培养学生严密的逻辑思维能力、积极的探索创造能力、严谨的科学研究精神、丰富的空间想象能力。

这些能力和精神完全可以迁移到其他课程的学习和生活当中去,也可为学生就读初、高中后参加更高层次的全国青少年信息学奥林匹克竞赛(NOI)打下坚实基础。

 

【参考文献】

1NOIP全国青少年信息学奥林匹克分区联赛英文简称

2以下三个例题引自《训练逻辑思维的100道趣题》[法]皮埃尔·贝洛坎

3乐滋滋工作室(lezizistudio)是一个独立的非营利性组织。

4引自

5

引自《青少年信息学奥林匹克竞赛培训教材—Pascal语言(小学版)》

 

论文题目:

小学生Pascal程序设计竞赛辅导初探

作者:

黎志敏

单位:

东莞市大朗镇鸣凤小学

EMAIL:

hamletl@

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2