Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS 192 Lecture 10 Winter 2003 December 22-23, 2003 Dr. Shafay Shamail.

Similar presentations


Presentation on theme: "CS 192 Lecture 10 Winter 2003 December 22-23, 2003 Dr. Shafay Shamail."— Presentation transcript:

1 CS 192 Lecture 10 Winter 2003 December 22-23, 2003 Dr. Shafay Shamail

2 Arrays An array is a collection of data elements of same type in contiguous memory e.g. list of names, list of scores Easier way to compare and use data than having separate variables for data elements data_type identifier[size] int arr[3] –declares a one-dimensional array named arr with space for 3 integer variables Variables contiguous in memory; lowest address has first value, next address has second variable value, and so on

3 Arrays An individual variable within an array is called an element of the array The elements of an array are not named, and are accessed by the array’s name and their position in the array (indexing or subcripting) Index of first element is zero, index of last element is size-1 e.g. int arr[3] has variables arr[0], arr[1] and arr[2] size has to be a positive constant (not variable) i.e. can’t do: int x = 3; int arr[x]; but can do: int arr[3 * 2]; Number of bytes reserved with int arr[3]; ?

4 Arrays An array is an indexed data structure An array stores a collection of variables All variables stored in an array are of the same data type An individual variable within an array is called an element of the array An element of an array is accessed using the array name and an index The name of the array is the address of the first element. The index is the offset

5 Declaring an array data_type array_name[size]; –allocates memory for size variables –index of first element is 0 –index of last element is size-1 –size must be a constant

6 Declaring an Array Example: int list[10]; –allocates memory for 10 integer variables –index of first element is 0 –index of last element is 9 –C++ does not perform any bounds checking on arrays list[0] list[1] list[9]

7 Arrays  Arrays offer convenient means of grouping together several related variables One- dimensional arrays type var_name[size] int sample[10]; double d[30]; char ch[100];

8 Initializing Arrays Arrays can be initialized at the time they are declared. Examples: double taxrate[3] = {0.15, 0.25, 0.3}; char word[] = “hello”;//word has size 6 char list[5] = {‘h’,’e’,’l’,’l’,’o’}; //list of characters, not a string double vector[100] = {0.0}; //assigns zero to all 100 elements

9 Initializing Arrays float f[5]={0.0, 1.0, 2.0, 3.0, 4.0}; // initializes f[0] to 0.0, f[1] to 1.0…f[4] to 4.0 Or float f[5]; f[0]=0.0; f[1]=1.0; … int a[10]={2}; //rest initialized to zero cout << a[0]<< endl << a[5] << endl; If no size given, allocates as much as the no. of initializers e.g. int a[] = {5, 2, -9}; // and int a[3] = {5, 2, -9}; // are equivalent Can’t do: int hand[2]; hand[2]={5, 9}; Can’t do :short y[2]={1,2,3,4}; Don’t confuse: short b[4] and b[4]

10 Initializing Arrays for loops used to initialize arrays #include int main() { int t, sample[10]; // this reserves 10 integer elements // load the array for(t=0; t<10; ++t) sample[t]=t; // display the array for(t=0; t<10; ++t) cout << sample[t] << ' '; return 0; }

11 Initializing Arrays int a[5]; Now an indexed variable like a[1] can be used anywhere that a variable of type int can be used int a[5]; cin >> a[4] >> a[2]; cout << a[2] << “ “ << a[4] << endl; cin >> a[3] >> a[0]; int max; max = a[3] + a[0]; cout << max << endl; int next; cin >> next; a[1]= next; cout << a[1] << endl; a[3]= 42; cout << a[3] << endl; int student = 2; a[student] = 99; cout << a[student] << “ “ << a[2] << endl; Also: a[get_index())] = 3; if get_index() returns an int

12 //Reads in 5 scores, displays max_score and shows //how much each score differs from max_score int main() { const int SIZE = 5; int i, score[SIZE], max_score; cout << “Enter “ << SIZE << “ scores: \n”; cin >> score[0]; max_score = score[0]; for (i=1; i<SIZE; i++) { cin >> score[i]; if (score[i] > max_score) max_score=score[i]; } cout << “The highest score is: “ << max_score << endl << “Scores & their difference from highest: \n”; for (i=0; i<SIZE; i++) { cout << score[i] << “ off by “ << (max_score – score[i]) << endl; } return 0; }

