1 chapter 7 arrays. 2 outline and objective in this chapter we will learn about arrays...

56
1 Chapter 7 Arrays

Post on 21-Dec-2015

227 views

Category:

Documents


1 download

TRANSCRIPT

1

Chapter 7

Arrays

2

Outline and Objective

In this chapter we will•Learn about arrays

•One-dimensional arrays

•Two-dimensional arrays

•Learn about searching

•Learn about sorting

Array verses Simple Variable

Simple variable is used to store a single value.Ex: Dim X as Integer 0

X

0000X(1) X(2) X(3) X(4)

X

•Array variable is used to represent many values of the same type with one variable name.

Ex: Dim X(1 to 4) as Integer

4

Elements of an Array

Array Name: A valid variable name for the structure. (X)

Subscript or Index : A value that refers to a particular array element. X(1)

Element or Subscripted variable: An individual data item within an array.•Ex: X(1), X(2)

0000X(1) X(2) X(3) X(4)

X

5

Array Grade()

Dim Grade( 1 To 4) As Integer

35 10 5 25

Grade(1)

Array Name

Index

6

Array Declaration

SyntaxDim arrayName(m To n) As varTypewhere m and n are integers

Declaring arrays - specify:•name

•type of array

•number of elements

7

Array Declaration

Examples•Dim month(1 To 5) As String

•Dim stdID(1 To 3) As Integer

Month(1) Month(2) Month(3) Month(4) Month(5)

00 0

stdID(1) stdID(2) stdID(3)This statement

creates array of 3 integer elements

8

The Dim Statement

Used to declare an array A Dim statement must occur before

the first reference to the array elements.

9

Initializing an Array

Private Sub cmdExample_Click() Dim Grade(1 To 5) As Integer Grade (1) = 5 Grade (2) = 30 Grade (3) = 25 Grade (4) = 15 Print Grade(1) + Grade(3) Print Grade(4) Print Grade(1+2)End Sub

0

0

0

0

0

Grade(1)

Grade(2)

Grade(3)

Grade(4)

Grade(5)

5

30

25

15

30

15

25

The statements Dim arrayName(0 to n) as VarType can be placed by the statement Dim arrayName(n) as VarType

Ex. Dim X(0 To 3) As Integer

Ex. Dim X(3) As Integer

000 0

x(0) x(1) x(2) x(3)

000 0

x(0) x(1) x(2) x(3)

Example

Dim Y(-1 to 2) As Integer

000 0

Y(-1) Y(0) Y(1) Y(2)

Dim Z(-2 to 0) As Single

00 0

Z(-2) Z(-1) Z(0)

Example

Dim Y(-1 to -1) As Integer

0

Y(-1)

Dim Z(2 to 2) As Single

0

Z(2)

Example

Dim Y(2) As Integer

Dim Z(2 to 2) As Single

0

Z(2)

000

Y(0) Y(1) Y(2)

Example Dim Y(10 to 1) As Integer

• Compile ERROR

Dim Z(2 to -2) As Single

• Compile ERROR

Example

i = 5Dim arr(i) As Integer

• Invalid statements

Example

5

0

0

Example

Example

m, n must be a constant

Chapter 7 - Visual Basic Schneider

19

Initializing an Array by Reading from a File

Dim student (1 To 30) As StringDim count As IntegerOpen “STUDENTS.txt” For Input As #1For count = 1 To 30 Input #1, student(count)Next count

Ali

Ahmed

..

..

..

Huda

STUDENTS.txt

Ali Ahmed HudaStudent

1 2 30

Chapter 7 - Visual Basic Schneider 20

Adding Up Elements in an ArrayDim score(1 To 30) As Single, student(1 To 30) As StringDim count As Integer, average as Integer, sum As IntegerOpen “STUDENT.TXT” For Input As #1For count = 1 To 30 Input #1, student(count), score(count)Next countsum = 0For count = 1 To 30 sum = sum + score(count)Next countaverage = sum/30

Ali Ahmed HudaStudent

1 2 3022 19 25Score

1 2 30

Ali 22

Ahmed 19

..

..

..

Huda 25

Students.txt

21

Dim XY (1 To 5) As IntegerDim count As Integercount = 1Open “DATA.TXT” For Input As #1Do While NOT EOF(1) Input #1, XY(count)

count= count + 1Loop

Example

22

Parallel Arrays

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

Ali Ahmed HudaStudent

1 2 3022 19 25Score

1 2 30

Ali 22

Ahmed 19

..

..

..

Huda 25

Students.txt

23

Example of Parallel Arrays

Dim nom(1 To 3) As String, score(1 To 3) As Integer

Dim student As IntegerOpen “SCORE.TXT” For Input As #1For student = 1 To 3 Input #1, nom(student), score(student)Next studentClose #1

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 24

Dynamic Arrays

Defines or dimensions a Dynamic array•ReDim arrayName (m To n) as varType

•m, n can be a variables or expressions

ReDim can only be used inside a procedure

Use Dim in General Declaration as•Dim arrayName() as varType

•Cannot be used till you ReDim it in a procedure

25

About ReDim:

Dim A(5) as integer ReDim A(7) Invalid

Redim A(5) Dim A(7) Invalid

ReDim A(5) ReDim A(7) as integer Invalid

About ReDim:

Dim A() as integer Redim A(7) as integer Valid

