CSCI 3131.01 - PowerPoint PPT Presentation

1 / 53
About This Presentation
Title:

CSCI 3131.01

Description:

CSCI 3131.01 Chapter 8 Arrays Instructor: Bindra Shrestha University of Houston Clear Lake – PowerPoint PPT presentation

Number of Views:83
Avg rating:3.0/5.0
Slides: 54
Provided by: sceUhclEd7
Category:

less

Transcript and Presenter's Notes

Title: CSCI 3131.01


1
CSCI 3131.01 Chapter 8 Arrays Instructor
Bindra Shrestha University of Houston Clear
Lake
2
Acknowledgement Dr. Xinhua Chen And
Starting Out with Visual Basic 2010 by Tony
Gaddis and Kip Irvine
3
  • Chapter 8 Arrays, Timers, and More
  • Topics
  • Declare and initialize a one-dimensional array
  • Search a one-dimensional array
  • Compute the sum and average of a one-dimensional
    array
  • Sort a one-dimensional array
  • Copy between arrays
  • Using For Each Next with array
  • Create and manipulate parallel one-dimensional
    arrays
  • Create and initialize a two-dimensional array
  • Enabled property
  • Timer
  • Random number generation

4
Introduction
  • Arrays are like groups of variables that allow
    you to store sets of similar data
  • A single dimension array is useful for storing
    and working with a single set of data, like a
    column or a row of data.
  • A multidimensional array can be used to store and
    work with multiple sets of data. A
    two-dimensional array deals with data in a table.
  • Array programming techniques covered
  • Summing and averaging all the elements in an
    array
  • Summing all the columns in a two-dimensional
    array
  • Searching an array for a specific value
  • Using parallel arrays

5
Array Characteristics
  • An array stores multiple values of same type
  • Like a group of variables with a single name
  • For example, the days of the week might be
  • a set of 7 string variables
  • with a maximum length of 9 characters
  • All variables within an array are called elements
    and must be of the same data type
  • You access the elements in an array through a
    subscript

6
Subscript Characteristics
  • A subscript, also called an index, is a number
    that identifies a specific element within an
    array
  • Subscript numbering works like a list box index
  • Subscript numbering begins at 0
  • 1st element in an array is always subscript 0
  • Last element is total number of elements 1
  • An array with 7 elements refers to the 1st
    element as subscript 0 and the last element as
    subscript 6

7
Declaring a One-Dimensional Array
Dim ArrayName(UpperSubscript) As DataType
  • ArrayName is the variable name of the array
  • UpperSubscript is the value of the array's
    highest subscript
  • Must be a positive whole number
  • DataType may be any Visual Basic data type
  • VB knows an array is declared when name is
    followed by parentheses with number of elements

8
Array Declaration Example
Dim intHours(5) As Integer
intHours(0) intHours(1) intHours(2) intHours(3) i
ntHours(4) intHours(5)
  • Note that 6 elements are available when an array
    with an upper subscript of 5 is declared
  • Each element is an integer type

9
Default Initialization
  • All elements of an Integer array are initialized
    to zero
  • Same initialization as an integer variable
  • Each array element is initialized exactly the
    same as a simple variable of that data type
  • A Single is initialized to zero (0.0)
  • A String is initialized to Nothing

10
Implicit Array Sizing Initialization
  • An array can be initialized when declared
  • Example
  • This array is implicitly sized
  • Upper subscript value is left blank
  • Number of elements implied from initialization
  • Upper subscript of 5 implied by this example
  • This results in a 6 element array
  • Elements are assigned the values shown

Dim intNumbers() As Integer 2, 4, 5, 7, 9, 12
11
Named Constant as Upper Subscript
  • A named constant may be used as an array's
    highest subscript instead of a number
  • This is a common use for named constants
  • Highest subscript is often used multiple times
  • If highest subscript changes, use of a named
    constant allows it to be changed in one place

Const UPPER_SUB As Integer 100 Dim
array(UPPER_SUB) As Integer
12
Working With Array Elements
  • Simply include the subscript to use an array
    element like an ordinary variable
  • intNumbers(2) refers to 3rd element of array

intNumbers(0) 100 intNumbers(1)
200 intNumbers(2) 300 intNumbers(3)
400 intNumbers(4) 500 intNumbers(5) 600
decPay intHours(3) decRate intNumbers(0)
1 MessageBox.Show(decPay(5).ToString())
13
Arrays and Loops
  • Loops are frequently used to process arrays
  • Use a loop to prompt for 10 values
  • Use a loop to reset values in the strNames array
    to an empty string

