• No results found

Multi-dimensional initialize & displaySortingPart II Arrays

N/A
N/A
Protected

Academic year: 2021

Share "Multi-dimensional initialize & displaySortingPart II Arrays"

Copied!
38
0
0

Loading.... (view fulltext now)

Full text

(1)

Arrays

Multi-dimensional

initialize & display Sorting

Part II

(2)

Multidimensional Arrays

a everything about one dimensional arrays applies

a all elements of the same data type

a just need additional sets of [ ][ ]

a a 3-D array has rows, columns, and rank

(3)

Multidimensional Arrays

int scores [4] [3] [2];// assume loaded with 1-24

for(row=0; row<4; row++) { for(col=0; col<3; col++)

{for(rank=0; rank<2; rank++)

cout<<setw(6)<<scores[row][col][rank];

cout<<endl; // new line for each row }

(4)

Multidimensional Arrays

{

cout <<endl; // start a new line

{

cout<<setw(6)<<nums[row][col][rank];nums[row][col][rank]

cout<<endl; // start a new line }

}

for(rank=0; rank < 2; rank++) for(col=0; col < 3; col++)

for(row=0; row < 4; row++)

(5)

A B C D E

28 40 29 9 14

parallel arrays = two or more arrays in which elements with corresponding indexes are related

Parallel Arrays

Used when related data is of different data types.

grade % of class

*

(6)

Parallel Arrays

for(row…

for(col…

{ cout >> “Enter id#”;

cin >> id[row][col];

cout >> “Enter grade”;

cin >> grade[row][col];

}

(7)

Sum a Row

void main(void)

{ double nums [3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

double sumRow(double [3] [4]); // prototype cout << “The sum of row 3 is “

<< sumRow(nums)<<endl; //function call }

(8)

Sum a Row

double sumRow(double ary[3][4]) { int col;

double total=0;

for(col = 0; col < 4; col++) total += ary[ ][col];

return total;

}

* * total += ary[2][col]; //enter row #-1

output The sum of row 3 is 42The sum of row 3 is 42

(9)

Sum a Column

void main(void)

{ double nums [3][4] = {1, 2, 3, 4, 5, 6, 3 7, 8, 7 9, 10, 11, 12};11

double sumCol(double [3] [4]); // prototype cout << “The sum of column 3 is “

<< sumCol(nums) << endl; //function call }

(10)

Sum a Column

double sumCol(double ary[3][4]) { int row;

double total=0;

for(row = 0; row<3; row++) total += ary[row][ ];

return total;

}

* total += ary[row][2]; //enter col #-1

output The sum of column 3 is 21The sum of column 3 is 21

(11)

Sum All Rows

void sumRow(double ary[3][4]) { int row, col;

double total=0;

for(row = 0; row < 3; row++)

{ total = 0; // each row total begins at 0 for(col = 0; col<4; col++)

total += ary[row][col]; // enter row # cout << "The sum of row "<<row+1 << " is "<<total<<endl;

}

cout<<endl;

}}

*

1 X

(12)

Sum All Columns

void sumCol(double ary[3][4]) { int row, col;

double total=0;

for(col = 0; col < 4; col++)

{total = 0; // each col. total begins at 0 for(row = 0; row < 3; row++)

total += ary[row][col]; //enter col # cout << "The sum of col " << col+1 << " is " << total << endl;

}}

cout<<endl;

}}

* 1 3

X X

(13)

Just for fun!

A 2-D array has the same number of rows as col.

1. How to sum the diagonals - upper left to lower right?

2. How to sum the diagonals - upper right to lower left?

Sum Each Diagonal

(14)

Sorting

Internal Sorts [for small data sets]

selection

bubble (exchange)

External Sorts [for large data sets]

(15)

Selection Sort

index (k) sm_index

0 2

swap 21, 9

1 1

swap 13, 13

2 3

swap 21, 15

3 4

swap 21, 17 21 15

9 13 17

15 17

9 13 21

99 15

2121 13 17

15 2121

9 13 1717 2121 1515

9 13 17

(16)

Selection Sort

void sort(double [5]);

void swap(double [5], int, int); // prototypes void main(void)

{ int index;

double my_list[ ] = {21, 13, 9, 15, 17};

sort(my_list); // function call cout<<"\nThe sorted array is: \n";

for(index=0; index<5; index++) cout<<'\t'<<my_list[index]<<endl;

}

(17)

Selection Sort

void sort(double testArray[5])

{ int n, k, sm_index, moves=0; double smallest;

for(k=0; k<4; k++) // size-1 = number of passes { smallest=testArray[k];

sm_index=k;

for(n=k+1; n<5; n++) // size = # elem. to look at if(testArray[n]<smallest)

{ smallest=testArray[n];

sm_index=n;

}swap(testArray, sm_index, k); // call to swap() } }

(18)

Selection Sort

void swap(double testArray[5], int smaller, int pass)

{ // pass = current position: k

int moves;

double temp;

temp=testArray[pass];

testArray[pass]=testArray[smaller];

testArray[smaller]=temp;

moves++; // not needed for swap }

(19)

Bubble Sort

Put smaller first

Put smaller first

No change

Put smaller first

21 2525

13 9 1717

2121 2525

13 9 17

9 259

21 1321 17

9 25

13 21 17

(20)

Bubble Sort

Begin again and put smaller first

No change

Put smaller first

21 17

9 13 25

17 2121

9 13 2525 21 1721

13 913 25

2121 1717

9 13 25

(21)

A Bubble Sort Function

void bubble_sort(int array[ ], int length) { int j, k, flag=1, temp;

for(j=1; j<=length && flag; j++) {

flag=0; // false

for(k=0; k < (length-j); k++)

{if (array[k+1] > array[k]) // > low to high {temp=array[k+1]; // swap

array[k+1]= array[k];

array[k]=temp;

flag=1; // indicates a swap }} }} }} } // has occurred}

(22)

Array Review

a is an ordered sequence of data of the same type

a can be of any valid data type

a can be 1-, 2-, or multi- dimensional

a must be declared before used

a can be assigned and initialized

a element numbering starts at zero

(23)

Array Review

a use for loops to access

(nested for multidimentional)

a can be passed back and forth between functions

a when sent to functions the actual values are manipulated - not a copy

(passed by reference)

(24)

Array Review -1

Write a C++ program that adds equivalent

elements of the two-dimensional arrays named first and second. Both arrays should have two rows and three columns. For example, element [1][2] of the resulting array should be the sum of first[1][2] and second[1][2].

first second

16 18 23 24 52 77

54 91 11 16 19 59

sum

40 70 100 70 110 70

*

(25)

Write a C++ program that finds and displays the maximum value in a two-dimensional array of integers. It should also show the maximum

value’s subscripts. The array should be

declared as a four-by-five array of integers and initialized.

data: 16, 22, 99, 4, 18, -258, 4, 101, 5, 98, 105, 6, 15, 2, 45, 33, 88, 72, 46, 3

Array Review - 2

(26)

Array Review - 3

Write a program which picks the elements in ascending order from a two dimensional matrix (4 by 5) and puts them in a single dimensional array. Display the single

dimensional array.

(27)

There is a 3 by 5 array of grades. Write a program which reads the 15 grades and displays the number of grades below 60, number of grades in the 60's, number or grades in the 70's, number of grades in the 80's, and number of grades 90 or better.

Array Review - 4

(28)

Write a program that finds and displays the maximum value and its indicies in a two- dimensional array of integers. The array should be declared as a 10-row by 20- column array of integers in main().

Array Review - 5

(29)

Array Review - 6a

There is an array of three students each with four exam scores. Assume the scores are known and are: {77, 68, 86, 73}, {96, 87, 89, 78}, {70, 90, 86, 81}. Create a program which will display the lowest grade, the

highest grade and the average of the grades to two decimal places.

(30)

Array Review - 6b

#include <iostream.h>

#include <iomanip.h>

const int STUDENTS = 3;

const int EXAMS = 4;

int mini (int [][EXAMS], int, int);

int maxi (int [][EXAMS], int, int);

float average(int [], int);

void printArray(int [][EXAMS], int, int);

(31)

Array Review - 6c

void main(void)

{ int studentGrades[STUDENTS][EXAMS] =

{{77, 68, 86, 73}, {96, 87, 89, 78}, {70, 90, 86, 81}};

cout << "The array is:" << endl;

printArray(studentGrades, STUDENTS, EXAMS);

cout<<endl<<endl<<"Lowest grade: "

<< mini (studentGrades, STUDENTS, EXAMS) << endl << "Highest grade: "

<< maxi (studentGrades, STUDENTS, EXAMS)<<endl;

for (int person = 0; person < STUDENTS; person++)

cout << "The average grade for student " << person << " is "

<<setiosflags(ios::fixed | ios::showpoint)<<setprecision(2) << average(studentGrades[person], EXAMS) << endl;

}

(32)

Array Review - 6d

int mini(int grades[][EXAMS], int pupils, int tests)

{

int lowGrade = 100;

for (int i = 0; i < pupils; i++) for (int j = 0; j < tests; j++) if (grades[i][j] < lowGrade) lowGrade = grades[i][j];

return lowGrade;

}

int maxi(int grades[][EXAMS], int pupils, int tests) {

int highGrade = 0;

for (int i = 0; i < pupils; i++) for (int j = 0; j < tests; j++) if (grades[i][j] > highGrade) highGrade = grades[i][j];

return highGrade;

}

(33)

Array Review - 6e

float average(int setOfGrades[], int tests)

{

int total = 0;

for (int i = 0; i < tests; i++) total += setOfGrades[i];

return (float) total / tests;

}

void prtArray(int grades[]

[EXAMS],

int pupils, int tests) {

cout << " [0] [1] [2] [3]";

for (int i = 0; i < pupils; i++) {

cout << endl<< "studentGrades["

<< i << "] ";

for (int j = 0; j < tests; j++) cout << setiosflags(ios::left)

<< setw(5)

<< grades[i][j];

}

(34)

Array Review - 6f

function call:

average(studentGrades[person], EXAMS) float average(int setOfGrades[], int tests)

{ int total = 0;

for (int i = 0; i < tests; i++) total += setOfGrades[i];

return total }

(35)

Common Errors

Not declaring the array Not declaring the array

First element is called First element is called zero zero ; last element ; last element is one less than the number of elements is one less than the number of elements

Out of range Out of range subscripts - no warning subscripts - no warning

Error in the Error in the for for loop - check the counter loop - check the counter

Not initializing the array Not initializing the array

(36)

Common Errors

Aggregate operations not allowed Aggregate operations not allowed

Omitting array size - permitted only Omitting array size - permitted only when declared as a formal parameter when declared as a formal parameter

initialized in the declaration initialized in the declaration

If array is /* in */ only, declare the If array is /* in */ only, declare the formal parameter as

formal parameter as const const to prevent to prevent accidental modification

accidental modification

(37)

Debugging

array subscripts array subscripts

recheck array size in declaration, recheck array size in declaration,

initialization, and

initialization, and forfor loops loops Prevention - plan first!

Prevention - plan first!

Valuation tables Valuation tables

Display values with cout Display values with cout

C++ Debugger C++ Debugger

(38)

I really hate this darn machine, I really hate this darn machine,

I wish they would sell it.

I wish they would sell it.

It never does quite what I want, It never does quite what I want,

But only what I tell it.

But only what I tell it.

End Note

References

Related documents