« 呵呵, 我上報了耶! | 首頁 | VB程式: Big5 中文筆劃換算 »
2006年03月23日
商數餘數在日常生活中的應用
- 某人累計請假 3 天 28 小時, 每日工時 8 小時, 請問該員總共請假幾天幾小時?
- 某人家庭代工完成 12 打 27 雙成品, 請問該員總共完成幾打幾雙?
- 2時18分36秒 + 46分52秒等於幾時幾分幾秒?
基本邏輯:
x ÷ 進位值 = y (商數, 進位後的量) … z (餘數, 原單位的量)
28 小時, 8 小時為一日: 28 ÷ 8 = 3(天) … 4(小時)
27 件, 12 件為一打: 27 ÷ 12 = 2 (打) … 3 (件)
36 兩, 16 兩為一斤: 36 ÷ 16 = 2 (斤) … 4 (兩)
以 Excel 運算:
某人累計請假 3 天 28 小時, 每日工時 8 小時, 請問該員總共請假幾天幾小時? 令 A1 = 3, B1 = 28, 答案置於 A2 (天) 與 B2 (小時)
A2 = A1 + INT( B1 / 8 )
B2 = MOD( B1, 8 )答案為: 6 天 4 小時
某人家庭代工完成 12 打 27 雙成品, 請問該員總共完成幾打幾雙? 令 A1 = 12, B1 = 27, 答案置於 A2 (打) 與 B2 (雙)
A2 = A1 + INT( B1 / 12 )
B2 = MOD( B1, 12 )答案為: 14 打 3 雙
函數說明:
INT() 傳回無條件捨去後的整數值
MOD 傳回兩數相除之後的餘數
同理可應用於時間運算, 以 VB6 為例:
物件說明: 第一行可輸入的物件為:
Text1(0) = 小時 Text1(1) = 分 Text1(2) = 秒第二行可輸入的物件為:
Text2(0) = 小時 Text2(1) = 分 Text2(2) = 秒第三行為加總後輸出的物件:
Text3(0) = 小時 Text3(1) = 分 Text3(2) = 秒程式碼:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37Sub Action() intSeconds = CInt(Text1(2)) + CInt(Text2(2)) intMinutes = CInt(Text1(1)) + CInt(Text2(1)) + Fix(intSeconds / 60) intHours = CInt(Text1(0)) + CInt(Text2(0)) + Fix(intMinutes / 60) Text3(0) = intHours Text3(1) = intMinutes Mod 60 Text3(2) = intSeconds Mod 60 End Sub Function fn_chkData(objValue) As Boolean If objValue > "" And IsNumeric(objValue) Then fn_chkData = True Else fn_chkData = False End If End Function Private Sub Text1_Change(Index As Integer) If fn_chkData(Text1(Index).Text) Then Call Action End If End Sub Private Sub Text2_Change(Index As Integer) If fn_chkData(Text2(Index).Text) Then Call Action End If End Sub程式說明:
01 ~ 11 主要運算邏輯
CInt() 將字串轉為整數型態
Fix() 無條件捨棄小數點, 僅取得整數部份
Mod 取兩數相除的餘數13 ~ 21 簡單的防呆措施, 避免輸入的資料無法運算時, 程式發生錯誤而停止
IsNumeric() 判斷資料是否為數值型態23 ~ 37 使用者於 Text1 與 Text2 輸入資料時, 若輸入的資料為數值資料, 則直接執行 Action() 主要運算程序, 運算結果將立刻呈現於 Text3 欄位中.
Posted by Jamyy at 2006年03月23日 09:32
Trackback Pings
TrackBack URL for this entry:
http://cha.homeip.net/cgi-bin/mt/mt-tb.cgi/182