Dim intNbrs(9) as Integers Dim intCount As
Integer For intCount 0 To 9 intNbrs(intCount)
CInt(InputBox("Enter number")) Next intCount
Dim strNames(999) as String Dim intCount As
Integer For intCount 0 To 999 strNames(intCount
) "" Next intCount
14
Array Bounds Checking
  • Visual Basic checks each subscript value of each
    array reference used at run time
  • A subscript is invalid if it is
  • Negative
  • Greater than the UpperSubscript declared
  • An invalid subscript causes VB to throw a
    run-time exception
  • Bounds checking is not done at design time

15
For Each Loop Array Processing
  • A ForEach loop is similar to a ForNext
  • Iterates for each element in the array
  • strName is assigned the value of the next array
    element at each iteration
  • Tutorial 8-1 demonstrates array processing

Dim strEmployees() As String "Jim", "Sally",
_ "Henry", "Jean", "Renee" Dim strName As
String For Each strName In strEmployees MessageBo
x.Show(strName) Next strName
16
Use For Each To Sum an Array
Private intArray() as Integer 10, 20, 90,
-20) Dim intSum as Integer 0 For Each intVal as
Integer in intArray intSum intSum
intVal Next
  • Start of iteration 1 intVal 10 intSum 0
  • End of iteration 1 intVal 10 intSum 10
  • Start of iteration 2 intVal 20 intSum 10
  • End of iteration 2 intVal 20 intSum 30
  • Start of iteration 3 intVal 90 intSum 30
  • End of iteration 3 intVal 90 intSum 120
  • End of iteration 4 intVal -20 intSum 120
  • Start of iteration 4 intVal -20 intSum 100

17
Use For Each To Find Largest Value
Dim intArray() as Integer 10, 20, 90, -20) Dim
intLargest as Integer intArray(0) For Each
intVal as Integer in intArray If intVal gt
intLargest Then intLargest intVal Next
  • Start of iteration 1 intVal 10 intLargest 10
  • End of iteration 1 intVal 10 intLargest 10
  • Start of iteration 2 intVal 20 intLargest 10
  • End of iteration 2 intVal 20 intLargest 20
  • Start of iteration 3 intVal 90 intLargest 30
  • End of iteration 3 intVal 90 intLargest 90
  • End of iteration 4 intVal -20 intLargest 90
  • Start of iteration 4 intVal -20 intLargest 90

18
Determining Number of Elements
  • Arrays have a Length property that holds the
    number of elements in the array
  • Note that length is number of array elements, not
    the upper subscript of the array
  • Length property always 1 greater than the upper
    subscript

Dim intValues(25) As Integer For intCount 0 to
(intValues.Length 1) MessageBox.Show(intValues(i
ntCount).ToString) Next intCount
19
Total the Values in an Array
  • Variable to hold sum (intTotal)is initialized to
    zero prior to loop
  • Iterate over all elements, adding each element to
    intTotal

Dim intUnits(24) as Integer 'Declare array Dim
intTotal As Integer 0 'Initialize
accumulator Dim intCount as Integer 'Declare loop
counter 'Find total of all values held in
array For intCount 0 To (intUnits.Length
1) intTotal intUnits(intCount) Next intCount
20
Average the Values in an Array
  • Similar to previous example but then divides
    total by number of elements to get average

Dim intUnits(24) as Integer 'Declare array Dim
intTotal As Integer 0 'Initialize
accumulator Dim dblAverage as Double 'Declare
average var Dim intCount as Integer 'Declare loop
counter 'Find total of all values held in
array For intCount 0 To (intUnits.Length
1) intTotal intUnits(intCount) Next
intCount 'Use floating-point division to compute
average dblAverage intTotal / intUnits.Length
21
Find Highest Lowest Array Values
  • Pick first element as the highest
  • Search rest of array for higher values
  • If a higher value is located, save the value
  • Use similar logic to find lowest value

Dim intNumbers(24) as Integer Dim intCount as
Integer Dim intHighest as Integer
intNumbers(0) For intCount 1 To
(intNumbers.Length - 1) If intNumbers(intCount)
gt intHighest Then intHighest
intNumbers(intCount) End If Next intCount
22
Array Copy Using Loop
  • Copy one element at a time
  • Note that array copy cannot be done by a simple
    assignment intNewValues intOldValues
  • Causes intNewValues array to reference the same
    memory location as intOldValues
  • Thus any change to intOldValues will affect
    intNewValues and vice versa
  • This is because arrays are object variables

