function-name

Top-Down Design with
Functions and Classes
By
Dr. Awad Khalil
Computer Science & Engineering Department
3.1 Building Programs from
Existing Information
Reuse of existing programs
 Develop program in stages
 Compile along the way
 Keep it small
 Comments to describe actions

2
Washers.cpp
// File: washers.cpp
// Computes the weight of a batch of flat
// washers.
#include <iostream>
using namespace std;
int main()
{
const float PI = 3.14159;
float holeDiameter; // input 3
Washers.cpp
float
float
float
float
float
float
float
float
float
edgeDiameter;
thickness;
density;
quantity;
weight;
holeRadius;
edgeRadius;
rimArea;
unitWeight;
//
//
//
//
//
//
//
//
//
input - diameter
input - thickness
input - density
input - number
output - weight
radius of hole
radius of outer edge
area of rim
weight of 1 washer
4
Washers.cpp
cout << "Inner diameter in centimeters: ";
cin >> holeDiameter;
cout << "Outer diameter in centimeters: ";
cin >> edgeDiameter;
cout << "Thickness in centimeters: ";
cin >> thickness;
cout << "Material density in grams per
cubic centimeter: ";
cin >> density;
cout << "Quantity in batch: ";
cin >> quantity;
5
Washers.cpp
// Compute the rim area.
holeRadius = holeDiameter / 2.0;
edgeRadius = edgeDiameter / 2.0;
rimArea = PI * edgeRadius * edgeRadius PI * holeRadius * holeRadius;
// Compute the weight of a flat washer.
unitWeight = rimArea * thickness * density;
// Compute the weigh
weight = unitWeight * quantity;
6
Washers.cpp
// Display the weight
cout << "The expected weight of the batch
is " << weight;
cout << " grams." << endl;
return 0;
}
7
Washers.cpp
Program Output
Inner Diameter in centimeters: 1.2
Outer Diameter in centimeters: 2.4
Thickness in centimeters: 0.1
Material density in grams per cubic centimeter: 7.87
Quantity in batch: 1000
The expected weight of the batch is 2670.23 grams
8
3.2 Library Functions
Goal of Structured Programming
 Error free code
 Reusability
 Don’t reinvent the wheel
 C ++ provides collection of functions
 Organized in Libraries
 Library examples Table 3.1

9
C++ Math Library
Functions in the Math library
 sqrt
cos sin
pow
 Examples Table 3.1
 Function use in Assignments
y = sqrt (x);
sqrt is function name
x is function argument
 Activated by a “function call”
 Result of execution is assigned to variable y

10
C++ Math Library (cont)
Function sqrt as a “black box”
X is 16.0
Square root
computation
Result is 4.0
11
C++ Library Functions
We can effectively utilize existing
functions by learning to read function
prototypes with the preconditions and
postconditions.
 Example prototype (or signature)
double sqrt(double x)
// PRE: x >= 0.0
// POST: Returns the square root of x.




12
Preconditions and Postconditions
Comments that represents a contract
between the implementor of a function
and the user (client) of that function.
 We'll look at two such comments:
 Precondition: What the function
requires.
 Postcondition: What the function will
do if the precondition is met.

