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 or Subscripted variable An individual
data item within an array.
5Array Declaration
- SyntaxDim arrayName(m To n) As varTypewhere m
and n are integers - Examples
- Dim month(1 To 12) As String
- Dim population(1987 To 2003) As Single
- Dim students(1 To 30) As String
6The Dim Statement
- Used to declare an array
- A Dim statement must occur before the first
reference to the array elements.
7Initializing an Array
- Private Sub cmdWhoWon_Click()
- Dim teamName(1 To 4) As String
- Dim n As Integer
- teamName(1) "Red Sox"
- teamName(2) "Giants"
- teamName(3) "White Sox"
- teamName(4) "Cubs"
- n Val(txtNumber.Text)
- picWinner.Print "The " teamName(n) " won
World Series " n - End Sub
8Array teamName()
Array Name
- Dim teamName( 1 To 4) As String
Red Sox Giants White Sox Cubs
teamName(1)
Index
9Initializing an Array by Reading from a File
- Dim student (1 To 30) As String
- Dim count As Integer
- Open STUDENTS.TXT For Input As 1
- For count 1 To 30
- Input 1, student(count)
- Next count
10Adding Up Elements in an Array
- Dim score(1 To 30) As Single, student(1 To 30) As
String - Dim count As Integer, average as Integer, sum As
Integer - 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
11Parallel Arrays
- Two arrays are said to be parallel if subscripted
variables having the same subscript are related.
12Example of Parallel Arrays
- Dim nom(1 To 8) As String, score(1 To 8) As
Integer - Dim student As Integer
- Open SCORE.TXT For Input As 1
- For student 1 To 8
- Input 1, nom(student), score(student)
- Next student
- Close 1
13Form_Load()
- Use it to Initialize Form Level variables
- Use it to initialize Form Level Arrays
- Use it to Dim Dynamic Arrays
14Dynamic Arrays
- ReDim can only be used inside a procedure
- Defines or dimensions a Dynamic array
- ReDim arrayName (m To n) as varType
- m, n can be a variables or expressions
- Use Dim in General Declaration as
- Dim arrayName() as varType
- Cannot be used till you ReDim it in a procedure
15Ordered 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.
16Merging two ordered 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.
17Passing an Array
- An array can be passed to another procedure by
reference. - Example
- Private Sub cmddisplay_Click()
- 'Pass array to subprogram and function
- Dim score(1 To 5) As Integer
- Call FillArray(score())
- picAverage.Print Average is" Sum(score()) /
5 - End Sub
18Array Score is passed to a Sub procedure
- 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
19Array 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
20Sorting
- A common practice involving arrays is to sort the
elements of the array in either ascending or
descending order. - Sorting techniques
- Bubble Sort
- Shell Sort
21Bubble 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 an array is called a
pass.
22Bubble Sort
- For passNum 1 To 4
- For index 1 To 5 - passNum
- If name(index) gt name(index 1) Then
- Call SwapData(name(), index)
- End If
- Next index
- Next passNum
-
23Swapping 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
24Bubble Sort
- The number of passes used to sort the elements in
an array is equal to the number of elements in
the array less 1. - Bubble sort works well for sorting small arrays,
but is often too slow for very large ones.
25Shell Sort
- Similar to the bubble sort
- Instead of comparing and swapping adjacent
elements A(count) and A(count1), Shell sort
compares and swaps non-adjacent elements A(count)
and A(count Gap), where Gap starts at roughly
half the size of the array
26Shell Sort
- At the end of each pass, if no elements have been
swapped in the current pass, then Gap is halved
for the next pass. - Eventually, Gap becomes one, and adjacent
elements are compared and swapped as necessary.
27Shell Sort
- gap Int(numParts / 2)
- Do While gap gt 1
- Do
- doneFlag True
- For index 1 To numParts - gap
- If part(index) gt part(index gap)
Then - Call Swap(part(index),
part(index gap) - doneFlag False
- End If
- Next index
- Loop Until doneFlag True
- gap Int(gap / 2) 'Halve the length
of the gap - Loop
28Efficiency of Bubble and Shell sort (average
number of comparisons)
- Array Elements Bubble Sort Shell
Sort - 5 10 15
- 15 105 115
- 25 300 302
- 30 435 364
- 100 4,950 2,638
- 500 124,750 22,517
29Ordered Array
- An array is ordered if its values are in either
ascending or descending order. - For string arrays, ANSI values are used to
evaluate the less than or equal to condition.
30Searching Arrays
- The process of finding the position of a value in
an array is called searching - A sequential search examines each element,
beginning with the first, until the specified
value is found or the end of the array is reached
31Example of a Sequential Search
- Dim nom(1 To 15) As String, index As Integer,
foundFlag As Boolean - Do While (index lt 15) And (Not foundFlag)
- If nom(index) Fred Then
- foundFlag True
- Else
- index index 1
- End If
- Loop
- picOutput.Print Fred is located at position
index
32Sequential Search
- Useful for small arrays.
- Very inefficient for large arrays (for example,
names in a telephone book). - For any size array, if the array is ordered, the
more efficient binary search can be used.
33Binary Search
- In a binary search, an ordered array is
repeatedly divided in half. The half not
containing the target value is ignored.
34Binary Search
- Private Sub BinarySearch(corp As String, result
As String) - Dim foundFlag As Boolean, first as Integer,
last as Integer - first 1
- last numFirms
- Do While (first lt last) And (foundFlag
False) - middle Int((first last) / 2) Select
Case UCase(firm(middle)) Case corp
foundFlag True Case Is gt corp
last middle - 1 Case Is lt corp
first middle 1 End Select - Loop continued on next slide
35Binary Search (continued)
- If foundFlag True Then
- result "found
- Else
- result "not found
- End If
- End Sub
36Two-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.
37Declaration of Two-Dimensional Array
- Syntax
- Dim arrayName(m1 To m2, n1 To n2) As varType
- Example
- Dim rm(1 To 4, 1 To 4) As Single
column
row
38Example 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)
39Example of Input File
- 0, 2054, 802, 738
- 2054, 0, 2786, 2706
- 802, 2786, 0, 100
- 738, 2706, 100, 0
40Manipulating 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
41Examples How many elements?
- Dim rm(1 To 4) As Single
- Dim rm(4, 1 To 4) As Single
- Dim rm(1 To 4, 1 To 4) As Single
- Dim rm(4, 1 To 4) As Single
- Dim rm(0 To 3, 97 To 100)
- Dim rm (-5 To -3, 5 To 5)
- Dim (-3 To -5)