Presentation is loading. Please wait.

Presentation is loading. Please wait.

Arrays Multi-dimensional initialize & display Sample programs Sorting Searching Part II.

Similar presentations


Presentation on theme: "Arrays Multi-dimensional initialize & display Sample programs Sorting Searching Part II."— Presentation transcript:

1

2 Arrays Multi-dimensional initialize & display Sample programs Sorting Searching Part II

3 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 * Except leaving the size out of the formal parameter

4 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 }

5 Multidimensional Arrays { cout <<endl; // start a new line { nums[row][col][rank] cout<<setw(6)<<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++)

6 A B C D F 28 40 29 9 14 parallel arrays = two or more arrays in which elements with corresponding indexes are related We WILL do this in the next lab Parallel Arrays Used when related data is of different data types. grade% of class *

7 Parallel Arrays for(row… for(col… {cout > id[row][col]; cout > grade[row][col]; } OR for(row… for(col… { cout << “Enter id and grade”; cin >> id[row][col] >> grade[row][col]; }

8 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 }

9 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 The sum of row 3 is 42 output The sum of row 3 is 42

10 Sum a Column void main(void) { 37 11 double nums [3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; double sumCol(double [3] [4]); // prototype cout << “The sum of column 3 is “ << sumCol(nums) << endl; //function call }

11 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 The sum of column 3 is 21 output The sum of column 3 is 21

12 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 161823245277 549111161959 sum 40 70100 70 110 70 *

13 Sorting Internal Sorts [for small data sets] bubble (exchange) selection External Sorts [for large data sets]

14 Bubble Sort Put smaller first No change Put smaller first 212513917 2125 917 925211317 925132117

15 Bubble Sort Begin again and put smaller first No change Put smaller first 211791325 172191325 211713925 211791325

16 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

17 Selection Sort index (k)sm_index 02 swap 21, 9 11 swap 13, 13 23 swap 21, 15 34 swap 21, 17 211591317 151791321 915211317 152191317 21159 17

18 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}; cout << "\nThe unsorted array is: \n"; for(index=0; index<5; index++) cout << “ “ << my_list[index] << endl; sort(my_list); // function call cout << "\nThe sorted array is: \n"; for(index=0; index<5; index++) cout << “ “ << my_list[index] << endl; }

19 Selection Sort void sort(double testArray[5]) {int n, k, sm_index, pass=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() }

20 Selection Sort void swap(double testArray[5], int smaller, int position) {// position = current position: k double temp; temp = testArray[position]; testArray[position] = testArray[smaller]; testArray[smaller] = temp; }

21 Linear Search Pseudocode For all the items in the list Compare the item with the desired item If the item was found Return the index value of the current item (the position of the element in the array) End If End For Return -1 because the item was not found

22 The “Classic” Linear Search Function int LinearSearch(int list[], int size, int key) {// or “Sequential search” int i; for (i = 0; i < size; i++) { if (list[i] = = key) return i;// return location of element //this will terminate the loop } return -1;// element not in list }

23 Main for linear search int main() { int LinearSearch(int [], int, int); // prototype const int NUMEL = 10; int nums[NUMEL] = {22,5,67,98,45,32,101,99,73,10}; int item, location; cout << "\nEnter the item you are searching for: "; cin >> item; location = LinearSearch(nums, NUMEL, item); if (location > -1) cout << "The item was found at index location " << location << endl; else cout << "The item was not found in the list\n"; return 0; }

24 Binary Search List must be in sorted order The function looks at the midpoint If the midpoint is the item, return the location Else, determine if the item is less than or greater than the midpoint Eliminate the side where the item cannot be, and declare a new midpoint Go again. (A recursive function) Half the list is eliminated on each pass

25 int BinarySearch(int list[], int size, int key) { int left, right, midpt;// list must be in sorted order left = 0;// left end is the first element right = size - 1;// right is the last element while (left <= right){ midpt = (int) ((left + right) / 2); // why integer division? if (key == list[midpt]) return midpt; // if found, the key will be the midpoint else if (key > list[midpt])// eliminate the left half left = midpt + 1; else right = midpt - 1;// else - eliminate the right half }// end while return -1;} // the key was never found

26 Main for binary search int main() { int BinarySearch(int [], int, int); // prototype const int NUMEL = 10; int nums[NUMEL] = {5,10,22,32,45,67,73,98,99,101}; int item, location; cout << "\nEnter the item you are searching for: "; cin >> item; location = BinarySearch(nums, NUMEL, item); if (location > -1) cout << "The item was found at index location " << location << endl; else cout << "The item was not found in the list\n"; return 0; }

27 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

28 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)

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 using namespace std; const int STUDENTS = 3; // global, so main and all const int EXAMS = 4; // functions can access 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 printArray(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 / tests; }

35 Common Errors ; Not declaring the array ; First element is called zero; last element is one less than the number of elements ; Out of range subscripts - no warning ; Error in the for loop - check the counter ; Not initializing the array

36 Common Errors ; Aggregate operations not allowed ; Omitting array size - permitted only when declared as a formal parameter initialized in the declaration  If array is /* in */ only, declare the formal parameter as const to prevent accidental modification

37 Debugging array subscripts recheck array size in declaration, initialization, and for loops Prevention - plan first! Valuation tables Display values with cout C++ Debugger

38 I really hate this darn machine, I wish they would sell it. It never does quite what I want, But only what I tell it. End Note


Download ppt "Arrays Multi-dimensional initialize & display Sample programs Sorting Searching Part II."

Similar presentations


Ads by Google