13
Preconditions and Postconditions
The preconditions are the circumstances
that must be true before the function can
successfully fulfill the promised
postconditions.
 Example (Precondition abbreviates to
PRE:

double sqrt(double x);
// PRE: x >= 0
// POST: Returns square root of argument
X
14
SquareRoot.cpp
// File: squareRoot.cpp
// Performs three square root computations
#include <cmath>
#include <iostream>
using namespace std;
// sqrt function
// i/o functions
int main()
{
float first;
float second;
float answer;
15
SquareRoot.cpp
// Get first number and display its square root.
cout << "Enter the first number: ";
cin >> first;
answer = sqrt(first);
cout << "The square root of the first
number is " << answer << endl;
// Get second number and display its square root.
cout << "Enter the second number: ";
cin >> second;
answer = sqrt(second);
cout << "The square root of the second
number is " << answer << endl;
16
SquareRoot.cpp
// Display the square root of the sum of first
// and second.
answer = sqrt(first + second);
cout << "The square root of the sum of
both numbers is " << answer << endl;
return 0;
}
17
SquareRoot.cpp
Program Output
Enter the first number: 9
The square root of the first number is 3
Enter the second number: 16
The square root of the second number is 4
The square root of the sum of both numbers is 5
18
3.3 Top-Down Design and
Structure Charts
Original Problem
Draw a
figure
Draw a
Circle
Detailed
subproblem
s
Level 0
Draw a
Triangle
Draw
intersecting
lines
Draw
intersecting
lines
Draw a
base
Level 1
Level 2
19
3.4 Functions without Arguments
Functions used in Top-Down Design
 main() is just a function
 called by OS
 C++ program is a collection of Functions
 top level function is called the main()
 lower level functions
 User Defined or Libraries
 Example StkFigMn.cpp

20
StickFigure.cpp
// File: stickFigure.cpp
// Draws a stick figure
#include <iostream>
using namespace std;
// Functions used ...
void
void
void
void
drawCircle();
// Draws a circle
drawTriangle(); // Draws a triangle
drawIntersect(); // Draws intersecting lines
drawBase();
// Draws a horizontal line
21
StickFigure.cpp
int main()
{
// Draw a circle.
drawCircle();
// Draw a triangle.
drawTriangle();
// Draw intersecting lines.
drawIntersect();
return 0;
}
22
Function Calls
We can call a function and get results
without knowing the implementation of
that function.
 pow(x, y) returns x to the yth power.
 For now, we need not know exactly how
a function is implemented.
 However, we do need to know how to use
the function.

23
Function Calls
This general form of a function call:
function-name ( optional argument-list );
 Example function call:

drawCircle ();
The function name is drawCircle
 No arguments to the function

24
Function Prototype
This general form of a function prototype:
type function-name ( optional argument-list );
 Example function prototype:

void skipThree ();

Type

int - float - char
Name
 ( );
 Descriptive comment

25
Function Definition
General form of a function definition:
type function-name ( optional argument-list )
{
local-declarations - function body
executable-statements
}
 Example function definition:

void drawTriangle ()
26
Function Definition
void drawTriangle () function header
{
function body
// Draw a triangle.
drawIntersect ();
drawBase ();
}
27
StickFigure.cpp
// Draws a circle
void drawCircle()
{
cout << "
* " << endl;
cout << " *
*" << endl;
cout << "
* * " << endl;
} // end drawCircle
28
StickFigure.cpp
void drawCircleChar(char symbol)
{
cout << "
" << symbol << " " << endl;
cout << " " << symbol << "
" << symbol <<
endl;
cout << "
" << symbol << " " << symbol <<
endl;
}
// Draws a triangle
void drawTriangle()
{
drawIntersect();
drawBase();
}
29
StickFigure.cpp
// Draws intersecting lines
void drawIntersect()
{
cout << "
/ \\ " << endl;
cout << " /
\\ " << endl;
cout << " /
\\" << endl;
}
// draws a horizontal line
void drawBase()
{
cout << " -------" << endl;
}
30
Order of Execution
int main()
{
drawCircle();
drawTriangle();
drawIntersect();
return 0;
}
void drawCircle()
{
cout << “ * “ <<
endl;
cout << “ * * “ <<
endl;
cout << “ * * “ <<
endl;
}
31
Function Advantages
Program team on large project
 Simplify tasks
 Each Function is a separate unit
 Top-down approach
 Procedural abstraction
 Information hiding
 Reuse (drawTriangle)

32
Abstraction

Abstraction:
 Refers to the act of ignoring
details to concentrate on essentials.
 Allows us to use complicated
things with little effort (CD
players, automobiles, computers).
33
Displaying User Instructions
We still have not covered passing in and out
of a function
 Following example shows displaying info
 instruct(); function call in main

34
Instruct.cpp
// DISPLAYS INSTRUCTIONS TO THE USER
// OF AREA/CIRCUMFERENCE PROGRAM
int instruct ()
{
cout << "This program computes the
area and " << endl;
cout << "circumference of a circle. " <<
endl << endl;
cout << "To use this program, enter the
radius of the "
<< endl;
cout << "circle after the prompt" << endl;
35
Instruct.cpp
cout << "Enter the circle radius: " << endl <<
endl;
cout << "The circumference will be computed
in the same ” << endl;
cout << "units of measurement as the radius.
The area " << endl;
cout << "will be computed in the same units
squared." << endl << endl;
}
36
Program Output
This program computes the area and
circumference of a circle.
To use this program, enter the radius of the circle
after the prompt
Enter the circle radius:
The circumference will be computed in the same
units of measurement as the radius. The area
will be computed in the same units squared.
37
3.5 Functions with Input
Arguments
Functions used like building blocks
 Build systems one functions at a time
 Stereo Components
 Use function return values and arguments
to communicate between functions
 Discuss AreaMain.cpp
 Flow of arguments and returns

38
Function Call
Form:
fname (actual arg list);
Example:
scale (3.0, z);
39
Function Return

Functions must return a value unless
declared as void
Form:
return expression;
Example: return x * y;
40
Function Definition
Form:
type fname (formal arg list)
{
function body
}
Example:
float scale(float x, int n)
{
float scaleFactor;
scaleFactor = pow(10, n);
return (x * scaleFactor);
}
41
Function Prototype
Form: type fname (formal arg type
list);
Example: float scale (float x, int n);
42
TestScale.cpp
// File testScale.cpp
// Tests function scale.
#include <iostream>
#include <cmath>
using namespace std;
// Function prototype
float scale(float, int);
int main()
{
43
TestScale.cpp
float num1;
int num2;
// Get values for num1 and num2
cout << "Enter a real number: ";
cin >> num1;
cout << "Enter an integer: ";
cin >> num2;
// Call scale and display result.
cout << "Result of call to function scale
is " << scale(num1, num2) << endl;
return 0;
}
44
TestScale.cpp
float scale(float x, int n)
{
float scaleFactor;
scaleFactor = pow(10, n);
return (x * scaleFactor);
}
45
Argument / Parameter List
Correspondence

Functions can have more than 1 arg
Correspondence between Actual &
Formal arguments
Function call scale (3.0, z);
Actual Argument
Formal Argument
3.0
x
z
n

46
Argument / Parameter List
Correspondence
float scale(float x, int n)
{
float scaleFactor;
scaleFactor = pow(10, n);
return (x * scaleFactor);
}
47
Argument / Parameter List
Correspondence
Function call scale (x + 2.0, y);
Actual Argument
Argument
x + 2.0
y
Formal
x
y
48
Argument / Parameter List
Correspondence
Function call scale (y, x);
Actual Argument
y
x
Formal Argument
x
y
Watch for type matches in formal and
actual arguments
49
Key Points
 The
substitution of the value of an actual
argument in a function call for its
corresponding formal argument is strictly
positional. That is, the value of the first
actual argument is substituted for the first
formal argument; the second and so on
50
Key Points
 The
names of these corresponding pairs of
arguments 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 argument at each point where that
argument appears in the called function.
51
3.6 Scope of Names
Variable declared in a function has a local
scope within the function
 Same for variables declared in the main
 Variable declared before main is global
scope
 Call anywhere in program
 Functions declared globally

52
Scope of Names
Positional correspondence
 Type consistent is key because of positional
correspondence
 Argument types
 Return types

53
Scope of Names
Type of a value returned by a called
function must be consistent with the type
expected by the caller as identified in the
prototype
 Type of an actual argument in a function
call must be consistent with the type of its
corresponding formal argument

54
void one (ont anArg, double second);
int funTwo (int one, char anArg);
//
const int MAX = 950;
const int limit = 200;
//
int main ()
{
int localVar
.........
} // end main
//
void one(int anArg, double second}
{
int oneLocal;
…………….
} // end one
//
int funTwo (int one, char anArg)
{
int localVar;
…………….
} // end funTwo
// prototype 1
// prototype 2
// header one
// local variable
// header funTwo
// local variable
55
3.7 Extending C++ through
Classes
Discuss two classes
 String class part of compiler
 Money class is a user defined class
 #include <string>
 #include “money.h”

56
String Class
Declaring string objects
 Reading & Displaying strings
 Assignment & Concatenation
 Operator Overloading
 Dot Notation
 Member Functions
 Object Assignments

57
Declaring string Objects
A
number of ways to declare
string firstName, lastName;
string wholeName;
string greeting = “Hello “;
58
Reading & Displaying string
Objects
Use extraction operator >> and the stream
cin for input
 cin >> firstName;
 Use insertion operator << and the stream
cout for output
 cout << greeting << wholeName <<
endl;

59
Reading & Displaying string
Objects
getline (cin, lastName, ‘\n’);
reads all characters typed in from the
keyboard up to the new line into the
string object
60
StringOperations.cpp
// FILE: StringOperations.cpp
// ILLUSTRATES STRING OPERATIONS
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string firstName, lastName;
string wholeName;
string greeting = "Hello ";
cout << "Enter your first name: ";
cin >> firstName;
61
StringOperations.cpp
cout << "Enter your last name: ";
cin >> lastName;
// Join names in whole name
wholeName = firstName + " " + lastName;
// Display results
cout << greeting << wholeName <<
'!' << endl; cout << "You have " <<
(wholeName.length () - 1) <<
" letters in your name." << endl;
62
StringOperations.cpp
// Display initials
cout << "Your initials are " <<
(firstName.at(0)) <<
(lastName.at(0)) << endl;
return 0;
}
63
StringOperations.cpp
Program output
Enter your first name: Caryn
Enter your last name: Jackson
Hello Caryn Jackson!
You have 12 letters in your name.
Your initials are CJ
64
Assignment
Stores the first and last name
 wholeName = firstName + “ “ +
