Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 8: Arrays Starting Out with C++ Early Objects Ninth Edition

Similar presentations


Presentation on theme: "Chapter 8: Arrays Starting Out with C++ Early Objects Ninth Edition"— Presentation transcript:

1 Chapter 8: Arrays Starting Out with C++ Early Objects Ninth Edition
by Tony Gaddis, Judy Walters, and Godfrey Muganda

2 Topics 8.1 Arrays Hold Multiple Values 8.2 Accessing Array Elements 8.3 Inputting and Displaying Array Contents 8.4 Array Initialization 8.5 The Range-Based for loop 8.6 Processing Array Contents 8.7 Using Parallel Arrays

3 Topics (continued) 8.8 The typedef Statement 8.9 Arrays as Function Arguments 8.10 Two-Dimensional Arrays 8.11 Arrays with Three or More Dimensions 8.12 Vectors 8.13 Arrays of Objects

4 8.8 The typedef Statement Creates an alias for a simple or structured data type Format: typedef existingType newName; Example: typedef unsigned int Uint; Uint tests[ISIZE]; // array of // unsigned ints

5 Declaring arrays USING typedef
const int SIZE = 10; typedef double ListType[SIZE]; ListType a; ListType mylist; which is equivalent to double a[10]; double mylist[10];

6 8.6 Processing One-Dimensional Arrays
Some basic operations performed on a one-dimensional array are initialize, input data, output data stored in an array, find the largest and/or smallest element. Each of these operations requires the ability to step through the elements of the array. Stepping-through the elements of an array is easily accomplished by a loop.

7 Consider a list declared as an array of the SIZE 100
The following for loop steps-through each element of the array list starting at the first element of list. for(i = 0; i < SIZE; i++) process list[i] If processing list requires inputting data into list, the statement in Line 2 takes the from of an input statement, such as the cin statement. for(i = 0; i < SIZE; i++) cin>>list[i];

8 Finding the largest element in the array
maxIndex = 0; for(index = 1; index < SIZE; index ++) if(list[maxIndex] < list[index]) maxIndex = index; largest = list[maxIndex];

9 Array Problems In C++, there is no guard against indices that are out of bounds. Assignment, comparison of arrays, reading data into an array and printing the contents of an array must be done component-wise. list1 = list2; // illegal In order to copy one array into another array, use a loop. for(j = 0; j < arraySize; j++) y[j] = x[j];

10 8.9 Arrays as Parameters to Functions
By Reference Only: In C++, arrays are passed by reference only. do not use the symbol & when declaring an array as a formal parameter. void initialize(ListType list, int SIZE) { int count; for(count = 0; count < SIZE; count++) list[count] = 0; }

11 8.7 Using Parallel Arrays Two (or more) Arrays are called parallel if their corresponding components hold related information. const int MAXSTUDENTS = 50; typedef int IdList [MAXSTUDENTS]; typedef char GradesList [MAXSTUDENTS]; IdList studentIds; GradeList courseGrades;

12 8.10 Two-Dimensional Arrays
A two-dimensional array is a collection of a fixed number of components arranged in two dimensions, and all components are of the same type. The syntax for declaring a two-dimensional array is: typedef int Arraytype [intexp1][intexp2]; where intexp1 and intexp2 are expressions yielding positive integer values. The two expressions intexp1 and intexp2 specify the number of rows and the number of columns, respectively, in the array. typedef double SalesArrayType [STORES][WEEKS];

13

14 Accessing Array Components
Declare the array SalesArrayType sales; To access a component: sales[5][3] = 25.75; If int i = 5; int j = 3; then the previous statement is equivalent to sales[i][j] = 25.75;

15

16 Processing Two-dimensional Arrays
A two-dimensional array can be processed in three different ways. 1. Process the entire array. 2. Process a particular row of the array, called row processing. 3. Process a particular column of the array, called column processing. When processing a particular row or column of a two-dimensional array we employ algorithms similar to when we process one-dimensional arrays.

17 Suppose that we want to process row number, say 5 of matrix
Suppose that we want to process row number, say 5 of matrix. The components of row number 5 of matrix are:

