1. A Program in Binary Searching Using Visual Basic 2008 (version 9.0)
By Ariel T. Sumagaysay, MSCS
A. Form Design
Design the form shown below using the Visual Basic 2008:
B. Components
Components Properties / Settings
Form1 Name: frmMain
Font: Times New Roman
Font Style: Regular
Size: 10
FormBorderStyle: FixedDialog
Icon: Any
MaximizeBox: False
StartPosition: CenterScreen
Text: BINARY SEARCH PLUS
GroupBox1 Name: GroupBox1
Text:
Label1 Name: Label1
Text: ENTER NUMBER OF ELEMENTS [AT LEAST 10]:
Label2 Name: Label2
Text: ENTERED ELEMENTS
Label3 Name: Label3
Text: ARRANGED:
Label4 Name: Label4
Text: Results
2. 2
B. Components (Continued…)
Components Properties / Settings
List1 Name: lstResults
Font: Times New Roman
Size: 13
TextBox1 Name: txtNumberOfElements
TextBox2 Name: txtEnterElements
Textbox3 Name: txtAllElements
Font: Times New Roman
Font Style: Regular
Size: 14
Multiline: True
ReadOnly: True
ScrollBars: Both
WordWarp: False
Textbox4 Name: txtArranged
Font: Times New Roman
Font Style: Regular
Size: 14
Multiline: True
ReadOnly: True
ScrollBars: Both
WordWarp: False
Textbox5 Name: txtEnterSearch
Font: Times New Roman
Font Style: Regular
Size: 14
Button1 Name: btnNumber
Text: &OK
Button2 Name: btnEnterElement
Text: &ENTER ELEMENT
Button3 Name: btnSearch
Image: any *.PNG related graphics
Text: &SEARCH
TextImageRelation: ImageAboveText
Button4 Name: btnReset
Image: any *.PNG related graphics
Text: &RESET
TextImageRelation: ImageAboveText
Button5 Name: btnQuit
Image: any *.PNG related graphics
Text: &QUIT
TextImageRelation: ImageAboveText
3. 3
C. Code Listings
'BINARY SEARCH
'PROGRAM BY ARIEL T. SUMAGAYSAY
'COLLEGE OF INFORMATION & COMMUNICATION TECHNOLOGY
'WEST NEGROS UNIVERSITY
'APRIL 04, 2010 1658 HR
'Limitations of the Program:The list must not have duplicate values
Option Explicit Off
Public Class frmMain
'Variables
Dim nNumberOfElements As Integer
Dim nResetStatus As Integer
Dim sNumbers As String
Dim nFind As Integer
Dim bfound As Boolean
Dim nlocation As Integer
Dim lowBound As Integer
Dim HighBound As Integer
Dim nDivTimes As Integer
Dim nDTCtr As Integer
Dim n As Integer
Dim x As Integer
Dim s As String
'One Dimensional Array
Dim aInputSet() As Integer
Private Sub btnNumber_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnNumber.Click
'Get Number of Elements
nNumberOfElements = Int(txtNumberOfElements.Text)
If nNumberOfElements < 10 Then
txtNumberOfElements.Enabled = False
btnNumber.Enabled = False
MsgBox("Number of Elements entered is less than 10")
MsgBox("Click RESET button to enter number again")
nResetStatus = 1
btnReset.Enabled = True
Else
'Setting Buttons
btnEnterElement.Enabled = True
btnNumber.Enabled = False
txtEnterElement.Enabled = True
txtNumberOfElements.Enabled = False
'Set the number of elements for the array
4. 4
n = nNumberOfElements
ReDim aInputSet(nNumberOfElements)
'set command button label
s = Format(1, "0#")
btnEnterElement.Text = "&ENTER ELEMENT " + s
End If
'Compute Number of time in Division by 2
nDivTimes = System.Math.Truncate(System.Math.Sqrt(nNumberOfElements))
End Sub
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'Initialize Variables
nNumberOfElements = 0
nResetStatus = 0
nDivTimes = 0
nDTCtr = 0
'Initial Settings
txtNumberOfElements.Text = " "
txtAllElements.Text = " "
txtArranged.Text = " "
txtEnterElement.Text = " "
txtEnterSearch.Text = "0"
bfound = False
lstResults.Items.Clear()
'Setting Buttons - Controls
btnEnterElement.Enabled = False
btnSearch.Enabled = False
btnReset.Enabled = False
txtNumberOfElements.Enabled = True
txtEnterElement.Enabled = False
txtEnterSearch.Enabled = False
'Initialize variables
nNumberOfElements = 0
n = 0
x = 0
s = " "
sNumbers = " " 'Set string of numbers to NULL
nFind = 0
'Set the Number of Elements
ReDim aInputSet(0)
End Sub
5. 5
Private Sub btnReset_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnReset.Click
'For Enter less than 10 elements
If nResetStatus = 1 Then
txtNumberOfElements.Text = 0
txtNumberOfElements.Enabled = True
btnNumber.Enabled = True
End If
'For Resetting the values
If nResetStatus = 2 Then
'Initialize Variables
nNumberOfElements = 0
nResetStatus = 0
nDivTimes = 0
nDTCtr = 0
'Initial Settings
txtNumberOfElements.Text = " "
txtAllElements.Text = " "
txtArranged.Text = " "
txtEnterElement.Text = " "
txtEnterSearch.Text = "0"
bfound = False
lstResults.Items.Clear()
'Setting Buttons - Controls
btnEnterElement.Enabled = False
btnSearch.Enabled = False
btnReset.Enabled = False
btnNumber.Enabled = True
txtNumberOfElements.Enabled = True
txtEnterElement.Enabled = False
txtEnterSearch.Enabled = False
'Initialize variables
nNumberOfElements = 0
n = 0
x = 0
s = " "
sNumbers = " " 'Set string of numbers to NULL
nFind = 0
'Set the Number of Elements
ReDim aInputSet(0)
End If
End Sub
6. 6
Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnSearch.Click
Static y As Integer
Static mid As Integer
'Get the mid point
y = nNumberOfElements
mid = y / 2
'Search Border Values
Call BorderValues(1, y, mid)
'Call the Binary Search Procedure
'binarySearch(First, Last, Mid)
If bfound = False Then
Call binarySearch(1, y, mid)
End If
'Display Results
Call DisplayResults()
'Set Reset Status
nResetStatus = 2
btnSearch.Enabled = False
End Sub
Private Sub btnEnterElement_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btnEnterElement.Click
Static y As Integer
y = 0
'Enter numbers
If txtEnterElement.Text <> " " Then
x = x + 1
y = x
s = Format(y + 1, "0#")
btnEnterElement.Text = "&ENTER ELEMENT " + s
aInputSet(x) = CInt(txtEnterElement.Text)
If x = n Then
btnEnterElement.Enabled = False
txtEnterElement.Enabled = False
btnEnterElement.Text = "&ENTER ELEMENT"
Call bubblesort()
End If
sNumbers = sNumbers & txtEnterElement.Text & " "
txtAllElements.Text = sNumbers
txtEnterElement.Text = " "
End If
'Set Reset Status
nResetStatus = 2
btnReset.Enabled = True
'Enable Search Features
txtEnterSearch.Enabled = True
End Sub
7. 7
Private Sub bubblesort()
'Sort the elements using bubblesort
Static a As Integer
Static b As Integer
Static temp As Integer
Static sHereNumbers As String
'initialize variables
a = 0
b = 0
temp = 0
sHereNumbers = " "
For a = 1 To n
For b = 1 To n - 1
If (aInputSet(b) > aInputSet(b + 1)) Then
temp = aInputSet(b)
aInputSet(b) = aInputSet(b + 1)
aInputSet(b + 1) = temp
End If
Next
Next
'display list
For a = 1 To n
sHereNumbers = sHereNumbers + Str(aInputSet(a)) & " "
txtArranged.Text = sHereNumbers
Next
End Sub
Private Sub txtEnterSearch_TextChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles txtEnterSearch.TextChanged
'Get value to search
nFind = Int(txtEnterSearch.Text)
'Enabled Search Button
btnSearch.Enabled = True
End Sub
Private Sub binarySearch(ByVal First As Integer, ByVal Last As Integer,
ByVal Mid As Integer)
'Counter
nDTCtr = nDTCtr + 1
If nDTCtr > nDivTimes Then
Exit Sub
End If
'Binary Search Procedure
If nFind > aInputSet(Mid) Then
lowBound = Mid
HighBound = Last
lstResults.Items.Add(Str(nFind) & " is possibly located between
location " & Str(lowBound) & " and " & Str(HighBound))
8. 8
lstResults.Items.Add(Str(nFind) & " is possibly located between
values " & aInputSet(lowBound) & " and " & aInputSet(HighBound))
lstResults.Items.Add(" ")
Mid = (lowBound + HighBound) / 2
Call binarySearch(lowBound, HighBound, Mid)
ElseIf nFind < aInputSet(Mid) Then
lowBound = First
HighBound = Mid
lstResults.Items.Add(Str(nFind) & " is possibly located between
location " & Str(lowBound) & " and " & Str(HighBound))
lstResults.Items.Add(Str(nFind) & " is possibly located between
values " & aInputSet(lowBound) & " and " & aInputSet(HighBound))
lstResults.Items.Add(" ")
Mid = (lowBound + HighBound) / 2
Call binarySearch(lowBound, HighBound, Mid)
ElseIf nFind = aInputSet(Mid) Then
nlocation = Mid
bfound = True
End If
End Sub
Private Sub btnQuit_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnQuit.Click
'Terminate Program
End
End Sub
Private Sub BorderValues(ByVal First As Integer, ByVal Last As Integer,
ByVal Mid As Integer)
'check if found in First, Last and Mid
If nFind = aInputSet(First) Then
nlocation = First
bfound = True
ElseIf nFind = aInputSet(Last) Then
nlocation = Last
bfound = True
ElseIf nFind = aInputSet(Mid) Then
nlocation = Mid
bfound = True
End If
End Sub
Private Sub DisplayResults()
If bfound = True Then
lstResults.Items.Add("Number is found on location " &
Str(nlocation))
Else
lstResults.Items.Add(" Number is NOT FOUND on the LIST! ")
End If
End Sub
End Class