cis162ad - c# arrays – part 1 12_arrays_loading.ppt

24
CIS162AD - C# Arrays – part 1 12_arrays_loading.ppt

Upload: albert-richards

Post on 03-Jan-2016

225 views

Category:

Documents


1 download

TRANSCRIPT

CIS162AD - C#

Arrays – part 1

12_arrays_loading.ppt

CIS162AD 2

Overview of Topics

Declaring Arrays Loading Arrays Partially Filled Arrays Arrays Elements as Arguments Declaring and Loading Constant Arrays

CIS162AD 3

Arrays are Tables

Array is a different word for a table. A table is made up of columns and rows. Just like an Excel spreadsheet.

CIS162AD 4

Array Defined An array is used to process a collection

of data all of which is of the same data type (Integer, Decimal, String, etc.).

First we’ll look at single dimensional arrays (one column, many rows).

Think of a single dimensional array as a list of variables.

CIS162AD 5

Declaring Arrayint intQty1, intQty2, intQty3;

int[ ] intQty = new int[3]; //3 integer variables

dataType[ ] arrayName = new dataType[arraySize];

An array of 3 elements of type integer is created. The arraySize is used by C# to determine how much

memory to allocate. Arrays will usually be class-level because after values

are loaded in we don’t want to lose the values.

CIS162AD 6

Array Subscript dataType[ ] arrayName = new dataType[arraySize];

Arrays are allocated consecutive memory. Each element is referenced using a subscript. Subscript are integers. The number of elements that are created is arraySize. The first element in the array is referenced with a

value of zero [0]. The last element is referenced with a subscript value

of [arraySize – 1]. A subscript is also referred to as an index. Short variable names for subscripts are acceptable.

CIS162AD 7

Memory Map

Address Variable Value

1010 intQty1 0

1020 intQty2 0

1030 intQty3 0

1040 intQty[0] 0

1050 intQty[1] 0

1060 intQty[2] 0

1070 decPrice 0

CIS162AD 8

Subscript Out Of Range If during execution, the subscript value

referenced an element past the end of the array, the program would throw an exception (run-time error).

The programmer must make sure that the logic in the program does not allow the subscript to exceed the array size.

This is called being out of range.

CIS162AD 9

Preventing Out of Range C# will not prevent a subscript out of range error, but

it will abort the execution when it happens. It aborts because the subscript would be referencing

some other section of memory than what was allocated for the array.

The programmer is responsible for preventing the out range error.

We can use some built in methods to manage arrays,arrayName.LengtharrayName.GetUpperBound(0).

The For Each (foreach) command may also be used to walk through arrays.

CIS162AD 10

Array Properties int[ ] intQty = new int[3]; //3 integer variables

arrayName.Length– intQty.Length is equal to 3.– intQty.Length is the number of entries that can be loaded.– The last valid subscript value is one less than Length.

arrayName.GetUpperBound(0).– intQty.GetUpperBound(0) is equal to 2.– intQty.GetUpperBound(0) is last valid subscript value.

Depending the loop structure, we may use:– less than Length or– Equal to GetUpperBound(0)

CIS162AD 11

Array Processing

1. Declare Array2. Load Array

• After creating the array, data must be loaded.• Use arrayName.Length or arrayName.GetUpperBound(0) to

prevent out of range errors.• Note: Arrays can be declared and loaded with constant values.

3. Process Array• Use individual elements in calculations or as arguments.• Send entire arrays to methods for processing.• Sort, Search, Display• Use a lot of For loops or For Each loops.

CIS162AD 12

Declare Array//Arrays are declared at the class level, //so they can be referenced by all methods.

int[ ] cintTestScores = new int[20];int cintNumberOfStudents;

//We can load up to 20 scores, but we will //save how many tests are actually loaded in

cintNumberOfStudents.

CIS162AD 13

Declare Array with a Const

//Arrays can be declared using a constant for the size.

const int intARRAY_SIZE = 20;int[ ] cintTestScores = new int[intArraySize];

//We can still load up to 20 scores

CIS162AD 14

cintTestScores Array Memory MapPosition Address Index Value

1 1010 [0] 0

2 1014 [1] 0

3 1018 [2] 0

4 1022 [3] 0

5 1026 [4] 0

6 1030 [5] 0

7 1034 [6] 0

… … … …

20 1086 [19] 0

