chapter 12-2 2-dimensional array

29
Chapter 12-2 2-Dimensional Array

Upload: camila

Post on 25-Feb-2016

44 views

Category:

Documents


3 download

DESCRIPTION

Chapter 12-2 2-Dimensional Array. Arrays. float Scores[9]; . // one dimensional array . index: 0 1 2 3 4 5 6 7 8. element. Two Dimensional Arrays. float allScores [5][9]; . column index. 0 1 2 3 4 5 6 7 8. row index. 0 1 2 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chapter 12-2  2-Dimensional Array

Chapter 12-2 2-Dimensional Array

Page 2: Chapter 12-2  2-Dimensional Array

Arrays

float Scores[9];

55.5 59.0 47.0 39.0 50.5 60.0 59.0 40.0 ?

index: 0 1 2 3 4 5 6 7 8

element

// one dimensional array

2

Page 3: Chapter 12-2  2-Dimensional Array

Two Dimensional Arraysfloat allScores[5][9];

row index0

1

2

3

4

column index 0 1 2 3 4 5 6 7 8

3

Page 4: Chapter 12-2  2-Dimensional Array

Accessing Array Elementsfloat allScores[5][9];

3.5 3.9

3.2

3.0

row index0

1

2

3

4

column index 0 1 2 3 4 5 6 7 8

allScores[0][0]

allScores[4][8]

allScores[0][8]

allScores[2][5]

4

Page 5: Chapter 12-2  2-Dimensional Array

Accessing Array Elementsfloat allScores[5][9];

// Each array element is // the same as a variablecin >> allScores[0][0];

allScores[0][0] += 5.0;

cout << allScores[0][0];

5

Page 6: Chapter 12-2  2-Dimensional Array

For Loop and 2-D Arraysfloat allScores[5][9];

// Input values to 1st row// Row index of 1st row: 0// Column index: 0 to 8 (size – 1)for (int col = 0; col < 9; col ++) cin >> allScores[0][col];

6

Page 7: Chapter 12-2  2-Dimensional Array

For Loop and 2-D Arraysconst int MAX_ROWS = 10;const int MAX_COLS = 35;

float allScores[MAX_ROWS][MAX_COLS];

// Input values to the last column// Column index of last column: 34 (MAX_COLS – 1)// Row index: from 0 to 9 (MAX_ROWS – 1)for (int row = 0; row < MAX_ROWS; row ++) cin >> allScores[row][MAX_COLS - 1];

7

Page 8: Chapter 12-2  2-Dimensional Array

For Loop and 2-D Arraysconst int MAX_ROWS = 10;const int MAX_COLS = 35;

float allScores[MAX_ROWS][MAX_COLS];

// Input values to the entire 2-D arrayfor (int row = 0; row < MAX_ROWS; row ++) for (int col = 0; col < MAX_COLS; col ++) cin >> allScores[row][col];

8

Page 9: Chapter 12-2  2-Dimensional Array

For Loop and 2-D Arraysconst int MAX_ROWS = 10;const int MAX_COLS = 35;

float allScores[MAX_ROWS][MAX_COLS];int numRows, numCols;

cout << “Enter No. of rows and No. of cols: ”;cin >> numRows >> numCols;

if ( numRows <= MAX_ROWS && numCols <= MAX_COLS ) for (int row = 0; row < numRows; row ++) for (int col = 0; col < numCols; col ++) cin >> allScores[row][col];

9

Page 10: Chapter 12-2  2-Dimensional Array

Two Dimensional Arrays as Function Parameters

//----------------------------------------------// The function inputs values to all array// elements within the first numRows rows and// the first numCols columns.// Parameters: (Out, In, In)//----------------------------------------------void GetData(float a[][MAX_COLS], int numRows, int numCols){ for (int row = 0; row < numRows; row ++) for (int col = 0; col < numCols; col ++) cin >> a[row][col];

return; } // Have to specify MAX_COLS!// float a[][MAX_COLS]

10

