two-dimensional arrays elec 206 computer applications for electrical engineers dr. ron hayne

24
Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne

Upload: morris-mcgee

Post on 13-Dec-2015

222 views

Category:

Documents


2 download

TRANSCRIPT

Two-Dimensional Arrays

ELEC 206

Computer Applications for Electrical Engineers

Dr. Ron Hayne

206_C7 2

Two-Dimensional Arrays

Row offset Column offset

x[2][1] = 6

All values must have same data type

int x[4][3] = {{2, 3, -1}, {0, -3, 5}, {2, 6, 3}, {-2, 10, 4}};

row 0 2 3 -1

row 1 0 -3 5

row 2 2 6 3

row 3 -2 10 4

col 0 col 1 col 2

206_C7 3

2-D Arrays from Data Files

#include <fstream>

...

const int NROWS = 10;

const int NCOLS = 5;

...

double data[NROWS][NCOLS]

...

for (int i=0; i<=NROWS-1; i++)

{

for (int j=0; j<=NCOLS-1; j++)

{

data_file >> data[i][j];

}

}

206_C7 4

Computations with 2-D Arrays

double power[NROWS][NCOLS];

...

// Compute and print daily averages

for (int j=0; j<=NCOLS-1; j++)

{

col_sum = 0;

for (int i=0; i<=NROWS-1; i++)

{

col_sum += power[i][j];

}

cout << "Day " << j+1 << ": Avg = "

<< col_sum/NROWS << endl;

}

206_C7 5

Function Arguments

Passing array information to a function Always call by reference

Address of the array Two-dimensional array

Function also needs info about the declared column size of the array

int sum(int x[][NCOLS]);

206_C7 6

Problem Solving Applied

Terrain Navigation Problem Statement

Determine and print the number of peaks and their locations in an elevation grid.

Input/Output Description

grid1.dat

Peak locations

206_C7 7

Problem Solving Applied

Hand Example (grid1.dat)6 7

5039 5127 5238 5259 5248 5310 5299

5150 5392 5410 5401 5320 5820 5321

5290 5560 5490 5421 5530 5831 5210

5110 5429 5430 5411 5459 5630 5319

4920 5129 4921 5821 4722 4921 5129

5023 5129 4822 4872 4794 4862 4245 Peak Locations

[2][1], [2][5], [4][3]

206_C7 8

Problem Solving Applied

Algorithm Development main

read nrows and ncols from data file read terrain data into array for i=1 to nrows-2

for j=1 to ncols-2 if (ispeak(grid, i, j))

print peak location

206_C7 9

Problem Solving Applied

Algorithm Development ispeak

if ((grid[i-1][j]<grid[i][j]) &&

(grid[i+1][j]<grid[i][j]) &&

(grid[i][j-1]<grid[i][j]) &&

(grid[i][j+1]<grid[i][j]))

return true; else

return false;

/* Program chapter7_2 */

/* */

/* This program determines the locations of */

/* peaks in an elevation grid of data. */

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

int const N = 25;

// Function prototypes.

bool is_peak(double grid[][N], int r, int c);

int main()

{

// Declare objects.

int nrows, ncols;

double elevation[N][N];

string filename;

ifstream file1;

// Prompt user for file name and open file for input.

cout << "Enter the name of the input file.\n";

cin >> filename;

file1.open(filename.c_str());

if(file1.fail())

{

cerr << "Error opening input file\n";

return 1;

}

file1 >> nrows >> ncols;

if(nrows > N || ncols > N)

{

cerr << "Grid is too large, adjust program.";

return 1;

}

// Read information from data file into array.

for (int i=0; i<=nrows-1; i++)

{

for (int j=0; j<=ncols-1; j++)

{

file1 >> elevation[i][j];

}

}

// Determine and print peak locations.

cout << "Top left point defined as row 0, column 0\n";

for (int i=1; i<=nrows-2; i++)

{

for (int j=1; j<=ncols-2; j++)

{

if(is_peak(elevation, i, j))

{

cout << "Peak at row: " << i

<< " column: " << j << endl;

}

}

}

// Exit program.

system("PAUSE");

return 0;

}

// is peak function

bool is_peak(double grid[][N], int i, int j)

{

if ((grid[i-1][j]<grid[i][j]) &&

(grid[i+1][j]<grid[i][j]) &&

(grid[i][j-1]<grid[i][j]) &&

(grid[i][j+1]<grid[i][j]))

return true;

else

return false;

}

206_C7 15

Testing

206_C7 16

Matrices

Matrix Set of numbers arranged in a rectangular grid Row and column numbers begin with 1 Can use two-dimensional array to store matrix

Must be careful translating equations in matrix notation into C++ statements because of difference in subscripting

Example 2 x 3

241

201B

206_C7 17

Matrices

Determinant |A| = a1,1a2,2 - a2,1a1,2

Transpose

2,21,2

2,11,1

aa

aaA

241

201B

22

40

11TB

206_C7 18

Transpose Function

void transpose(int b[][NCOLS], int bt[][NROWS])

{

for (int i=0; i<=NROWS-1; i++)

{

for (int j=0; j<=NCOLS-1; j++)

{

bt[j][i] = b[i][j];

}

}

return;

}

206_C7 19

Matrix Addition (Subtraction)

Add (subtract) elements in corresponding positions in the matrices Matrices must be same size

130

152A

241

201B

371

353BA

206_C7 20

Matrix Multiplication

The value in position ci,j is the product of row i of the first matrix and column j of the second matrix Inner dimensions must match e.g. 2 x 3 3 x 2

n

kjkkiji bac

1,,,

130

152A

22

40

11TB

142

164TABC

206_C7 21

N x N Multiplication Functionvoid matrix_mult(int a[][N], int b[][N], int c[][N])

{

for (int i=0; i<=N-1; i++)

{

for (int j=0; j<=N-1; j++)

{

c[i][j] = 0

for (int k=0; k<=N-1; k++)

{

c[i][j] += a[i][k] * b[k][j];

}

}

}

return;

}

206_C7 22

Summary

Two-Dimensional Arrays Problem Solving Applied

Terrain Navigation

Matrices Use MATLAB

End of Chapter Summary C++ Statements Style Notes Debugging Notes

206_C7 23

Test #2 Review

Modular Programming Modularity Programmer Defined Functions Parameter Passing Storage Class and Scope

Arrays One-Dimensional Arrays Statistical Measurements Functions Revisited

206_C7 24

Test #2 Review

Two-Dimensional Arrays Matrices

Applications Random Numbers Sorting