例谈“优化思想” 在初中VB教学中的运用

2019-11-16 14:28刘浩
中国信息技术教育 2019年19期
关键词:代码语句程序

刘浩

在目前初中学习阶段,程序设计已经纳入了信息技术学科教学的范畴,而在以Visual Basic(以下简称VB)为主要软件的程序设计教学框架中,“优化思想”已经随着教师的教学活动的开展逐步被潜移默化地运用。“优化思想”是在有限种或无限种可行方案(决策)中挑选最优的、最合理的方案(决策)的思想。问题的规模越大、复杂性越高,“优化思想”在解决问题的过程中应用的价值也就越明显。全国大多数区域初中信息技术课中安排了程序设计教学内容,这部分知识在现阶段教材中大多采用VB软件作为教学用软件。以这个软件为例,教师在教学中需要不断启发学生对“优化”一词进行体会,并且通过优化以达到节约代码量、高效解决问题的目的。本文就以日期格式这个实际问题来看“优化思想”在初中VB教学中的运用。

● 问题的提出

在生活中,我们常用某年某月某日这样的格式来表示日期,而在计算机中提供了许多种不同的格式。但在一些特殊情况下需要将年月日全部提取出来组合为一个8位日期,如2018年10月18日对应的8位日期值是“20181018”,2019年7月8日对应的8位日期值是“20190708”。根据学生的学习进度,VB提供的函数只能获取指定日期的月份和日期,但是当月份和日期为一位数的时候并不会加以处理。例如,2019年7月8日利用函数实际获得的内容是“201978”,这就是一个常见的日期格式问题,如果不去引导学生运用“优化思想”来解决,将会给整个程序的运行和后续学习的理解带来麻烦。

● 问题的解决

在程序设计中,由于算法不同、程序语句的选择与编写不同,程序执行的效果与效率也不同。为了能够使解决问题的一般程序语句最少、占用内存量少、处理速度最快、外部设备使用效率最高,于是便产生了通过对几个不同的程序进行比较、修改、调整或重新编写,把一般程序变换成最优程序的思想。当问题被提出以后,学生开始思考是否有相应的函数可以直接得出对应的格式日期,但是小组之间讨论了很久都没有得出结论,于是我提醒学生,当没有指定功能的函数时,我们可以利用函数构造新的更高级的函数。在我的指导下,学生找到了VB软件提供的year、month、day、now等基础函数,并且尝试利用这些函数构造8位完整的年月日数据。假设我们用变量SDate表示结果,再考虑到代码的易读性,就会有代码1产生(如图1)。

这样的代码可读性较高,在编写过程中学生也比较容易掌握赋值语句的写法,但是过于繁冗。多出的3个变量,虽然不会影响程序的整体运行效率,但是从软件开发的整体设计思路来说,需要进行精简,减少不必要的变量调用,那么我们的代码可以优化为代码2(如上页图2)。

假设now()函数取得的时间数据是“2019-7-8 12∶20∶20”,year函数用于获取括号内日期的年份,month函数用于获取括号内日期的月份,day函数用于获取括号内日期的日期。那么变量a的值是2019,b的值是7,c的值是8,构造的SDate变量值为201978。因为函数功能的限制,我们无法取得月份、日期两个数据的两位数写法,也就是20190708。如b的值我们希望是07,而不是7。至此我们就需要在不足两位数的月份和日期前补上一个“0”,才能满足数据要求。

此刻学生开始分组研讨该如何给需要补上“0”的数据补上“0”。学生在讨论中得出结论:最重要的就是要判断哪些日期需要加“0”。从月份和日期数据上看,1~9月都需要补一个“0”,1~9日也需要补一个“0”。此刻我一步步引导学生去观察数据特征,得出只要判断其长度即可找到需要补“0”的数据解决方法。在我的不断引导下,学生找到了判断字符长度的len函数,结合已经学习的IF判断语句即可解决问题。按照常规的代码编写方法,我逐步引导学生将代码改写为代码3(如图3)。

代码3就是可以完整实现程序功能的代码,运行后可以输出“20190708”这样的结果。于是我让学生在黑板上帮我绘制了本代码的流程图,多个判断语句的存在使得流程图非常复杂,代码中使用了IF和多重IF判断语句,增加了代码的复杂性,且过多的判断语句和多次运用函数获取月份和日期的做法,降低了代码的运行效率。于是在这里,我继续引导学生思考如何再优化代码。上述代码中SDate的构成次数太多,而且判断次数也多,我们可否将判断放在最前面,构造一个新的变量,然后将符合要求的变量进行组合?在我的启发下,学生找到了代码4所示的解决方案(如图4),进一步提升了运行效率。

代码4比起代码3已经有了很大的优化,结构简单而且可读性增加,重复调用的问题已经被解决。在我的引导下,学生也在黑板上帮我将原先的流程图简化了许多,但是依旧存在多个判断语句。这部分代码在实际教学中,学生在教师的引导下基本可以达到,“优化思想”也不断启发着学生如何才能进一步优化代码段。这段代码在实际运行中,还会建立两次判断语句,运用b、c两个新的变量。于是我进一步引导学生,充分运用优化的思想去剖析代码:如何不用IF语句也能达到判断或者解决长度为1的月份、日期变成两位数呢?

