Chapter 7 - PowerPoint PPT Presentation

1 / 88
About This Presentation
Title:

Chapter 7

Description:

User Enters Super Bowl Winners into the array from a text Box. For I As Integer = 0 to 3 ... Count the number of numbers above 50. count = 0. For i As Integer ... – PowerPoint PPT presentation

Number of Views:25
Avg rating:3.0/5.0
Slides: 89
Provided by: cwy74
Learn more at: http://faculty.sjcny.edu
Category:
Tags: bowl | chapter | list | of | super | winners

less

Transcript and Presenter's Notes

Title: Chapter 7


1
Chapter 7 Arrays
  • 7.1 Creating and Accessing Arrays
  • 7.1 (a) Arrays and Loops
  • 7.2 Using Arrays
  • 7.3 Some Additional Types of Arrays
  • 7.4 Sorting and Searching
  • 7.5 Two-Dimensional Arrays

2
7.1 Creating and Accessing Arrays
  • Declaring an Array Variable
  • The Load Event Procedure
  • The GetUpperBound Method
  • ReDim Statement
  • Using an Array as a Frequency Table

3
Simple and Array Variables
  • A variable (or simple variable) is a name to
    which Visual Basic can assign a single value.
  • An array variable is a collection of simple
    variables of the same type to which Visual Basic
    can efficiently assign a list of values.

4
Example
  • Suppose that you want to evaluate the examgrades
    for 30 students and to display the names of the
    students whose scores are above average.
  • Private Sub btnDisplay_Click(...) _
  • Handles
    btnDisplay.ClickDim student1 As String, score1
    As DoubleDim student2 As String, score2 As
    DoubleDim student3 As String, score3 As Double

5
Using Arrays
Upper bound of subscripts in the array
  • Dim student(29) As String
  • Dim score(29) As Double

Array name
Data type
6
Putting Values into an Array
  • student(0) "Tom Brown"

subscript
Read "student sub zero equals Tom Brown" Which
means that the string "Tom Brown" is being stored
at the first location in the array
called student because all arrays begin counting
at 0.
7
Array Terminology
  • Dim arrayName(n) As DataType
  • 0 is the "lower bound" of the array
  • n is the "upper bound" of the array the last
    available subscript in this array
  • The number of elements, n 1, is the size of the
    array

8
Example 1 Form
mtxtNumber
txtWinner
9
Example 1
  • Private Sub btnWhoWon_Click(...) _
  • Handles
    btnWhoWon.Click
  • Dim teamName(3) As String
  • Dim n As Integer
  • 'Place Super Bowl Winners into the array
  • teamName(0) "Packers"
  • teamName(1) "Packers"
  • teamName(2) "Jets"
  • teamName(3) "Chiefs"
  • 'Access array
  • n CInt(txtNumber.Text)
  • txtWinner.Text teamName(n - 1)
  • End Sub

10
Example 1- With a Loop
  • Private Sub btnWhoWon_Click(...) _
  • Handles
    btnWhoWon.Click
  • Dim teamName(3) As String
  • Dim n As Integer
  • User Enters Super Bowl Winners into the array
    from a text Box.
  • For I As Integer 0 to 3
  • teamName(i) txtBox.Text
  • Next
  • 'Access array
  • n CInt(txtNumber.Text)
  • txtWinner.Text teamName(n - 1)
  • End Sub

11
Example 1 Output
12
Arrays and Loops
  • When you want to do something with an entire list
    or array put it in a loop!
  • To assign values to an array
  • List ( ) Tom, Dick, Harry
  • OR
  • For i As Integer 0 To 25
  • list(i) txtBox.Text
  • Next

13
List Output
  • To output everything in the list (for example to
    a list Box) use a loop
  • For i As Integer 0 To 25
  • lstBox.Items.Add(list(i))
  • Next

14
Accumulators
  • To add all the items in a list use an accumulator
    in a loop
  • sum 0
  • For i As Integer 0 To 25
  • sum sum CDbl(txtBox.Text)
  • Next

15
Arithmetic With a List
  • To add 5 to all the items in a list use a loop
  • For i As Integer 0 To 25
  • list(i) list(i)5 or list(i)5
  • Next
  • Other arithmetic operations would be done the
    same way