13 Initializing Arrays Useful to give a constant name to the size of array /*const type modifier*/ const int NUM_EMPLOYEES = 10; int salaries[NUM_EMPLOYEES]; for (int i=0; i < NUM_EMPLOYEES; i++) cin >> salaries[i]; Advantage? Why not use a variable name? Another way: # define NUM_EMPLOYEES 10 And yes, sizeof(salaries); gives what?

14 Arrays Total size of an array in bytes? Total bytes = number of bytes in type * number of elements e.g. int sample[10]; Has size in bytes = 10 * sizeof(int)

15 Initializing Arrays What is wrong with the following? int num=10; int iarray[num]; int size; cin >> size; int myarray[size]; double darray[5]={3.2, 4.5, 6.7, 324.0, 45.8, 23.1, 34.9}

16 Assigning One Array to Another int a[10], b[10]; //... a = b; // error -- illegal /*So how do we make the contents of one array same as the other?*/

17 Assigning One Array to Another int a[5], b[5]; //... a = b; // error – illegal Cannot assign one array to another; each element must be copied individually const int ARRAY_SIZE = 5; int a[] = {10, 11, 12, 13, 14}; int main() { int b[ARRAY_SIZE]; for (int i=0; i < ARRAY_SIZE; ++i) b[i] = a[i]; return 0; }

18 Assigning Values to an Array Example int list[10]; int count; cin >> count; for(int i=0; i<count; i++) cin >> list[i]; What if count >9?

19 Summarize Arrays In C++ all arrays are stored in contiguous memory locations An individual element is accessed by use of an index. An index describes the position of an element within an array. In C++ all arrays have zero as the index of their first element.

