2010-01-09 20:01:09 +0800 #1
对高中阶段算法教学的思考
沙有威
2009年9月2日星期三
高中算法的教学对高中生的学习具有重要的意义。从新课程使学生学习方式转变的角度看,算法教学为数学学科提供了数学实习的课程内容和课程环境,教学使学生在更广泛的范围内全面地学习了数学的相关知识,提高了学生数学的应用实践能力。算法教学作为信息技术的教学内容,使学生更加深入地理解了数学学科在信息技术学科中的基础作用,使学生感受和体会到在用计算机解决问题的过程中,数学建模与程序设计关系和作用,对学生结构化思维方式的形成具有促进作用。
一、算法教学在程序设计课中的实践
在中学计算机课中融入算法教学内容的尝试,可以追溯到1986年,在人民教育出版社出版的第一本中小学计算机教材《高级中学计算机选用教材程序设计》中就有与算法相关的教学内容,如:
用矩形法求不规则图形面积的问题 用二分法求方程根的近似值的问题 用蒙特卡洛法求不规则图形面积的问题 用秦九韶法求多项式值的问题 用辗转相除法求最大公约数的问题 ……… 所以算法教学的出现在信息技术学科程序设计课程中由来已久,算法教学的研究一直是信息技术教学研究的重要内容。
随着计算机课程向信息技术课程的过度算法教学的研究与实践更加深入,在教学中我们融入了更多的数学教学内容如:
画函数图像 求裴波那契数列与黄金分割值 利用用穷举法的思想求方程组的解 等经典的算法问题。
计算机课程中的算法教学不仅使学生开阔了眼界,还使学生在纯粹数学的基础上更多地了解了有关应用数学的知识,培养了学生应用数学的意识和能力。在学习中学生从实际问题入手,通过数学建模建立了数学与实际问题的联系,使学生通过数学建模的过程感受和体会了从实际问题到数学抽象的过程,在学习中学生还可以通过程序设计体会算法的应用,在学习过程中学生经历了从实际问题出发到问题解决的全过程。通过学习使学生逐步认识程序设计和中学数学之间的关系,即数学知识是信息技术课程的基础,而计算机是数学知识应用的平台。
二、算法教学内容在高中数学新课程中的设置
在高中新课程的内容设置上,将算法作为数学学科教学的一章内容放在高二的必修课本中,可见该内容在高中数学教学中的地位和作用,我们认为算法教学内容在数学中的设置体现了现代教育对数学应用的要求;体现了新课程对数学应用能力的培养;体现了数学教学对学生结构化思维方式培养的新要求。
在高中数学第三册课本(必修)的第一章中分别以:
第一节 算法与程序框图
1.算法的概念
2.程序框图与算法的基本逻辑结构
3.程序框图的画法
第二节 基本算法语句
1.输入语句、输出语句和赋值语句
2.条件语句
3.循环语句
第三节 算法案例
案例1 辗转相除法与更相减损术
案例2 秦九韶算法
案例3 进位制
为内容索引,介绍了算法的基础知识,可以称作算法的“三基”:算法的基本思想,算法的基本结构,算法的基本语句。高中数学课程提倡学生经历数学建模的过程,在学习算法的过程中感受数学问题应用的过程。
三、算法教学内容在高中信息技术新课程中的设置
在信息技术高中新课程中,设置了《算法与程序设计》的选修课程,课程从《标准》的角度强化了算法教学内容在信息技术高中新课程中的作用和地位,算法的教学内容从范围到要求都比以往有所提高和明确。《算法与程序设计》在原来程序设计课程与算法融合的基础上,增加或单独强调了一些重要的算法知识。教材用一章的篇幅专门介绍了常用、典型的算法。其中包括。
第一节:解析法与问题解决?
代数问题 递推问题 概率问题第二节:穷举法与问题解决
韩信点兵 逻辑推理问题 素数问题第三节:递归法与问题解决
计算阶乘 梵塔问题第四节:排序与查找
排序及其算法(比较法) 查找及其算法(顺序查找法、二分查找法) 在教材中的其它各章节中也以不同的方式介绍了一些常用的算法。课标强调在课程中要学生体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题。
四、高中算法教学的研究与思考
从整个高中涉及算法教学的内容分析中不难看出算法教学内容在高中教学内容的重要作用,但是如何使这种重要的作用得到充分的彰显,则是我们教学需要研究的问题。
注:此处应有描述集合的图片(见附件:算法论文图片1)
如果我们把算法的内容看做一个集合(如上图),那么高中算法教学内容是这个集合中的一个子集,在这个子集中包含着两个集合,其中一个是数学中的算法教学内容,另一个是信息技术的《算法与程序设计》的教学内容,而在数学中的算法教学内容与《算法与程序设计》教学内容的子集中存在一个交集,这个交集表达的教学内容是我们高中新课程中存在较大问题的部分,所以探讨和解决这部分内容中的问题是信息技术学科和数学学科都要引起重视的研究课题。
以上交集部分的教学内容在教学中产生的问题主要来自以下三个方面:
?
教学内容的重复 从前面对两个学科的教学内容的分析中不难看出,两个学科在不同的学科中重复着一些基本的教学内容,而这种重复又不是对原来教学内容的深化。这样的教学必然造成学生的厌学情绪。例如:对算法的描述、框图、程序语言的基本结构以及很多例题都是在两个学科的教学中重复出现的。如果将这些重复的内容作为一种数学基础知识,在信息技术学科中加以运用,则对数学的学习是一种应用与提高,对信息技术的学习也可谓是“水到渠成”。
教学时间的顺序 在课程标准中提倡两个学科算法教学内容的结合,但是由于各学科教学时间安排的不同,使得这种结合不能得到很好的落实。比如在信息技术学科教学中《算法与程序设计》的教学内容是安排在高一的第二学期进行的,而数学学科的算法教学内容是被安排在高二第一学期(数学必修3)进行的。这种教学时间的安排有可能会造成数学教学的“夹生饭”,如果能在数学算法“三基”的基础上开展信息技术的《算法与程序设计》教学,则可以使信息技术的教学是在学生数学算法基础知识上的教学提高。
类似教学时间顺序倒置的教学问题不仅在高中有,在初中也非常多。例如:学生平面坐标系概念的建立就是信息技术教学在前,数学教学在后,而信息技术的教学中坐标系的初建与数学的初建是不同的。信息技术教学中的坐标系初建时y轴的正方向是向下的,这一点与数学平面坐标系的初建是有区别的(如下图)。
注:此处应有描述坐标系的图片(见附件:算法论文图片2)
如果数学教学已经在信息技术教学使用坐标系之前就已经建立了坐标系的概念,那么信息技术在应用到坐标系的时候学生就不会出现一些错误的认识了。
程序设计语言的选择问题 目前数学教材中算法教学使用的一般是Qbasic语言,虽然该语言为“初学者符号指令代码”,但是目前中学信息技术课程中已经不使用或很少有使用这种语言的了,一般机房也不准备Qbasic语言的环境。所以数学课中的上机实践往往不能落到实处,从而使新课程中新增算法内容应用的初衷不能得以落实。所以建议在数学算法的教学中使用北京中学信息技术课使用的语言,因为这些语言在诠释数学课中的算法时使用的语句是类似的。
例如:编写用“二分法”求方程x2-2=0(x>0)的近似解算法的程序 书中用Qbasic编写的程序:
INPUT “a,b,d=”;a,b,d
DO
m=(a+b)/2
g=a^2-2
f=m^2-2
IF g*f<0 THEN
b=m
ELSE
a=m
END IF
LOOP UNTIL ABS(a-b)<d OR f=0
PRINT m
END
用VB语言编写书中的程序
Private Sub Form_Activate()
a = InputBox("")
b = InputBox("")
d = InputBox("")
Do
m = (a + b) / 2
g = a ^ 2 - 2
f = m ^ 2 - 2
If g * f < 0 Then
b = m
Else
a = m
End If
Loop Until Abs(a - b) < d Or f = 0
Print m
End Sub
用java语言编写书中的程序
import java.util.*;
public class erfenfa {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
double a=sc.nextInt();
double b=sc.nextInt();
double d=sc.nextInt();
do{
double m=(a+b)/2;
double g=a*a-2;
double f=m*m-2;
if(g*f<0)
b=m;
else
a=m;
}while (Math.abs(a-b)<d || f==0);
System.out.println("m="+m);
}}
在数学教材中算法用Qbasic实现时,使用了最基本的5个语句,它们是键盘输入语句(INPUT)、赋值语句(LET)、条件语句(IF….THEN)、循环语句(DO….LOOP UNTIL)、输出语句(PRINT)。如果使用目前流行的VB或java算法语言来实现算法,也可以使用相应语言的五个类似的语句即可实现(如以上程序)。
五、对高中算法教学的课程开发设想
鉴于对以上问题的探讨,我们提出以下设想,希望能以不同的方式起到解决以上问题的作用。
1.将数学算法的教学内容前移
数学知识是学生学习其它知识的基础,为了避免这一基础性知识的出现滞后于信息技术学科知识的学习,所以不妨将数学中算法的教学内容置于高一的第二学期,与《算法与程序设计》的教学同步进行,教学相互关联、相互呼应。由数学教师和信息技术教师共同形成备课小组。具体教学系统设计建议如下:
(1)数学教师负责数学书中,第一节 算法与程序框图的教学和第三节 算法案例的算法分析教学
(2)信息技术教师负责数学书中,第二节 基本算法语句、第三节 算法案例的程序实现的教学
(3)信息技术教师结合《算法与程序设计》课程的要求继续进行本学科相关要求的教学。
2.将信息技术《算法与程序设计》的开课时间后移
方案1:将信息技术课程后移一个学期,其它设计同1.
方案2:在学生基础较好的学校高一第二学期开设一个学期的选修模块教学,高二第一学期与数学同步开设必修模块《算法与程序设计》,其它设计同1.
方案3:在课时允许的学校在高二开设《算法与程序设计》选修模块,具体设计同1.
3.在原教学时间安排的基础上开设《算法及其应用》的校本课程
有条件的学校可以开设《算法及其应用》的校本选修课程,课程可将更多的内容,如统计算法,概率算法,绘图算法等中学数学中的内容或中学生可以接受的算法内容充实到课程中去。
4.数学学科与信息技术学科在适当的时间共同安排算法和程序设计相关的课程
以计算机作为数学教学的实验工具,以计算机教室作为数学教学的实验室,开发算法应用的相关内容。理论课由数学教师负责教学,实验课由信息技术教师负责教学。
以上问题即有学科间课标制定时教学内容的协调问题,也有教材编写的协调问题,也有教学的协调问题。个人拙见仅供参考。
沙有威
2009年9月2日星期三
高中算法的教学对高中生的学习具有重要的意义。从新课程使学生学习方式转变的角度看,算法教学为数学学科提供了数学实习的课程内容和课程环境,教学使学生在更广泛的范围内全面地学习了数学的相关知识,提高了学生数学的应用实践能力。算法教学作为信息技术的教学内容,使学生更加深入地理解了数学学科在信息技术学科中的基础作用,使学生感受和体会到在用计算机解决问题的过程中,数学建模与程序设计关系和作用,对学生结构化思维方式的形成具有促进作用。
一、算法教学在程序设计课中的实践
在中学计算机课中融入算法教学内容的尝试,可以追溯到1986年,在人民教育出版社出版的第一本中小学计算机教材《高级中学计算机选用教材程序设计》中就有与算法相关的教学内容,如:
用矩形法求不规则图形面积的问题 用二分法求方程根的近似值的问题 用蒙特卡洛法求不规则图形面积的问题 用秦九韶法求多项式值的问题 用辗转相除法求最大公约数的问题 ……… 所以算法教学的出现在信息技术学科程序设计课程中由来已久,算法教学的研究一直是信息技术教学研究的重要内容。
随着计算机课程向信息技术课程的过度算法教学的研究与实践更加深入,在教学中我们融入了更多的数学教学内容如:
画函数图像 求裴波那契数列与黄金分割值 利用用穷举法的思想求方程组的解 等经典的算法问题。
计算机课程中的算法教学不仅使学生开阔了眼界,还使学生在纯粹数学的基础上更多地了解了有关应用数学的知识,培养了学生应用数学的意识和能力。在学习中学生从实际问题入手,通过数学建模建立了数学与实际问题的联系,使学生通过数学建模的过程感受和体会了从实际问题到数学抽象的过程,在学习中学生还可以通过程序设计体会算法的应用,在学习过程中学生经历了从实际问题出发到问题解决的全过程。通过学习使学生逐步认识程序设计和中学数学之间的关系,即数学知识是信息技术课程的基础,而计算机是数学知识应用的平台。
二、算法教学内容在高中数学新课程中的设置
在高中新课程的内容设置上,将算法作为数学学科教学的一章内容放在高二的必修课本中,可见该内容在高中数学教学中的地位和作用,我们认为算法教学内容在数学中的设置体现了现代教育对数学应用的要求;体现了新课程对数学应用能力的培养;体现了数学教学对学生结构化思维方式培养的新要求。
在高中数学第三册课本(必修)的第一章中分别以:
第一节 算法与程序框图
1.算法的概念
2.程序框图与算法的基本逻辑结构
3.程序框图的画法
第二节 基本算法语句
1.输入语句、输出语句和赋值语句
2.条件语句
3.循环语句
第三节 算法案例
案例1 辗转相除法与更相减损术
案例2 秦九韶算法
案例3 进位制
为内容索引,介绍了算法的基础知识,可以称作算法的“三基”:算法的基本思想,算法的基本结构,算法的基本语句。高中数学课程提倡学生经历数学建模的过程,在学习算法的过程中感受数学问题应用的过程。
三、算法教学内容在高中信息技术新课程中的设置
在信息技术高中新课程中,设置了《算法与程序设计》的选修课程,课程从《标准》的角度强化了算法教学内容在信息技术高中新课程中的作用和地位,算法的教学内容从范围到要求都比以往有所提高和明确。《算法与程序设计》在原来程序设计课程与算法融合的基础上,增加或单独强调了一些重要的算法知识。教材用一章的篇幅专门介绍了常用、典型的算法。其中包括。
第一节:解析法与问题解决?
代数问题 递推问题 概率问题第二节:穷举法与问题解决
韩信点兵 逻辑推理问题 素数问题第三节:递归法与问题解决
计算阶乘 梵塔问题第四节:排序与查找
排序及其算法(比较法) 查找及其算法(顺序查找法、二分查找法) 在教材中的其它各章节中也以不同的方式介绍了一些常用的算法。课标强调在课程中要学生体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题。
四、高中算法教学的研究与思考
从整个高中涉及算法教学的内容分析中不难看出算法教学内容在高中教学内容的重要作用,但是如何使这种重要的作用得到充分的彰显,则是我们教学需要研究的问题。
注:此处应有描述集合的图片(见附件:算法论文图片1)
如果我们把算法的内容看做一个集合(如上图),那么高中算法教学内容是这个集合中的一个子集,在这个子集中包含着两个集合,其中一个是数学中的算法教学内容,另一个是信息技术的《算法与程序设计》的教学内容,而在数学中的算法教学内容与《算法与程序设计》教学内容的子集中存在一个交集,这个交集表达的教学内容是我们高中新课程中存在较大问题的部分,所以探讨和解决这部分内容中的问题是信息技术学科和数学学科都要引起重视的研究课题。
以上交集部分的教学内容在教学中产生的问题主要来自以下三个方面:
?
教学内容的重复 从前面对两个学科的教学内容的分析中不难看出,两个学科在不同的学科中重复着一些基本的教学内容,而这种重复又不是对原来教学内容的深化。这样的教学必然造成学生的厌学情绪。例如:对算法的描述、框图、程序语言的基本结构以及很多例题都是在两个学科的教学中重复出现的。如果将这些重复的内容作为一种数学基础知识,在信息技术学科中加以运用,则对数学的学习是一种应用与提高,对信息技术的学习也可谓是“水到渠成”。
教学时间的顺序 在课程标准中提倡两个学科算法教学内容的结合,但是由于各学科教学时间安排的不同,使得这种结合不能得到很好的落实。比如在信息技术学科教学中《算法与程序设计》的教学内容是安排在高一的第二学期进行的,而数学学科的算法教学内容是被安排在高二第一学期(数学必修3)进行的。这种教学时间的安排有可能会造成数学教学的“夹生饭”,如果能在数学算法“三基”的基础上开展信息技术的《算法与程序设计》教学,则可以使信息技术的教学是在学生数学算法基础知识上的教学提高。
类似教学时间顺序倒置的教学问题不仅在高中有,在初中也非常多。例如:学生平面坐标系概念的建立就是信息技术教学在前,数学教学在后,而信息技术的教学中坐标系的初建与数学的初建是不同的。信息技术教学中的坐标系初建时y轴的正方向是向下的,这一点与数学平面坐标系的初建是有区别的(如下图)。
注:此处应有描述坐标系的图片(见附件:算法论文图片2)
如果数学教学已经在信息技术教学使用坐标系之前就已经建立了坐标系的概念,那么信息技术在应用到坐标系的时候学生就不会出现一些错误的认识了。
程序设计语言的选择问题 目前数学教材中算法教学使用的一般是Qbasic语言,虽然该语言为“初学者符号指令代码”,但是目前中学信息技术课程中已经不使用或很少有使用这种语言的了,一般机房也不准备Qbasic语言的环境。所以数学课中的上机实践往往不能落到实处,从而使新课程中新增算法内容应用的初衷不能得以落实。所以建议在数学算法的教学中使用北京中学信息技术课使用的语言,因为这些语言在诠释数学课中的算法时使用的语句是类似的。
例如:编写用“二分法”求方程x2-2=0(x>0)的近似解算法的程序 书中用Qbasic编写的程序:
INPUT “a,b,d=”;a,b,d
DO
m=(a+b)/2
g=a^2-2
f=m^2-2
IF g*f<0 THEN
b=m
ELSE
a=m
END IF
LOOP UNTIL ABS(a-b)<d OR f=0
PRINT m
END
用VB语言编写书中的程序
Private Sub Form_Activate()
a = InputBox("")
b = InputBox("")
d = InputBox("")
Do
m = (a + b) / 2
g = a ^ 2 - 2
f = m ^ 2 - 2
If g * f < 0 Then
b = m
Else
a = m
End If
Loop Until Abs(a - b) < d Or f = 0
Print m
End Sub
用java语言编写书中的程序
import java.util.*;
public class erfenfa {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
double a=sc.nextInt();
double b=sc.nextInt();
double d=sc.nextInt();
do{
double m=(a+b)/2;
double g=a*a-2;
double f=m*m-2;
if(g*f<0)
b=m;
else
a=m;
}while (Math.abs(a-b)<d || f==0);
System.out.println("m="+m);
}}
在数学教材中算法用Qbasic实现时,使用了最基本的5个语句,它们是键盘输入语句(INPUT)、赋值语句(LET)、条件语句(IF….THEN)、循环语句(DO….LOOP UNTIL)、输出语句(PRINT)。如果使用目前流行的VB或java算法语言来实现算法,也可以使用相应语言的五个类似的语句即可实现(如以上程序)。
五、对高中算法教学的课程开发设想
鉴于对以上问题的探讨,我们提出以下设想,希望能以不同的方式起到解决以上问题的作用。
1.将数学算法的教学内容前移
数学知识是学生学习其它知识的基础,为了避免这一基础性知识的出现滞后于信息技术学科知识的学习,所以不妨将数学中算法的教学内容置于高一的第二学期,与《算法与程序设计》的教学同步进行,教学相互关联、相互呼应。由数学教师和信息技术教师共同形成备课小组。具体教学系统设计建议如下:
(1)数学教师负责数学书中,第一节 算法与程序框图的教学和第三节 算法案例的算法分析教学
(2)信息技术教师负责数学书中,第二节 基本算法语句、第三节 算法案例的程序实现的教学
(3)信息技术教师结合《算法与程序设计》课程的要求继续进行本学科相关要求的教学。
2.将信息技术《算法与程序设计》的开课时间后移
方案1:将信息技术课程后移一个学期,其它设计同1.
方案2:在学生基础较好的学校高一第二学期开设一个学期的选修模块教学,高二第一学期与数学同步开设必修模块《算法与程序设计》,其它设计同1.
方案3:在课时允许的学校在高二开设《算法与程序设计》选修模块,具体设计同1.
3.在原教学时间安排的基础上开设《算法及其应用》的校本课程
有条件的学校可以开设《算法及其应用》的校本选修课程,课程可将更多的内容,如统计算法,概率算法,绘图算法等中学数学中的内容或中学生可以接受的算法内容充实到课程中去。
4.数学学科与信息技术学科在适当的时间共同安排算法和程序设计相关的课程
以计算机作为数学教学的实验工具,以计算机教室作为数学教学的实验室,开发算法应用的相关内容。理论课由数学教师负责教学,实验课由信息技术教师负责教学。
以上问题即有学科间课标制定时教学内容的协调问题,也有教材编写的协调问题,也有教学的协调问题。个人拙见仅供参考。