arrays chapter 12. overview arrays and their properties creating arrays accessing array elements...
DESCRIPTION
Arrays and Their Properties Hold several values of the same type Based on a slot number (the index number) Instant access Linear (one after the other) Static – once their size is set, it’s set…TRANSCRIPT
ArraysArrays
Chapter 12Chapter 12
OverviewOverview
• Arrays and their properties• Creating arrays• Accessing array elements• Modifying array elements• Loops and arrays
Arrays and Their PropertiesArrays and Their Properties
• Hold several values of the same type
• Based on a slot number (the index number)
• Instant access• Linear (one after the other)• Static – once their size is set, it’s
set…
4
Arrays Hold Multiple Arrays Hold Multiple ValuesValues
Regular variable
Array days stores 3 values of type int
Variable count stores one value of type int
int days[ 3 ];
int count;
Array variable
count
Allocates memory for 3 ints
days1st element 2nd element 3rd element
5
2 3 4
What arrays look likeWhat arrays look like
• Things to notice
• There are 7 slots, with index numbers 0 – 6
• The name of the array is myArray• Easy to be off by one
0 1 2 3 4 5 6myArray
Creating ArraysCreating Arrays
<data type> <name> [<size>];
• Notice that we can create an array of any data type, just by changing the data type!
ExamplesExamples
• An array of shorts:short someArray [50];
• An array of floats:float myArray [25];
• An array of booleans:bool list [65];
• An array of chars:char characters [255];
Modifying an ArrayModifying an Array
• You must specify which slot you are putting information in
• Example:int myArray [50];myArray [ 3 ] = 12;
• This won’t work:int myArray [50];myArray = 12;
• Data type on the left of = is an array• Data type on right of = is an int
0 1 2 3 4…
49
12
Accessing InformationAccessing Information
• Copying information out of a particular slot
int clientAge;clientAge = myArray [ 4 ];
• This copies information from the fifth slot (slot four) into the variable clientAge
Initializing ArraysInitializing Arrays(large arrays)(large arrays)
• For most arrays, you will use a loop to initialize
• Example: Create an array of 5 bytes and fill each slot with the number 42
byte myList [5];for (int counter = 0; counter < 5; counter++) {
myList [counter] = 42;}
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
0 0 0 0 0
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
0 0 0 0 0
0counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
0 0 0 0 0
0counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
0 0 0 0 0
0counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 0 0 0 0
0counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 0 0 0 0
1counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 0 0 0 0
1counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 0 0 0 0
1counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 0 0 0
1counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 0 0 0
2counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 0 0 0
2counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 0 0 0
2counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 0 0
2counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 0 0
3counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 0 0
3counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 0 0
3counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 42 0
3counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 42 0
4counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 42 0
4counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 42 0
4counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 42 42
4counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 42 42
5counter
Line by LineLine by Line
byte myList [5];for (int counter = 0; counter < 5;
counter++) {myList [counter] = 42;
}0 1 2 3 4
42 42 42 42 42
5counter
false
Finding the Smallest ElementFinding the Smallest Element
• If you were given an array of numbers, how would YOU do it?
• Computers can only compare two at a time
• Go through entire list• Keep track of smallest so far• Let’s assume
– We have an array of 5 ints– The array contains random unknown numbers– The name of the array is called randomArray
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4smallestSoFar
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4smallestSoFar
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 42smallestSoFar
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 42smallestSoFar
1counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 42smallestSoFar
1counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 42smallestSoFar
1counter
Is 42 > 17?
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 17smallestSoFar
1counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 17smallestSoFar
1counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 17smallestSoFar
2counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 17smallestSoFar
2counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 17smallestSoFar
2counter
Is 17 > 42?
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 17smallestSoFar
2counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 17smallestSoFar
3counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 17smallestSoFar
3counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 17smallestSoFar
3counter
Is 17 > -8?
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 -8smallestSoFar
3counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 -8smallestSoFar
3counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 -8smallestSoFar
4counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 -8smallestSoFar
4counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 -8smallestSoFar
4counter
Is -8 > 4?
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 -8smallestSoFar
4counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 -8smallestSoFar
5counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 -8smallestSoFar
5counter
Another TraceAnother Trace
int smallestSoFar;smallestSoFar = randomArray[0];for (int counter = 1; counter < 5; counter++)
{if (smallestSoFar > randomArray[counter]) {
smallestSoFar = randomArray[counter];} // if
} // for0 1 2 3 4
42 17 42 -8 4 -8smallestSoFar
5counter
Passing Arrays to FunctionsPassing Arrays to Functions
#include <iostream.h>
void modifyArray (int inArray[ ], int arraySize) {// Stuff that changes the array
}
void main ( ) {int myArray [15];modifyArray (myArray, 15);
}
The Overall ConceptThe Overall Concept
• Arrays hold values that are all the same type
• Arrays are static in size• Creating arrays always follows a
format• You can create an array of any type• To initialize or search arrays, you’ll
almost always use a loop
62
More on Initializing Arrays
Initialize all three indexed variables of the array “a”
If fewer values are listed than there are indexed variables, remaining indexed variables are initialized to zero of the array base type
Automatically sized
int a[ 3 ] = { 2, 12, 1 }; int a[ 3 ];a[ 0 ] = 2;a[ 1 ] = 12;a[ 2 ] = 1;
int b[ ] = { 5, 12, 11 }; int b[ 3 ] = { 5, 12, 11 };is equivalent to:
is equivalent to:
Only initializes first 3 elements of 5 element arrayint c[ 5 ] = { 2, 4, 8 };
2 4 8 0 0 Un-initialized elements set to zero
63
Initializing StringsIf string constant is used, null terminator is automatically included
char short_str [ ] = “abc”;
Character array also has indexed variables
Sized automatically to length of string + 1 for the ‘\0’
Change value in short_str to contain all ‘X’ characters
Is equivalent to:char short_str [ 4 ] = “abc”;
Is not equivalent to:char short_str [ ] = {‘a’, ‘b’, ‘c’};
short_str[ 0 ] short_str[ 1 ] short_str[ 2 ] . . .
int index = 0;while ( short_str [ index ] != ‘\0’ ){ short_str [ index ] = ‘X’; index++;}
‘a’ ‘b’ ‘c’ ‘\0’ ‘a’ ‘b’ ‘c’
Element data type
Loop ends when element is \0
64
More Array Processing
Processing array elements is the same as processing other variables
Increment value in score[ 2 ]++ score [ 2 ];int result = score [ 4 ] * 2;
if ( score[ 3 ] < score[ 4 ] )
Loop iterates as long as score[ count ] does not equal 0
int score[ 5 ] = { 7, 8, 9, 10, 0 };
Is the value in score[ 3 ] less than the value in score[ 4 ]?
Initializes result to value of score[ 4 ] times 2
while ( score[ count ] != 0 )
65
Parallel Arrays
Using two or more arrays to represent relationships involving different data types
Elements are integers
const int NUMEMPS;int hours [NUMEMPS];float payRate [NUMEMPS];. . .for ( int index = 0; index < NUMEMPS; index++ ){ cout << “Hours employee #” << ( index + 1 ); cin >> hours[ index ]; cout << “Pay rate employee #” << ( index + 1 ); cin >> payRate[ index ];}
Stores hours worked by each employee
Stores pay rate for each employee
Number of employees
Elements are floats
Same index used to access both arrays
66
Printing Array ContentsUse a loop to display the contents of each array element
int testArr [ 5 ] = { 10, 20, 30, 40, 50 };
Displays address of the array, not the contents
Declare and initialize array
Loop displays value of each element
cout << testArr << endl;
for ( int ct = 0; ct < 5; ct++ ) cout << testArr [ ct ] << endl;
Doesn’t work!
Works!
Exception: Displaying the contents of a char array containing a C-string
char name [ ] = “Ned Nerd”;cout << name << endl;
cout uses \0 when given a char array to determine end of the string
Displays string, not array address
67
Array Elements as Function Arguments
Array element, type int, as the argument
void showVal ( int num );void main ( ){ int testArr [ 5 ] = { 5, 10, 15, 20, 25 }; for ( int ct = 0; ct < 5; ct++ ) showVal ( testArr [ ct ] );}void showVal ( int num ){ cout << num << “ “;}
Array elements can be passed by value or by reference
Parameter is also type int
With each loop iteration, the value contained in testArr[ct] is passed to the function showVal
5 10 15 20 25
Program output:
68
Arrays as Function Arguments
Starting address of array is passed to function showVal
void showVal ( int nums [ ] );void main ( ){ int testArr [ 5 ] = { 5, 10, 15, 20, 25 }; showVal ( testArr );}void showVal ( int nums [ ] ){ for ( int ct = 0; ct < 5; ct++ ) cout << nums [ ct ] << “ “;}
Any changes to parameter nums, effect argument testArr
5 10 15 20 25
Program output:
5 10 15 20 25testArr
0 1 2 3 4
nums[0] nums[1] nums[2] nums[3] nums[4]
69
Arrays as Function ArgumentsUse two arguments: The address of the array
The size of the array
int testArr1 [ 2 ] = { 5, 10 };int testArr2 [ 5 ] = { 5, 10, 15, 20, 25 };int testArr3 [ 7 ] = { 5, 10, 15, 20, 25, 30, 35 };showVal ( testArr1, 2 );showVal ( testArr2, 5 );showVal ( testArr3, 7 );
Modify function showVal to display the contents of an int array of any size
Function calls to showVal
In main:
Address of arraySize of array
void showVal ( int nums [ ], int size ){ for ( int ct = 0; ct < size; ct++ ) cout << nums [ ct ] << “ “;}
New showVal:
70
Arrays as Function Arguments
Array parameters give direct access to the array argument
Changes values in parameter nums and argument testArr
void doubleArr ( int nums [ ], int size );void main ( ){ int testArr [ 5 ] = { 1, 2, 3, 4, 5 }; for ( int ct = 0; ct < 5; ct++ ) cout << testArr [ ct ] << “ “; doubleArr ( testArr, 5 ); for ( int ct = 0; ct < 5; ct++ ) cout << testArr [ ct ] << “ “;}void doubleArr ( int nums [ ], int size ){ for ( int i = 0; i < size; i++ ) nums [ i ] *= 2;}
1 2 3 4 52 4 6 8 10
Program output:
71
Two-dimensional ArraysTwo-dimensional array is several identical arrays put together in the form of a table
score[0][0] score[0][1] score[0][2]
score[1][0] score[1][1] score[1][2]
score[2][0] score[2][1] score[2][2]
column 0 column 1 column 2
row 0
row 1
row 2
Exam scores
Students
float score [ 3 ] [ 3 ];
score [ 1 ] [ 2 ] = 93.2;
cout << score [ 0 ] [ 2 ];
Number of rows Number of columns
Row index
Column index
Assign value to an element
Display value of an element
72
Two-dimensional ArraysNested loops are used to process each element of a two-dimensional array
float score [ 3 ] [ 3 ];for ( int std = 0; std < 3; std++ ){ for ( int exam = 0; exam < 3; exam++ ) { cout << “Student “ << std + 1 << “ , exam “ << exam + 1 << “: “; cin >> score [ std ] [ exam ]; } cout << endl;}
92.3 88.5 83.6
79.2 72.8 ?
? ? ?
0 1 2
0
1
2
Outer loop iterates over rows
Inner loop iterates over columns
Student 1, exam 1: 92.3Student 1, exam 2: 88.5Student 1, exam 3: 83.6Student 2, exam 1: 79.2Student 2, exam 2: 72.8. . .
Program output:
score
Read in an exam scoreColumn index
Row index
73
Two-dimensional Arrays as Function Arguments
Number of columns is specified in a two-dimensional array parameter
void showArr ( int Arr [ ] [ 2 ], int rows );void main ( ){ int table [ 3 ] [ 2 ] = { { 8, 5 }, { 7, 9 }, { 6, 3 } }; showArr ( table, 3 );}void showArr ( int Arr [ ] [ 2 ], int rows ){ for ( int r = 0; r < rows; r++ ) { for ( int c = 0; c < 2; c++ ) cout << Arr [ r ] [ c ] << “ “; cout << endl; }}
8 59 96 3
Program output:
Row 1 Row 2 Row 3
Extra braces that enclose each row’s values are optional
Empty Column indexNumber of rows
Iterates rows
Iterates columns
74
Arrays StringsA two-dimensional array of characters can be used as multiple arrays of strings
char team [ 4 ] [ 9 ] = { “Ned”, “Connie”, “Pat”, “Greg” };
cout << team [ 2 ];
for ( int ct = 0; ct < 4; ct++ ) cout << team [ ct ] << endl;
Name of array with only a row index is the address of that row
Loop displays all names in the array
N e d \0
C o n n i e \0
P a t \0
G r e g \0
0
1
2
3
Pat
NedConniePatGreg
Maximum length of string is 9 – 1 (for null terminator)
Four names, 8 characters long
Programoutput:
End of Lecture 4End of Lecture 4
• Next Time, more on Arrays
• Program – 2, Due Thurs. 7/7 (classes)
• Program – 3, Due Thurs. 7/21 (arrays)