20 Arrays: Min Max int main() { const int SIZE = 10; int i, min_value, max_value; int list[SIZE]; for(i=0; i<SIZE; i++) { list[i] = rand(); cout<<list[i]<<" "; }

21 Arrays // find minimum value min_value = list[0]; for(i=0; i<SIZE; i++) { if (min_value>list[i]) { min_value = list[i]; } cout << "minimum value: " << min_value << ‘\n’;

22 Arrays // find maximum value max_value = list[0]; for(i=0; i<SIZE; i++) { if (max_value<list[i]) { max_value = list[i]; } cout << "maximum value: " << max_value << '\n'; return 0; }// end of main function

23 Arrays - No Bounds Checking // An incorrect program. Do Not Execute! int main() { int crash[10], i; for(i=0; i<100; i++) crash[i]=i; return 1; }

24 What is wrong with the following? char name[5]=”class"; int myarray[];

25 Arrays int a[10] = {1,2,3,4,0,3,4,6,7,8}; int x=3; y=1; cout<< a[x+2*y] <<“\n”; cout<<“Answer= “<<a[a[a[4]]]<<“\n”; Output?

26 Sorting an Array Lots of applications require sorting Algorithm for sorting

27 Sorting an Array int main(void) { const int SIZE = 10; double darray[SIZE] = {34, 5.6, 0.9, 345.7, 54.1, 23.5, 2.5, 6.78, 12.4, 13.9}; int i, j; for (i=0; i<SIZE-1; i++) { for (j=i+1; j< SIZE; j++) { if (darray[i]>darray[j]) { double temp; temp = darray[i]; darray[i] = darray[j]; darray[j] = temp; } } //inplace sorting ? return 0; }

28 Sorting an Array // Using the bubble sort to order an array. int main() { const int SIZE = 10; int nums[SIZE]; int a, b, t; // give the array some random initial values for(t=0; t<SIZE; t++) nums[t] = rand();

29 Sorting an Array // This is the bubble sort. for(a=1; a<SIZE; a++) { for(b=SIZE-1; b>=a; b--) { if (nums[b-1] > nums[b]) { // if out of order exchange elements t = nums[b-1]; nums[b-1] = nums[b]; nums[b] = t; } } // This is the end of the bubble sort. }//end of main program

30 Searching Another Example - Sequential Search Binary Search

31 Two Dimensional Arrays C++ supports multi-dimensional array –data_type array_name[ROW_SIZE][COLUMN_SIZE ] –int matrix[3][4]; row[0] row[1] row[2] row1row2row3 in memory

32 Two-D Arrays Row Major, Col Major Row Major Storage row[0] row[1] row[2] row3 row2 row1 in memory Col Major Storage c[0] c[1] c[2] c[3] c3 c2 c1 in memory c3

33 Accessing Array Elements int matrix[3][4]; –matrix has 12 integer elements –matrix[0][0]element in first row, first column –matrix[2][3]element in last row, last column

34 int main() { const int ROWS = 3; const int COLS = 4; int i, j, num[ROWS][COLS]; for(i=0; i<ROWS; ++i) { for(j=0; j<COLS; ++j) { num[i][j] = (i*COLS)+j+1; cout << num[i][j] << “\t“; } cout << “\n”; } return 0; }// output? Two Dimensional Arrays

35 Output: 1 2 3 4 5 6 7 8 9 10 11 12

36 int main() { const int ROWS = 3; const int COLS = 4; int i, j, num[ROWS][COLS]; for(i=0; i<ROWS; ++i) { for(j=0; j<COLS; ++j) { num[i][j] = (i*COLS)+j+1; cout << num[i][j] << “ “; } cout << “\n”; } return 0; }// output? Two Dimensional Arrays What happens if I change [3][4] to [2][6]?

37 Output: 1 2 3 4 5 6 7 8 9 10 11 12

38 Two dimensional arrays int E[][2]={1,2, 3,4}; Matrix Multiplication

39 type name[size1][size2]... [sizeN]; int multidim[4][10][3]; when multidimensional arrays are used, large amounts of memory are consumed. Multidimentional Arrays

40 int sqrs[10][2] = { 1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 8, 64, 9, 81, 10, 100 }; Multidimensional Array Initialization

41 int main(void) { const int ALPHABETS = 26; char code[ALPHABETS][2] = { {'a', 'f'}, {'b', 'w'}, {'c', 'x'}, {'d', 'v'}, {'e', 's'}, {'f', 'r'}, {'g', 'q'}, {'h', 'c'}, {'i', 'g'}, {'j', 'h'}, {'k', 'e'}, {'l', 'u'}, {'m', 'b'}, {'n', 'j'}, {'o', 'd'}, {'p', 'k'}, {'q', 't'}, {'r', 'l'}, {'s', 'm'}, {'t', 'n'}, {'u', 'a'}, {'v', 'o'}, {'w', 'p'}, {'x', 'z'}, {'y', 'i'}, {'z', 'y'} }; Multidimensional Arrays

42 int i; char alpha; cout << "Enter an alphabet: "; cin >> alpha; for(i=0; i< ALPHABETS ; i++) { if(code[i][0]==alpha) { cout << "The code of " << alpha << " is "; cout << code[i][1]<<endl; break; } return 0; }// end of main program Multidimensional Arrays

43 Reference Dietel & Dietel

44 Case Study: Computing Mean, Median and Mode Using Arrays Mean –Average Median –Number in middle of sorted list –1, 2, 3, 4, 5 (3 is median) Mode –Number that occurs most often –1, 1, 1, 2, 3, 3, 4, 5 (1 is mode)

45 1// Fig. 4.17: fig04_17.cpp 2// This program introduces the topic of survey data analysis. 3// It computes the mean, median, and mode of the data. 4#include 5 6using std::cout; 7using std::endl; 8using std::ios; 9 10#include 11 12using std::setw; 13using std::setiosflags; 14using std::setprecision; 15 16void mean( const int [], int ); 17void median( int [], int ); 18void mode( int [], int [], int ); 19void bubbleSort( int[], int ); 20void printArray( const int[], int ); 21 22int main() 23{ 24 const int responseSize = 99; 25 int frequency[ 10 ] = { 0 }, 26 response[ responseSize ] = 27 { 6, 7, 8, 9, 8, 7, 8, 9, 8, 9, 28 7, 8, 9, 5, 9, 8, 7, 8, 7, 8, 29 6, 7, 8, 9, 3, 9, 8, 7, 8, 7, 30 7, 8, 9, 8, 9, 8, 9, 7, 8, 9, 31 6, 7, 8, 7, 8, 7, 9, 8, 9, 2, 32 7, 8, 9, 8, 9, 8, 9, 7, 5, 3, 33 5, 6, 7, 2, 5, 3, 9, 4, 6, 4,

46 34 7, 8, 9, 6, 8, 7, 8, 9, 7, 8, 35 7, 4, 4, 2, 5, 3, 8, 7, 5, 6, 36 4, 5, 6, 1, 6, 5, 7, 8, 7 }; 37 38 mean( response, responseSize ); 39 median( response, responseSize ); 40 mode( frequency, response, responseSize ); 41 42 return 0; 43} 44 45void mean( const int answer[], int arraySize ) 46{ 47 int total = 0; 48 49 cout << "********\n Mean\n********\n"; 50 51 for ( int j = 0; j < arraySize; j++ ) 52 total += answer[ j ]; 53 54 cout << "The mean is the average value of the data\n" 55 << "items. The mean is equal to the total of\n" 56 << "all the data items divided by the number\n" 57 << "of data items (" << arraySize 58 << "). The mean value for\nthis run is: " 59 << total << " / " << arraySize << " = " 60 << setiosflags( ios::fixed | ios::showpoint ) 61 << setprecision( 4 ) 62 ( total ) / arraySize << "\n\n"; 63} 64 65void median( int answer[], int size ) 66{ 67 cout << "\n********\n Median\n********\n"

47 68 << "The unsorted array of responses is"; 69 70 printArray( answer, size ); 71 bubbleSort( answer, size ); 72 cout << "\n\nThe sorted array is"; 73 printArray( answer, size ); 74 cout << "\n\nThe median is element " << size / 2 75 << " of\nthe sorted " << size 76 << " element array.\nFor this run the median is " 77 << answer[ size / 2 ] << "\n\n"; 78} 79 80void mode( int freq[], int answer[], int size ) 81{ 82 int rating, largest = 0, modeValue = 0; 83 84 cout << "\n********\n Mode\n********\n"; 85 86 for ( rating = 1; rating <= 9; rating++ ) 87 freq[ rating ] = 0; 88 89 for ( int j = 0; j < size; j++ ) 90 ++freq[ answer[ j ] ]; 91 92 cout << "Response"<< setw( 11 ) << "Frequency" 93 << setw( 19 ) << "Histogram\n\n" << setw( 55 ) 94 << "1 1 2 2\n" << setw( 56 ) 95 << "5 0 5 0 5\n\n"; Notice how the subscript in frequency[] is the value of an element in response[] ( answer[] ).

48 96 97 for ( rating = 1; rating <= 9; rating++ ) { 98 cout << setw( 8 ) << rating << setw( 11 ) 99 << freq[ rating ] << " "; 100 101 if ( freq[ rating ] > largest ) { 102 largest = freq[ rating ]; 103 modeValue = rating; 104 } 105 106 for ( int h = 1; h <= freq[ rating ]; h++ ) 107 cout << '*'; 108 109 cout << '\n'; 110 } 111 112 cout << "The mode is the most frequent value.\n" 113 << "For this run the mode is " << modeValue 114 << " which occurred " << largest << " times." << endl; 115} 116 117void bubbleSort( int a[], int size ) 118{ 119 int hold; 120 Print stars depending on value of frequency[]

49 121 for ( int pass = 1; pass < size; pass++ ) 122 123 for ( int j = 0; j < size - 1; j++ ) 124 125 if ( a[ j ] > a[ j + 1 ] ) { 126 hold = a[ j ]; 127 a[ j ] = a[ j + 1 ]; 128 a[ j + 1 ] = hold; 129 } 130} 131 132void printArray( const int a[], int size ) 133{ 134 for ( int j = 0; j < size; j++ ) { 135 136 if ( j % 20 == 0 ) 137 cout << endl; 138 139 cout << setw( 2 ) << a[ j ]; 140 } 141} Bubble sort: if elements out of order, swap them.

50 4. Program Output ******** Mean ******** The mean is the average value of the data items. The mean is equal to the total of all the data items divided by the number of data items (99). The mean value for this run is: 681 / 99 = 6.8788 ******** Median ******** The unsorted array of responses is 6 7 8 9 8 7 8 9 8 9 7 8 9 5 9 8 7 8 7 8 6 7 8 9 3 9 8 7 8 7 7 8 9 8 9 8 9 7 8 9 6 7 8 7 8 7 9 8 9 2 7 8 9 8 9 8 9 7 5 3 5 6 7 2 5 3 9 4 6 4 7 8 9 6 8 7 8 9 7 8 7 4 4 2 5 3 8 7 5 6 4 5 6 1 6 5 7 8 7 The sorted array is 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 The median is element 49 of the sorted 99 element array. For this run the median is 7

51 Program Output ******** Mode ******** Response Frequency Histogram 1 1 2 2 5 0 5 0 5 1 1 * 2 3 *** 3 4 **** 4 5 ***** 5 8 ******** 6 9 ********* 7 23 *********************** 8 27 *************************** 9 19 ******************* The mode is the most frequent value. For this run the mode is 8 which occurred 27 times.


Download ppt "CS 192 Lecture 10 Winter 2003 December 22-23, 2003 Dr. Shafay Shamail."

Similar presentations


Ads by Google