16
Counting Elements in a List
  • To count specific elements in a list use a loop
  • Count the number of numbers above 50
  • count 0
  • For i As Integer 0 To 25
  • if list(i)gt 50 Then
  • count 1
  • Next
  • Other arithmetic operations would be done the
    same way

17
Individual List Elements
  • To access individual elements of a list, use them
    the same way you would use any other variable,
    but include the subscript.
  • For example- to output only the element in the
    3rd position in the list
  • lstBox.Items.Add(list(3))

18
Load Event Procedure
  • Occurs as the Form loads in memory
  • Private Sub frmName_Load(...) _
  • Handles MyBase.Load
  • The keyword MyBase refers to the form
  • being loaded. This event procedure is a
  • good place to assign values to an array.

19
Example 2
  • Dim teamName(3) As String
  • Subroutine for button accesses the array
    teamName
  • Private Sub btnWhoWon_Click(...) Handles
    btnWhoWon.Click
  • Dim n As Integer
  • n CInt(txtNumber.Text)
  • txtWinner.Text teamName(n - 1)
  • End Sub
  • Private Sub frmBowl_Load(...) Handles MyBase.Load
  • 'Place Super Bowl Winners into the array
  • teamName(0) "Packers"
  • teamName(1) "Packers"
  • teamName(2) "Jets"
  • teamName(3) "Chiefs"
  • End Sub

20
Initializing Arrays
  • Arrays may be initialized when they are created
  • Dim arrayName() As varType value0, _
  • value1, value2, ..., valueN
  • declares an array having upper bound N and
    assigns value0 to arrayName(0), value1 to
    arrayName(1), ..., and valueN to arrayName(N).

21
GetUpperBound Method
  • The value of
  • arrayName.GetUpperBound(0)
  • is the upper bound of arrayName().

22
Example
  • Initialize Array
  • Dim teamName() As String "Packers", _
  • "Packers", "Jets", "Chiefs"
  • Output the upper bound of array
  • txtBox.Text CStr(teamName.GetUpperBound(0))
  • Output 3

23
ReDim Statement
  • The size of an array may be changed after
  • it has been created.
  • ReDim arrayName(m)
  • where arrayName is the name of the
  • already declared array and m is an Integer
  • literal, variable, or expression, changes the
  • upper bound of the array to m.

24
Preserve Keyword
  • ReDim arrayName(m) resets all values to their
    default. This can be prevented with the keyword
    Preserve.
  • ReDim Preserve arrayName(m)
  • resizes the array and retains as many
  • values as possible.

25
Frequency Table
  • An array can be used to keep track of the number
    of times something occurs, such as the number of
    votes for a candidate or a favorite soft drink or
    the number of times a letter occurs in a sentence.

26
Example 4 Using an Array as a Frequency Table
27
Example 4 Code
  • Private Sub btnAnalyze_Click(...) Handles
    btnAnalyze.Click
  • 'Count occurrences of the various letters in a
    sentence
  • Dim sentence, letter As String
  • Dim index, charCount(25) As Integer
  • 'Examine and tally each letter of the sentence
  • sentence (txtSentence.Text).ToUpper
  • For letterNum As Integer 1 To sentence.Length
  • letter sentence.Substring(letterNum - 1, 1)
  • If (letter gt "A") And (letter lt "Z") Then
  • index Asc(letter) - 65 'The ANSI value of
    "A" is 65
  • charCount(index) 1
  • End If
  • Next

28
Example 4 Code Continued
  • 'List the tally for each letter of alphabet
  • lstCount.Items.Clear()
  • For i As Integer 0 To 25
  • letter Chr(i 65)
  • If charCount(i) gt 0 Then
  • lstCount.Items.Add(letter " " _
  • charCount(i))
  • End If
  • Next
  • End Sub

29
Example 4 Output
30
Out of Bounds Error
  • The following code references an array element
  • that doesn't exist. This will cause an error.
  • Dim trees() As String "Sequoia", _
  • "Redwood", "Spruce"
  • txtBox.Text trees(5)

31
Copying Arrays
  • If arrayOne() and arrayTwo() have been declared
  • with the same data type, then the statement
  • arrayOne arrayTwo
  • makes arrayOne() an exact duplicate of
  • arrayTwo(). It will have the same size and
  • contain the same information.