Page 11: Chapter 12-2  2-Dimensional Array

Two Dimensional Arrays as Function Parameters //----------------------------------------------------// The function inputs values for numRows and numCols,// then inputs values to all array elements within // the first numRows rows and the first numCols // columns.// Parameters: (Out, Out, Out)//----------------------------------------------------void GetAllData(float a[][MAX_COLS], int& numRows,int& numCols){ cin >> numRows >> numCols; for (int row = 0; row < numRows; row ++) for (int col = 0; col < numCols; col ++) cin >> a[row][col];

return; }

11

Page 12: Chapter 12-2  2-Dimensional Array

Two Dimensional Arrays as Function Parameters

//----------------------------------------------------// The function has 3 parameters:// a[][MAX_COLS]: 2-D array of float// colIndex, numRows: int// The function computes and returns the average// value of the column at index colIndex.// Params: ( ? , ? , ? ) //----------------------------------------------------float ColumnAvg( ) {

}

12

Page 13: Chapter 12-2  2-Dimensional Array

Two Dimensional Arrays

numRows - 1

colIndex

float ColumnAvg( );

13

Page 14: Chapter 12-2  2-Dimensional Array

Two Dimensional Arrays as Function Parameters

//----------------------------------------------------// The function has 3 parameters:// a[][MAX_COLS]: 2-D array of float// colIndex, numRows: int// The function computes and returns the average// value of the column at index colIndex.// Params: ( In , In , In ) //----------------------------------------------------float ColumnAvg(const float a[][MAX_COLS], int colIndex, int numRows) { float total = 0; for (int row = 0; row < numRows; row ++) total += a[row][colIndex];

return (total / numRows);}

14

Page 15: Chapter 12-2  2-Dimensional Array

Two Dimensional Arrays as Function Parameters

//-------------------------------------------------// The function has 3 parameters:// a[][MAX_COLS]: 2-D array of float// numCols, rowIndex: int// The function finds and returns the column index // of row at index rowIndex that has the max // value among all elements of row rowIndex.// Params: ( ? , ? , ? ) //-------------------------------------------------int IndexOfRowMax( ) {

}

15

Page 16: Chapter 12-2  2-Dimensional Array

Two Dimensional Arrays

rowIndex

numCols - 1

int IndexOfRowMax();

16

numRows - 1

Page 17: Chapter 12-2  2-Dimensional Array

Two Dimensional Arrays as Function Parameters

//----------------------------------------------------// The function has 3 parameters:// a[][MAX_COLS]: 2-D array of float// numCols, rowIndex: int// The function finds and returns the column index // of row at index rowIndex that has the max // value among all elements of the row.// Params: ( In , In , In ) //----------------------------------------------------int IndexOfRowMax(const float a[][MAX_COLS], int rowIndex, int numCols) { int index = 0; for (int col = 1; col < numCols; col ++) if (a[rowIndex][col] > a[rowIndex][index]) index = col; return index;}

17

Page 18: Chapter 12-2  2-Dimensional Array

Function Prototypes

void GetData(float a[][MAX_COLS], int numRows, int numCols); void GetAllData(float a[][MAX_COLS], int& numRows, int& numCols); float ColumnAvg(const float a[][MAX_COLS], int colIndex, int numRows); int IndexOfRowMax(const float a[][MAX_COLS], int rowIndex, int numCols);

// Must specify column MAX_SIZE!

18

Page 19: Chapter 12-2  2-Dimensional Array

Two Dimensional Arrays as Function Parameters

const int MAX_ROWS = 10;const int MAX_COLS = 35;

int main() { float allScores[MAX_ROWS][MAX_COLS]; int rows, cols;

// Input sizes in main() function. cin >> rows >> cols; // Call function GetData(). GetData(allScores, rows, cols); // No [] for allScores as an acutual parameter!

...

return; }

19

Page 20: Chapter 12-2  2-Dimensional Array

Call Functions

