嚴(yán)大虎 白雪靜
摘 要:分?jǐn)?shù)四則運算是小學(xué)數(shù)學(xué)的重要內(nèi)容,常用PowerPoint課件只有固定例題,本文介紹一種在PowerPoint中利用VBA程序?qū)崿F(xiàn)自動出題和計算機(jī)批改題目的方法,從而可以快速制作“小學(xué)分?jǐn)?shù)四則運算自測練習(xí)”課件。
關(guān)鍵詞:分?jǐn)?shù)四則運算;PowerPoint;VBA
中圖分類號:G433文獻(xiàn)標(biāo)識碼:B 文章編號:1673-8454(2009)16-0059-03
一、課件界面與執(zhí)行過程
設(shè)幻燈片的名稱為“SldCalcFraction”,采用“標(biāo)題和兩欄文本”版式?!皹?biāo)題區(qū)”含標(biāo)題、最大數(shù)文本框(txtMaxNum)和批語文本框(txtComment);“左欄文本區(qū)”含題號、運算符、等號、“答案”文本信息以及分子分母文本框(txtFirstNum1~ 4, txtFirstDenom1~ 4,txtSecondNum1~4, txtSecondDenom1~4)和答案文本框(txtAnswer1~4);“右欄文本區(qū)”有“計算機(jī)批改”文本信息和批改文本框(txtTip1~4);下部的“按鈕區(qū)”有“出題”、“批改”、“答案”、“清除內(nèi)容”和“重做”五個按鈕。課件界面如圖1所示。
該課件既可由教師用于課堂教學(xué),也可由學(xué)生用于練習(xí)和自測。其執(zhí)行過程:在幻燈片的放映狀態(tài)下,先輸入最大數(shù),最大數(shù)限制分子和分母的大小;單擊“出題”按鈕產(chǎn)生四道隨機(jī)題目,用戶將計算結(jié)果輸入答案文本框中,然后單擊“批改”按鈕,根據(jù)結(jié)果產(chǎn)生相應(yīng)信息。若重新計算做錯的題目,可單擊“重做”按鈕;若查看正確答案,單擊“答案”按鈕;如果繼續(xù)做題,在單擊“清除內(nèi)容”按鈕后單擊“出題”按鈕。
二、VBA程序的設(shè)計
1.通用變量與數(shù)組聲明
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 '數(shù)組a、b、c、d、e和f分別存儲參與運算的兩個分?jǐn)?shù)的分子分母以及結(jié)果的分子分母
Dim i As Integer
Dim l As Long, m As Long, n As Long, p As Long '用于對數(shù)組a、b、c、d賦值
Dim q(1 To 4) As String '存儲結(jié)果
2.分?jǐn)?shù)化簡方法
Sub yue(x As Long, y As Long) '將分子分母約分化為最簡分?jǐn)?shù)
Dim x0 As Long, y0 As Long, t As Long
y0 = y
x0 = x
Do While y0 <> 0 '求x和y的最大公約數(shù)
t = x0 Mod y0
x0 = y0
y0 = t
Loop
x = x / x0'x0為x和y的最大公約數(shù)
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))'調(diào)用分?jǐn)?shù)化簡方法
If e(i) = f(i) Or e(i) = 0 Or f(i) = 1 Then '避免出現(xiàn)分子為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'調(diào)用“清除內(nèi)容”按鈕的Click 事件,清除題目的“分子”、“分母”、“答案”、“批改”和“批語”文本框的內(nèi)容
If IsNumeric(txtMaxNum.Value) = False Then
MsgBox (" 請向“最大數(shù)”文本框中輸入運算允許的“最大數(shù)”")
Exit Sub
End If
Randomize ' 以系統(tǒng)當(dāng)前時間作為產(chǎn)生隨機(jī)數(shù)的種子數(shù)
For i = 1 To 4 '生成每題的分子和分母;
d(i) = Int((CLng(txtMaxNum.Value) - 1) * Rnd + 2) '產(chǎn)生“2 ~最大數(shù)”的隨機(jī)整數(shù),即產(chǎn)生第二個運算數(shù)的分母
c(i) = Int((d(i) - 2) * Rnd + 2) '隨機(jī)產(chǎn)生第二個操作數(shù)的分子
a(i) = Int((c(i) 2 + 1) * Rnd + 2) '隨機(jī)產(chǎn)生第一個操作數(shù)的分母
b(i) = Int((a(i) - 1) * Rnd + 2) '隨機(jī)產(chǎn)生第一個操作數(shù)的分子
l = a(i)
m = b(i)
n = c(i)
p = d(i)
Call yue(l, n) 化簡第一個操作數(shù)
Call yue(m, p) 化簡第二個操作數(shù)
在分子和分母的文本框中輸入操作數(shù)
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 根據(jù)用戶輸入的結(jié)果的正確性,在“批改”和“批語”文本框顯示對應(yīng)信息
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 = "沒全對,繼續(xù)努力!"
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'在“答案”文本框中輸入正確答案,同時清空“批改”和“批語”文本框的內(nèi)容
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.“清除內(nèi)容”按鈕單擊事件代碼
Private Sub CommandButton4_Click()'
For i = 1 To 4'清除“分子”、分母、“答案”、“批改”與“批語”文本框的內(nèi)容
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 '清除錯誤結(jié)果題目的“答案”和“批改”文本框的內(nèi)容
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
參考文獻(xiàn):
[1]陳琛,裴純禮.“小學(xué)整數(shù)運算自測練習(xí)”PPT課件的設(shè)計與使用[J].中小學(xué)信息技術(shù)教育,2007,(6):55-57.
[2]馬致明,陳惠敏等.PowerPoint中利用VBA制作交互式物理模擬課件[J].中國教育信息化(基礎(chǔ)教育),2008,(16).
(編輯:隗爽)