180 likes | 310 Views
Topic 9C – Multiple Dimension Arrays. Multiple Dimension Arrays. A multiple dimension array is an array that has two or more dimensions.
E N D
Multiple Dimension Arrays • A multiple dimension array is an array that has two or more dimensions. • Two dimensional arrays are the simplest type of multiple dimension arrays. They can be used to represent tables of data, matrices, and other two dimensional objects. • One of the most obvious example of a two dimensional array is the tic-tac-toe board. CISC105 – Topic 9C
Multiple Dimension Arrays Example: Tic-Tac-Toe • A tic-tac-toe board has two dimensions, the row and the column. Each dimension is composed of 3 possible indices (there are 3 rows and 3 columns). 0 1 2 0 [0][0] [0][1] [0][2] 1 [1][0] [1][1] [1][2] 2 [2][0] [2][1] [2][2] CISC105 – Topic 9C
Two Dimensional Arrays • We can see how a two dimensional array looks like a table or matrix. • Thus, we can represent a two dimensional array as rows and columns. • To declare a two-dimensional array: (data type) array_name[# of rows][# of columns]; CISC105 – Topic 9C
Two Dimensional Arrays Declarations • Therefore, a two dimensional array of integers, named x, with 29 rows and 33 columns would be declared as: int x[29][33]; • A two dimensional array of characters, named c, with 119 rows and 2 columns would be declared as: char c[119][2]; CISC105 – Topic 9C
Multiple Dimension Array Declarations • We can also declare arrays of more than two dimensions. A six dimensional array of doubles could be declared as: double a[2][3][9][4][5][3]; • A three dimensional array of integers could be declared as: int x[4][5][4]; CISC105 – Topic 9C
Referencing Multiple Dimension Arrays • To access an element of a multiple dimension array, we use the same form as for one dimensional arrays, with the extra dimension(s) also present, such as: • x[2][7] = x[1][7] + 27; • y[9][2][0][4] = 9; • printf(“%d”,p[3][4][5][9][0]); CISC105 – Topic 9C
Multiple Dimension Arraysas Function Arguments • We have seen that when one dimensional arrays are passed into a function, the size of the array is not passed in. This allows us to pass arrays of any size into the function. • When passing a multiple dimension array as a function parameter, the size MUST BE specified in the function prototype. • Thus, we can only pass in fixed-size multiple dimensional arrays into functions. CISC105 – Topic 9C
Multiple Dimension Arraysas Function Arguments • However, there is one exception to this rule. The FIRST size (in a two dimensional array, the number of rows) MAY be omitted in a function prototype. • Therefore, if we wanted to create a function that takes one parameter, a tic-tac-toe board, we could write the prototype as either: void function_x(char board[][3]); void function_x(char board[3][3]); OR CISC105 – Topic 9C
Multiple Dimension Arraysas Function Arguments • If the size of a multiple dimension array is known and fixed, such as the size of a tic-tac-toe board, the size of all dimensions should be specified. • If this is not fixed, or known, the first dimension can, and should, be omitted. CISC105 – Topic 9C
Multiple Dimension Arrays as Function Arguments • Thus, the following function prototypes are valid: • void function_a(char[][4]); • int function_b(int[4][9]); • int function_c(char p[3][9][2]); • int function_d(int[][9][2][4]); • int function_e(int[4][9][2][4]); • int function_f(char[][3][9]); CISC105 – Topic 9C
Multiple Dimension Arrays as Function Arguments • In contrast, the following function prototypes are NOT valid: • void function_a(char[][]); • int function_b(int[4][]); • int function_c(char p[][][2]); • int function_d(int[][9][][]); • int function_e(int[4][][4][]); • int function_f(char[9][][9]); CISC105 – Topic 9C
Initialization of Multiple Dimension Arrays • Multiple dimension arrays can be initialized in much the same way as one dimensional arrays. char board[3][3] = { {‘X’, ‘X’, ‘O’}, {‘O’, ‘X’, ‘O’}, {‘X’, ‘O’, ‘X’} }; • Notice how the initialization list is grouped into rows. CISC105 – Topic 9C
Initialization of Multiple Dimension Arrays • In addition to grouping the initialization list into rows, the initialization list can simply be provided as a straight list: char board[3][3] = {‘X’,‘X’,‘O’,‘O’,‘X’, ‘O’,‘X’,‘O’,‘X’}; • This type of initialization list fills in the first row, left-to-right, then the second row, left-to-right, then the third row, etc… CISC105 – Topic 9C
Initialization ofMultiple Dimension Arrays • Thus, this declaration will set board[0][0] to ‘X’, board[0][1] to ‘X’, board[0][2] to ‘O’, board[1][0] to ‘O’, board[1][1] to ‘X’, board[1][2] to ‘O’, board[2][0] to ‘X’, board[2][1] to ‘O’, board[2][2] to ‘X’. char board[3][3] = {‘X’,‘X’,‘O’,‘O’,‘X’, ‘O’,‘X’,‘O’,‘X’}; CISC105 – Topic 9C
Summary • Multiple dimension arrays are very similar to one dimensional arrays, in declarations, initialization, and referencing. • When passing a multiple dimension array into a function, the size of the dimensions MUST be specified (in contrast to one dimensional arrays), with the exception of the size of the first array dimension. CISC105 – Topic 9C
An Example Problem #1 • Write a prototype for a function named function1 that takes two parameters, a three dimensional integer array with sizes 4, 9, & 10, and a four dimensional integer array with sizes 9, 4, 2, & 2. The first array is for input and the function should not be able to modify it. The second array is for input and output; the function can modify it. The function returns a float data type. float function1( const int array1[4][9][10], int array2[9][4][2][2] ); CISC105 – Topic 9C
An Example Problem #2 • Write a function that takes one parameter, a tic-tac-toe board. It should then ask the user which box they want to put a ‘X’ in, by specifying the row and column. The function should then set that specified box equal to ‘X’. The prototype for this function is given: void set_an_X(char board[3][3]); CISC105 – Topic 9C