lastName;
 Concatenation
 + joins the two objects together
 “ “ for string values not ‘ ‘

65
Operator Overloading
+ normally means addition but with strings
it means concatenation
 The + can take on many meanings
 Operator Overloading
 C++ can have multi meanings to 1
operator
 >> & << are overloaded operators
 * / - == = all can be overloaded

66
Dot Notation

Dot notation used to call an objects member
functions
wholeName.length();
 Applies member function length to string
object wholeName
 Function returns the objects length
 Table 3.3 lists some additional functions
67
Money Class
Process money objects
 Two attributes
 dollars
 cents
 Why do this ?? Why not float ??

68
Money Class
Allocate a money object
 money creditLimit = 5000.00;
 Assignments
 taxAmount = salePrice *
taxPercent/100.0;
 finalCost = salePrice + taxAmount;

69
MoneyDemo.cpp
// FILE: MoneyDemo.cpp
// ILLUSTRATES MONEY OPERATIONS
#include <iostream>
#include "money.h"
using namespace std;
int main ()
{
// Local declarations
const float taxPercent = 6.25;
money creditLimit = 5000.00;
70
MoneyDemo.cpp
money salePrice;
money taxAmount;
money finalCost;
cout << "Enter item price: ";
cin >> salePrice;
// Compute tax amount
taxAmount = salePrice * taxPercent / 100.0;
// Compute final cost
finalCost = salePrice + taxAmount;
71
MoneyDemo.cpp
// Display
cout
cout
cout
cout
sales receipt
<< "Sales receipt" << endl;
<< "Price " << salePrice << endl;
<< "Tax
" << taxAmount << endl;
<< "Paid " << finalCost << endl <<
endl;
// Compute new credit limit
cout << "Your initial credit limit is " <<
creditLimit << endl;
creditLimit = creditLimit - finalCost;
cout << "Your new credit limit is " <<
creditLimit << endl;
return 0;
}
72
MoneyDemo.cpp
Program output
Enter item price: 345.77
Sales Receipt
Price $345.77
Tax $21.61
Paid $367.38
Your initial credit limit is $5,000.00
Your new credit limit is $4,632.62
73
Header and Implementation Files
Header file (.h)
 File containing information that C++
needs to compile a program that accesses
a user-defined class
 Implementation file (.cpp)
 File containing the C++ code for the
operators of a user defined class

74
3.8 Common Programming
Errors
Semicolon in Function Prototype (Declaration)
 Inconsistencies in Number of Arguments
 Too few arguments in a call
 Too many arguments in a call
 Incorrect number of arguments in call
 Extra argument in call
 Argument Mismatch
 Correct position (formal & actual params)

75
Common Programming Errors
Function Prototype & Definition Mismatches
 Both are the same except for the ;
 Return Statements
 “Return value expected”
 “Function should return value”
 Missing Object Name in Call to Member
Function
 Missing #include
 Type Mismatches

76