Title: Arrays
1Chapter 7
2Outline and Objective
- Arrays in Visual Basic
- One- dimensional arrays
- Control arrays
- Two-dimensional arrays
- Searching
- Sorting
3Array 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.
4Elements 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.
5Array Declaration
- Syntax
- Dim arrayname ( 1 To n) As VarType
6Examples of arrays
- Dim month ( 1 To 12) As String
- Dim score (1 To 30) As Single
- Dim students (1 To 30 ) As String
7The 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.
8Initializing 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
9Array teamName()
Array Name
- teamName( 1 To 5) As String
Red Sox Giants White Sox Cubs Cubs
teamName(1)
Index
10Initializing 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
11Adding 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
12Parallel Arrays
- Two arrays are referred to as parallel if
subscripted variables having the same subscript
are related.
13Example 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
14Ordered 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.
15Processing 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.
16Example 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) gt 8 THEN
- picOutput.Print quiz (position)
- count count 1
- End If
- Next Position
17Sequential Search
- Useful for short lists.
- Very inefficient for long lists ( example names
in telephone book). - Use binary search if the list is sorted.
18Binary 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.
19Binary Search
- Private Sub BinarySearch(corp As String, result
As String - foundFlag 0 '1 indicates corp
found - first 1
- last numFirmsDo While (first lt last) And
(foundFlag 0) middle Int((first last)
/ 2) Select Case UCase(firm(middle))
Case corp foundFlag 1 Case
Is gt corp last middle - 1
Case Is lt corp first middle 1
End Select - Loop
- End Sub
20Binary Search
- If foundFlag 1 Then
- result "found
- Else
- result "not found
- End If
21Merging
- A common practice involving arrays is merging two
sorted arrays.
22The 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.
23Passing an Array
- An array can be passed to another procedure by
reference.
24Example 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
25Array 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
26Array 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
27Control 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.
28Creating 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 CtrlC
- Press Ctrl V, to create the next element
29Control 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.
30Control 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)
31Creating Control Array at Run Time
- You can create elements of a control array via
Load statement at run time.
32Creating 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.
33The location and size of a control
34Example ( 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
35Sorting
- 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.
36Types of Sorting
37Bubble 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.
38Bubble 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) gt name(index 1) Then
- Call SwapData( name( ), index)
- End If
- Next index
- Next passNum
-
39Swapping 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
40Bubble 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.
41Shell Sort
- Is similar to the bubble sort, but instead of
comparing and swapping adjacent elements A(count)
and A(count1), it compares and swaps nonadjacent
elements A(count) and A(count Gap) , where Gap
starts considerably greater than 1.
42Shell 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.
43Shell Sort
- gap Int(numParts / 2)
- Do While gap gt 1
- Do
- doneFlag 1
- For index 1 To numParts - gap
- If part(index) gt 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
44Efficiency of Bubble and Shell sort
- Array Elements Bubble Sort Shell
Sort - 5 10 15
- 15 105 115
- 25 300 302
- 30 435 364
- 100 4950 2638
- 500 124,750 22,517
45Two-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.
46Declaration 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
47Example of a two-dimensional array rm(1 To 4, 1
To 4)
Chicago
Los Angeles
New York
Philadelphia
Chicago
Los Angeles
New York
Philadelphia
rm (2,2)
rm (3,4)
48Example of Input File
- 0, 2054, 802, 738
- 2054, 0, 2786, 2706
- 802, 2786, 0, 100
- 738, 2706, 100, 0
49Manipulating 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
50Example 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