Sunteți pe pagina 1din 42

CSCE 110

PROGRAMMING FUNDAMENTALS
WITH C++

Prof. Amr Goneid


AUC
Part 5. Functions

Prof. amr Goneid, AUC 1


Functions

Prof. amr Goneid, AUC 2


Functions
Predefined (Library) Functions
Modular Programming with Functions
Types of Functions
Function Prototype Declaration
Function Definition
Formal & Actual Parameters
Who Sees Who: Scope of an Identifier
Parameter Passing

Prof. amr Goneid, AUC 3


1. Predefined Functions
Example:
#include <math.h>

void main()
{
cout << Square Root. Ex: sqrt(9.0) =
<< sqrt(9.0) << endl;
cout << Powers. Ex: pow(3.0, 4.0) =
<< pow(3.0,4.0) << endl;
cout << Absolute Value for int. Ex:
<< abs(-9) = << abs(-9)
<< endl;
cout << Absolute Value for long. Ex:
<< labs(-900) = << labs(-900)
<< endl;

Prof. amr Goneid, AUC 4


cout << Absolute Value for double. Ex:
<< fabs(-9.5) = << fabs(-9.5)
<< \n;
cout << Ceiling (round up). Ex: ceil(4.1)
<< = << ceil(4.1) << endl;
cout << Floor (round down).
<< Ex: floor(4.7) =
<< floor(4.7) << endl;
}

Output:
Square Root. Ex: sqrt(9.0) = 3.0
Powers. Ex: pow(3.0,4.0) = 81
Absolute Value for int. Ex: abs(-9) = 9
Absolute Value for long. Ex: labs(-9000) = 9000
Absolute Value for double. Ex: fabs(-9.5) = 9.5
Ceiling (round up). Ex: ceil(4.1) = 5
Floor (round down). Ex: floor(4.7) = 4
Prof. amr Goneid, AUC 5
2. Modular Programming with
Functions
Level
0 Main Function

1 Function1 Function2 Function3

2 Function4 Function5
.
.Functions are natural building blocks for modular programming

Prof. amr Goneid, AUC 6


C++ Program Structure
C++ program
Compiler Directives
contains
Function Prototypes function
prototype
int main ( )
declarations
{ and function
Main Data Declarations definitions.
Main Actions The main is
} just another
function.
Used Functions Defined Here

Prof. amr Goneid, AUC 7


Functions & The Main Function
A function is invoked by another function (e.g main)

Function Header int main( )

Local main
Data Area Data Area

Main Body
Function Body
Invoke function
Next action

Prof. amr Goneid, AUC 8


3. Types of Functions
Returns a Single
Scalar Value
Typed
Input Params
Function

Output Params

void
Input Params Function
Action

Prof. amr Goneid, AUC 9


4. Function Prototype
Declaration
Syntax:
<ftype> <fname> (formal parameter list) ;

Examples:
int cube ( int n ) ;
// A function receiving an int parameter (n) and returning
an int value.
float minxy ( float x , float y ) ;
// A function receiving two float parameters ( x , y ) and
returning a float value.

Prof. amr Goneid, AUC 10


Prototype Declaration (Examples)

void printchar ( char c , int n ) ;


// a function receiving two parameters ( c , n ) and
returns nothing. It is supposed to do an action, e.g.
print n of char c on one line.
void errormessage ( ) ;
// a function receiving nothing and returning nothing.
It is supposed to do an action, e.g. print a fixed error
message.

Prof. amr Goneid, AUC 11


5. Function Definition

<ftype> <fname> ( List of Formal Parameters)


{
Local Data Declarations

Function Actions
(Executable Statements)
}

Prof. amr Goneid, AUC 12


Building Typed Functions
Syntax:
<ftype> <fname> (formal params)
{
Local Data Area

Function Body contains a statement:


return < a value of type ftype > ;
}
Prof. amr Goneid, AUC 13
Example of an Integer
Function
Function to return the larger of two integer
numbers a and b.

int maxab ( int a , int b )


