Functions are very handy tools in programming; they allow reusable
code and the ability to build larger programs. Think about a program as a car.
A car is not just one piece of hardware but pieces of hardware all put together
to work with each other. Each piece of hardware has its own duties to be
executed. Functions are like the pieces of hardware in a car. Functions can be
written separately to do certain tasks then put together to make a single more
sophisticated program. Let us begin here is the syntax for a function.
return
type name (data type variable, data type variable....)
So what do these mean?
return type-this what data type will return after the function is done so something like int,double, or even void
name-this is the name of your function choose whatever name you'd like, it will be the name you use to call it like your puppy! Ok maybe not
data type variable-this will be something like 'int x' these are the arguments that the function will take in
So a certain function that will take in two arguments x and y that are both integers and return a double that is named mult will look like this
return type-this what data type will return after the function is done so something like int,double, or even void
name-this is the name of your function choose whatever name you'd like, it will be the name you use to call it like your puppy! Ok maybe not
data type variable-this will be something like 'int x' these are the arguments that the function will take in
So a certain function that will take in two arguments x and y that are both integers and return a double that is named mult will look like this
double
mult (int x, int y)
This is what's called a prototype, think of it like a pre
processor directive in order to use the function (which you are about to write)
the prototype must be declared. It's good practice to put the prototype before
main like this.
#include
<iostream>
double
(int x, int y); //notice the semicolon
int
main()
{
//main program
return
0;
}
Notice the semi colon, when prototyping a function before main you
must put a semi colon after the prototype. So up until now that actual
functions hasn't been written yet or in other words defined. The definition of
the function is written completely outside of main like this.
#include
<iostream>
double
mult (int x, int y); //notice the semicolon
int
main()
{
//main program
return
0;
}
double
mult (int x, int y) //notice no semicolon
{
//function will be written here
}
When beginning to define the function notice how it is exactly the
same as the prototype except the semicolon. The statement that go in betweem
the curly brackets are the things that will be executed. So now let us write a
full working program, this program will use a function to multiply two
variables and return the sum, here we go!
//Full
working program
#include
<iostream>
double
mult (int x, int y); //our functions prototype
int
main()
{
int a,b; //declare two variable a and b
double c; //declare a variable 'c' that can hold decimal values
cin>>a; //assign 'a' a value
cin>>b; //assign 'b' a value
c = mult(a,b); //call the function mult and send it the values of 'a' and 'b'
cout<<"The function returned "<<c<<endl;
return
0;
}
double
mult (int x, int y) //defining the function
{
double z; //delcare a local variable that can hold decimal numbers
//'x' holds the value of 'a' and 'y' holds the value of 'b'
z = x*y; //z holds the value of 'x' and 'y' multiplied
return z; //returns the value of 'z' to the variable 'c' in main
}
The functions will take two values in this case 'a' and 'b' which
will be held in 'x' and 'y'. Notice that 'x' and 'y' were not declared inside
the curly brackets of mult this is because they were declared in the prototype
double mult (int x, int y) and because both 'x' and 'y' are integers then the
variables that are passed to it in this case 'a' and 'b' must also be integers.
Also notice the variable 'z' declared inside the function mult, 'z' is what's
called a local variable inside the function, it can only be used inside that
function. If a programmer were to declare 'z' again inside the main function
they would act as two different variables. This practice is frowned upon
because it's very easy to mix the variables up.
Now you may be asking yourself, couldn't we of just put the same
program into main and not have to write a function at all? Of course we could
have but like many times the simplicity of the lesson helps in understanding
but sometimes makes the actual lesson feel obsolete. Much more sophisticated
programs are of course much larger and it would be tedious to have one huge
main program. If something were to go wrong with a piece of the code then you
would have a lot of searching ahead of you, but if the program was made up of a
collection of functions then a programmer would have a much easier time finding
the function that was giving trouble. Also if a program was all in main then it
would be hard for multiple programmers to work on the same program but functions
allow each programmer to work on a specific task of the program (a function)
and then put them together when they are done making a single program.
Ok so let us take a look at a certain program that uses a function
to calcualte the factorial of a natural number from 0 to 12. A factorial of a
number is the series of multiplication less than that number. For example if we
take the factorial of 4 it would be 4*3*2*1 which equals 24, so the factorial
of 4 is 24. Here is the program take a look.
//Full
working program
#include
<iostream>
#include
//needed to use system("pause")
using
namespace std;
void
fact (int x); //notice void, this means the function will not return a value
int
main()
{
int
f;
cout<<"Please
input a number to be evaluated "
"WARNING
this program can't compute a value greater than 12"<<endl;
cin>>f;
cout<<"The
factorial of "<<f<<" is ";
fact(f);
//sends the value of 'f' to the function fact
return
0;
}
void
fact (int x) //definition
{
//'x'
now holds the value of 'f'
int
fact=1; //local variable fact must be assigned 1 to avoid garbabe
if
(x==0) //by definition the factorial of 0 is 1
{
cout<<"1"<<endl;
system("pause"); //pause program to see output
return; //returns control to main
}
else
if (x>12) //if 'x' is greater than 12 return control to main
{
return; //notice no value or variable just return, this is because of void
}
while
(x>=1)//while 'x' is greater than or equal to 1 continue loop
{
fact=fact*x; //fact equals what is was times 'x'
x--; //after every loop decrease 'x' by 1
}
cout<<fact;
//print fact and return control to main
return;
}
Notice how majority of the program takes place inside the function
and all main really does is call the function fact. Now notice the void in
front of the function name.
void fact (int x)
The void function means that no value will be returned unlike the
last function where the value of z was returned nothing is actually returned
from the function hence the void. In these type of functions it's ok to simply
put return when you want control to be passed back to main.
In the fact function there are three different scenarios. if 'x'
equals 0 the program simply prints out 1 and returns control to main, there is
nothing more to execute. The next scenario is if x is greater than 12, in the
beginning of the program it warned the user that it will not calculate anything
higher than 12. If the user enter a value more than 12 than the function will
immediately pass control back to main. The program can generate a factorial
higher than 12 but once you get to higher numbers like 100 the program can't
compute a number that high and it will just print out 0. For accuracy we will
keep it at 12. The last scenario is if 'x' is between 0 and 13 throws the
program into a loop.
while
(x>=1)//while 'x' is greater than or equal to 1 continue loop
{
fact=fact*x; //fact equals what is was times 'x'
x--; //after every loop decrease 'x' by 1
}
The equation fact=fact*x can also can be written fact*=x but for
simplicity I will continue doing it the other way. The equation is simple but
lets walk through it in regards to the loop. Say if the user entered 4
factorial to be evaluated, remember fact was first assigned 1 so fact=1*4 which
equals 4 so fact now equals 4 and 'x' is decremented by 1 so now it equals 3.
So the new equation becomes fact=4*3 which equals 12 so now fact equals 12 and
'x' is now 2. The equation now becomes fact=12*2 which equal 24 and 'x' now
equals 1 so the equation becomes fact=24*1 which is still 24 and 'x' is now 0
which doesn't pass the while loop test so the program breaks out of the loop,
prints out fact, and returns control to main
0 comments:
Post a Comment