CIS162AD 15

Load Array//Loads Array with scores saved in a data file.private void btnLoadArray_Click( ){

FileStream studentFile = new FileStream("cs12ex.txt", FileMode.Open); StreamReader studentStreamReader = new StreamReader(studentFile);

int i = 0; //subscript initialized to zero while (studentStreamReader.Peek() != -1){ if (i < cintTestScores.Length) { cintTestScores[i] = int.Parse(studentStreamReader.ReadLine( ));

i ++; //Increment subscript by one } else { MessageBox.Show (“Array Size Exceeded”);

break; //Get of out of loop; Array is full. }}cintNumberOfStudents = i; //Save how many students were loadedstudentFile.Close( ); //Close file

}

cs12ex.txt

5040100301020

CIS162AD 16

Loaded ArraysPosition Address Index Value

1 1010 [0] 50

2 1014 [1] 40

3 1018 [2] 100

4 1022 [3] 30

5 1026 [4] 10

6 1030 [5] 20

7 1034 [6] 0

… … … …

20 1086 [19] 0

CIS162AD 17

Process Array – Individual Elements

private void btnProcessArray_Click( ){

int i;int intSum = 0;

for (i = 0; i <= cintTestScores.GetUpperBound(0); i++){

intSum += cintTestScores[i];}

txtSum.Text = intSum.ToString(“N0”);}

CIS162AD 18

For Each - Exampleprivate void btnProcessArray_Click( ){

int i; //subscript not neededint intSum = 0;

foreach (int intTestScore in cintTestScores){

intSum += intTestScore;}

txtSum.Text = intSum.ToString(“N0”);}

CIS162AD 19

Individual Elements as Argumentsprivate void btnProcessArray_Click( ){

int i;decimal decPercent;

for (i = 0; i <= cintTestScores.GetUpperBound(0); i++){

decPercent = calcPercent(cintTestScores[i]);txtPercent.Text = decPercent.ToString(“N0”);

}}

private decimal calcPercent(int intScore){

return (intScore / 100);}

CIS162AD 20

Partially Filled Arrays In the for loop on the prior slide it was assumed that the arrays

were filled by going up to GetUpperBound(0). Up to 20 scores could be loaded, but in the example only 6

scores were actually loaded. When the array is not full, it is considered a partially filled

array. The for loops need to be modified to only process the number

scores loaded. The number of scores loaded are counted in the load routine,

and the count should then be saved in a variable like cintNumberOfStudents.

This variable should then be used when processing the arrays.

CIS162AD 21

Load Array – Partially Filled//Loads Array with scores saved in a data file.private void btnLoadArray_Click( ){

FileStream studentFile = new FileStream("cs12ex.txt", FileMode.Open); StreamReader studentStreamReader = new StreamReader(studentFile);

int i = 0; //subscript initialized to zero while (studentStreamReader.Peek() != -1){ if (i < cintTestScores.Length) { cintTestScores[i] = int.Parse(studentStreamReader.ReadLine( ));

i ++; //Increment subscript by one } else { MessageBox.Show (“Array Size Exceeded”);

break; //Get of out of loop; Array is full. }}cintNumberOfStudents = i; //Save how many students were loadedstudentFile.Close( ); //Close file

}

CIS162AD 22

Processing Partially Filled Arraysprivate void btnProcessArray_Click( ){

int i;int intSum;

//for (i = 0; i <= cintTestScores.GetUpperBound(0); i++) //process entire arrayfor (i = 0; i < mintNumberOfStudents; i++) //process partially filled array{

intSum += cintTestScores[i];}

txtAverage.Text = (intSum / mintNumberOfStudents).ToString(“N0”);}

CIS162AD 23

Declare and Load Constant Arrays Arrays that will hold constants or some initial values can be

loaded at declaration. When the values are provided at declaration, do not include the

size. The size is determined by the number of values provided. The values are enclosed in braces and not parenthesis.

decimal[ ] cdecPERCENT_RANGE = new decimal[ ] {90D, 80D, 70D, 60D, 0D};

string[ ] cstrLETTER_GRADE = new string[ ] {"A", "B", "C", "D", "F"};

C# does NOT allow const for arrays.

CIS162AD 24

Summary

Declaring Arrays Loading Arrays Partially Filled Arrays Arrays Elements as Arguments Declaring and Loading Constant Arrays