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