小议Scratch在常见算法学习中的应用.doc_第1页
小议Scratch在常见算法学习中的应用.doc_第2页
小议Scratch在常见算法学习中的应用.doc_第3页
小议Scratch在常见算法学习中的应用.doc_第4页
小议Scratch在常见算法学习中的应用.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

小议Scratch在常见算法学习中的应用 编者按:儿童的智能是多元的,同样是Scratch,可以在艺术和工程领域大显身手,也可以在科学和数学领域深度探究,算法思维一直以来是程序教学的难点,使用Scratch语言来讲解复杂而重要的计算机算法,降低了难度,有助于算法思维的落实和拓展应用。 Scratch让编程变得足够简单,降低了编程门槛,也让孩子们体会到了编程的乐趣,那么Scratch是不是只能做一些简易的游戏,而不能进行深入编程知识算法的学习呢?于是,我们尝试利用Scratch去实现一些算法,发现Scratch真是非常强大,很多问题都可以轻松解决,教师完全可以利用Scratch教授一些算法和数据结构,引导学生利用Scratch和算法知识去创作更加优秀的作品。 为什么要学习算法?因为很多问题,前人已经提出了非常好的解决方案,如果我们不去学习算法,就会浪费大量的时间去思考,甚至很多问题我们无法想出解决方案,从而无法实现自己的想法。学习算法后,我们就可以利用这些知识快速解决问题,实现自己的想法,同时经过算法学习训练,分析问题、解决问题的能力也会有很大的提高。 下面我们来列举几个Scratch算法的实例,希望能够对大家有所帮助。 排序算法的学习 排序应该是程序中最常用的算法,如看到一个利用Scratch统计中文录入中键盘字母键敲击次数的小程序,就可以利用排序排出每个字母的敲击次数顺序。 那么如何利用Scratch实现排序呢?Scratch虽然不支持二维数组,但它对一维数组支持得非常好,并且融合了很多字符串的操作,所以Scratch对一维数组的操作得心应手。利用Scratch实现O(N2)的算法都非常容易,如插入、冒泡、选择都可以,在这里我们以插入排序为例为大家介绍实现方法,为什么要选择插入排序是因为Scratch在链表中提供了插入功能,让插入排序实现起来非常容易。 插入排序就像我们打扑克时的插牌过程,其实插牌就是把自己摸到的牌,进行从小到大的一次排序过程。我们怎么插牌呢?摸到牌之后,首先要找到这张牌的位置,从最后一张开始找,找到比这张牌小的牌,然后把这张牌插在后面就可以了。 我们以对5(一共要摸几张牌)个数排序为例,来描述问题的实现步骤,链表a用来存储数据,i表示已经输入多少个数(我们手中已经摸了几张牌):清空链表。设置i为1。输入第一个数。将第一个数插入链表。将后面4个数插入链表。将i值加1、输入第i个数、将位置j的值设置为i-1(也就是从最后一个数开始找)、找到比输入的数小的数位置j或者位置j为0就停止、将输入的数插入到j后面即可。 Scratch实现递归 Scratch虽然不支持函数但是对过程的支持非常好,所以利用Scratch可以非常容易实现递归算法。我们举最常用的递归例子,求N的阶乘,N!=(N-1)!N这个公式是递归算法的核心,如我们定义了一个过程阶乘(N),那么阶乘(N)就等于阶乘(N-1)乘N。我们用s来表示N的阶乘。如果N等于1,那么很显然s的值就是1,如果N不等于1,那么我们可以先计算(N-1)的阶乘s,然后N的阶乘s等于我们已经计算出的(N-1)的阶乘s乘N,实现代码如图1所示。 这种递归算法和数学中的归纳法非常相似,关键步骤有两步,第一能够求出最简单情况下,如N等于1时的值,第二能够找到由(N-1)到N的变化规律,我们再来看图2。 图2看起来非常漂亮,这是Scratch利用递归画出来的,怎么能够画出这样的图片呢?通过认真观察,我们可以发现图片的规律为:图片是由一个个由小到大的正方形旋转生成。 依据这一规律我们就可以研究绘制图片的算法,首先要研究怎么绘制一个正方形。画正方形时,可以先沿水平方向画一条边,然后向右旋转90度,再画一条边,再旋转,再画,这样就有三条边了,最后旋转一次画一条边,正方形就画好了;也就是说画正方形就是重复执行4次“画一条边,向右旋转90度”的操作。 我们如果要利用绘制正方形的规律来绘制图2的图像,就要改变每次重复的步骤:改变画笔颜色,这样可以实现变色效果。画一条边。旋转91度,这样可以实现正方形的旋转效果。边长加1,这样可以实现正方形由小变大的效果,代码如图3所示。 Scratch实现回溯 回溯算法也叫试探法,它是一种系统地搜索问题的解答过程的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。 由于Scratch目前不支持局部变量,所以比较容易实现双分支问题也就是我们常说的01背包问题,而对于更多的分支问题只能用非递归算法来实现。在讲回溯算法的时候,很多书都会画一个树状的分形图来描述回溯的过程,利用Scratch可以动态展示这样一个回溯的过程(如图4)。 怎么来画这样一幅图呢?我们先来实现画一条边,利用Scratch的移动L步和移动0-L步就可以了,为什么还要移动0-L步呢?目的是为了回到出发点。 我们再实现画一个“丫”,实现步骤如下:移动L步。画左边。向左旋转30度,移动L步,移动0-L步。画右边。向右边旋转60度,移动L步,移动0-L步。回到起点。向左旋转30度,移动0-L步。 我们用递归来实现以上步骤,为了让分支越来越短,可以逐步减少移动步长L,代码如图5所示。 我们还尝试用Scratch编写经典的编程问题N皇后问题,限于篇幅就不在本文中给大家介绍了,感兴趣的老师可以到以下网址下载。(http://cQTZFLRQucymw,访问密码为7761) Scratch作为一款图像化编程软件,简约而不简单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论