Chapter 7 - Visual Basic Schneider 1 Chapter 7 Arrays
Jan 04, 2016
Chapter 7 - Visual Basic Schneider
1
Chapter 7
Arrays
Chapter 7 - Visual Basic Schneider
2
Outline and Objective
• Arrays in Visual Basic• One- dimensional arrays
• Control arrays
• Two-dimensional arrays
• Searching
• Sorting
Chapter 7 - Visual Basic Schneider
3
Array verses Simple Variable
• Simple variable is used to store a single value.
• Array variable is used to represent many values of the same type with one variable name.
Chapter 7 - Visual Basic Schneider
4
Elements of an Array
• Array Name: A valid variable name for the structure.
• Subscript or Index : A value that refers to a particular array element.
• Element: An individual data item within an array.
Chapter 7 - Visual Basic Schneider
5
Array Declaration
• Syntax
Dim arrayname ( 1 To n) As VarType
Chapter 7 - Visual Basic Schneider
6
Examples of arrays
• Dim month ( 1 To 12) As String
• Dim score (1 To 30) As Single
• Dim students (1 To 30 ) As String
Chapter 7 - Visual Basic Schneider
7
The Dim Statement
• Used when you need to define an array .
• The Dim statement sets up storage for array.
• A Dim statement must occur before the first reference to the array elements.
Chapter 7 - Visual Basic Schneider
8
Initializing an Array
Private Sub cmdWhoWon_Click()
Dim teamName( 1To 5) As String
Dim n As Integer
' Fill array with World Series Winners
teamName(1) = "Red Sox"
teamName(2) = "Giants"
teamName(3) = "White Sox"
teamName(4) = "Cubs"
teamName(5) = "Cubs"
n = Val(txtNumber.Text)
picWinner.Print "The "; teamName(n); " won World Series number"; n
End Sub
Chapter 7 - Visual Basic Schneider
9
Array teamName()
teamName( 1 To 5) As String
Red Sox Giants White Sox Cubs Cubs
teamName(1)
Array Name
Index
Chapter 7 - Visual Basic Schneider
10
Initializing an Array by Reading from a File
Dim student ( 1 To 30) As String
Open “STUDENTS.TXT” For Input As #1
For count = 1 To 30
Input #1, student ( count )
Next count
Chapter 7 - Visual Basic Schneider
11
Adding Rows in an Array
Dim score( 1 To 30) As Single, student (1 To 30) As String
Open “STUDENT.TXT” For Input As #1
For count = 1 To 30
Input #1, student (count), score (count)
Next count
sum = 0
For count = 1 To 30
sum = sum + score(count)
Next count
average = sum/30
Chapter 7 - Visual Basic Schneider
12
Parallel Arrays
• Two arrays are referred to as parallel if subscripted variables having the same subscript are related.
Chapter 7 - Visual Basic Schneider
13
Example of Parallel Arrays
Dim nom ( 1 To 8) As String , score ( 1 To 8 ) As Integer
Open “SCORE.TXT” For Input As #1
For student = 1 To 8
Input #1, nom(student), score(student)
Next student
Close #1
Chapter 7 - Visual Basic Schneider
14
Ordered Array
• An array is ordered if its values are in either ascending or descending order.
• For string arrays, the ANSI table is used to evaluate the “less than or equal to” condition.
Chapter 7 - Visual Basic Schneider
15
Processing Arrays
• Searching successive elements of an array is called Sequential Search.
• Also called linear search or serial search.• A Sequential Search examines each element , from
the first to the last, until the specified value is found or the end of the array is reached.
Chapter 7 - Visual Basic Schneider
16
Example of Sequential Search (finding the quiz grades greater than 8)
Dim quiz ( 1 To 15) As Single
For position =1 TO 15
If quiz(position) > 8 THEN
picOutput.Print quiz (position)
count = count + 1
End If
Next Position
Chapter 7 - Visual Basic Schneider
17
Sequential Search
• Useful for short lists.
• Very inefficient for long lists ( example names in telephone book).
• Use binary search if the list is sorted.
Chapter 7 - Visual Basic Schneider
18
Binary Search
• In binary search, an ordered array is repeatedly divided in half. The half not containing the target value is ignored.
• To use binary search, the data in the array must be arranged in ascending or descending order.
Chapter 7 - Visual Basic Schneider
19
Binary Search
Private Sub BinarySearch(corp As String, result As String
foundFlag = 0 '1 indicates corp found
first = 1
last = numFirmsDo While (first <= last) And (foundFlag = 0) middle = Int((first + last) / 2) Select Case UCase(firm(middle)) Case corp foundFlag = 1 Case Is > corp last = middle - 1 Case Is < corp first = middle + 1 End Select
Loop
End Sub
Chapter 7 - Visual Basic Schneider
20
Binary Search
If foundFlag = 1 Then
result = "found”
Else
result = "not found
End If
Chapter 7 - Visual Basic Schneider
21
Merging
• A common practice involving arrays is merging two sorted arrays.
Chapter 7 - Visual Basic Schneider
22
The method for merging two sorted arrays :
1.Compare the two first elements of the first and second arrays.
A. If one name alphabetically precedes the other, copy it onto the third list and cross it off the original array.
B. If the names are the same, copy the name onto the third list and cross out the name from both arrays.
2. Repeat Step 1 with the new name in the array until you reach the end of either array.
3. Copy the names from the remaining array onto the third array.
Chapter 7 - Visual Basic Schneider
23
Passing an Array
• An array can be passed to another procedure by reference.
Chapter 7 - Visual Basic Schneider
24
Example of Passing an array:
Private Sub cmddisplay_Click()
' Pass array to subprogram and function
Dim score(1 To 5) As Integer
Call FillArray(score( ) )
picAverage.Cls
picAverage.Print ”Average is"; Sum(score( ) ) / 5
End Sub
Passing array score
Chapter 7 - Visual Basic Schneider
25
Array Score is passed to a Subprogram
Private Sub FillArray(s( ) As Integer)
' Fill array with scores
s(1) = 85
s(2) = 92
s(3) = 75
s(4) = 68
s(5) = 84
End Sub
This array is pointing to the same location as array score
Chapter 7 - Visual Basic Schneider
26
Array Score is passed to a Function
Private Function Sum(s ( ) As Integer) As Integer
Dim total As Integer, index As Integer
' Add up scores
total = 0
For index = 1 To 5
total = total + s(index)
Next index
Sum = total
End Function
Chapter 7 - Visual Basic Schneider
27
Control Array
• A means of constructing arrays of text boxes, labels, and command buttons.
• At least one element of a control array must be created when the form is designed.
• The remaining elements can be created either during form design, or with the Load statement.
Chapter 7 - Visual Basic Schneider
28
Creating Control Array during Form Design
• Add one instance of the desired control to the form
• Set the Index property to a number
• Set any other properties that will be common to all other elements
• Click on the control and then press Ctrl+C
• Press Ctrl + V, to create the next element
Chapter 7 - Visual Basic Schneider
29
Control Array
• All the properties of the first element are passed to other elements of the control array including the Top and Left properties.
• The only property that differs from first element is the Visible property.
• The Load statement sets the Visible property to False.
Chapter 7 - Visual Basic Schneider
30
Control Array Event Procedures:
• Even though we may have many elements in the txtBox( ) control array, we will have just one txtBox_GotFocus event procedure to deal with.
• The value of Index property for the elements of the control array must be passed.
Example:
Private Sub txtBox_GotFocus (Index As Integer)
Chapter 7 - Visual Basic Schneider
31
Creating Control Array at Run Time:
• You can create elements of a control array via Load statement at run time.
Chapter 7 - Visual Basic Schneider
32
Creating Control Array at Run Time:
• The standard unit of measurement is called Twip.• To place a new element of a control array, adjust
the Top and Left properties during run time. • Set the Visible property to True.
Chapter 7 - Visual Basic Schneider
33
The location and size of a control
Chapter 7 - Visual Basic Schneider
34
Example ( Creating control array during run time)
Private Sub Form_Load()
Dim i As Integer, monthNames As String
monthNames = "FebMarAprMayJunJulAugSepOctNovDec"
For i = 1 To 11
Load lblMonth(i)
Load txtInfo(i)
lblMonth(i).Top = lblMonth(i - 1).Top + txtInfo(0).Height
txtInfo(i).Top = txtInfo(i - 1).Top + txtInfo(0).Height
lblMonth(i).Caption = Mid(monthNames, 3 * i - 2, 3)
lblMonth(i).Visible = True
txtInfo(i).Visible = True
Next i
End Sub
Chapter 7 - Visual Basic Schneider
35
Sorting
• A common practice involving arrays is sorting the elements of the array in either ascending or descending order.
• You can sort an array in alphabetic order or numeric order.
• There are various methods to sort data items.
Chapter 7 - Visual Basic Schneider
36
Types of Sorting
• Bubble Sort
• Shell Sort
Chapter 7 - Visual Basic Schneider
37
Bubble Sort
• The bubble sort involves comparing adjacent elements and swapping the values of those elements when they are out of order.
• One complete time through the array is called a pass.
Chapter 7 - Visual Basic Schneider
38
Bubble Sort
For passNum = 1 To 4 'Number of passes is 1 less than
number of items
For index = 1 To 5 - passNum
If name(index) > name(index + 1) Then
Call SwapData( name( ), index)
End If
Next index
Next passNum
Chapter 7 - Visual Basic Schneider
39
Swapping two variables
Private Sub SwapData ( A ( ) As String, index As Integer)
Dim temp As String
temp = A ( index)
A(index ) = A (index + 1)
A ( index + 1) = temp
End Sub
Chapter 7 - Visual Basic Schneider
40
Bubble Sort
• The maximum number of passes necessary to sort the elements in an array is equal to the number of elements in the array less 1.
• The minimum number of passes to sort an array may be one.
• It works well for a small number of data items.• It is too slow for really long lists.
Chapter 7 - Visual Basic Schneider
41
Shell Sort
• Is similar to the bubble sort, but instead of comparing and swapping adjacent elements A(count) and A(count+1), it compares and swaps nonadjacent elements A(count) and A(count + Gap) , where Gap starts considerably greater than 1.
Chapter 7 - Visual Basic Schneider
42
Shell Sort
• Gap is set to one-half the length of the array.• After each pass if flag is set to 1, then Gap is
halved again for the next pass.• At the end Gap becomes one, and adjacent
elements are compared and swapped.
Chapter 7 - Visual Basic Schneider
43
Shell Sort
gap = Int(numParts / 2)
Do While gap >= 1
Do
doneFlag = 1
For index = 1 To numParts - gap
If part(index) > part(index + gap) Then
Call Swap( part(index), part(index + gap)
doneFlag = 0
End If
Next index
Loop Until doneFlag = 1
gap = Int(gap / 2) 'Halve the length of the gap
Loop
Chapter 7 - Visual Basic Schneider
44
Efficiency of Bubble and Shell sort
Array Elements Bubble Sort Shell Sort
5 10 1515 105 115
25 300 302
30 435 364
100 4950 2638
500 124,750 22,517
Chapter 7 - Visual Basic Schneider
45
Two-Dimensional Arrays
• Store values as a table, grouped into rows and columns.
• The first subscript of a two-dimensional array refers to the row and the second subscript to the column.
Chapter 7 - Visual Basic Schneider
46
Declaration of Two-Dimensional Array
• Syntax:– Dim arrayname (m1 To n1, m2 To n2) As vartype
• Example:– Dim rm (1 To 4, 1 To 4) As Single
column
row
Chapter 7 - Visual Basic Schneider
47
Example of a two-dimensional array:
rm(1 To 4, 1 To 4)
0 2054 802 7382054 0 2786 2706802 2786 0 100736 2706 100 0
Chicago
Los AngelesNew York
Philadelphia
Chicago Los Angeles New York Philadelphia
rm (2,2)rm (3,4)
Chapter 7 - Visual Basic Schneider
48
Example of Input File
0, 2054, 802, 738
2054, 0, 2786, 2706
802, 2786, 0, 100
738, 2706, 100, 0
Chapter 7 - Visual Basic Schneider
49
Manipulating a Two-Dimensional Array
• Use nested For ….. Next loops to assign or access elements of a two-dimensional array.
• Example: For row = 1 To 4
For col = 1 To 4
Input #1, rm(row, col)
Next col
Next row
Chapter 7 - Visual Basic Schneider
50
Example of two-dimensional array
Dim a(1 To 4, 1 To 5 ) As Integer
Private Sub cmdDisplay_Click()
For j = 1 To 4
For k = 1 To 5
a (j, k) = (j - k) * j
picOutput.Print a(j,k);
Next k
picOutput.Print
Next j
End Sub