Next: Example function: sum of
Up: Introduction to User-defined functions
Previous: Functions with parameters and
One of the most useful forms of function is one that returns a
value that is a function of its parameters. In this case the type
given to the function is that of the value to be returned. Thus
consider the function, previously considered, which given the
co-ordinates of a point (x,y)
will return its distance from the
origin:
float distance(float x, float y) // Returns the distance of (x, y) from origin { float dist; //local variable dist = sqrt(x * x + y * y); return dist; }
Download program.
The function prototype for this function is:
float distance(float, float); // function prototype
This function introduces several new features. Note the following:
float
because it
is going to return a float
value.x
and y
. Each parameter is declared by giving its type
and name and successive parameter declarations are separated
by a comma.dist
has been declared to temporarily
hold the calculated distance.return
statement which returns the value. In a
statement return
value the value may be a
constant, a variable or an expression. Hence the use of the
local variable dist
was not essential since the
return
statement could have been written:return sqrt(x*x + y*y);
When the function is called the formal parameters x
and
y
are replaced by actual parameters of type float
and in the
same order, i.e. the x
co-ordinate first. Since the function
returns a value it can only be used in an expression.
Hence the following examples of the use of the above function in a program in which it is declared:
float a, b, c, d, x, y; a = 3.0; b = 4.4; c = 5.1; d = 2.6; x = distance(a, b); y = distance(c, d); if (distance(4.1, 6.7) > distance(x, y)) cout << "Message 1" << endl;
A function may have several return
statements. This is
illustrated in the following function which implements the algorithm
for evaluating the square root previously considered.
float mysqrt(float x) // Function returns square root of x. // If x is negative it returns zero. { const float tol = 1.0e-7; // 7 significant figures float xold, xnew; // local variables if (x <= 0.0) return 0.0; // covers -ve and zero case else { xold = x; // x as first approx xnew = 0.5 * (xold + x / xold); // better approx while (fabs((xold-xnew)/xnew) > tol) { xold = xnew; xnew = 0.5 * (xold + x / xold); } return xnew; // must return float value } } // end mysqrt
Download program.
If the function has type void
then it must not return a value.
If a void
function does return a value then most compilers will issue
some form of warning message that a return value is not expected.