提要 本文是“VB”环境下的算法教学探讨。文章通过四个实例揭示了如何将算法原理和程序框图转化为VB程序;如何借助VB程序上机实践来进一步理解算法的实质(二分法求近似根);以及如何借助VB的循环语句解决较复杂的算法案例,从而深刻理解算法原理。本文还简要介绍了VB的基本语句,以此说明在“VB”环境下进行算法教学是符合数学课程与信息技术的整合中的“必要性”、“平衡性”、“广泛性”、“实践性”、“实效性”等原则。
主题词 VB 算法 教学
“现代信息技术的广泛应用正在对数学课程内容、数学教学、数学学习等方面产生深刻的影响。高中数学课程应提倡实现信息技术与课程内容的有机整合(如把算法融入到数学课程的各个相关部分),整合的基本原则是有利于学生认识数学的本质。”数学新课程标准关于“信息技术”的教学建议是:在教学中,应重视利用信息技术来呈现以往课堂教学中难以呈现的课程内容。同时,应尽可能使用科学型计算器、计算机及软件、互联网,以及各种数学教育技术平台,加强数学教学与信息技术的结合。数学新课程标准对算法内容的教学建议是:对算法内容,应着重强调使学生体会算法思想、提高逻辑思维能力,不应将算法简单处理成程序语言的学习和程序设计,同时应通过具体实例的上机实现(或编程)帮助学生理解算法思想及其作用。
新课程标准实验教科书《数学3》(必修,人教A版)对算法有如下描述:“现代意义上的‘算法’通常指可以用计算机来解决的某一类问题的程序或步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之内完成”。算法实际上就是解决问题的一种程序性方法,它通常指向某一个或一类问题,而解决的过程是程序性和构造性的。用自然语言和程序框图来表示算法是可以的,但是用程序语言来表示算法和进一步认识算法仍然是必要的:一是为了解决某个具体问题,我们设计的算法包含大量烦琐的计算、复杂的作图等操作,这时计算机强大的数据处理功能可以帮我们轻松地完成这些重复性的机械步骤;二是“计算机解决任何问题都要依赖算法”,计算机解决问题的过程就是对算法的执行过程,但这个算法必须是计算机能理解的语言描述,而我们采取“VB”这种程序设计语言就是计算机可以理解的语言。“VB”是可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言。我们可以轻松地画出用户界面,同时它的BASIC语言简单、易学,与教科书使用的类似BASIC的语句形式和语法规则能很好的融合,事实上办公软件EXCEL自带的VBA就是简单的“VB”程序设计语言。以下就从教科书的几个实例探讨如何进行算法教学。
一、用循环结构计算数列的前n项和
设计一个求12+22+32+…+1002的算法
分析:用循环结构解决本题.设累加变量为s,其初始值为0;计数变量为i,其值从1变到100.具体算法用程序框图表示如下:
根据程序框图,我们直接用WHILE … WEND语句在“VB”下演示,学生能清楚的看到结果,同时可求任意项的和,体会算法的通用性。
Private Sub Form_Load()
Dim n As Long, s As Long
n = InputBox("请输入 n:", "从1到n求平方和", 100)
s = 0
i = 1
While i <= 100
s = s + i * i
i = i + 1
Wend
Show
Print "1 到 "; n; " 的平方和是:"; s
End Sub
注:其和可以用公式n(n+1)(2n+1)/6验证。例如:
|
N
|
10
|
50
|
100
|
1000
|
|
输出
|
385
|
15150
|
338350
|
333833500
|
二、用区间二分法求方程的近似解
写出用区间二分法求方程x3-x-1=0在区间[1, 1.5]内的一个近似解(误差不超过0.0001)的一个算法。
分析:在“VB”环境下,只要画出界面,输入根据程序框图编写的程序代码,就能判断方程解的范围,计算出方程的近似解,在计算机上操作可以反复进行,有利于理解二分法的含义。
Private Sub Command1_Click()
a = Val(Text1.Text)
b = Val(Text2.Text)
e = Val(Text3.Text)
fa = (a * a - 1) * a - 1
fb = (b * b - 1) * b - 1
If fa * fb >= 0 Then
Text4.Text = "求解范围错!"
Else
Do
x = (a + b) / 2
f = (x * x - 1) * x - 1
If f * fa > 0 Then
a = x: fa = f
Else
b = x: fb = f
End If
Loop Until f = 0 Or Abs(b - a) < e
Text4.Text = Int(x / e + 0.5) * e
End If
End Sub
三、用秦九韶算法求多项式的值
设计求多项式

当x=5时的值的秦九韶算法。
分析:秦九韶算法是求一元多项式的值的一种方法.我们把求f(x)=a
nx
n+a
n-1x
n-1+…+a
1x+a
0的值转化为求递推公式

中v
n的值.通过这种转化,把运算的次数由至多

次乘法运算和n次加法运算,减少为至多n次乘法运算和n次加法运算,大大提高了运算效率.因此,秦九韶算法是一个很好的算法,而这种用递推公式表示的步骤可以用循环结构来实现.对照教科书的程序框图,我们用“VB”实现如下:
Private Sub Command1_Click()
Dim C(10) As Double
x = InputBox("请输入求值数", "")
C(0) = -0.8: C(1) = 1.7: C(2) = -2.6: C(3) = 3.5: C(4) = 2: C(5) = 5
n = 1
v = C(5)
While n <= 5
v = v * x + C(5 - n)
n = n + 1
Wend
Print "所求的值是"; v
End Sub
Private Sub Command1_Click()
Dim C(10) As Double
For i = 0 To 5
C(i) = InputBox("输入x的i次幂系数", "")
Next i
x = InputBox("请输入求值数", "")
n = 1
v = C(5)
While n <= 5
v = v * x + C(5 - n)
n = n + 1
Wend
Print "所求的值是"; v
End Sub
四、用冒泡排序法进行排序