Programming
Passing
Arrays to
Functions
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 2
Passing Arrays as Parameters
● Arrays are always passed by reference.
● The “[ ]” in the formal parameter
specification indicates that the variable is
an array.
● It is a good practice to pass the dimension
of the array as another parameter.
● If the function must not change any
element of the array then const should be
used in the formal parameter specification
of that array.
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 3
Smallest Value
● Problem
■ Find the smallest value in a list of integers
● Input
■A list of integers and a value indicating the
number of integers
● Output
■ Smallest value in the list
● Note
■ List remains unchanged after finding the
smallest value!
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 4
Preliminary Design
● Realizations
■ When looking for value with distinguishing
characteristics, need a way of remembering best
candidate found so far
■ Best written as a function - likely to be used often
● Design
■ Search array looking for smallest value
– Use a loop to consider each element in turn
– If current element is smallest so far, then update smallest
value so far candidate
■ When done examining all of the elements, the smallest
value seen so far is the smallest value
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 5
Necessary Information
● Information to be maintained
■ Array with values to be inspected for smallest
value
■ Number of values in array
■ Index of current element being considered
■ Smallest value so far
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 6
A More Detailed Design
● Solution:
■ Function that takes two parameters: an
integer array and the array size; returns
smallest value
■ Initialize smallest value to first element
■ For each of the other elements in the array
– If it is smaller than the smallest value so far,
update the value of the smallest value so far to
current element
■ Quit at end of array and return smallest value
seen as value of the function
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 7
Passing An Array Example 3
Notice empty brackets
int ListMinimum(const int Ar[], int asize) {
int SmallestValueSoFar = Ar[0];
for (int i = 1; i < asize; ++i) { Could we just
assign a 0
if (Ar[i] < SmallestValueSoFar ) {
and have it
SmallestValueSoFar = Ar[i];
work?
}
}
return SmallestValueSoFar ;
}
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 8
Using ListMinimum
● What happens with the following?
int Number[6] ={3, 88, -7, 9, 1, 24};
cout << ListMinimum(Number, 6) << endl;
int List[3];
List[0] = 9; List[1] = 12; List[2] = 45;
cout << ListMinimum(List, 3) << endl;
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 9
Some Useful Functions
void DisplayList(const int Ar[], int asize) {
for (int index = 0; index < asize; ++index) {
cout << Ar[index] << " ";
}
cout << endl;
}
void GetList(int Ar[], int size){
for (int index = 0; index < Size; index++) {
cin >> Ar[index];
}
}
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 10
Useful Functions Being Used
const int MaxSize = 25;
int Values[MaxSize];
GetList(Values,MaxSize );
DisplayList(Values, MaxSize);
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 11
Finding the Maximum element
Entire array is passed by reference through address of the first
element and dimension of the array.
// Find the largest value in an array
// input: n - number of elements to check
// a[ ] - array of elements
// output:index to the largest element
#include <iostream.h>
int max_element(int size, const int a[]) {
int max_index = 0;
for (int i=1; i<size; i++)
if (a[i] > a[max_index])
max_index = i;
return max_index;
} // end max_element;
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 12
Finding the Maximum element
int main() {
int A[10] = {9,8,7,6,5,4,10,2,1,0};
cout << “The maximum element of this array is: ”
<< A[max_element(10,A)] << endl;
return 0;
}
//Example 1:passing array elements to a function
#include <iostream>
using namespace std;
void print_square (int);
const int ARRAY_SIZE = 5;
int main(){
int index;
int base[ARRAY_SIZE] = {3, 7, 2, 4, 5};
for(index = 0; index < ARRAY_SIZE; index++)
print_square(base[index]);
cout << endl;
return 0;
}
void print_square(int number) {
cout << " " << number * number;
}
#include <iostream> //Example 2: passing a whole array
using namespace std;
double average (int, const int[]);
int main(){
const int array_size = 5;
double ave;
int base[array_size] = {3, 7, 2, 4, 5};
ave = average(array_size, base);
cout << "The average of the numbers ";
for (int index = 0; index < array_size; index++){
cout << base[index];
if ( index < array_size - 1)
cout << ", ";
}
cout << " is " << ave << endl;
return 0;
}
//Example 2: passing a whole array
double average( int size, const int inp_list[]) {
double sum = 0.0;
for ( int index = 0; index < size; index++)
sum += inp_list[index];
return sum/size;
}
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 16
Example 5
// Add a[i] and b[i] and store the sum in c[i]
void add_array(int size, // in: array size
double a[], // in: first array
double b[], // in: second array
double c[] ) // out: result array
// array elements with subscripts ranging from
// 0 to size-1 are added element by element
// Pre: a[i] and b[i] (0<=i<=size-1) are defined
// Post: c[i] = a[i] + b[i] (0<=i<=size-1)
{ int i;
// Add a[i] and b[i] and store result in c[i]
for (i=0; i < size; i++)
c[i] = a[i] + b[i];
}
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 17
Example 5
int main() {
const int size = 5;
double x[size] = {1.8, 2.2, 3.4, 5.1, 6.7},
y[size] = {2.0, 4.5, 1.3, 4.0, 5.5},
z[size];
int ind;
add_array(size , x, y, z);
cout << "Content of array z is: \n";
for (i = 0; i < size; i++)
cout << "z[" << i << "] is "
<< z[i] << endl;
return 0;
}
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 18
add_array (5, x, y, z );
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 19
Passing Two-Dimensional Arrays to
Functions
You can pass a two-dimensional array to a
function; however, C++ requires that the
column size to be specified in the function
declaration. Example 6 gives an example
with a function that sum up two two-
dimensional array into a third one.
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 20
Example 6
// Sum up two 2-dimensional arrays into a third one
#include <iostream>
using namespace std;
const int max_cols = 5;
// c[i][j] = a[i][j] + b[i][j]
void add_array(double a[][max_cols],
double b[][max_cols],
double c[][max_cols],
int rows)
{ int i, j;
for (i=0; i < rows; i++)
for (j=0; j < max_cols; j++)
c[i][j] = a[i][j] + b[i][j];
}
int main() {
const int max_rows = 2;
double a[max_rows][max_cols] = {{1.8, 2.2, 3.4, 5.1, 6.7},
{1.0, 2.0, 3.0, 5.0, 6.0}},
b[max_rows][max_cols] = {{0.2, -0.2, -1.4, -3.1, -4.7},
{1.0, 0.0, -1.0, -3.0, -4.0}},
c[max_rows][max_cols];
int i, j;
add_array(a, b, c, max_rows);
// fix how decimals are shown
cout.setf(ios::fixed); // use decimal notation
cout.setf(ios::showpoint); // show decimals
cout.precision(1); // one decimal place
cout << "Content of array c is: \n";
for (i = 0; i < max_rows; i++){
for (j=0; j < max_cols; j++)
cout << c[i][j] << ", ";
cout << endl;
}
return 0;
}
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 22
Pass-by-Reference
void m(int, int []);
int main()
{
int x = 1; // x represents an int value
int y[10]; // y represents an array of int values
y[0] = 1; // Initialize y[0]
m(x, y); // Invoke m with arguments x and y
cout << "x is " << x << endl;
cout << "y[0] is " << y[0] << endl;
return 0;
}
void m(int number, int numbers[])
{
number = 1001; // Assign a new value to number
numbers[0] = 5555; // Assign a new value to numbers[0]
}
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 23
Reverse function
void reverse(const int list[], int newList[], int size)
{
for (int i = 0, j = size - 1; i < size; i++, j--)
{
newList[j] = list[i];
}
}
int main(){
int list1[5] = {1, 2 , 4, 5, 6};
int list2[5];
reverse(list1, list2 ,5); list 1 2 3 4 5 6
return 0;
}
newList 6 5 4 3 2 1
COMP102
void Prog. Fundamentals
add_array( double a[], //I: in:
Passing Arrays to Function / Slide 24
first array
int size_a,
Reverse function
double b[], // in: second array
int size_b,
double c[],
int size_c) // out: result array
//c[i] = a[i] + b[i]
{
for (int i = 0; i < size_c; i++)
c[i] = 0;
for (int i=0; i < size_a && i <size_c; i++)
c[i] += a[i];
for (int i=0; i < size_b && i <size_c; i++)
c[i] += b[i];
}
int main()
{
double a[5] = {1,2,3,4,5};
double b[3] = {100,200,300};
double c[10];
list 1 2 3 4 5 6
add_array(a,5,b,3,c,10);
for (int i = 0; i < 10; i++)
return 0;
newList
cout << c[i] << endl;
6 5 4 3 2 1
}
COMP102 Prog. Fundamentals I: Passing Arrays to Function / Slide 25
Problem: Counting Occurrence of
Each Letter
● Generate 100 lowercase
letters randomly and assign to
an array of characters.
● Count the occurrence of each
letter in the array.
● //CountLettersInArray.cpp