最新消息:

Scratch少儿编程进阶 第四讲 Scratch编程思想与数学问题(三)(完结篇)

Scratch 少儿编程 4501浏览 0评论
Scratch少儿编程进阶

友情提示:视频教程观看时请手动设置清晰度。

第四讲   Scratch编程思想与数学问题(三)

 

本讲通过Scratch编程与数学问题的结合,讲解计算机编程中的算法思想,并利用Scratch求解三个典型的数学问题。

第四讲的第三节,我们仍旧使用穷举的思想,用一种并不完美的方式,实现数学中常见的24点问题。

 

一、二十四点问题简介

24点问题是一个常见的数学问题,这个题目对于给定的任意四个数字,要求解答者只通过加减乘除四则运算,让这四个数字的最终计算结果等于24。

二、用计算机解24点问题的思想

计算机破解24点问题,主要是利用计算机强大的运算能力,穷举出所有计算4个数字的计算方法,然后逐一比对计算结果是否等于24,如果结果等于24,那么说明这个计算方法是正确的,如果所有可能的方法都不能得出24的结果,说明这4个数字无法算出24。

用计算机穷举所有计算4个数的方法容易让人产生困惑,最大的问题来自于四则运算的规则,并不是简单的从左向右,而是存在优先级问题,括号的优先级大于乘除,乘除又大于加减。因此如何把所有计算4个数字的可能性都列举出来,其实是整个问题的关键。

这里采取了一个变通的方式,我们可以仔细思考一下,不论数字运算的优先级如何复杂,都可以把一串数字,分解成一步一步的结算过程,第一步先计算哪两个数字,第二步再计算哪两个数字,其实才是问题的关键,而不用完全纠结于第一步的两个数字之间是做什么运算。因此我们通过三个过程变量来记录整个计算过程中,第一步两个数字的计算结果,第二步两个数字的计算结果,第三步两个数字的计算结果即可。最终比较第三步的计算结果与24之间的关系,看是否等于24。

 

三、Scratch编写24点程序的代码

本例程序代码较长,且难度较大,因此只讲解重要的思想及大部分代码的实现。

首先我们需要存储四个数字的空间,这可以通过四个变量来存储,但是为了减少变量命名,也为了方便后面的引用方便减少出错,我们采取链表的方式,将四个数字存在一个名为“输入数据”的链表中。

同时因为24点可能有多种解法,我们希望找出所有的解决方法,因此建立一个名为输出结果的链表,用于动态存储所有可能的运算方式。

Scratch少儿编程进阶 第四讲(三)(完结篇)

 

编写如下代码,在程序开始时,清空两个链表之前保存的数据,同时用一组循环,提示用户输入4个数字,并将这四个数字,保存在“输入数据”这个链表当中。

Scratch少儿编程进阶 第四讲(三)(完结篇)

 

定义如下变量:

Scratch少儿编程进阶 第四讲(三)(完结篇)

 

编写一个功能块,用来计算两个数进行四则运算,并将结果保存在变量“四则运算”中

Scratch少儿编程进阶 第四讲(三)(完结篇)

 

编写第二个功能块,用于连接产生最终输出的显示文字

Scratch少儿编程进阶 第四讲(三)(完结篇)

 

编写第三个功能块,用于计算4个数字,并判断是否能计算出24点,如果可以,则把计算过程利用前面的功能块连接相应字符,存入输出结果链表中。

Scratch少儿编程进阶 第四讲(三)(完结篇)

Scratch少儿编程进阶 第四讲(三)(完结篇)

 

 

这个功能块做了一个基本假设,假设整个的运算过程的顺序是先第一个数字和第二个数字运算,将运算结果存入结果1当中,然后结果1和第三个数字运算,运算结果存入结果2,然后结果2和第四个数字运算,运算结果存入结果3当中,最后比较结果3与24是否相等。

这段程序通过循环的方式来调用第一个功能块,使得每一步两个数字能够完成加减乘除的全部四种运算方式,记录下所有的运算结果。

由于加法与乘法满足交换律,即第一个数字和第二个数字的顺序不改变运算结果,但是减法和除法是不满足交换律的,因此当存在减法和除法运算时,需要额外交换两个数字的前后位置,保证验证到所有的可能性。这就是这段代码中,当出现运算2和运算4时,需要大量存在条件分支的原因。

程序到此,已经能够保证当四个数字按照一种给定的顺序计算时,判断是否能够得出24这个结果。但是小朋友可能要问,为什么计算过程一定要先算数字1和数字2,再算数字3,再算数字4呢?如果他们的顺序是其他顺序时,如何保证相关的计算方式也能被验证到呢?

我们是通过一组排列4个数字的所有可能顺序,不断调用“求24点”这个功能块,来解决这个问题的。

我们在开始语句后面加入这段代码

Scratch少儿编程进阶 第四讲(三)(完结篇)

 

现在点击开始按钮,这段程序已经可以运行起来了。

 

注:本节算法可实现绝大多数数字计算24点的问题,但是这个算法仍然是存在一个小漏洞的。在一种极其特殊的情况下,本讲的程序无法得出结果。这里给大家留一个思考题,请小朋友仔细思考,在哪种情况下不能得出答案,也许能够找到老师程序漏洞的人就是你哦!

老师之所以在整个教程的最后一节,留下一个并不完美的程序给大家,是想告诉大家,在实际的编程中,一定会存在各种各样的漏洞,程序大多数时候是无法做到百分百的完美的。发现程序的漏洞,并修补漏洞,是每个编程的人都需要面临的问题,大家要养成善于思考,善于发现问题的习惯,而不要盲目的迷信任何人的结论,自己思考才是最为关键的。

 

经过四讲12节课的讲解,我们的Scratch编程进阶课程,就要暂时告一段落了,经过进阶课程的学习,相信小朋友们已经对Scratch这种编程工具有了更深一步的认识,希望大家可以在未来的生活中,主动的思考问题,并主动的把遇到的问题通过编程的方式来解决,真正将Scratch这个工具用起来,才是真正的学会了编程。

在不远的将来,我还将为大家带来更加新鲜的编程课程,请感兴趣的小朋友继续关注,请记住,一个课程的结束,并不意味着学习的结束,而只是另一个过程的开始,大家要加油啊!

始发于微信公众号:
一人耕者

您必须 登录 才能发表评论!