嚴大虎 白雪靜
摘 要:分數四則運算是小學數學的重要內容,常用PowerPoint課件只有固定例題,本文介紹一種在PowerPoint中利用VBA程序實現(xiàn)自動出題和計算機批改題目的方法,從而可以快速制作“小學分數四則運算自測練習”課件。
關鍵詞:分數四則運算;PowerPoint;VBA
中圖分類號:G433文獻標識碼:B 文章編號:1673-8454(2009)16-0059-03
一、課件界面與執(zhí)行過程
設幻燈片的名稱為“SldCalcFraction”,采用“標題和兩欄文本”版式。“標題區(qū)”含標題、最大數文本框(txtMaxNum)和批語文本框(txtComment);“左欄文本區(qū)”含題號、運算符、等號、“答案”文本信息以及分子分母文本框(txtFirstNum1~ 4, txtFirstDenom1~ 4,txtSecondNum1~4, txtSecondDenom1~4)和答案文本框(txtAnswer1~4);“右欄文本區(qū)”有“計算機批改”文本信息和批改文本框(txtTip1~4);下部的“按鈕區(qū)”有“出題”、“批改”、“答案”、“清除內容”和“重做”五個按鈕。課件界面如圖1所示。
該課件既可由教師用于課堂教學,也可由學生用于練習和自測。其執(zhí)行過程:在幻燈片的放映狀態(tài)下,先輸入最大數,最大數限制分子和分母的大小;單擊“出題”按鈕產生四道隨機題目,用戶將計算結果輸入答案文本框中,然后單擊“批改”按鈕,根據結果產生相應信息。若重新計算做錯的題目,可單擊“重做”按鈕;若查看正確答案,單擊“答案”按鈕;如果繼續(xù)做題,在單擊“清除內容”按鈕后單擊“出題”按鈕。
二、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 '避免出現(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'調用“清除內容”按鈕的Click 事件,清除題目的“分子”、“分母”、“答案”、“批改”和“批語”文本框的內容
If IsNumeric(txtMaxNum.Value) = False Then
MsgBox (" 請向“最大數”文本框中輸入運算允許的“最大數”")
Exit Sub
End If
Randomize ' 以系統(tǒng)當前時間作為產生隨機數的種子數
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 = "沒全對,繼續(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'在“答案”文本框中輸入正確答案,同時清空“批改”和“批語”文本框的內容
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).
(編輯:隗爽)