Top Banner
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.

Dec 13, 2015

Download

Documents

Morris McGee
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

Two-Dimensional Arrays

ELEC 206

Computer Applications for Electrical Engineers

Dr. Ron Hayne

Page 2: 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

Page 3: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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];

}

}

Page 4: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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;

}

Page 5: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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]);

Page 6: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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

Page 7: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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]

Page 8: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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

Page 9: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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;

Page 10: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

/* 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()

{

Page 11: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

// 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;

}

Page 12: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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];

}

}

Page 13: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

// 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;

}

Page 14: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

// 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;

}

Page 15: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

206_C7 15

Testing

Page 16: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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

Page 17: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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

Page 18: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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;

}

Page 19: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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

Page 20: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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

Page 21: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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;

}

Page 22: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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

Page 23: Two-Dimensional Arrays ELEC 206 Computer Applications for Electrical Engineers Dr. Ron Hayne.

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

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

206_C7 24

Test #2 Review

Two-Dimensional Arrays Matrices

Applications Random Numbers Sorting