41
Chapter 7 - Visual Basic Schneider 1 Chapter 7 Arrays

Chapter 7

  • Upload
    duc

  • View
    35

  • Download
    1

Embed Size (px)

DESCRIPTION

Chapter 7. Arrays. Outline and Objective. Arrays in Visual Basic One-dimensional arrays Control arrays Two-dimensional arrays Searching Sorting. Array verses Simple Variable. Simple variable is used to store a single value. - PowerPoint PPT Presentation

Citation preview

Page 1: Chapter 7

Chapter 7 - Visual Basic Schneider 1

Chapter 7

Arrays

Page 2: Chapter 7

Chapter 7 - Visual Basic Schneider 2

Outline and Objective

• Arrays in Visual Basic• One-dimensional arrays

• Control arrays

• Two-dimensional arrays

• Searching

• Sorting

Page 3: Chapter 7

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.

Page 4: Chapter 7

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 or Subscripted variable: An individual data item within an array.

Page 5: Chapter 7

Chapter 7 - Visual Basic Schneider 5

Array 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

Page 6: Chapter 7

Chapter 7 - Visual Basic Schneider 6

The Dim Statement

• Used to declare an array

• A Dim statement must occur before the first reference to the array elements.

Page 7: Chapter 7

Chapter 7 - Visual Basic Schneider 7

Initializing 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 #"; nEnd Sub

Page 8: Chapter 7

Chapter 7 - Visual Basic Schneider 8

Array teamName()

Dim teamName( 1 To 4) As String

Red Sox Giants White Sox Cubs

teamName(1)

Array Name

Index

Page 9: Chapter 7

Chapter 7 - Visual Basic Schneider 9

Initializing 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

Page 10: Chapter 7

Chapter 7 - Visual Basic Schneider 10

Adding 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

Page 11: Chapter 7

Chapter 7 - Visual Basic Schneider 11

Parallel Arrays

• Two arrays are said to be parallel if subscripted variables having the same subscript are related.

Page 12: Chapter 7

Chapter 7 - Visual Basic Schneider 12

Example 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

Page 13: Chapter 7

Form_Load()

• Use it to Initialize Form Level variables

• Use it to initialize Form Level Arrays

• Use it to Dim Dynamic Arrays

Chapter 7 - Visual Basic Schneider 13

Page 14: Chapter 7

Dynamic 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

Chapter 7 - Visual Basic Schneider 14

Page 15: Chapter 7

Chapter 7 - Visual Basic Schneider 15

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.

Page 16: Chapter 7

Chapter 7 - Visual Basic Schneider 16

Merging 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.

Page 17: Chapter 7

Chapter 7 - Visual Basic Schneider 17

Passing 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()) / 5End Sub

Page 18: Chapter 7

Chapter 7 - Visual Basic Schneider 18

Array 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

Page 19: Chapter 7

Chapter 7 - Visual Basic Schneider 19

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

Page 20: Chapter 7

Chapter 7 - Visual Basic Schneider 20

Sorting

• 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

Page 21: Chapter 7

Chapter 7 - Visual Basic Schneider 21

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 an array is called a pass.

Page 22: Chapter 7

Chapter 7 - Visual Basic Schneider 22

Bubble Sort

For passNum = 1 To 4

For index = 1 To 5 - passNum

If name(index) > name(index + 1) Then

Call SwapData(name(), index)

End If

Next index

Next passNum

Page 23: Chapter 7

Chapter 7 - Visual Basic Schneider 23

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

Page 24: Chapter 7

Chapter 7 - Visual Basic Schneider 24

Bubble 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.

Page 25: Chapter 7

Chapter 7 - Visual Basic Schneider 25

Shell Sort

• Similar to the bubble sort• Instead of comparing and swapping adjacent

elements A(count) and A(count+1), 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

Page 26: Chapter 7

Chapter 7 - Visual Basic Schneider 26

Shell 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.

Page 27: Chapter 7

Chapter 7 - Visual Basic Schneider 27

Shell Sort

gap = Int(numParts / 2)

Do While gap >= 1

Do

doneFlag = True

For index = 1 To numParts - gap

If part(index) > 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

Page 28: Chapter 7

Chapter 7 - Visual Basic Schneider 28

Efficiency of Bubble and Shell sort (average number of comparisons)

Array Elements Bubble Sort Shell Sort

5 10 1515 105 115

25 300 302

30 435 364

100 4,950 2,638

500 124,750 22,517

Page 29: Chapter 7

Chapter 7 - Visual Basic Schneider 29

Ordered 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.

Page 30: Chapter 7

Chapter 7 - Visual Basic Schneider 30

Searching 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

Page 31: Chapter 7

Chapter 7 - Visual Basic Schneider 31

Example of a Sequential Search

Dim nom(1 To 15) As String, index As Integer, foundFlag As Boolean

Do While (index <= 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

Page 32: Chapter 7

Chapter 7 - Visual Basic Schneider 32

Sequential 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.

Page 33: Chapter 7

Chapter 7 - Visual Basic Schneider 33

Binary Search

• In a binary search, an ordered array is repeatedly divided in half. The half not containing the target value is ignored.

Page 34: Chapter 7

Chapter 7 - Visual Basic Schneider 34

Binary 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 <= last) And (foundFlag = False)

middle = Int((first + last) / 2) Select Case UCase(firm(middle)) Case corp foundFlag = True Case Is > corp last = middle - 1 Case Is < corp first = middle + 1 End Select

Loop ‘continued on next slide

Page 35: Chapter 7

Chapter 7 - Visual Basic Schneider 35

Binary Search (continued)

If foundFlag = True Then

result = "found”

Else

result = "not found

End If

End Sub

Page 36: Chapter 7

Chapter 7 - Visual Basic Schneider 36

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.

Page 37: Chapter 7

Chapter 7 - Visual Basic Schneider 37

Declaration 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

Page 38: Chapter 7

Chapter 7 - Visual Basic Schneider 38

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)

Page 39: Chapter 7

Chapter 7 - Visual Basic Schneider 39

Example of Input File

0, 2054, 802, 738

2054, 0, 2786, 2706

802, 2786, 0, 100

738, 2706, 100, 0

Page 40: Chapter 7

Chapter 7 - Visual Basic Schneider 40

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

Page 41: Chapter 7

Examples: 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)

Chapter 7 - Visual Basic Schneider 41