32
7.2 Using Arrays
  • Ordered Arrays
  • Using Part of an Array
  • Merging Two Ordered Arrays
  • Passing Arrays to Procedures

33
Ordered Arrays
  • An array has ascending order if
  • each element next element.
  • An array has descending order if
  • each element next element.
  • An array is ordered if it has ascending or
  • descending order.

34
Searching Ordered Arrays
  • Ordered arrays can be searched more
  • efficiently than unordered arrays. For
  • instance, when searching an array
  • having ascending order, you can
  • terminate the search when you find an
  • element whose value is the sought-
  • after value.

35
Example 1 Task
  • Given a name input by the user, determine
  • if it is in an increasing list of ten names,

36
Flowchart for a Search of an Increasing Array
37
Example 1 Code
  • Dim name()As String "AL", "BOB", "CARL",
    "DON", "ERIC", _
  • "FRED", "GREG", "HERB", "IRA", "JACK"
  • Private Sub btnSearch_Click(...) Handles
    btnSearch.Click
  • Dim name2Find As String
  • Dim i As Integer -1 'Subscript of the array
  • name2Find txtName.Text.ToUpper
  • Do While (name(i) lt name2Find) Or (i lt 9)
  • i 1 'Add 1 to array index
  • Loop
  • If name(i) name2Find Then
  • txtResult.Text "Found."
  • Else
  • txtResult.Text "Not found."
  • End If
  • End Sub

38
Example 1 Alternative Code
  • Dim name()As String "AL", "BOB", "CARL",
    "DON", "ERIC", _
  • "FRED", "GREG", "HERB", "IRA", "JACK"
  • Private Sub btnSearch_Click(...) Handles
    btnSearch.Click
  • Dim name2Find As String
  • Dim i As Integer -1 'Subscript of the array
  • Dim Found As Boolean False
  • name2Find txtName.Text.ToUpper
  • Do While Not Found Or (i lt 9)
  • If name(i) name2Find Then
  • Found True
  • End If
  • i 1 'Add 1 to array index
  • Loop
  • End Sub

39
Example 1 Output
40
Using Part of an Array
  • Sometimes we do not know how many elements will
    be needed in an array.
  • We declare a large enough array, say of 100
    elements, and use a counter variable to record
    the number of elements used.
  • In Example 2, the names are an unknown
  • number of companies which are placed into an
    array using a counter.

