190 likes | 713 Vues
Multidimensional Arrays. Chapter 13. The plural of mon goose starts with a "p". Initializing a multidimensional array. 0 1 2 3 4. Processing by row. 0 1 2 3. Printing the contents of an array. Processing by column. Two dimensional Arrays.
E N D
Multidimensional Arrays Chapter 13
The plural of mongoose starts with a "p" Initializing a multidimensionalarray 0 1 2 3 4 Processingby row 0 1 2 3 Printing thecontents ofan array Processingby column
Two dimensional Arrays • A collection of components • all of the same type • structured in TWO dimensions • each component accessed by a PAIR of indices representing the component’s position in each dimension 0 1 2 3 4 0 1 2 3 Which cell isLocation (2,3) ?
Declaring Two Dimensional Arrays 0 1 2 3 4 0 1 2 3 • Syntax: data_type array_name [row_dim][col_dim]; • Example: • First element isint_table[0][0] • Last element isint_table[4][3] int int_table [5][4];
Processing Two-D Arrays • Arrays processed in some pattern • random • along rows • along columns • whole array • We will use the declaration shown below: int int_table [5][4];int row, col;
Processing Two-D Arrays • What does the routine below do with the array? What should we name the function? total_a_row 0
Processing Two-D Arrays • What does this routine below do with the array? What should we name the function? total_column 0
Processing Two-D Arrays • This function initializes an array. • Fill in the blanks with the correct identifiers 3 col table value
Printing a Table row row row col col col • We must process each row, item by item • Which will be the inner loop?Which will be the outer loop? • The LCV of the inner loop must be the one which changes the most often What goeshere? endl
Passing Arrays as Parameters • Recall declaration for 1-D array • we didn’t specify the size in the brackets • we sent the size as a separate parameter • Recall name of the array is a pointer constant • tells where the array starts in memory • this is what is passed to the function void whatever ( float num_list [ ], int size);
Passing 2-D Arrays as Parameters • For a 2-D array, declare • We are sending the starting address • also how many elements it takes to jump us to the next row • that is -- the number of columns • Note that this could be for an array for ANY number of rows, but exactly 4 columns • As with 1-D, we also send another parameter for the function as a limiting value void whatever ( float num_table [ ][4], int num_rows);
Alternate 2-D Array Definition • Think of the 2-D array as an array of arrays • Example • Each element of renters is an array of rent_pmts typedef float rent_pmts [12];rent_pmts renters [6]; 0 1 … 10 11 0 1 … 5
Multidimensional Arrays • C++ arrays not limited to two dimensions • limitation is amount of memory const int NUM_BLDGS = 10;const int APTS_PER_BLDG = 12;float apt_pmts [NUM_BLDGS][6][APTS_PER_BLDG];
Multidimensional Arrays • C++ arrays not limited to two dimensions • limitation is amount of memory const int NUM_BLDGS = 10;const int APTS_PER_BLDG = 12;float apt_pmts [NUM_BLDGS][6][APTS_PER_BLDG]; This gives a 3-D array with 720 itemsapt_pmt [bldg][tennant][apt]
Testing and Debugging • Initialize all components of an array • no guarantee of what is there to start with • Use the same number of indeces as the declaration of array • Make sure indeces are in order • don’t reverse row and column references
Testing and Debugging • Use meaningful identifiers for the array name and indeces • Double check upper and lower bounds on indeces • don’t walk off the edge of the array • When declaring multidimensional array as a formal parameter • must state sizes of all but first dimension
Testing and Debugging • When calling function with array as parameter • sizes of multi-dim actual parameter must match exactly sizes of formal • Use typedef statement to define multi-dimensional array type • use this for actual and formal parameter declaration