double arraySum( double array[ ], int array_size )
{
double sum = 0.0;
int i = 0;
while( i < array_size )
{
sum = array[ i ] + sum;
}
return sum;
}
It is not necessary to specify the capacity of the array. There is no restriction on the capacity of the array passed to the function. It is necessary to use another parameter or a constant to pass the size of the array to the function.
Arrays are automatically passed by reference, i.e. specifying a parameter as an array makes it a reference parameter without the ampersand ( & ). If the function modifies the array, the corresponding argument will also be modified. This can be avoided by declaring the array as a constant reference parameter.
Let's take a larger example:
#include <cstdlib>
#include <iostream>
using namespace std;
const int MAX_NUMBER = 1000;
const int ERROR = -1;
const double END_NUMBER = -1.0;
int readNumbers( double numbers[ ] );
double calculateMean( const double numbers[ ], int how_many );
int main( void )
{
double numbers[ MAX_NUMBERS ];
int how_many_read = 0;
how_many_read = readNumbers( numbers );
if( how_many_read == ERROR )
{
return EXIT_FAILURE;
}
cout << "Mean value is: "
<< calculateMean( numbers, how_many_read )
<< endl;
return EXIT_SUCCESS;
}
int readNumbers( double numbers[ ] )
{
int how_many = 0;
//we know that there is room for MAX_NUMBERS
//amount of space in teh array
while( how_many < MAX_NUMBERS )
{
cout << "Give "
<< how_many + 1
<< ". number: ";
//The number is read from the input into
//the array the change modifies the
//coresponding argument
cin >> numbers[ how_many ];
if( numbers[ how_many ] == END_NUMBER )
{
return how_many;
}
++how_many;
}
//if how_many got too large, and error has occured
return ERROR;
}
double calculateMean( const double numbers[ ], int how_many )
{
double sum = 0.0;
int i = 0;
if( how_many == 0 )
{
return sum;
}
//in this function the actual size of
//the array doesn't matter. It is important
//to know fo how many numbers the mean is
//supposed to be calculated from
while( i < how_many )
{
sum = sum + numbers[ i ];
++i;
}
return sum / how_many;
}
The other alternative woule have been:
int readNumbers( const double numbers[ ], int size )
{
int how_many = 0;
//now the size of the array is given as parameter
while( how_many < size )
{
cout << "Give "
<< how_many + 1
<< ". number: ";
//The number is read from the input
//into the array the change modifies
//the corresponding argument
cin >> numbers[ how_many ];
if( numbers[ how_many ] == END_NUMBER )
{
return how_many;
}
++how_many;
}
//if how_many got too large, an error has occured
return ERROR;
}
It would have been called in main:
how_many_read = readNumbers( numbers, MAX_NUMBERS );
The latter is recommended since the result can be used more widely.
Reference: cplusplus, macs, msdn
No comments:
Post a Comment