You are on page 1of 51

# ARRAYS

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

Initializing Arrays
• for loops used to initialize arrays

#include <iostream.h>

int main()
{
int t, sample[10]; // this reserves 10 integer
elements

for(t=0; t<10; ++t)
sample[t]=t;

## // display the array

for(t=0; t<10; ++t)
cout << sample[t] << ' ';

return 0;
}
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

//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;
}
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?
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)
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}

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?*/
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;
}
Assigning Values to an Array
•Example

int list[10];
int count;

cin >> list[i];

## What if count >9?

Summarize Arrays
• In C++ all arrays are stored in contiguous memory
locations

an array.

## • In C++ all arrays have zero as the index of their first

element.
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]<<" ";
}
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’;
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
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;
}
• What is wrong with the following?

char name[5]=”class";

int myarray[];
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”;

Output?
Sorting an Array
• Lots of applications require sorting
• Algorithm for sorting
int main(void) Sorting an
{
const int SIZE = 10; Array
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;
}
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();
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
Searching
Another Example -
• Sequential Search
• Binary Search
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]
in memory
row1 row2 row3
Two-D Arrays
Row Major, Col Major

row[0]
• Row Major Storage row3
row[1] row2
row[2] row1
in memory

c3
• Col Major Storage c3
c2
c1
c[0] c[1] c[2] c[3]
in memory
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
Two Dimensional Arrays
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?
Output:
1 2 3 4
5 6 7 8
9 10 11 12
Two Dimensional Arrays
What happens if I change [3][4] to [2][6]?
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?
Output:
1 2 3 4 5 6
7 8 9 10 11 12
Two dimensional arrays
int E[][2]={1,2,
3,4};

• Matrix Multiplication
Multidimentional Arrays
• type name[size1][size2] . . . [sizeN];

• int multidim[4][10][3];

## • when multidimensional arrays are used,

large amounts of memory are consumed.
Multidimensional Array Initialization
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 Arrays
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
int i;
char alpha;

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
Reference

## Dietel & Dietel

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)
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 <iostream>
5
6 using std::cout;
7 using std::endl;
8 using std::ios;
9
10 #include <iomanip>
11
12 using std::setw;
13 using std::setiosflags;
14 using std::setprecision;
15
16 void mean( const int [], int );
17 void median( int [], int );
18 void mode( int [], int [], int );
19 void bubbleSort( int[], int );
20 void printArray( const int[], int );
21
22 int 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,
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
45 void 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 << static_cast< double >( total ) / arraySize << "\n\n";
63 }
64
65 void median( int answer[], int size )
66 {
67 cout << "\n********\n Median\n********\n"
68 << "The unsorted array of responses is";
69
72 cout << "\n\nThe sorted array is";
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
80 void 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 Notice how the subscript in
89 for ( int j = 0; j < size; j++ ) frequency[] is the value of an
90 ++freq[ answer[ j ] ]; element in response[]
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";
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 << '*';
Print stars depending on value of
108 frequency[]
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
117 void bubbleSort( int a[], int size )
118 {
119 int hold;
120
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 ];
Bubble sort: if elements out of order,
127 a[ j ] = a[ j + 1 ];
swap them.
128 a[ j + 1 ] = hold;

129 }

130 }

131

133 {

## 134 for ( int j = 0; j < size; j++ ) {

135

136 if ( j % 20 == 0 )

138

## 139 cout << setw( 2 ) << a[ j ];

140 }

141 }
********
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

4. Program Output
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
********
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.

Program Output