# CSCI 3131.01 - PowerPoint PPT Presentation

1 / 53
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:48
Avg rating:3.0/5.0
Slides: 54
Provided by: sceUhclEd7
Category:
Tags:
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
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
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 "
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 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
• 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

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