极客小将

您现在的位置是:首页 » scratch编程资讯

资讯内容

第10课 统计集成——自动生成柱状图

极客小将2019-08-29-
第10课 统计集成——自动生成柱状图             任务导航在上一课中,我们研究了“从1到6间随机选一个数”这个代码,数据分析的环节是用Excel完成的,我们是否需要在Scratch中编写一个软件来完成数据的分析呢?这相当于编写一个科学研究

第10课 统计集成——自动生成柱状图

             

任务导航

在上一课中,我们研究了“从1到6间随机选一个数”这个代码,数据分析的环节是用Excel完成的,我们是否需要在Scratch中编写一个软件来完成数据的分析呢?这相当于编写一个科学研究软件,需要考虑软件编写的必要性。自编软件的优点是省去了数据导出→Excel分析的过程,自编软件可能会节省时间,但缺点是需要开发的时间。但如图10.1所示如果自编的软件能够比原来的Excel分析结论更加直观形象,就很有必要自编软件。同学们,你肯接受挑战么?

图10.1 随机选数结果的柱状图

 

任务分析

 

 

Follow Me

    1. 分析软件需求及目标

 

编写一款软件,首先需要明确想要编一款什么样的软件,初级目标、中级目标、高级目标分别是什么。中级目标是软件要核心完成的任务,完成了中级目标,软件的编写就算成功。初级目标是基础研究,是基于现有的水平和时间,将中级目标进行的简化,有时是完成核心代码,有时是积累一些基础的数据。高级目标时在中级目标基础上的提升,有时是软件原理上的创新,有的是小改进,可以算作是对软件的进一步地追求。初级目标、中级目标和高级目标,都要围绕着同一个“核”,这样软件的编写才科学、高效。

 

想一想:

分析300个随机数中1到6的数目,这个软件的三级目标是怎样的?

 

       我们可以这样整理三级目标,如表10.1所示。

表10.1 三级目标

中级目标链表中有300个数由从1到6的300个数据组成,编写出一个软件,统计出每个数字出现的次数
初级目标只统计出1出现的次数
如图10.1所示如图10.1所示
高级目标用柱状图反映出每个数字出现的次数,甚至表现出每个数字出现的次数相对于总次数的百分比

 

2. 算法及程序设计

从表10.1中可以看出,初级目标是为了解决这个程序的核心算法。算法是指程序中解决问题的核心方式,大部分的算法都可以从生活中得到启示,比如“在1和6间随机选一个数”这种随机算法,就与生活中的掷色子问题对应。这种联系生活研究编程算法的思考方式,称为生活算法。那么找到300个随机数中1的个数与生活中的那个过程类似呢?

比如,有一个袋子里面装着300个标有1到6六个数字的乒乓球,每次只能从瓶口拿出一个乒乓球,如果是1就放在另外一个袋子,不是1就扔掉。这个过程用代码表示时,如图10.1所示。

图10.2 统计链表中数字1出现的数目代码

想一想

  1. 编写图10.1所示的代码的过程中,需要新建那些变量?
  2. 如果链表中超过了300组数据,图10.1中的代码还能不能解决?
  3. 图10.1的代码可以完成初级目标,那如何修改一下它,让其完成中级目标呢?

 

DIY

编写一个可以统计1到6六个数字的代码,从变量的角度要从图10.1的代码中新建那些变量,从代码的角度,统计数字2出现次数的代码应该放在那个位置,与统计数字1出现次数的代码相比有什么区别。核心代码如图10.3所示。

图10.3 统计每个数字出现的次数

 

想一想

1.如果让链表中存储6000个随机数,然后让程序自动分析结果怎么做?完成这个实验,程序运行需要多长时间,是不是比Excel的方法快?

2.如何让结果可视化呢?

3.如果你使用图10.2所示的超速模式运行程序,你会发现程序运行的速度会提高10倍。

图10.2 超速模式下程序执行的速度会大大加快

 

3. 生成柱状图

柱状图的每个柱可以使用绘图编辑器完成,柱的高度要大于150个像素,注意需要选择“设定旋转中心”工具,将旋转中心设定为红色柱的顶端,如图10.3所示。

图10.3 绘制每个数字次数代表的圆柱

想一想

    如果能够在计数完成之后自动生成柱状图,程序的效果就大大提升了,请你思考一下,需要增添那些新角色?

 

图10.4所示的代码,可以将柱状图红色部分的上沿和数字1的数目保持一致。制作6个这样的角色,就可以实现柱状图效果了,最后用一个灰色的色块将所有彩条的下缘挡住,只保留纵坐标大于0的那部分,这样,柱状图就完成了,如图10.5所示。

图10.4 生成柱状图

 

图10.5 自动生成柱状图

DIY

如果将图10.4改进为图10.6所示的代码,可以显示出每个数字出现数目占总数的百分比。

图10.6 超速模式下程序执行的速度会大大加快

如果我们换一个思路,不从分析已有链表的数据出发,将实验的过程理解为:掷一次色子,得到那个点数,就在该点数所在的一栏加1,最后统计每个点数出现的次数和百分比,程序会有什么样的变化?图10.7给出了一个参考的思路

图10.7 将随机数的产生、识别计数、分析一体化的代码

图10.8是12万组数据汇总后的结果,看看是不是每个数字的出现的可能性是六分之一。

图10.8 12万组数据的分析结果

 

 

知识着陆

  1. 脚本:删除链表中的第1项,链表的长度
  2. 设计:如何生成一个柱状图
  3. 编程习惯:在程序编写时,设计初级目标、中级目标和高级目标

 

创作天地

  1. 分析图10.9所示的代码,那些代码是相似的结构?

 

 

图10.9 分析代码的相似性

  1. 如果使用图10.1所示的代码,链表最后就被清空了,这样原始数据就难以保存下来。一位同学做了图10.10所示的改进,请分析一下代码执行的过程。

图10.10 使用变量i来扫描链表中的所有数字

视野拓展

有一位同学制作了一只“机器老鼠”每碰它一下,就前进一1秒,如图10.11所示

10.11 机器老鼠

但是它发现老鼠1秒钟移动的距离稳定地在40左右的几个数之间变化,你能帮助他研究一下都可能出现那几个数,在多次实验的过程中每个数出现的百分比是多少,此外这支机器老鼠能不能有避障之类的其他功能呢?在http://scratch.mit.edu/users/towujunjie介绍了用Scratch制作一个虚拟机器人的方法,同学们可以试一试。

 

 

 


网友点评

共有5条评论来说两句吧...

在线客服