X=1 ReDim A(x) as integer Valid

Dim A() as integer A(1)= 5 Invalid

28

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.

403010 15

x(0) x(1) x(2) x(3)

Chapter 7 - Visual Basic Schneider 29

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.

Basem WalidStudent1

1 2

Ahmed MajidStudent2

1 2

Student3

1 2

Osama

3 4

Nabeel

Ali

3 4

Salim

3 4 5 6 7 8

Merging two ordered arrays

SalimAhmed Ali Basem Majid Nabeel Osama Walid

15

0

Arr1(1)

Arr1(2)

Arr1(3)

5

13

26

0

0

Arr2(1)

Arr2(2)

Arr2(3)

10

20

0

0

0

0

0

0Is 5 <= 10 T: Copy the number 5 from Arr1 to Arr3, cross the number 5 off the original array (Arr1)

Arr3

5 10 5

13

10

101313 20

13

20

15

20

15

20

20

Is 13 <=10 F: Copy the number 10 from Arr2 to the Arr3, cross it off the original array

Repeat the step with the new number in the array until you reach the end of either array.Copy the numbers from the remaining array onto the third array.

Merging two ordered arrays

026

32

Passing an Array An array can be passed to another

procedure (Only) by reference.

the name of the array, followed by an empty set of parenthesis, must appear as an argument in calling statement, and an array variable name of the same type must appear as corresponding parameters in the procedure definition of the procedure that is to receiver the array

Parenthesis are optional with the arguments

33

Example

Example

Example

36

Sorting

A common practice involving arrays is to sort the elements of the array in either ascending or descending order.

A sort is an algorithm for ordering an array

Sorting techniques•Bubble Sort

•Shell Sort

Ascending : lowest to highestdescending: highest to lowest

37

Bubble Sort

The bubble sort involves comparing adjacent elements and swapping the values of those elements when they are out of order.

38

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

39

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

Array Elements Bubble Sort Shell Sort

5 10 1515 105 11525 300 30230 435 364100 4,950 2,638500 124,750 22,517

40

Searching Arrays The process of finding the position of a value

in an array is called searching For example

Search(-10) = 3Search (3) = 1Search (5) = Not Found

-103 6

stdID(1) stdID(2) stdID(3)

41

Searching techniques A sequential search examines each element,

beginning with the first, until the specified value is found or the end of the array is reached

For example Search(4) = 5

-103 7

stdID(1) stdID(2) stdID(3)

101 4

stdID(4) stdID(5) stdID(6)

Is 4 = 3: False

Is 4 = 7: False

Is 4 = -10: False

Is 4 = 1: False

Is 4 = 4: True

The number of comparisons to find the value 4 = 5

42

The Sequential Search

Dim nom(1 To 6) As IntegerDim index As Integer, foundFlag As BooleanDo While (index <= 6) And (Not foundFlag) If nom(index)= 4 Then

foundFlag = True Else index = index + 1 End IfLooppicOutput.Print “The Number 4 is located at position“;

index

43

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.

44

Binary Search

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

8

3

7

stdID(1)

stdID(2)

stdID(3)

77

10

22

stdID(4)

stdID(5)

stdID(6)

81

78

80

100

91

92

stdID(7)

stdID(8)

stdID(9)

stdID(10)

stdID(11)

stdID(12)

Search(78) =

First = 1

Last = 12

Middle = Int((first + last) / 2)

Middle = Int(1+12)/2=6

Middle=6

Is 78 = 77 falseIs 78< 77 falseIs 78>77First =7

First = 7

Middle = Int(7+12)/2=9

Middle= 9

Is 78 = 81 falseIs 78 < 81 Last = 8

Last = 8

Middle = Int(7+8)/2=7

Middle = 7

Is 78 = 78 trueSTOPSearch(78) =7

46

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.

47

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

48

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

Examples: How many elements?

Dim rm(0 To 3, 97 To 99) As Integer

49

00 0

00 0

00 0

00 0

9997 98

0

1

2

3

12 elements

What is the output of:

Dim (1 to 3 , 1 to 3) as integerFor i = 1 To 3 For j = 1 To 3 a(i, j) = i * j Print a(i, j); Next j PrintNext i

The output is

1 2 32 4 63 6 9

Examples: How many elements?

Dim rm(1 To 4) As Single

51

00 0

rm(1) rm(2) rm(3)

0

rm(4)

4 elements

Examples: How many elements?

Dim arr(4, 1 To 4) As Single

52

00 0

00 0

00 0

00 0

31 2

0

1

2

3

0

0

0

0

4

00 0 04

20 elements

Examples: How many elements?

Dim arr(-5 To -3, 5 To 5) As String

53

5

-5

-4

-3

3 elements

Examples: How many elements?

Dim xy(-3 To -5) As Integer

54

ERROR

Examples

Dim arr(0 To 3, 97 To 99) As Integer•arr(1,98)= 20

•arr(3,99)=15

•arr(0,2) Error: index out of range

•arr(-1,99) Error: index out of range

55

00 0

00 20

00 0

150 0

9997 98

0

1

2

3

Examples

Dim arr(0 To 3, 97 To 99) As IntegerFor i = 97 To 99

arr(1,i) = 10

Next i

56

00 0

1010 10

00 0

00 0

9997 98

0

1

2

3