41
Example 2 Output
txtCompany
42
Example 2 Code
  • 'Demonstrate using part of an array
  • Dim stock(99) As String
  • Dim counter As Integer 0
  • Private Sub btnRecord_Click(...) Handles
    btnRecord.Click
  • If (counter lt 99) Then
  • stock(counter) txtCompany.Text
  • txtCompany.Clear()
  • txtCompany.Focus()
  • txtNumber.Text CStr(counter)
  • counter 1 'Increment counter by 1
  • Else
  • MsgBox("No space to record additional
    companies.", 0, "")
  • txtCompany.Clear()
  • End If
  • End Sub

43
Example 2 Code Continued
  • Private Sub btnSummarize_Click(...) _
  • Handles btnSummarize.Click
  • 'List companies that were recorded
  • lstStocks.Items.Clear()
  • For i As Integer 0 To counter
  • lstStocks.Items.Add(stock(i))
  • Next
  • End Sub

44
Parallel Arrays
  • Sometimes you want to have multiple related
    lists, such as these
  • Client Deposit Withdrawal Balance
  • Tom 100 0 2600
  • Sue 3500 0 900
  • Amy 0 350 1700
  • This can be done using multiple parallel arrays.

45
Parallel Arrays
  • Initialize these arrays directly or in a loop
  • Dim client( ) As String Tom, Sue, Amy
  • Dim deposit( ) As Double 100, 3500,0
  • Dim withdrawal( ) As Double 0, 0, 350
  • Dim balance( ) As Double 2600, 900, 1700

46
Sequential Search
  • Searching successive elements of an ordered list
    beginning with the first element is called a
    sequential search.
  • Usually an If statement is used to determine if
    the item is found
  • For example in a phone book search, if the name
    is located, output the phone number

47
Phone Book Search
  • Uses two parallel arrays for name and phone
    number
  • Name Phone number
  • Joe 123-4567
  • Ann 800-2525
  • Bob 447-9999
  • Tim 231-1000

48
Phone Book Search
  • Declare the arrays and initialize them.
  • Search using a loop if the name is found, output
    the phone number
  • name2Find txtBox.Text
  • For i As Integer 0 to 4
  • If name2Find name(i) Then
  • lstBox.Items.Add(phonenum(i))
  • Next

49
Searching for the Largest/Smallest in a List
  • Declare the list and initialize it
  • Use a loop and an if statement to step through
    the list one element at a time, remembering the
    largest or smallest number seen so far.
  • This kind of search can be used for any item in a
    list.

50
Search for Largest
  • large 0
  • For i As Integer 0 to list.GetUpperBound(0)
  • If list(i) gt large Then
  • large list(i) remember it
  • Next
  • To find the smallest in the list, use small
    instead of large, set it to a large value and
    change gt to lt

51
Merging Two Ascending Arrays
  • To consolidate two lists into a single ordered
    third list
  • Compare the two names at the top of the first
    and second lists.
  • If one name alphabetically precedes the other,
    copy it onto the third list and cross it off its
    original list.
  • If the names are the same, copy the name onto the
    third list and cross out the name from the first
    and second lists.
  • Repeat Step 1 with the current top names until
    you reach the end of either list.
  • Copy the names from the remaining list onto the
    third list.
  • See code on pages 329-330

52
Passing Arrays to Procedures
  • An array declared in a procedure is local to that
    procedure and unknown in all others
  • An entire array can be passed to a Sub or
    Function procedure
  • The call statement just uses the name of the
    array without parentheses.
  • The header of the Sub of Function procedure uses
    the name with empty set of parentheses.

53
Example 4
  • This example uses a Function procedure to add up
    the numbers in an array. The GetUpperBound method
    is used to determine how many numbers are in the
    array.

54
Example 4
  • Private Sub btnCompute_Click(...) Handles
    btnCompute.Click
  • Dim score() As Integer 85, 92, 75, 68, 84,
    86, _
  • 94, 74, 79, 88
  • txtAverage.Text CStr(Sum(score) / 10) Passed
    to sum
  • End Sub
  • Sum Function gets copy of score array adds
    each element and returns the total
  • Function Sum(ByVal s() As Integer) As Integer
  • Dim total As Integer 0
  • For index As Integer 0 To s.GetUpperBound(0)
  • total s(index)
  • Next
  • Return total
  • End Function

55
Passing an Array Element
  • A single element of an array can be passed to a
    procedure just like any ordinary numeric or
    string variable.
  • Private Sub btnDisplay_Click(...) Handles _

  • btnDisplay.Click
  • Dim num(20) As Integer
  • num(5) 10
  • lstOutput.Items.Add(Triple(num(5))) Pass
    single element
  • End Sub
  • Private Function Triple(ByVal x As Integer) As
    Integer
  • Return 3 x
  • End Function

56
7.3 Some Additional Types of Arrays
  • Control Arrays
  • Array of Structures

57
Control Arrays
  • Control arrays are arrays of controls, such as
    labels, text boxes, etc.
  • They are created in much the same way as any
    other array
  • Dim arrayName(n) As ControlType
  • or
  • Dim arrayName() As ControlType

58
Control Arrays continued
  • The following statements declare control arrays.
  • Dim lblTitle(10) As Label
  • Dim txtNumber(8) As TextBox
  • Dim btnAmount() As Button

59
Example 2 Form
TextBox1
TextBox5
txtTotal
60
Example 1
Array of controls
  • Dim lblDept(4) As Label
  • Dim txtDept(4) As TextBox
  • Private Sub frmSales_Load(...) Handles
    MyBase.Load
  • lblDept(0) Label1
  • lblDept(1) Label2
  • lblDept(2) Label3
  • lblDept(3) Label4
  • lblDept(4) Label5
  • txtDept(0) TextBox1
  • txtDept(1) TextBox2
  • txtDept(2) TextBox3
  • txtDept(3) TextBox4
  • txtDept(4) TextBox5

Placing controls Into arrays
61
Example 1 continued
  • For depNum As Integer 1 To 5
  • lblDept(depNum - 1).Text "Department "
    depNum
  • txtDept(depNum).Clear()
  • Next
  • End Sub
  • Private Sub btnCompute_Click(...) _
  • Handles btnCompute.Click
  • Dim totalSales As Double 0
  • For depNum As Integer 1 To 5
  • totalSales CDbl(txtDept(depNum - 1).Text)
  • Next
  • txtTotal.Text FormatCurrency(totalSales)
  • End Sub

62
Example 1 Output
63
Structures
  • A way of grouping heterogeneous data together
  • Also called a UDT (User Defined Type)
  • Sample structure definition
  • Structure College
  • Dim name As String
  • Dim state As String
  • Dim yearFounded As Integer
  • End Structure

64
Structure Definition
  • Each subvariable in a structure is called a
  • member.
  • To declare a variable of a structure type
  • Dim college1 As College
  • Each member is accessed via the variable
  • name dot member name
  • college1.name "Harvard"

65
Example 2
  • Structure College
  • Dim name As String
  • Dim state As String
  • Dim yearFounded As Integer
  • End Structure
  • Dim college1, college2, collegeOlder As College
  • Private Sub btnFirst_Click(...) Handles
    btnFirst.Click
  • Dim prompt As String
  • college1.name InputBox("Enter name of
    college.", "Name")
  • college1.state InputBox("Enter state.",
    "State")
  • prompt "Enter the year the first college was
    founded."
  • college1.yearFounded CInt(InputBox(prompt,
    "Year"))
  • End Sub

66
Structure Members
  • Integer, String, Double, etc.
  • Another User Defined Type
  • Arrays
  • Must not specify range
  • Range must be set using ReDim

67
Example 4
  • This example gathers information about a student
    and determines when the student will be eligible
    to graduate.

68
Example 4
  • Structure FullName
  • Dim firstName As String
  • Dim lastName As String
  • End Structure
  • Structure Student
  • Dim name As FullName
  • Dim credits() As Integer
  • End Structure
  • Private Sub btnGet_Click(...) Handles
    btnGet.Click
  • Dim numYears As Integer
  • Dim person As Student

Structure "FullName" contained, or nested, inside
Student
69
Example 4 continued
  • txtResult.Clear()
  • person.name.firstName InputBox("First Name")
  • person.name.lastName InputBox("Second Name")
  • numYears CInt(InputBox("Number of years " _

  • "completed"))
  • ReDim person.credits(numYears - 1)
  • For i As Integer 0 To numYears - 1
  • person.credits(i)CInt(InputBox("Credits in
    year "_
  • i
    1))
  • Next
  • DetermineStatus(person)
  • End Sub

70
Example 4 continued
  • Sub DetermineStatus(ByVal person As Student)
  • Dim total As Integer 0
  • For i As Integer 0 To person.credits.GetUpperB
    ound(0)
  • total person.credits(i)
  • Next
  • If (total gt 120) Then
  • txtResult.Text person.name.firstName " "
    _
  • person.name.lastName " has enough
    credits" _
  • " to graduate."
  • Else
  • txtResult.Text person.name.firstName " "
    _
  • person.name.lastName " needs " _
  • (120 - total) " more credits to
    graduate."
  • End If
  • End Sub

71
7.4 Sorting and Searching
  • Bubble Sort
  • Shell Sort
  • Searching

72
Sorting
  • Sorting is an algorithm for ordering an array.
  • We discuss two sorting algorithms
  • bubble sort
  • Shell sort
  • Both use the swap algorithm
  • temp varl
  • varl var2
  • var2 temp

73
Example 1 Output
txtFirstWord
txtSecondWord
txtResult
74
Example 1 Swap Algorithm
  • Private Sub btnAlphabetize_Click(...) _
  • Handles btnAlphabetize.Click
  • Dim firstWord, secondWord, temp As String
  • firstWord txtFirstWord.Text
  • secondWord txtSecondWord.Text
  • If (firstWord gt secondWord) Then
  • temp firstWord
  • firstWord secondWord
  • secondWord temp
  • End If
  • txtResult.Text firstWord " before " _
  • secondWord
  • End Sub

75
Bubble Sort Algorithm n Items
  1. Compare the first and second items. If they are
    out of order, swap them.
  2. Compare the second and third items. If they are
    out of order, swap them.
  3. Repeat this pattern for all remaining pairs. The
    final comparison and possible swap are between
    the next-to-last and last items.

76
Bubble Sort Algorithm
  1. The last item will be at its proper place.
  2. Do another pass through first n 1 items.
  3. Repeat this process with one less item for each
    pass until a pass uses only the first and second
    items.

77
Shell Sort Algorithm
  1. Begin with a gap of g Int(n/2)
  2. Compare items 0 and g, 1 and 1 g, . . ., n - g
    and n. Swap any pairs that are out of order.
  3. Repeat Step 2 until no swaps are made for gap g.
  4. Halve the value of g.
  5. Repeat Steps 2, 3, and 4 until the value of g is
    0.

78
Searching
  • Sequential search starts at the beginning of a
    list and keeps looking one by one until the item
    is found or the end of the list is reached.
  • For a sequential search, the list need not be
    sorted.

79
Binary Search
  • Usually more efficient than sequential search
  • List must be sorted

80
Binary Search Algorithm
  • Given an array in ascending order and a
    sought-after value, quarry, that may be in the
    array.
  • Repeatedly halve the range of indices where
    quarry might be found.
  • Halving routine looks at the middle value of the
    current range and compares it to quarry with ,
    gt, and lt.
  • If middle value quarry, then search is over.
  • If middle value gt quarry, then we can limit our
    search to the half of the range below the middle
    value.
  • If middle value lt quarry, then we can limit our
    search to the half of the range above the middle
    value.

81
Binary Search Variables
  • first lower limit of range of values to search
  • last upper limit of range of values to search
  • middle Int((first last) / 2)
  • a() ordered array to be searched
  • foundFlag True when quarry is found
  • Note If quarry is not in the array, eventually
    last will be
  • greater than first.
  • Note Initially first 0 and last
    a.GetUpperBound(0)

82
Binary Search Code
  • Do While (first lt last) And (Not FoundFlag)
  • middle CInt((first last) / 2)
  • Select Case a(middle)
  • Case quarry
  • foundFlag True
  • Case Is gt quarry
  • last middle 1
  • Case Is lt quarry
  • first middle 1
  • End Select
  • Loop

83
Binary Search Notes
  • If a binary search ends with foundFlag True,
    the subscript of the found item might be useful.
  • This would be the case if the array were an array
    of structures that was ordered with respect to
    one of its members.
  • The binary search would serve as an efficient
    table lookup process.

84
7.5 Two Dimensional Arrays
  • One-dimensional arrays store a list of items of
    the same type
  • Two-dimensional arrays store a table of items of
    the same type.
  • Consider the rows of the table as numbered 0, 1,
    2, ,,, m and the columns numbered 0, 1, 2, , n.
    Then the array is declared with the statement
  • Dim arrayName(m, n) As DataType
  • and the item in the ith row, jth column is
    denoted
  • arrayName(i, j)

85
Road-Mileage Table
Chicago LA NY Philly
Chicago 0 2054 802 738
LA 2054 0 2786 2706
NY 802 2786 0 100
Philly 738 2706 100 0
Dim rm(3, 3) As Double rm(0,0)0, rm(0,1)2054,
rm(1,2)2786
86
Populating a Two-Dimensional Array
  • Dim rm(3, 3) As Double
  • Private Sub frmDistances_Load(...) Handles
    MyBase.Load
  • 'Fill two-dimensional array with intercity
    mileages
  • Dim sr As IO.StreamReader _
  • IO.File.OpenText("DISTANCE.
    TXT")
  • For row As Integer 0 To 3
  • For col As Integer 0 To 3
  • rm(row, col) CDbl(sr.ReadLine)
  • Next
  • Next
  • sr.Close()
  • End Sub

87
Notes on Two-Dimensional Arrays
  • An unsized two-dimensional array can be declared
    with a statement of the form
  • Dim arrayName(,) As varType
  • and a two-dimensional array can be
  • declared and initialized at the same time
  • with a statement of the form
  • Dim arrayName(,) As varType ROW0, ROW1,...
    ROWm

88
ReDim and Two-Dimensional Arrays
  • An already-created array can be resized with
  • ReDim arrayName(r, s)
  • which loses the current contents, or with
  • ReDim Preserve arrayName(r, s)
  • When Preserve is used, only the column can be
    resized.
  • ReDim cannot change the number of dimensions in
    an array.
Write a Comment
User Comments (0)
About PowerShow.com