在教学的过程中我不断启发学生思考数学的借位算法,于是我将1到12月的12个数字在黑板上向下排开,一位数的前面加上“0”的时候,分组讨论的学生瞬间想到了解决方案,即不去判断变量长度,所有月份都在前面补一位“0”,然后直接从右向左取兩位数即可。于是学生立刻用Right函数将代码4优化为代码5(如图5)。

最终的代码不但实现了要求,解决了日期格式问题,而且大大提升了运行的效率。学生在绘制完流程图后惊奇地发现,流程图也被精简到了最大程度。从代码1到代码5,体现的是运用计算机软件解决问题的一般过程,同时也体现了“优化思想”在VB教学中的运用,而通过本案例也总结了初中VB教学中“优化思想”的教学建议。

● 问题的解决引发关于“优化思想”运用的思考

首先,将算法作为信息技术“优化思想”的核心,让学生运用算法思维去优化程序设计。不同的算法会影响程序编写的方法、程序编写的语言及程序编写的难易程度,所以,算法的优劣将直接影响所编程序的质量,可以说算法是程序的灵魂。我们对程序进行优化,实际上就是对算法进行优化,在教学中,我为了解决这个实际问题,在代码4已经解决了问题后,又重新进行了代码的算法选择,极大地提升了解决问题的效率。

类似的问题还出现在数学计算上,如求“1+2+…+100=”的值。对于这道题,我们可以采取循环结构程序进行设计,分析过程如图6所示。

如果用VB程序进行编写,最后得到的程序语句如图7所示。如果我们采用高斯算法进行编写,则该程序的编写就更加简单、高效,参考程序如图8所示。

很显然,采用第二种算法,程序编写更加简单,运行起来也更加高效。因此,程序优化要优化程序编写的过程与语句,使程序更容易编写。

要想让学生能够在进行程序编写时将所编写出来的程序最优化,培养学生的算法思维必不可少。祝智庭教授在《新世纪 新理念 新教材》中提出,算法思维通常被认为是解决问题的过程性思维方法,但我们可进一步把算法思维看作是人与机器共通的思维形式。算法思维就是要能够清楚地说明其规则。能将一个复杂的问题转化成几小块并将其进一步简化,这才是其本质所在,也是数学、科学和设计领域的一项重要技能。在程序设计教学中,教师应通过对学生进行算法思维训练与培养,使学生能够清楚地懂得其中的规则,将一个复杂的问题转化成几小块并将其进一步简化。而对学生进行算法思维的培养,则主要看重一个人是否具有条理化、反思性的思维习惯,能否将问题的细枝末节与总体规划相结合地考虑问题,这是决定其是否能够成功地解决问题的一个关键性因素。

其次,结合现实,提出问题,探讨优化策略,渗透“优化思想”。在学科领域,针对学科核心思想的优化研究,研究得比较多的是数学学科,其“优化思想”主要集中在如何解决数学问题上。而在信息技术学科中,我们应该结合现实问题,与学生展开探讨,在解决实际问题的过程中让学生体悟解决该类问题的方法,从中提炼出相关的优化规则与思想,形成知识结构,这样的过程对知识的掌握和理解程度甚至学科素养的培養都大有益处。

本文用日期格式的问题展现了“优化思想”如何在教师的运用下,逐步引导学生去思考解决问题并用更优化的方式解决。生活中我们常见的泡茶问题,将两种解决方法放在一起,也会出现更优的选择:

方法一:

N1:准备泡茶材料(茶杯、茶叶、水壶);

N2:在茶杯中放茶叶;

N3:将水壶中的水烧开;

N4:泡茶。

方法二:

N1:取水壶烧开水;

N2:在烧水的等待中取茶杯、茶叶;

N3:水开后,泡茶。

从上面的例子中可以看出方法二明显优于方法一。日期格式问题只是我们在编程解决实际问题中遇到的其中一个,还有许多问题值得研究和探索。比如计算星期几、计算闰年等题目类型,都需要结合我们的现实情况给出相对应的引导策略,一步步地吸引学生去开展更高效的学习。

最后,结合实践操作,充分利用流程图,感悟“优化思想”。在程序编写的过程中,带领学生绘制对应代码的流程图,依托流程图去优化代码并且感悟“优化思想”。这一点在本节课中有较多体现,从原来使用了IF语句的代码结构到后来最终的代码,结构发生了巨大的变化。不断优化的过程中随之带来的是效率的提升和代码量的减少,甚至解决问题的思路都发生了巨大变化,在这个过程中学生也能充分感受到“优化思想”的巨大价值。

“优化思想”对学生的影响是非常大的,今后他们在运用信息技术解决问题时,会去主动寻找各种优化的方法,从这个角度上讲,“优化思想”的掌握也有利于学生信息素养的提升。在信息技术学科的教学中,尤其是VB程序设计的教学,我们不能仅局限于优化方法的讲授,而是应着重对学生进行“优化思想”的渗透,积极引导学生运用“优化思想”去尝试解决遇到的问题,这对师生的教与学来说都是很有价值的。

猜你喜欢
代码语句程序
给Windows添加程序快速切换栏
简化化学平衡移动教学程序探索
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
神秘的代码
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
近期连续上涨7天以上的股
基本算法语句
我喜欢