Download presentation
Presentation is loading. Please wait.
Published byDonna Clarke Modified over 9 years ago
1
Arrays Chapter 12
2
Overview Arrays and their properties Creating arrays Accessing array elements Modifying array elements Loops and arrays
3
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…
4
4 Arrays Hold Multiple Values 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 days 1 st element 2 nd element 3 rd element 5 2 3 4
5
What 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 123456 myArray
6
Creating Arrays [ ]; Notice that we can create an array of any data type, just by changing the data type!
7
Examples 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];
8
Modifying 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 01234 … 49 12
9
Accessing 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
10
Initializing 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; }
11
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; }
12
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 00000
13
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 00000 0 counter
14
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 00000 0 counter
15
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 00000 0 counter
16
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 420000 0 counter
17
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 420000 1 counter
18
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 420000 1 counter
19
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 420000 1 counter
20
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 000 1 counter
21
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 000 2 counter
22
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 000 2 counter
23
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 000 2 counter
24
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 00 2 counter
25
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 00 3 counter
26
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 00 3 counter
27
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 00 3 counter
28
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 0 3 counter
29
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 0 4 counter
30
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 0 4 counter
31
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 0 4 counter
32
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 4 counter
33
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 5 counter
34
Line by Line byte myList [5]; for (int counter = 0; counter < 5; counter++) { myList [counter] = 42; } 01234 42 5 counter false
35
Finding 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
36
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar
37
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar
38
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 42 smallestSoFar
39
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 42 smallestSoFar 1 counter
40
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 42 smallestSoFar 1 counter
41
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 42 smallestSoFar 1 counter Is 42 > 17?
42
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 17 smallestSoFar 1 counter
43
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 17 smallestSoFar 1 counter
44
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 17 smallestSoFar 2 counter
45
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 17 smallestSoFar 2 counter
46
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 17 smallestSoFar 2 counter Is 17 > 42?
47
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 17 smallestSoFar 2 counter
48
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 17 smallestSoFar 3 counter
49
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 17 smallestSoFar 3 counter
50
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 17 smallestSoFar 3 counter Is 17 > -8?
51
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar 3 counter
52
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar 3 counter
53
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar 4 counter
54
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar 4 counter
55
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar 4 counter Is -8 > 4?
56
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar 4 counter
57
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar 5 counter
58
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar 5 counter
59
Another Trace int smallestSoFar; smallestSoFar = randomArray[0]; for (int counter = 1; counter < 5; counter++) { if (smallestSoFar > randomArray[counter]) { smallestSoFar = randomArray[counter]; } // if } // for 01234 421742-84 smallestSoFar 5 counter
60
Passing Arrays to Functions #include void modifyArray (int inArray[ ], int arraySize) { // Stuff that changes the array } void main ( ) { int myArray [15]; modifyArray (myArray, 15); }
61
The 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
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: Only initializes first 3 elements of 5 element array int c[ 5 ] = { 2, 4, 8 }; 24800 Un-initialized elements set to zero
63
63 Initializing Strings If 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
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
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
66 Printing Array Contents Use 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
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
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: 510152025testArr 0123401234 nums[0] nums[1] nums[2] nums[3] nums[4]
69
69 Arrays as Function Arguments Use 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 array Size of array void showVal ( int nums [ ], int size ) { for ( int ct = 0; ct < size; ct++ ) cout << nums [ ct ] << “ “; } New showVal:
70
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 5 2 4 6 8 10 Program output:
71
71 Two-dimensional Arrays Two-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 rowsNumber of columns Row index Column index Assign value to an element Display value of an element
72
72 Two-dimensional Arrays Nested 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.388.583.6 79.2 72.8 ? ? ? ? 0 1 2 012012 Outer loop iterates over rows Inner loop iterates over columns Student 1, exam 1: 92.3 Student 1, exam 2: 88.5 Student 1, exam 3: 83.6 Student 2, exam 1: 79.2 Student 2, exam 2: 72.8... Program output: score Read in an exam score Column index Row index
73
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; } 857963857963 Program output: Row 1Row 2Row 3 Extra braces that enclose each row’s values are optional EmptyColumn index Number of rows Iterates rows Iterates columns
74
74 Arrays Strings A 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 01230123 Pat Ned Connie Pat Greg Maximum length of string is 9 – 1 (for null terminator) Four names, 8 characters long Program output:
75
End of Lecture 4 Next Time, more on Arrays Program – 2, Due Thurs. 7/7 (classes) Program – 3, Due Thurs. 7/21 (arrays)
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.