Download presentation
Presentation is loading. Please wait.
Published byJerome Greene Modified over 9 years ago
2
Arrays Structured Programming 256 Chapter 10
3
© 2000 Scott S Albert Arrays One-Dimensional initialize & display Arrays as Arguments Two-dimensional initialize & display Part I
4
© 2000 Scott S Albert Data Types a simple or atomic a structured * char, int, float, double array, struct, union, class
5
© 2000 Scott S Albert Structured Data Type - Array An array is a collection of data storage locations, each of which holds the same type of data. Each storage location is called an element of the array. Each element is referred to as an indexed or subscripted variable.
6
© 2000 Scott S Albert Array Declaration []Syntax dataType arrayName [ ConstIntExpression ] The number of elements in an array is [ ]stated within square brackets, [ ]. Examples double angle [4];constant POLY = 8; int testScore [12];double angle [POLY]; char password [8];
7
© 2000 Scott S Albert Array Storage Each array has sufficient memory reserved to hold the number of data items of the given type. Initializing an array sets up the address of the first element. Addresses of all other elements are offsets from the starting address.
8
© 2000 Scott S Albert Array Element Access Syntax arrayName [ indexExpression ] Program access to each of the array elements is by referring to an offset from the array name. Array elements are counted beginning with zero.
9
© 2000 Scott S Albert Array Element Access double angle[4];// declaration Example angle [0] = 6.21; angle [1] = 15.89; angle [2] = 7.5; angle [3] = -45.7; angle sub zero = 6.21 angle sub one = 15.89 angle sub two = 7.5 angle sub three = -45.7 * * *
10
© 2000 Scott S Albert Using Array Elements write the contents of an array element: cout << angle[2]; assign values to an array element: cin >> angle[3]; angle[6] = pow(axis,4); use it as a parameter: y = sqrt(angle[0]); use it in an expression: x = 2.5 * angle[1] + 64; * *
11
© 2000 Scott S Albert Array Component Access indexindex index indexfor(index=0; index < arraySize; index++) myArray[index] = 0.0; 100 * Zero out an entire array. (Initialize every element to 0.0.)
12
© 2000 Scott S Albert Off Set memory addresses starting address off set by one unit off set by two units off set by three units [ 0 ] [ 1 ] [ 2 ] [ 3] @#$
13
© 2000 Scott S Albert Out-of-Bounds Array Index memory addresses angle[4] = 135; cout << angle[5]; [ 0 ] [ 1 ] [ 2 ] [ 3] @#$
14
© 2000 Scott S Albert Declare an Array Syntax type arrayName[index]; Example double dailyHigh[23] ; int quizGrade[132] ; char ASURiteID[5] ; *
15
© 2000 Scott S Albert Initialize an Array Element Syntax arrayName[index] = value; Example dailyHigh[18] = 16.7; quizGrade[2] = 15; ASURiteID[3] = ‘d’; *
16
© 2000 Scott S Albert Initialize an Array double angle[4] = {16.21, 15.89, 7.5, -45.7}; double ATtoCG[5] = {.64,.89,.76,.83,.65}; int scores[12] = {210, 198, 203, 188, 200, 224, 220, 217, 211, 194, 197, 189}; double iona[8] = {0.0}; *
17
© 2000 Scott S Albert Initialize an Array int scores[ ] = {210, 198, 203, 188, 200, 224, 220, 217, 211, 194, 197, 189}; char name[4] = {‘Z’, ‘o’, ‘l’, ‘a’}; char name[4] = “Zola”;// no braces or, char phrase [ ] = “Hello World”; *
18
© 2000 Scott S Albert Initialize an Array double angle[4];// declaration Example angle [0] = 6.21; angle [1] = 15.89; angle [2] = 7.5; angle [3] = -45.7; angle sub zero = 6.21 angle sub one = 15.89 angle sub two = 7.5 angle sub three = -45.7 *
19
© 2000 Scott S Albert Sequencing Through an Array Use the for statement to sequence through an array. Total the contents of an array: sum = 0; for(index=0; index < 7; index++) sum = sum + grades[index];
20
© 2000 Scott S Albert Loading an Array double grade[10]; int index; for(index=0; index < 10; index++) { cout<<“Enter a grade “; cin >> grade[index]; }
21
© 2000 Scott S Albert Finding the Max/Min Value Set the max or min to element zero. Use a for loop to cycle through the array. Compare each element to the max/min. If necessary, assign a new value to max/min. How would you do this? *
22
© 2000 Scott S Albert Finding the Maximum Value double find_max(int temp[30]) { max = temp[0]; for(index=0; index max) max = temp[index]; return (max); } *
23
© 2000 Scott S Albert Finding the Minimum Value double find_min(int temp[30]) { min = temp[0]; <for(index = 1; index < 30; index++) if (temp[index] < min) min = temp[index]; return ( min ); } *
24
© 2000 Scott S Albert Aggregate Assignment - NOT! There are no aggregate assignments with arrays. That is, you may not assign one array to another. int x[5] = {11, 22, 33, 44, 55}; int y[5]; y = x;y[ ] = x[ ];
25
© 2000 Scott S Albert Arrays as Arguments temp[ ]void find_max(int temp[ ]) { max = temp[0]; for(index = 1; index max) max = temp[index]; } temp[ ] double find_max(int temp[ ]) * return max;
26
© 2000 Scott S Albert Passing an Array/Element tempfind_max(temp); // no [ ] pricequantityamountinventory(price, quantity, amount); // 3 arrays cupletwords(cuplet); temp[3] find_max(temp[3]); pricequantity[4]amount[12] inventory(price, quantity[4], amount[12]); cuplet words(cuplet); *
27
© 2000 Scott S Albert Passing an Array formal parameter formal parameter declaration fordeclaration for parameterPass-by-ValuePass-by-Referenceformal parameter formal parameter declaration fordeclaration for parameterPass-by-ValuePass-by-Reference simple var.int costint& price arrayimpossibleint myArray[ ] arrayconst int source[ ]
28
© 2000 Scott S Albert 1-D Array Review An array is a structured data type 1st element is “ arrayName subzero ” Array Declaration int myArray [9]; Array Initialization int myArray [9 ] = { 9, 9, 9, 8, 7, 6, 5, 4, 3}; Array Element Reference myArray [7];// value = 4 * 9
29
© 2000 Scott S Albert 1-D Array Review Arrays are always passed by reference, unless const added to the formal parameter. Array in a Function Prototype void myFunction(int [9]); Array in a Function Call myFunction(myArray); Array in a Function Header void myFunction(int anyArrayName[9]) optional
30
© 2000 Scott S Albert Two Dimensional Arrays a everything about one dimensional arrays applies a sometimes referred to as a table a has rows and columns ex. multiplication table
31
© 2000 Scott S Albert 2-D Array Declaration Syntax [] []dataType arrayName [ ConstIntExpression ] [ ConstIntExpression ] Example int highTemp [52] [7]; double matrix [8] [8]; // checker board int roomSchedule [237] [13];
32
© 2000 Scott S Albert 2-D Array Initialization int nums [3] [2] = {7, 4, 1, 8, 5, 2} int roomsPSF[3] [7] = { {17, 18,19, 110, 111, 112, 113}, {27, 28, 29, 210, 211,212, 213}, {37, 38, 39, 310, 311, 312, 313} };
33
© 2000 Scott S Albert 2-D Array Initialization double ATtoCG[2] [3] = {.74,.79,.76,.83,.65,.89}; }double ATtoCG[2] [3] = { {.74,.79,.76}, {.83,.65,.89} }; int scores[4] [3] = {210, 198, 203, 188, 200, 224, 220, 217, 211, 194, 197, 189};
34
© 2000 Scott S Albert 2-D Array Initialization You can assign values to individual elements: ATtoGC [0] [0] = 0.74; ATtoGC [0] [1] = 0.79; ATtoGC [0] [2] = 0.76; ATtoGC [1] [0] = 0.83; ATtoGC [1] [1] = 0.65; * ATtoCG [1] [2] = 0.89;
35
© 2000 Scott S Albert Accessing a 2-D Array a very similar to creating a multiplication table. a use nested loops. outer for loop was for the rows inner for loop was for the columns
36
© 2000 Scott S Albert Loading a 2-D Array a The Multiplication Table for (row =1; row <=10; row++) { cout <<setw(5)<<row<<" "; forfor (column=1; column <= 10; column++) cout << setw(5)<< column*row; cout << endl; }
37
© 2000 Scott S Albert Loading a 2-D Array int scores [4][3]; for(row=0; row<4; row++) for(col=0; col<3; col++) { cout<<"Enter the value :"; cin>>scores[row][col]; }
38
© 2000 Scott S Albert Loading a 2-D Array scores [0][0][2][0] [0][1] [2][1] [0][2][2][2] [1][0] [3][0] [1][1][3][1] [1][2][3][2] [row][col] = somevalue;
39
© 2000 Scott S Albert Displaying a 2-D Array int scores [4] [3]; for(row=0; row<4; row++) { for(col=0; col<3; col++) cout << setw(6) << scores[row][col]; cout << endl; // new line for each row }
40
© 2000 Scott S Albert Displaying a 2-D Array Output 210 198 203 188 200 224 220 217 211 194 197 189
41
© 2000 Scott S Albert Functions and 2-D Arrays int test[7][19]; // declaration find_min(test); // function call int find_min(int num [7][19])// funct. header * * char code[26][10]; obtain(code); char obtain(char key [26][10])
42
© 2000 Scott S Albert Local vs. Global No difference
43
© 2000 Scott S Albert Arrays Multi-dimensional initialize & display Sorting Part II
44
© 2000 Scott S Albert 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
45
© 2000 Scott S Albert 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 }
46
© 2000 Scott S Albert 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++)
47
© 2000 Scott S Albert 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 *
48
© 2000 Scott S Albert Parallel Arrays for(row… for(col… {cout >> “Enter id#”; cin >> id[row][col]; cout >> “Enter grade”; cin >> grade[row][col]; }
49
© 2000 Scott S Albert 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 }
50
© 2000 Scott S Albert 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
51
© 2000 Scott S Albert Sum a Column void main(void) { 37 11double 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 }
52
© 2000 Scott S Albert 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
53
© 2000 Scott S Albert 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
54
© 2000 Scott S Albert 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
55
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
56
© 2000 Scott S Albert Sorting Internal Sorts [for small data sets] selection bubble (exchange) External Sorts [for large data sets]
57
© 2000 Scott S Albert 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
58
© 2000 Scott S Albert 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; }
59
© 2000 Scott S Albert 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() }
60
© 2000 Scott S Albert 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 }
61
© 2000 Scott S Albert Bubble Sort Put smaller first No change Put smaller first 212513917 2125 917 925211317 925132117
62
© 2000 Scott S Albert Bubble Sort Begin again and put smaller first No change Put smaller first 211791325 172191325 211713925 211791325
63
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
64
© 2000 Scott S Albert 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
65
© 2000 Scott S Albert 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)
66
© 2000 Scott S Albert 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 *
67
© 2000 Scott S Albert 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
68
© 2000 Scott S Albert 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.
69
© 2000 Scott S Albert 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
70
© 2000 Scott S Albert 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
71
© 2000 Scott S Albert 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.
72
© 2000 Scott S Albert Array Review - 6b #include 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);
73
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; }
74
© 2000 Scott S Albert 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; }
75
© 2000 Scott S Albert 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]; }
76
© 2000 Scott S Albert 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 }
77
© 2000 Scott S Albert 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
78
© 2000 Scott S Albert 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
79
© 2000 Scott S Albert Debugging array subscripts recheck array size in declaration, initialization, and for loops Prevention - plan first! Valuation tables Display values with cout
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.