{
//Does not need Local Data
return ( (a >= b) ? a : b );
}
Prof. amr Goneid, AUC 14
Example of a Real Function
Function to return the area of a circle of radius r.

float area ( float r )


{
// Local Data
const float pi = 3.14159 ;
// Action
return ( pi * r * r ) ;
}

Prof. amr Goneid, AUC 15


Example of a Boolean Function
Function to return true if an integer n is even and
false otherwise.

bool iseven ( int n )


{
//Does not need Local Data
return ( n % 2 == 0 ) ;
}
Prof. amr Goneid, AUC 16
Example of Using a Typed
Function
// Prints if an entered integer is even or odd
# include <iostream>
using namespace std;
// Function used.
bool iseven ( int n );
int main ( )
{
int num;
cout << Enter an integer number: ;
cin >> num;

Prof. amr Goneid, AUC 17


Example of Using a Typed
Function
if ( iseven ( num ) ) cout << Number is even ! ;
else cout << Number is odd ! ;
return 0 ;
}

// Returns true if an integer is even, false otherwise

bool iseven ( int n )


{
return ( n % 2 == 0 );
}

Prof. amr Goneid, AUC 18


Type of Returned Value
Type of a value returned by a called
function must be consistent with the
type expected by the caller as identified
in the function prototype declaration.

Prof. amr Goneid, AUC 19


Building void Functions
Syntax:
void <fname> (formal params)
{
Local Data Area

Function Body does not contain a


return statement
}

Prof. amr Goneid, AUC 20


Example of a void Function
Action: Fill screen with blanks.
void blankscreen( )
{
const char blank = ;
int row , col ;
for (row = 1; row <= 25; row++) {
for (col = 1; col <= 80; col++)
cout << blank ;
cout << endl;
}
}

Prof. amr Goneid, AUC 21


Example of a void Function
Action: Write n dashes on a line.

void dashes( int n )


{
const char dash = - ;
int i ;
for (i = 1; i <= n; i++)
cout << dash ;
}

Prof. amr Goneid, AUC 22


Example of Using a void
Function
// Prints numbers and dashes
# include <iostream>
using namespace std;
// Function used.
void dashes ( int n );
int main ( )
{
float salary, bonus;
cout << Enter Salary: ; cin >> salary;
bonus = 0.1 * salary ;

Prof. amr Goneid, AUC 23


Example of Using a void
Function
cout << Bonus ; dashes(3);
cout << bonus; dashes(5); cout << endl;
return 0 ;
}
// Writes n dashes on one line
void dashes ( int n )
{
const char dash = - ; int i ;
for (i = 1; i <= n; i++) cout << dash ;
}

Prof. amr Goneid, AUC 24


6. Formal & Actual Parameters
In Function Declarations:
bool iseven(int n); int maxab( int a , int b )
void dashes(int n);
a,b,n are FORMAL parameters(Dummies or Gates).
They are LOCAL to their modules.
When invoked in a main function:
maxab(x,y) or maxab(1+z,2.3) dashes(7);
dashes(k); iseven ( num )
x , y , 1+z , 2.3 , 7 , k , num are ACTUAL parameters
passed from main to modules through their
respective gates.
Prof. amr Goneid, AUC 25
Key Points
The substitution of the value of an
actual parameter in a function call for its
corresponding formal parameter is
strictly positional. That is, the value of
the first actual parameter is substituted
for the first formal parameter; the
second and so on

Prof. amr Goneid, AUC 26


Key Points
The names of these corresponding pairs of
parameters are no consequence in the
substitution process. The names may be
different, or they may be the same.
The substituted value is used in place of the
formal parameter at each point where that
parameter appears in the called function.

Prof. amr Goneid, AUC 27


Passing values of Actual
Parameters
main maxab main iseven

x a
num n

y b

Prof. amr Goneid, AUC 28


Formal & Actual Parameters

Correspondence between actual and formal


parameters is determined by position in their
respective lists. These lists must be the same
size. The names of corresponding actual and
formal parameters may be different.
Formal parameters and corresponding actual
parameters should agree with respect to type.

