Íѹ·Õè¨ÃÔ§ÍÑÅ¡ÍÃÔ·ÖÁµÑǹÕé à´ÔÁ¼Á¡Ð¨ÐÁÒ¹ÓàʹÍ㹡ÒÃ·Ó CAI (Computer Assisted Instruction) ´éÇÂâ»Ãá¡ÃÁ MS Visual Basic 6.0 â´Â·Ó ...
- Ẻ½Ö¡ËÑ´¡ÒÃÊØèÁµÑÇàÅ¢ÍÍ¡ÁÒ à¾×èÍãËéà´ç¡æä´é·Ó¡Òà + - * / (Íѹ¹ÕéÃͺ˹éÒ¤ÃѺ àµÃÕÂÁäÇéáÅéÇ áµèÂѧ¢Ò´¤Ó͸ԺÒÂä»)
- â»Ãá¡ÃÁ·Ó¡ÒÃÊØèÁ¢éÍÊͺ (¢Í§à´ÔÁ·Õè·ÓäÇéÊÁºÙóìẺÁѹà»ç¹ DAO)
«Öè§àÃ×èͧ¹ÕéÁÕ¹éͧæ·Õè¡ÓÅѧ·Óâ»Ãਤ¡Ò÷ӢéÍÊÍºáººÊØèÁ (ʧÊÑÂà»ç¹â»Ãਤ 1000 »ÕÁÑé§) ä´é¢Í¡Ñ¹à¢éÒÁҾʹÕé¾Í´Õ áÅÐ¾Í´Õ (ÍÕ¡¹Ñè¹áËÅÐ) ·Õè¹éͧæà¢Ò¡çà»ç¹¼ÙéËÔ§·Ñé§¹Ñé¹´éÇ àÍéÒ »ÃÐà´ÕëÂǨÐËÒÇèÒ¼Áà¹ÕèÂ㨨״ ã¨´Ó äÁèʧÊÒÃà´ç¡æ¹éÍ§æ µÒ´Óæà¢Ò Áѹ¨ÐºÒ»¡ÃÃÁ«èÐà»ÅèÒ¹èÐ ... ÍÔÍÔÍÔ ... ÍÑÅ¡ÍÃÔ·ÖÁµÑǹÕé¹èФÃѺµé¹©ºÑºà»ç¹¢Í§ Professor ªÒǵèÒ§ªÒµÔ·èÒ¹¹Ö§ (¹èÒ¨Ðà»ç¹ UK ¹èÐËÒ¡¼Á¨ÓäÁè¼Ô´) «Öè§¼Áä´éÁҨҡ˹ѧÊ×Í Visual Basic 3.0 ¡ç¤Ô´´ÙáÅéǡѹÇèÒÁѹ¡Õè»ÕÁÒáÅéǤÃѺ ... ¾Õè¹éͧ ... ˹ѧÊ×ÍàÅèÁä˹¢Í§¼Á·ÕèÇèÒ´ÕæÁÑ¡¨Ð¶Ù¡ "¢ÍÅ×Á" ä»àÊÁÍáËÅФÃѺ ÃÇÁ¶Ö§àÅèÁ¹Õé´éÇ «Öè§ã¹àÇÅÒ¹Ñé¹¼Á¡ç¾Í·Õè¨ÐäÅèÍÑÅ¡ÍÃÔ·ÖÁµÑǹÕéä´é¾ÍÊÁ¤Çà à¾ÃÒÐÁÕ¢éÍÁÙÅ·Õèà»ç¹àÍ¡ÊÒûÃСͺ´éÇ áµèµÍ¹¹ÕéºÍ¡¡Ñ¹µÃ§æ ... äÁèÃÙéàÃ×èͧ¤ÃѺ ͸ԺÒÂäÁèä´é áµèÃÙéÇÔ¸Õ¡ÒùÓÁÒãªé§Ò¹ ... àÍÒÊÓËÃѺà·èÒ·Õè¨Óä´éÇèÒ ËÅÑ¡¡ÒâͧÁѹ¡ç¤×Í¡Ó˹´¤èÒàÃÔèÁµé¹ (Initialize) ¢Í§Çѹ·Õè ¡Ñº àÇÅҢͧ Timer ËÃ×Í ¹ÒÌÔ¡ÒÃкº ã¹áµèÅÐÇѹÁÒ·Ó¡ÒÃÊØèÁ (Random) à¹Õè ·ÓÂÑ§ä§æ¡çäÁèÁÕ·Ò§«éӡѹä´éàÅ â´Âãªé¿Ñ§¤ìªÑè¹ RandShuffle(key$) µÑǹÕéáËÅФÃѺ¹ÓÃèͧÁÒ¡è͹ ¨Óä´éá¤è¹Õé¨ÃÔ§æ¤ÃѺ ... àËÍææææ
¼ÅÅѾ¸ì¨Ò¡¡ÒÃÃѹâ»Ãá¡ÃÁ ÃѺÃͧ¤ÃѺäÁèÁÕ¾ÅÒ´Åͧ¤Ô´´ÙàÍÒáÅéǡѹÇèÒËÒ¡ÊÅѺµÑÇàÅ¢ 1-100 ¨ÐÁÕ¤ÇÒÁà»ç¹ä»ä´é㹡ÒèѴàÃÕ§ÁÒ¡¹éÍÂá¤èä˹µÑÇàÅ¢·ÕèÊØèÁ = Int((¤èÒÊÙ§ÊØ´ - ¤èÒµèÓÊØ´ + 1) * Rnd + ¤èÒµèÓÊØ´) Ẻ¹ÕéãªéäÁèä´éàŤÃѺ㹤ÃÑé§¡ÃÐâ¹é¹¼ÁÅͧ·ÓÁÒËÅÒÂÇÔ¸Õ áµè·Ø¡¤ÃÑ駨оº¡Ñº¡Òà LOOP Ẻ Dead Lock àÊÁÍ
ÊÓËÃѺ¹éͧæ¤ÃѺ ¡Ò÷Óâ»Ãá¡ÃÁÊØèÁ¢éÍÊͺ¹Ñé¹ËÑÇã¨ÊӤѷÕèÊØ´Áѹ¡ç¤×ÍàÃ×èͧ¹ÕéáËÅФÃѺ ÊèǹàÃ×èͧ¢Í§°Ò¹¢éÍÁÙŹÑé¹Áѹ¡ÅÒÂà»ç¹àÃ×èͧà´ç¡æä»àÅÂ
Êèǹ»ÃСÒÈäÇéã¹ Module
'Array of long integers for generating all random numbers
Dim r&(1 To 100)
Function Rand&()
'Get pointers into table
i% = r&(98)
j% = r&(99)
'Subtract the two table values
t& = r&(i%) - r&(j%)
'Adjust result if less than zero
If t& < 0 Then
t& = t& + 1000000000
End If
'Replace table entry with new random number
r&(i%) = t&
'Decrement first index, keeping in range 1 through 55
If i% > 1 Then
r&(98) = i% - 1
Else
r&(98) = 55
End If
'Decrement second index, keeping in range 1 through 55
If j% > 1 Then
r&(99) = j% - 1
Else
r&(99) = 55
End If
'Use last random number to index into shuffle table
i% = r&(100) Mod 42 + 56
'Grab random number from table as current random number
r&(100) = r&(i%)
'Put new calculated random number into table
r&(i%) = t&
'Return random number grabbed from table
Rand& = r&(100)
End Function
Function RandInteger%(a%, b%)
RandInteger% = a% + (Rand&() Mod (b% - a% + 1))
End Function
Sub RandShuffle(key$)
'Form 97-character string, with key$ as part of it
tmp$ = Left$("Abracadabra" + key$ + Space$(86), 97)
'Use each character to seed table
For i% = 1 To 97
r&(i%) = Asc(Mid$(tmp$, i%, 1)) * 8171717 + i% * 997&
Next i%
'Preserve string space
tmp$ = ""
'Initialize pointers into table
i% = 97
j% = 12
'Randomize table to get it warmed up
For k% = 1 To 997
'Subtract entries pointed to by i% and j%
r&(i%) = r&(i%) - r&(j%)
'Adjust result if less than zero
If r&(i%) < 0 Then
r&(i%) = r&(i%) + 1000000000
End If
'Decrement first index, keeping in range 1 through 97
If i% > 1 Then
i% = i% - 1
Else
i% = 97
End If
'Decrement second index, keeping in range 1 through 97
If j% > 1 Then
j% = j% - 1
Else
j% = 97
End If
Next k%
'Initialize pointers for use by Rand& function
r&(98) = 55
r&(99) = 24
'Initialize pointer for shuffle table lookup by Rand& function
r&(100) = 77
End Sub
|
â¤é´µÑÇÍÂèÒ§ (¨ÃÔ§æ) 㹡ÒÃàÃÕ¡ãªé§Ò¹
Option Explicit
Dim MAXNUM As Integer ' ¨Ó¹Ç¹µÑÇàÅ¢ÊÙ§ÊØ´
Dim Flag()
Dim TempRandom() ' à¡çºäÇé·´ÊͺäÁèãËéÁÕ¤èÒ«éÓ
Dim TempRandomAll() ' ÊØèÁµÑÇàÅ¢ÍÍ¡ÁÒ·Ñé§ËÁ´
Dim blnFlag As Boolean
Private Sub Form_Load()
txtRandom.Text = ""
txtMax = ""
End Sub
Private Sub cmdRandom_Click()
If Trim(txtMax.Text) = "" Or Len(Trim(txtMax.Text)) = 0 Then Exit Sub
MAXNUM = txtMax.Text
' ÊØèÁ¤èÒàÃÔèÁµé¹¡è͹
RandShuffle Date$ + Time$ + Str$(Timer)
'
Call RandomNew
' Íѹ¹ÕéäÁèÁÕÍÐääÃѺ àÅ×è͹µÓá˹觵ÒÁ¡ÒÃáÊ´§¼Å¢Í§ TextBox à·èÒ¹Ñé¹àͧ
txtRandom.SetFocus
SendKeys "^{End}"
End Sub
Private Sub Timer1_Timer()
Dim k As Variant
Dim n As Integer
Dim i As Integer, j As Integer
ReDim Flag(MAXNUM)
ReDim TempRandom(MAXNUM)
ReDim TempRandomAll(MAXNUM)
' µÃǨÊͺ·Ø¡¤ÃÑé§·ÕèÁÕ¡ÒÃÊØèÁ
For i = 1 To MAXNUM
' Flag is True if already random and fix Vaule
If Flag(i) = False Then
'Generate unique number
Do
'Generate any number in range
n = RandInteger(1, MAXNUM)
'Previously grabbed?
blnFlag = True
For j = 1 To i
k = TempRandomAll(j)
If j < i And n = k Then
blnFlag = False
Exit For
End If
Next
'Grab only if number is unique
If blnFlag = True Then
TempRandom(i) = n
TempRandomAll(i) = n
End If
Loop Until blnFlag = True
End If
Next
End Sub
Sub RandomNew()
Dim i As Integer
ReDim TempRandom(MAXNUM)
' Trig Timer
Timer1_Timer
' Êèǹ¹ÕéáËÅФÃѺ·Õè¹Óä»ãªé§Ò¹ä´éàÅÂ
For i = 1 To MAXNUM
txtRandom.Text = txtRandom.Text & " " & TempRandomAll(i)
Next i
' ¹Óä»áÊ´§¼Åã¹ TextBox
txtRandom.Text = txtRandom.Text & vbCrLf
End Sub
Private Sub cmdExit_Click()
End
End Sub
Private Sub txtRandom_KeyPress(KeyAscii As Integer)
' äÁèÃѺ¡Òá´¤ÕÂìã´æ
KeyAscii = 0
End Sub
Private Sub txtMax_KeyPress(KeyAscii As Integer)
KeyAscii = CheckDigitOnly(KeyAscii)
End Sub
' ¿Ñ§¤ìªÑè¹µÃǨ¡Òá´¤ÕÂìãËéÃѺ¤èÒ੾ÒеÑÇàÅ¢à·èÒ¹Ñé¹
Function CheckDigitOnly(Index As Integer) As Integer
Select Case Index
Case 48 To 57 ' 0 - 9
Case 8 ' Back Space
Case 13 ' Enter
Case Else
Index = 0
End Select
CheckDigitOnly = Index
End Function
|
|