严大虎 白雪静
摘 要:分数四则运算是小学数学的重要内容,常用PowerPoint课件只有固定例题,本文介绍一种在PowerPoint中利用VBA程序实现自动出题和计算机批改题目的方法,从而可以快速制作“小学分数四则运算自测练习”课件。
关键词:分数四则运算;PowerPoint;VBA
中图分类号:G433文献标识码:B 文章编号:1673-8454(2009)16-0059-03
一、课件界面与执行过程
设幻灯片的名称为“SldCalcFraction”,采用“标题和两栏文本”版式。“标题区”含标题、最大数文本框(txtMaxNum)和批语文本框(txtComment);“左栏文本区”含题号、运算符、等号、“答案”文本信息以及分子分母文本框(txtFirstNum1~ 4, txtFirstDenom1~ 4,txtSecondNum1~4, txtSecondDenom1~4)和答案文本框(txtAnswer1~4);“右栏文本区”有“计算机批改”文本信息和批改文本框(txtTip1~4);下部的“按钮区”有“出题”、“批改”、“答案”、“清除内容”和“重做”五个按钮。课件界面如图1所示。
该课件既可由教师用于课堂教学,也可由学生用于练习和自测。其执行过程:在幻灯片的放映状态下,先输入最大数,最大数限制分子和分母的大小;单击“出题”按钮产生四道随机题目,用户将计算结果输入答案文本框中,然后单击“批改”按钮,根据结果产生相应信息。若重新计算做错的题目,可单击“重做”按钮;若查看正确答案,单击“答案”按钮;如果继续做题,在单击“清除内容”按钮后单击“出题”按钮。
二、VBA程序的设计
1.通用变量与数组声明
Dim a(1 To 4) As Long, b(1 To 4) As Long, c(1 To 4) As Long, d(1 To 4) As Long, e(1 To 4) As Long, f(1 To 4) As Long '数组a、b、c、d、e和f分别存储参与运算的两个分数的分子分母以及结果的分子分母
Dim i As Integer
Dim l As Long, m As Long, n As Long, p As Long '用于对数组a、b、c、d赋值
Dim q(1 To 4) As String '存储结果
2.分数化简方法
Sub yue(x As Long, y As Long) '将分子分母约分化为最简分数
Dim x0 As Long, y0 As Long, t As Long
y0 = y
x0 = x
Do While y0 <> 0 '求x和y的最大公约数
t = x0 Mod y0
x0 = y0
y0 = t
Loop
x = x / x0'x0为x和y的最大公约数
y = y / x0
End Sub
3.获取答案方法代码
Sub Get_Answer()
'加法运算中的分子
e(1) = CLng(txtSecondDenom1.Value) * CLng(txtFirstNum1.Value) + CLng(txtFirstDenom1.Value) * CLng(txtSecondNum1.Value)
'减法运算中的分子
e(2) = CLng(txtSecondDenom2.Value) * CLng(txtFirstNum2.Value) - CLng(txtFirstDenom2.Value) * CLng(txtSecondNum2.Value)
e(3) = CLng(txtFirstNum3.Value) * CLng(txtSecondNum3.Value) '乘法运算中的分子
e(4) = CLng(txtFirstNum4.Value) * CLng(txtSecondDenom4.Value) '除法运算中的分子
f(1) = CLng(txtFirstDenom1.Value) * CLng(txtSecondDenom1.Value)'加法运算中的分母
f(2) = CLng(txtFirstDenom2.Value) * CLng(txtSecondDenom2.Value)'减法运算中的分母
f(3) = CLng(txtFirstDenom3.Value) * CLng(txtSecondDenom3.Value)'乘法运算中的分母
f(4) = CLng(txtFirstDenom4.Value) * CLng(txtSecondNum4.Value)'除法运算中的分母
For i = 1 To 4
Call yue(e(i), f(i))'调用分数化简方法
If e(i) = f(i) Or e(i) = 0 Or f(i) = 1 Then '避免出现分子为0和分子分母都为1的情况
q(i) = e(i) / f(i)
Else
q(i) = e(i) & "/" & f(i)
End If
Next i
End Sub
4.“出题”按钮单击事件代码
Private Sub CommandButton1_Click()
CommandButton4_Click'调用“清除内容”按钮的Click 事件,清除题目的“分子”、“分母”、“答案”、“批改”和“批语”文本框的内容
If IsNumeric(txtMaxNum.Value) = False Then
MsgBox (" 请向“最大数”文本框中输入运算允许的“最大数”")
Exit Sub
End If
Randomize ' 以系统当前时间作为产生随机数的种子数
For i = 1 To 4 '生成每题的分子和分母;
d(i) = Int((CLng(txtMaxNum.Value) - 1) * Rnd + 2) '产生“2 ~最大数”的随机整数,即产生第二个运算数的分母
c(i) = Int((d(i) - 2) * Rnd + 2) '随机产生第二个操作数的分子
a(i) = Int((c(i) 2 + 1) * Rnd + 2) '随机产生第一个操作数的分母
b(i) = Int((a(i) - 1) * Rnd + 2) '随机产生第一个操作数的分子
l = a(i)
m = b(i)
n = c(i)
p = d(i)
Call yue(l, n) 化简第一个操作数
Call yue(m, p) 化简第二个操作数
在分子和分母的文本框中输入操作数
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtFirstNum" & i).OLEFormat.Object.Text = l
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtSecondNum" & i).OLEFormat.Object.Text = m
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtFirstDenom" & i).OLEFormat.Object.Text = n
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtSecondDenom" & i).OLEFormat.Object.Text = p
Next i
End Sub
5.“批改”按钮单击事件代码
Private Sub CommandButton2_Click() '
For i = 1 To 4 保证答案文本框非空
If ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtAnswer" & i).OLEFormat.Object.Text = "" Then
MsgBox "请先出题并给出全部答案后,再单击“批改”按钮!", 1, " 提示"
Exit Sub
End If
Next i
Get_Answer 获取答案
For i = 1 To 4 根据用户输入的结果的正确性,在“批改”和“批语”文本框显示对应信息
If CStr(ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtAnswer" & i).OLEFormat.Object.Text) =
q(i) Then
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtTip" & i).OLEFormat.Object.Text="答案正确!恭喜!"
Else
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtTip" & i).OLEFormat.Object.Text = "答案不对,找出原因哟!"
End If
Next i
If CStr(txtAnswer1.Value) = q(1) And CStr(txtAnswer2.Value) = q(2) And CStr(txtAnswer3.Value) =q(3) And CStr(txtAnswer4.Value) = q(4) Then
txtComment.Value = "您真棒!全答对了!"
Else
txtComment.Value = "没全对,继续努力!"
End If
End Sub
6.“答案”按钮单击事件代码
Private Sub CommandButton3_Click()
If IsNumeric(txtMaxNum.Value) = False Then'保证已出题
MsgBox " 请先出题后,再单击“答案”按钮! ", 1, " 提示"
Exit Sub
End If
Get_Answer '获得答案
For i = 1 To 4'在“答案”文本框中输入正确答案,同时清空“批改”和“批语”文本框的内容
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtAnswer" & i).OLEFormat.Object.Text = q(i)
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtTip" & i).OLEFormat.Object.Text = ""
Next i
txtComment.Text = ""
End Sub
7.“清除内容”按钮单击事件代码
Private Sub CommandButton4_Click()'
For i = 1 To 4'清除“分子”、分母、“答案”、“批改”与“批语”文本框的内容
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtFirstNum" & i).OLEFormat.Object.Text = ""
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtSecondNum" & i).OLEFormat.Object.Text = ""
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtFirstDenom" & i).OLEFormat.Object.Text = ""
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtSecondDenom" & i).OLEFormat.Object.Text = ""
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtAnswer" & i).OLEFormat.Object.Text = ""
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtTip" & i).OLEFormat.Object.Text = ""
Next i
txtComment.Text = ""
End Sub
8.“重做”按钮单击事件代码
Private Sub CommandButton5_Click()
For i = 1 To 4 '清除错误结果题目的“答案”和“批改”文本框的内容
If CStr(ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtAnswer" & i).OLEFormat.Object.Text) <> q(i) Then
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtTip" & i).OLEFormat.Object.Text = " "
ActivePresentation.Slides("SldCalcFraction").Shapes.Item("txtAnswer" & i).OLEFormat.Object.Text = ""
End If
Next i
End Sub
参考文献:
[1]陈琛,裴纯礼.“小学整数运算自测练习”PPT课件的设计与使用[J].中小学信息技术教育,2007,(6):55-57.
[2]马致明,陈惠敏等.PowerPoint中利用VBA制作交互式物理模拟课件[J].中国教育信息化(基础教育),2008,(16).
(编辑:隗爽)