For intCount 0 To intOldValues.Length -1
intNewValues(intCount) intOldValues(intCount) Ne
xt intCount
23
Array Copy Using Copy Method of Array
Syntax Array.Copy(SourceArray, DestArray,
length) Dim a() As Integer 1, 2, 3, 4, 5, 6,
7, 8 Dim b() As Integer 2, 3, 4,
5 Array.Copy(b, a, 4) '4 is the number of
elements in b ' This makes array a contain '
2, 3, 4, 5, 5, 6, 7, 8
24
Parallel Arrays
  • Sometimes its useful to store related data in
    two or more arrays called parallel arrays
  • Causes the nth element of one array to be related
    to the nth element of another
  • Allows related data to be accessed using the same
    subscript on both arrays

25
Parallel Arrays Example
  • Assume the following array declarations
  • Element 1 refers to the same person with name in
    one array and address in the other

Dim strNames(4) As String Dim strAddresses(4) As
String
strNames(0) strNames(1) strNames(2)
strNames(3) strNames(4)
Person 1 Person 2 Person 3 Person 4 Person 5
strAddresses(0) strAddresses(1) strAddresses(2)
strAddresses(3) strAddresses(4)
26
Parallel Arrays Processing
  • Use parallel array processing to add name and
    address of each person to a list box
  • Tutorial 8-2 has an example of parallel arrays

Dim strNames(4) As String Dim strAddresses(4) As
String For intCount 0 To 4 lstPeople.Items.Add
("Name " strNames(intCount) _ " Address "
strAddresses(intCount)) Next intCount
27
Array List Box Parallel Processing
  • A list box selection used as an array index

' Initialize a List Box with names lstPeople.Items
.Add("Jean James") ' Subscript 0 lstPeople.Items.A
dd("Kevin Smith") ' Subscript 1 lstPeople.Items.Ad
d("Joe Harrison") ' Subscript 2 ' Initialize an
Array with corresponding phone numbers phoneNumber
s(0) "555-2987" phoneNumbers(1)
"555-5656" phoneNumbers(2) "555-8897" '
Process a selection If lstPeople.SelectedIndex gt
-1 And _ lstPeople.SelectedIndex lt
phoneNumbers.Length Then MessageBox.Show(phoneNum
bers(lstPeople.SelectedIndex)) Else MessageBox.Sh
ow("That is not a valid selection.") End If
28
Searching Arrays, The Search
  • Find 1st instance of value 100 in array intScores
  • intPosition gives position of this value

Dim blnFound as Boolean False Dim intCount as
Integer 0 Dim intPosition as Integer -1 '
Search for a 100 in the array Do While Not
blnFound And intCount lt scores.Length If
intScores(intCount) 100 Then blnFound
True intPosition intCount End If
intCount 1 Loop
29
Searching Arrays, The Result
  • Indicates whether the value was found
  • If found, position is given as a test number

' Was 100 found in the array? If blnFound
Then MessageBox.Show( _ "Congratulations! You
made a 100 on test " _ (intPosition
1).ToString, "Test Results") Else MessageBox.Show
( _ "You didnt score a 100, but keep trying!",
_ "Test Results") End If
30
Sorting an Array, Ascending
  • Arrays have a Sort method
  • Arranges elements in ascending order (lowest to
    highest)
  • Sort intNumbers in this order 1, 3, 6, 7, 12
  • Sort strNames in this order Alan, Bill, Kim,
    Sue

Dim intNumbers() As Integer 7, 12, 1, 6, 3
Array.Sort(intNumbers) Dim strNames() As
String "Sue", "Kim", _ "Alan", "Bill"
Array.Sort(strNames)
31
Sorting an Array, Descending
  • Use the Sort method in conjunction with the
    Reverse method
  • Arranges elements in descending order (highest to
    lowest)
  • Sort intNumbers in this order 12, 7, 6, 3, 1
  • Dim intNumbers() As Integer 7, 12, 1, 6,
    3
  • Array.Sort(intNumbers)
  • Array.Reverse()
  • Sort strNames in this order Sue, Kim, Bill,
    Alan
  • Dim strNames() As String "Sue", "Kim", _
  • "Alan", "Bill"
  • Array.Sort(strNames)
  • Array.Reverse()