18 for(col = 0; col < COLUMNS; col++) processMatrix[row][col];
//In these components the first index is fixed at 5. row = 5; //The second index ranges from 0 to 5. for(col = 0; col < COLUMNS; col++) processMatrix[row][col];

19 Similarly, suppose that we want to process column number 2 of matrix, that is, the third column of matrix. The components of this column are:

20 for(row = 0; row < ROWS; row++) process matrix[row][col]
The second index is fixed at 2 and the first index ranges from 0 to 6. The following for loop processes column 2 of matrix. col = 2; for(row = 0; row < ROWS; row++) process matrix[row][col]

21 Print The following nested for loops print the components of matrix, one row per line. for(row = 0; row < ROWS; row++) { for(col = 0; col < COLUMNS; col++) cout<<setw(5)<<matrix[row][col]<<" "; cout<<endl; }

22 Largest Element in Each Row and Each Column
for(row = 0; row < ROWS; row++) { largest = matrix[row][0]; for(col = 1; col < COLUMNS; col++) if(largest < matrix[row][col]) largest = matrix[row][col]; cout<<"Largest element of row "<<row+1 <<" = "<<largest<<endl; }

23 Passing Two-dimensional Arrays as Parameters to Functions
Two-dimensional arrays can be passed as parameters to a function and they are passed by reference. When storing a two-dimensional array in the computer’s memory, C++ uses the row order form. That is, first the first row is stored, followed by the second row, which is followed by the third row and so on. void initialize(TableType table) { int row; int col; for(row = 0; row < ROWS; row++) for(col = 0; col < COLUMNS; col++) table[row][col] = 0; }

24 8.11 Arrays with Three or More Dimensions
Array: An array is a collection of a fixed number of elements (called components) arranged in n dimensions (n >= 1), called an n-dimensional array. The general syntax of declaring an n-dimensional array is: typedef dataType arrayName[intExp1][intExp2]...[intExpn]; where intExp1, intExp2, … , and intExpn are constant expressions yielding positive integer values.

25 The statement typedef double CarDealersType[10][5][7]; CarDealersType carDealers; declares carDealers to be a three-dimensional array. Size of the first dimension is 10 and it ranges from 0 to 9. The size of the second dimension is 5 and it ranges from 0 to 4. The size of the third dimension is 7 and it ranges from 0 to 6. The base address of the array carDealers is the address of the first array component, that is the address of carDealers[0][0][0]. The total number of components in the array carDealers is 10*5*7 = 350.

26 carDealers[5][3][2] = ; for(i = 0; i < 10; i++) for(j = 0; j < 5; j++) for(k = 0; k < 7; k++) carDealers[i][j][k] = 0.0; initializes the entire array to 0.0.

27 8.5 The Range-Based for Loop
NOTE: This is a C++ 11 feature This loop simplifies array processing. It uses a variable that will hold a different array element for each iteration Format: for (data_type var : array) statement; data_type : the type of the variable var: the variable statement; : the loop body

28 Range-Based for Loop - Details
data_type must be the type of the array elements, or a type that the array elements can be automatically converted to var will hold the value of successive array elements as the loop iterates. Each array element is processed in the loop statement; can be a single statement or a block of statements enclosed in { }

29 Range-Based for Loop - Example
// sum the elements of an array int [] grades = {68,84,75}; int sum = 0; for (int score : grades) sum += score; See pr8-09.cpp and pr8.10.cpp

30 Range-Based for Loop - Example
// modify the contents of an array const int ISIZE = 3; int [ISIZE] grades; for (int &score : grades) { cout << "Enter a score: "; cin >> score; }

31 Comparison: Range-Based for Loop vs. Regular for Loop
The range-based for loop provides a simple notation to use to process all of the elements of an array. However, it does not give you access to the subscripts of the array elements. If you need to know the element locations as well as the element values, then use a regular for loop.

32 Chapter 8: Arrays Starting Out with C++ Early Objects Ninth Edition
by Tony Gaddis, Judy Walters, and Godfrey Muganda


Download ppt "Chapter 8: Arrays Starting Out with C++ Early Objects Ninth Edition"

Similar presentations


Ads by Google