Programming
Arrays
COMP102 Prog. Fundamentals I: Arrays / Slide 2
Arrays
An array is a collection of data elements that are of
the same type (e.g., a collection of integers, collection
of characters, collection of doubles).
COMP102 Prog. Fundamentals I: Arrays / Slide 3
Arrays
1-dimensional array.
3-dimensional array (3rd dimension is the day).
Oct 14
Oct 15
Oct 16
COMP102 Prog. Fundamentals I: Arrays / Slide 4
Array Applications
Given a list of test scores, determine the
maximum and minimum scores.
Read in a list of student names and rearrange
them in alphabetical order (sorting).
Given the height measurements of students in
a class, output the names of those students
who are taller than average.
COMP102 Prog. Fundamentals I: Arrays / Slide 5
Array Declaration
Syntax:
<type> <arrayName>[<array_size>]
Ex. int Ar[10];
The array elements are all values of the type <type>.
The size of the array is indicated by <array_size>, the
number of elements in the array.
<array_size> must be an int constant or a constant
expression. Note that an array can have multiple
dimensions.
COMP102 Prog. Fundamentals I: Arrays / Slide 6
Array Declaration
// array of 10 uninitialized ints
int Ar[10];
0 1 2 3 4 5 6 7 8 9
Ar -- -- -- -- -- -- -- -- -- --
0 1 2 3 4 5
COMP102 Prog. Fundamentals I: Arrays / Slide 7
Subscripting
Declare an array of 10 integers:
int Ar[10]; // array of 10 ints
To access an individual element we must apply a
subscript to array named Ar.
A subscript is a bracketed expression.
– The expression in the brackets is known as the index.
First element of array has index 0.
Ar[0]
Second element of array has index 1, and so on.
Ar[1], Ar[2], Ar[3],…
Last element has an index one less than the size of the array.
Ar[9]
Incorrect indexing is a common error.
COMP102 Prog. Fundamentals I: Arrays / Slide 8
Subscripting
// array of 10 uninitialized ints
int Ar[10];
--
Ar[3] = 1;
int x = Ar[3]; 1 --
-- -- --
0 1 2 3 4 5 6 7 8 9
Ar -- -- -- 1 -- -- -- -- -- --
Ar[0] Ar[1] Ar[2] Ar[3] Ar[4] Ar[5] Ar[6] Ar[7] Ar[8]Ar[9]
COMP102 Prog. Fundamentals I: Arrays / Slide 9
Subscripting Example 1
//For loop to fill & print a 10-int array
#include <iostream>
using namespace std;
int main ( ) {
int index, ar[10]; // array for 10 integers
// Read in 10 elements.
cout << "Enter 10 integers: ";
for(index = 0; index < 10; index ++)
cin >> ar[index];
cout << endl;
cout << "The integers are ";
for(index = 0; index < 10; index ++)
cout << ar[index] << " ";
cout << endl;
return 0;
}
COMP102 Prog. Fundamentals I: Arrays / Slide 10
Sorting with Arrays: Ex. 2
// Compare and sort three integers
void swap (int&, int&);
int main ( ) {
int ar[3]; // input integers
// Read in three elements.
cout << "Enter three integers: ";
cin >> ar[0] >> ar[1] >> ar[2];
if (ar[0] > ar[1]) swap (ar[0], ar[1]);
if (ar[1] > ar[2]) swap (ar[1], ar[2]);
if (ar[0] > ar[1]) swap (ar[0], ar[1]);
cout << "The sorted integers are " << ar[0]
<<", " << ar[1] << ", " << ar[2]
<< endl;
return 0;
}
COMP102 Prog. Fundamentals I: Arrays / Slide 11
Swapping Function: Ex. 2
// Function for swapping two integers
void swap (int& first, int& second) {
int temp;
temp = first;
first = second;
second = temp;
}
COMP102 Prog. Fundamentals I: Arrays / Slide 12
Array Element Manipulation Ex. 3
Consider
int Ar[10], i = 7, j = 2, k = 4;
Ar[0] = 1;
Ar[i] = 5;
Ar[j] = Ar[i] + 3;
Ar[j+1] = Ar[i] + Ar[0];
Ar[Ar[j]] = 12;
cin >> Ar[k]; // where the next input value is 3
0 1 2 3 4 5 6 7 8 9
Ar 1 -- 8 6 3 -- -- 5 12 --
Ar[0] Ar[1] Ar[2] Ar[3] Ar[4] Ar[5] Ar[6] Ar[7] Ar[8]Ar[9]
COMP102 Prog. Fundamentals I: Arrays / Slide 13
Array Initialization Ex. 4
int Ar[10] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
0 1 2 3 4 5 6 7 8 9
Ar 9 8 7 6 5 4 3 2 1 0
Ar[3] = -1;
6 -1
0 1 2 3 4 5 6 7 8 9
Ar 9 8 7 -1 5 4 3 2 1 0
Initializing arrays with random
COMP102 Prog. Fundamentals I: Arrays / Slide 14
values
The following loop initializes the array myList with random
values between 0 and 99:
for (int i = 0; i < ARRAY_SIZE; i++)
{
myList[i] = rand() % 100;
}
COMP102 Prog. Fundamentals I: Arrays / Slide 15
Program with Arrays
int main()
{
int values[5]= {11,1,3,6,10};
for (int i = 1; i < 5; i++) 0 11
{ 1 1
values[i] = values[i] + values[i-1]; 2 3
}
3 6
values[0] = values[1] + values[4];
4 10
}
COMP102 Prog. Fundamentals I: Arrays / Slide 16
Printing arrays
To print an array, you have to print each element in the array
using a loop like the following:
for (int i = 0; i < ARRAY_SIZE; i++)
{
cout << myList[i] << " ";
}
COMP102 Prog. Fundamentals I: Arrays / Slide 17
Copying Arrays
Can you copy array using a syntax like this?
list = myList;
This is not allowed in C++. You have to copy individual
elements from one array to the other as follows:
for (int i = 0; i < ARRAY_SIZE; i++)
{
list[i] = myList[i];
}
COMP102 Prog. Fundamentals I: Arrays / Slide 18
Summing All Elements
Use a variable named total to store the sum. Initially total is
0. Add each element in the array to total using a loop like
this:
double total = 0;
for (int i = 0; i < ARRAY_SIZE; i++)
{
total += myList[i];
}
COMP102 Prog. Fundamentals I: Arrays / Slide 19
Finding the Largest Element
Use a variable named max to store the largest element.
Initially max is myList[0]. To find the largest element in the
array myList, compare each element in myList with max,
update max if the element is greater than max.
double max = myList[0];
for (int i = 1; i < ARRAY_SIZE; i++)
{
if (myList[i] > max) max = myList[i];
}
Finding the smallest index of the
COMP102 Prog. Fundamentals I: Arrays / Slide 20
largest element
double max = myList[0];
int indexOfMax = 0;
for (int i = 1; i < ARRAY_SIZE; i++)
{
if (myList[i] > max)
{
max = myList[i];
indexOfMax = i;
}
}
COMP102 Prog. Fundamentals I: Arrays / Slide 21
Shifting Elements
double temp = myList[0]; // Retain the first element
// Shift elements left
for (int i = 1; i < myList.length; i++)
{
myList[i - 1] = myList[i];
}
// Move the first element to fill in the last position
myList[myList.length - 1] = temp;
#include <iostream> // Random Shuffling
#include <cstdlib>
#include <ctime>
using namespace std;
const int ARRAY_SIZE = 10;
int main(){
int myList[ARRAY_SIZE]= {1,2,3,4,5,6,7,8,9,10};
srand(time(0));
for ( int i = 0; i < ARRAY_SIZE; i++)
{ // Generate an index randomly
int index = rand() % ARRAY_SIZE;
int temp = myList[i];
myList[i] = myList[index];
myList[index] = temp;
}
for ( int i = 0; i < ARRAY_SIZE; i++)
cout << myList[i] <<' ';
cout << endl;
return 0;}
#include <iostream> // Create 6 random numbers for Mark 6
#include <cstdlib>
#include <ctime>
using namespace std;
const int ARRAY_SIZE = 6;
int main(){
int used[50] ={0}; //indicate if a random number is used.
int Mark[6], temp;
srand(time(0));
int i = 0;
while (i < 6){
temp = rand()%49 + 1;
if (used[temp] == 0) { //temp is not used
Mark[i] = temp; i++;
used[temp] = 1;
}
for ( int i = 0; i< 6; i++)
cout << Mark[i] << endl;
return 0;
}
#include <iostream> //Print numbers in reversed order
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
int main(){
srand(time(0));
int numbers[500];
int num_num;
cout<< "How many numbers (up to 500)?";
cin >> num_num;
for ( int i= 0; i < num_num; i++)
numbers[i] = rand()%100;
cout << "\n Your numbers reversed are:\n";
for ( int j= num_num-1 ; j >= 0; j--)
cout << setw(3) << numbers[j];
cout << endl;
return 0;}
#include <iostream> //print histogram
#include <fstream>
#include <iomanip>
using namespace std;
int main(){
ifstream ins;
int count[26]={0};
char next;
ifstream input_stream;
char input_file_name[16]; // declare the input file names
cout << "Enter the input file name (max 15 characters):\n";
cin >> input_file_name;
ins.open(input_file_name); // open the file
ins >> next; // get the first char
while(!ins.eof()){ // loop to read each line
next = tolower(next);
if (isalpha(next))
count[ next - 'a']++;
ins >> next; }
ins.close();
for (char i = 'a'; i <='z'; i++) // print_histogram(count);
cout << i << ": " << count[i-'a'] << endl;
return 0;
}
void print_histogram( int list[]){
int max = list[0];
for (int i = 1; i < 26; i++){
if (max < list[i])
max = list[i];
}
double ratio= 70.0 /max ;
for ( i = 0; i < 26; i++){
cout << char ('a'+i) <<": “
<< setw(5) <<list[i] <<‘ ‘;
int count = list[i]* ratio;
for ( int j = 0; j < count; j++)
cout <<'*';
cout << endl;
}
cout << endl;
}