32
Dynamically Sizing an Array
ReDim Preserve Arrayname(UpperSubscript)
  • ReDim is a new keyword
  • Used to change the number of elements at run time
  • If Preserve is specified, the existing contents
    of the array are preserved
  • Arrayname names the existing array
  • UpperSubscript specifies the new highest
    subscript value
  • Can declare an array with no subscript and state
    number of elements later with ReDim

33
Resizing Example
  • Array sngScores declared with no elements
  • User prompted for number of elements
  • ReDim resizes array based on user input

Dim sngScores() As Single ' Declared with no
elements Dim intNumScores as Integer ' Obtain
number of elements from the user intNumScores
CInt(InputBox("Enter number of test scores")) If
intNumScores gt 0 Then ReDim sngScores(intNumScore
s - 1) Else MessageBox.Show("You must enter 1 or
greater.") End If
34
Passing Arrays as Arguments to Procedures
  • Array intNumbers passed to DisplaySum sub
  • Sub computes shows sum of array elements
  • Can pass any integer array to DisplaySum

Dim intNumbers() As Integer 2, 4, 7, 9, 8, 12
DisplaySum(intNumbers) Sub DisplaySum(ByVal
intArray() As Integer) Dim intTotal As Integer
0 ' Accumulator Dim intCount As Integer ' Loop
counter For intCount 0 To (intArray.Length -
1) intTotal intArray(intCount) Next Message
Box.Show("Total is " intTotal.ToString) End Sub
35
Passing Arrays ByVal and ByRef
  • When passing an array ByVal
  • Calling procedure sees sub procedure changes to
    element values
  • Simple variables dont work this way
  • If sub assigns array argument to another array,
    no effect on array in calling procedure
  • When passing an array ByRef
  • Calling procedure sees sub procedure changes to
    element values
  • If sub assigns array argument to another array,
    calling procedure array values affected

36
Passing Arrays Example
  • After ResetValues procedure executes, intNumbers
    array still contains 1, 2, 3, 4, 5
  • If array passed ByRef, intNumbers array will
    contain 0, 0, 0, 0, 0 after procedure runs

Dim intNumbers() As Integer 1, 2, 3, 4, 5
ResetValues(intNumbers) Sub ResetValues(ByVal
intArray() As Integer) Dim newArray() As
Integer 0, 0, 0, 0, 0 intArray
newArray End Sub
37
An Array Returned From a Function
  • Return type String() indicates array of strings
    returned
  • Thus the function result must be assigned to an
    array of strings

Function GetNames() As String() ' Get four names
from user ' Return them as an array of
strings. Dim strNames(3) As String Dim strInput
As String Dim intCount As Integer For intCount
0 To 3 strInput InputBox("Enter name "
_ (intCount 1).ToString)
strNames(intCount) strInput Next Return
strNames End Function
38
A Two Dimensional Array Picture
  • Thus far, arrays have been one-dimensional
  • Arrays can also be two-dimensional
  • A two-dimensional array looks like a spreadsheet
    with rows and columns

Column 0 Column 1 Column 2 Column 3 Row 0 Row
1 Row 2
39
Two Dimensional Array Syntax
Dim ArrayName(UpperRow, UpperColumn) As DataType
  • UpperRow and UpperColumn give the highest
    subscript for the row and column indices of the
    array
  • The array on the previous slide could be
  • Defines three rows 0, 1, and 2
  • And four columns 0, 1, 2, and 3

Dim array(2,3) As Single
40
Two Dimensional Array Subscripts
Dim array(2,3) As Single
Column 0 Column 1 Column 2 Column 3 Row
0 sngScores(0,0) sngScores(0,1) sngScores(0,2) sng
Scores(0,3) Row 1 sngScores(1,0) sngScores(1,1) s
ngScores(1,2) sngScores(1,3) Row
2 sngScores(2,0) sngScores(2,1) sngScores(2,2) sng
Scores(2,3)
41
Nested Loops And Two Dimensions
  • Must use two subscripts to indicate a single
    element in a two dimensional array
  • Nested loops are often used to specify subscripts
    for two-dimensional array processing
  • For example, a nested loop below is used to
    insert a value into every element of array scores

For intRow 0 To 2 For intCol 0 To 3 intNum
Val(InputBox("Enter a score.")) sngScores(intR
ow, intCol) intNum Next intCol Next intRow
42
Implicit Sizing and Initialization
  • Can be used with multi-dimensional arrays
  • Row 0 values
  • Row 1 values
  • Row 2 values
  • Initializes array intNumberswith the following
    values

Dim intNumbers(,) As Integer _ 1, 2, 3,
4, 5, 6, 7, 8, 9
Col 0 Col 1 Col 2
Row 0 1 2 3
Row 1 4 5 6
Row 2 7 8 9
43
Sum Columns, 2-Dimensional Array
  • Code below uses nested loops to compute sum of
    elements in each column of a 2 dimensional array
  • Outer loop controls column subscript

Dim intValues(,) As Integer 1, 2, 3, 4,
_ 5, 6, 7, 8, _ 9, 10, 11, 12 For
intCol 0 to 3 intTotal 0 'Initialize
accumulator For intRow 0 to 2 'Sum rows in
this column intTotal intValues(intRow,
intCol) next intRow 'Display the sum of the
column MessageBox.Show("Column "
intCol.ToString() _ " sum is "
intTotal.ToString) Next intCol
44
Three-Dimensional Arrays Beyond
  • VB allows arrays of up to 32 dimensions
  • Can think of a 3 dimensional arrayas having
    multiple pages of two dimensional arrays
  • Arrays beyond three dimensions are difficult to
    visualize
  • But, all one needs to do is to be consistent in
    the use of the different indices

45
Enabled Property
  • Most controls have an Enabled property
  • If this Boolean property is set to false, the
    control is disabled, meaning the control
  • Cannot receive the focus
  • Cannot respond to user generated events
  • Will appear dimmed, or grayed out
  • Default value for this property is true
  • May be set in code when needed as shown

btnExample.Enabled False
46
Timer Control
  • A Timer control generates Tick events
  • Double-click on Timer tool in Toolbox to add
  • Appears in component tray
  • Standard prefix is tmr
  • Can perform a process at regular intervals by
    coding the process in a Tick event procedure
  • Two important properties
  • Enabled must be true to generate Tick events
  • Interval (milliseconds) decides tick frequency
  • Interval of 1000 causes 1 timer tick per second
  • Tutorial 8-5 demonstrates the Timer control

47
Splash Screens
  • A form, often with an application logo, that is
    displayed while an application is loading
  • A splash screen usually
  • Has Topmost property set to True so it is
    displayed over the forms of other applications
  • Disappears shortly by using a Timer
  • Is modeless so the application continues to load
    while the splash screen is displayed
  • Tutorial 8-6 demonstrates a splash screen

48
Anchor Property
  • Anchor - a property of various form controls
  • A control anchored to a form edge keeps the same
    distance to the form edge
  • Controls may be anchored to any, all, or none of
    the right, left, top, or bottom edges
  • Default is to anchor to top and left edges
  • Can just as easily anchor to bottom right
  • If anchoring to opposing sides, control is
    resized when form is resized
  • Anchoring to all 4 sides causes control to be
    resized proportionally to form

49
Dock Property
  • Dock - a property of various form controls
  • A control docked to a form edge is placed
    directly against the form edge
  • Controls may be docked to
  • Any one form edge but not more than one
  • No edge or not docked (the default)
  • Length or width of docked control changes to
    match length or width of the form edge

50
Initial Random Number Generation
  • Often used for games and simulations
  • Must create an instance of the Random class to
    use random number methods and properties
  • May supply a seed number as below so the same set
    of random numbers are generated every time
  • If no seed number is supplied when instantiated
  • VB uses its default random number seed
  • Causes each sequence to be unique

Private rand as New Random
Private rand as New Random(25)
51
Generating More Random Numbers
  • The Next method returns the next integer in a
    random number sequence
  • Returns integer between 0 and 2,147,483,647
  • Repeatedly use a statement such as the following
    to generate additional random numbers

Dim intNum as Integer rand.Next()
intNum rand.Next()
52
Random Numbers in a Range
  • Can set an upper limit for the number generated
    by specifying the limit as an argument
  • Following example generates a random number
    between 0 and 99
  • Lower limit of a random number is always 0
  • Can add or subtract to change this lower limit
  • Following example generates a random number
    between -50 and 49

intNum rand.Next(100)
intNum rand.Next(100) - 50
53
Random Numbers of Type Double
  • Use NextDouble method to generate random numbers
    of type double
  • Returns floating point number from 0.0 to 1.0
  • For a random double between 0.0 and 500.0
  • For a random double between 100.0 and 600.0
  • Tutorial 8-7 shows an interesting use of random
    numbers

Dim dblNum as Double rand.NextDouble()
dblNum rand.NextDouble() 500
dblNum (rand.NextDouble() 500) 100
Write a Comment
User Comments (0)
About PowerShow.com