int main() { float allScores[MAX_COLS][MAX_ROWS]; int rows, cols, row, col, index; float average; GetAllData(allScores, rows, cols); cout << "Enter column index: "; cin >> col; average = ColumnAvg(allScores, col, rows); cout << "The average value of column " << col << " is " << average; cout << "Enter row index: "; cin >> row; index = IndexOfRowMax(allScores, row, cols); cout << "The largest value of row " << row << " is " << allScores[row][index]; // << allScores[row][IndexOfColMax(allScores, row, cols)]; return 0; } // Array actual parameters should use name only!

20

Page 21: Chapter 12-2  2-Dimensional Array

Function Prototypes and Function Calls

// Function prototypesvoid GetAllData(float a[][MAX_COLS], int& numRows, int& numCols); float ColumnAvg(const float a[][MAX_COLS], int colIndex, int numRows); int IndexOfRowMax(const float a[][MAX_COLS], int rowIndex, int numCols);

// Function callsGetAllData(allScores, rows, cols);

average = ColumnAvg(allScores, col, rows);

index = IndexOfRowMax(allScores, row, cols);

21

Page 22: Chapter 12-2  2-Dimensional Array

Array and typedeffloat Scores[9];// an array variable

typedef float arrayType[9];// a (new) data type// a nick name for array of // 9 float elements

22

Page 23: Chapter 12-2  2-Dimensional Array

2-D Array and typedeftypedef float arrayType[9];

arrayType Scores;// Array of float with 9 elements

arrayType allScores[10];// Array of arrays// 2-D array// Same as// float allScores[10][9];

23

Page 24: Chapter 12-2  2-Dimensional Array

Array of arrayfloat allScores[5][9];

allScores[0]

allScores[1]

allScores[2]

allScores[3]

allScores[4]

base address:

7000

7036

7072

7108

7144

float ColumnAvg(const float a[][MAX_COLS], int colIndex, int numRows)// Must specify MAX_COLS to know the base address of // other rows: allScores[1], allScores[2], etc.

Page 25: Chapter 12-2  2-Dimensional Array

2-D Array as Function Parameterconst int MAX_COLS = 9;typedef float arrayType[MAX_COLS];

float RowAverage(const arrayType nums[], int rowIndex, int numCols);// nums[] is an array// Data Type of array elements: arrayType// an array of MAX_COLS floats

float RowAverage(const float nums[][MAX_COLS], int rowIndex, int numCols);// Must specify MAX_COLS!// Must specify data type of array elements!

float RowAverage(const float a[], int numCols);// Pass one row of the array as a parameter!// For example: average = RowAverage(allScores[2], 5); 25

Page 26: Chapter 12-2  2-Dimensional Array

Summary2 dimensional array: a table

access one elementaccess one row access one column

2 dimensional array: array of arraystypedef and 2-D array

2-D array as function parameterspass the whole array: must include MAX_COLSpass one row: treat it as a one dimensional

array

Page 27: Chapter 12-2  2-Dimensional Array

Activation RecordThere is one activation record for each

function call.An activation record contains:

Local variables of the function calledReturn addressParameters for the function called

LocalsReturn Address

Parameters

Page 28: Chapter 12-2  2-Dimensional Array

Activation Record Exampleint main(){ int num1 = 5, num2 = 9, x = 10;  Final(num1, num2, x + num2);  return 0;}

28

// Parameters; ( , , )void Final(int& x, int& y, int z){ int temp; temp = z / x; z = 2 * temp - 5; x += z; y = z - x; return;}

num1: 5

num2: 9

X : 10

x : &num1(num1)

y : &num2(num2)

z : 19

temp:

Return Address

1

6

3

-5

??

InInOut

?

Out

Activation Record for Final function

Page 29: Chapter 12-2  2-Dimensional Array

Error TypesCompiler / syntax errors – will not compileRuntime errors – terminates with an error

while running:array out of boundaryvariable used before assigned a value-...

Logic errors – runs and might not produce an error while running, but produces wrong answer

Fails to terminate – endless looping