Prof. amr Goneid, AUC 29


Overloaded Functions:
#include <iostream.h>

float average(float x, float y);


// Returns the average of x and y

float average(float x, float y, float z);


// Returns the average of x, y, and z

void main()
{
cout << The average of 3.0 and 7.0
<< is << average(3.0, 7.0)
<< endl;
cout << The average of 3.0, 4.0, and 8.0
<< is << average(3.0, 4.0,8.0)
<< endl;
}

Prof. amr Goneid, AUC 30


float average(float x, float y)
{
return ((x + y)/2.0);

}
float average(float x, float y, float z)
{
return ((x + y + z)/3.0);
}

Output:
The average of 3.0 and 7.0 is 5.0000
The average of 3.0, 4.0, and 8.0 is 5.0000

Prof. amr Goneid, AUC 31


7. Who Sees Who:
Scope of an Identifier
To see = to recognize = to be able to use,
invoke, change, etc.
Scope = the domain in which an identifier is
recognizable.
The scope of an identifier extends only from
the point where it is defined to the end of the
module in which it is defined.
A module can see itself (Recursion)

Prof. amr Goneid, AUC 32


Scope(continued)
Global : can be seen by all modules.
Local: can be seen only by its module but not by
other modules.
Names declared inside a function/main are local to
that function/main.
Anything declared before the main function is global.
It can be called anywhere in the program.
Hence, all functions are global.
For two things having the same id, local overrides
global.

Prof. amr Goneid, AUC 33


Scope(example)

int x , m; // Global Variables

Prototypes of A , B , C

Main
Data x , y

Module A Module B Module C


Data P , Q Data x , w Data m , n

Prof. amr Goneid, AUC 34


8. Parameter Passing:
Example of a Paradox
A function to swap two characters.
// x and y are passed by value
void swap (char x , char y)
{
char temp;
temp = x;
x = y;
y = temp;
}

Prof. amr Goneid, AUC 35


Paradox (continued)
A program uses the function to swap two characters:
void swap (char x , char y);
int main ( )
{
char a,b ;
No Change!
a = M ; b = N ; Why ?
cout << a << << b << endl;
swap(a,b);
cout << a << << b << endl; MN
} MN

Prof. amr Goneid, AUC 36


Where in Memory?
The DOS Memory Map:
one segment = 64 kbyte

DOS CS DS SS HEAP

LM HM
DS = Data Segment (Data)
CS = Code Segment ( Main & Modules code)
SS = Stack Segment (System Stack)
Heap = Rest of DOS memory

Prof. amr Goneid, AUC 37


Parameter Passing:
What Really Happened
Memory Before Memory After
DS SS DS SS

b N N-> y b N M <- y
a M M -> x a M N <- x
Swap addr Swap addr

Prof. amr Goneid, AUC 38


To see the change, pass the
address, not the value !
Memory Before Memory After
DS SS DS SS

b N Addr of b b M Addr of b
a M Addr of a a N Addr of a
Swap addr Swap addr

Prof. amr Goneid, AUC 39


How to pass the Address (pass
by Reference)
The correct function to swap two characters.
// x and y are passed by reference
void swap (char& x , char& y)
{
char temp;
temp = x;
x = y;
y = temp;
}
// symbol & means address of

Prof. amr Goneid, AUC 40


Passing by Reference
(continued)
A program uses the function to swap two characters:
void swap (char& x , char& y);
int main ( )
{
char a,b ;
Now there is
a = M ; b = N ; Change!
cout << a << << b << endl;
swap(a,b);
cout << a << << b << endl; MN
} NM

Prof. amr Goneid, AUC 41


Parameter Passing:
Summary
Input Only Parameters: those you do
not want to change- pass by value
Output Only Parameters: those you
want to see what happened to them
pass by reference (address) using &.
Input/Output Parameters: pass by
reference using &.

Prof. amr Goneid, AUC 42

S-ar putea să vă placă și