Function - PowerPoint PPT Presentation

1 / 96
About This Presentation
Title:

Function

Description:

With parameter in the function definition, function call with different value of ... value will be passed to parameter. The parameter is a variable and its ... – PowerPoint PPT presentation

Number of Views:52
Avg rating:3.0/5.0
Slides: 97
Provided by: RPREND4
Learn more at: https://www.cs.wcupa.edu
Category:

less

Transcript and Presenter's Notes

Title: Function


1
Function
2
  • Function
  • Introduction
  • Library function
  • New defined function
  • Random number generator
  • Scope
  • Inline function
  • Function overload

3
  • Introduction
  • Why do we need function?
  • Reuse and simplify a large program.
  • Chapter 7 and Chapter 8 (p309-p436)

4
  • Library function

1 // using library function. 2 include
ltiostreamgt 3 include ltiomanipgt 4 5
using namespace std 6 7
int main() 8 9 cout ltlt setw(4) ltlt123
ltlt endl 10 11 return 0 //
indicates successful termination 12 13
// end main 14
  • 123

5
  • Include the header file
  • Functions called by writing
  • setw (4)
  • 4 can be replaced by
  • Constants setw( 5 )
  • Variables
  • X4
  • setw(x)
  • Expressions
  • X2
  • setw( 6-x )

10 cout ltlt setw(5) ltlt123 ltlt endl
9 int x4 10 cout ltlt setw(x) ltlt123
ltlt endl
9 int x2 10 cout ltlt setw(6-x)
ltlt123 ltlt endl
6
  • Math library function
  • Perform common mathematical calculations
  • Include the header file ltcmathgt
  • Example
  • cout ltlt sqrt( 900.0 )
  • sqrt (square root) function
  • The preceding statement would print 30

7
(No Transcript)
8
1 // using math library function. 2
include ltiostreamgt 3 include ltcmathgt 4 5
using stdcout 6 using stdendl 7
8 int main() 9 10 // loop
10 times and calculate and output 11 //
square root of x each time 12 for ( int x
-5 x lt 5 x ) 13 cout ltlt abs (x)
ltlt , " // function call 14 15 cout
ltlt endl 16 17 return 0 // indicates
successful termination 18 // end main
  • 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5,

9
1 // using math library function. 2
include ltiostreamgt 3 // do not need any
other header file. 4 5 using stdcout 6
using stdendl 7 8 int
main() 9 10 // loop 10 times and
calculate and output 11 // square root of
x each time 12 for ( int x -5 x lt 5
x ) 13 If ( x lt0) cout ltlt -x ltlt
, " // if else, implementation of abs (x) 14
else cout ltlt x ltlt , " 15 16
cout ltlt endl 17 18 return 0 //
indicates successful termination 19 //
end main
  • 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5,

10
Program 1
Program 2
12 for ( int x -5 x lt 5 x ) 13
If ( x lt0) cout ltlt -x ltlt , " 14
else cout ltlt x ltlt , " 15
12 for ( int x -5 x lt 5 x ) 13
cout ltlt abs (x) ltlt , "
  • Thinking?
  • In program 1
  • Does the function know when it will be called?
  • Is that function reused 11 times in the loop?
    (Does the name abs appear 11 times?)
  • Do you care how to get absolute number in main?
  • Comparing with a main program providing a
    detailed implementation of abs inside that loop,
    is this main more simple and easier to develop?

No Yes No Yes
11
  • New defined function
  • 3 aspects
  • Function prototype
  • Function call
  • Function definition
  • Argument and parameter
  • Pre-condition and post-condition
  • Reference parameter
  • Return value
  • How to solve real problems by using arguments and
    parameters.

12
  • 3 aspects
  • Function prototype
  • Is used by compiler to check if the function call
    matches the function definition.
  • A simple sample
  • void function-name( )
  • Calling/invoking a function (function call)
  • A simple call
  • function-name()
  • Parentheses are used to call function (Control
    goes to function).
  • When the call done, the program will return to
    the point from which the function was called
    (Control goes back to caller).

13
  • 3 aspects
  • Function definition
  • A simple function definition
  • void function-name() statements
  • Simple sample

14
  • Welcome!

15
1 // using new defined function. 2 include
ltiostreamgt 3 using namespace std 4 void
print_star_one_line ( ) 5 6 int main() 7
8 print_star_one_line ( ) //
print one line of stars. 9
print_star_one_line ( ) // another line 10
cout ltltWelcome!ltltendl 11
print_star_one_line ( ) // print two lines
of stars. 12 print_star_one_line ( )
13 14 return 0 // indicates successful
termination 15 // end main 16 17
void print_star_one_line ( ) 18 19
cout ltlt ltlt
endl 20 // end of function
  • 3 aspects
  • Function definition
  • A simple function definition
  • void function-name() declarations and
    statements

16
  • A function cannot be defined in other function
    such like

17 void print_star_one_line ( ) 18 19
void print_one_star ( ) 20 21 cout
ltlt ltlt end 22 // end of
function print_one_star ...... .. // end of
function print_star_one_line
17
  • AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  • Welcome!
  • AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  • Thinking?
  • Do we need two different functions?

18
  • Argument and parameter
  • Make function more general by input parameter.
  • With parameter in the function definition,
    function call with different value of argument
    can fulfill similar tasks.
  • Argument
  • A variable or expression listed in a function
    call
  • Also called actual argument or actual parameter.
  • Parameter
  • A variable declared in a function heading
  • Also called formal argument or formal parameter.

19
  • Argument and parameter
  • Example.
  • Express the following procedure
  • Two numbers add them together divide by 2.
  • Try 9 and 8
  • Try 7 and 4
  • Did you use (xy)/2 when you want to express the
    procedure?
  • Did you use (ab)/2 when you want to express the
    procedure?

20
1 // using list of arguments and parameters,
argument promotion. 2 include ltiostreamgt 3
using namespace std 4 void showavg ( int,
int ) 5 6 int main() 7 8
showavg (9, 8) 9 showavg (7, 4)
10 return 0 //successful
termination 11 // end main 12 13
void showavg (int num1, int num2) 14 15
cout ltlt float(num1 num2)/2 ltltendl 16
// end of function
21
  • Argument and parameter
  • General format (Prototype, Call, and Definition)
  • Function prototype
  • Tells compiler argument type.
  • void function-name( Datatype )
  • Function call
  • function-name( argument )
  • An argument is passed to parameter in function
    definition
  • Function definition
  • void function-name( DataType VariableName )
    statements // use VariableName its value
    value of the argument.

22
1 // using argument and parameter. 2
include ltiostreamgt 3 using namespace std 4
void print_one_line ( char ) 5 6 int
main() 7 8 print_one_line ( )
// print one line of stars. 9
print_one_line (A ) // print one line of
As. 10 cout ltltWelcome!ltltendl 11
print_one_line (A ) // print another line
of As. 12 print_one_line ( )
// print another line of stars. 13 14
return 0 // indicates successful termination
15 // end main 16 17 void
print_one_line ( char ch ) 18 19 Int
i 20 for ( int x 1 x lt 30 x ) 21
cout ltlt ch 22 cout ltlt endl 23
// end of function
main
Print_one_line
ch

A
ch
Sequence Diagram
23
  • AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  • Welcome!
  • AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

24
  • Argument and parameter
  • The value of argument and parameter
  • Arguments can be constants, variables, and
    expressions
  • The argument will be evaluated to match the
    parameter when the function is called.
  • Force arguments to be of definition type
  • cout ltlt sqrt(4) //Converting 4 to double
    (4.0)
  • The value will be passed to parameter.
  • The parameter is a variable and its value is
    according to the argument in different call.

25
1 // using argument and parameter. 2
include ltiostreamgt 3 using namespace std 4
void print_one_line (char ) 5 6 int
main() 7 8 char cA 9
print_one_line ( ) // one line . 10
print_one_line (c ) // one line
A. 11 cout ltltWelcome!ltltendl 12
print_one_line (c d- c ) //one line
B. 13 print_one_line ( ) //
print another line of . 14 return 0 //
indicates successful termination 15 //
end main 16 17 void print_one_line ( char
ch ) 18 19 int i 20 for ( int x
1 x lt 30 x ) 21 cout ltlt ch 22
cout ltlt endl 23 // end of function
26
main
Print_one_line
ch
constant value

A
value of variable c
ch
B
value of expression
ch
Sequence Diagram
27
  • AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  • Welcome!
  • BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

28
  • Argument and parameter
  • Advanced format (Prototype, Call, and Definition
    for multiple arguments and parameters)
  • Function prototype
  • void function-name( DataTypeList )
  • The name of the function followed by data types
    of arguments.
  • Comma separated list.
  • Function call
  • function-name( ArgumentList )
  • The arguments are passed to the parameters
    according to their positions, left to right.
  • Comma separated list of arguments.

29
  • Argument and parameter
  • Advanced format (Prototype, Call, and Definition)
  • Function definition
  • void function-name( ParameterList )
    statements
  • If the list is present, it has the following
    form
  • DataType Parameter1, DataType Parameter2,
  • Comma separated list.

30
1 // using list of arguments and parameters,
argument promotion. 2 include ltiostreamgt 3
using namespace std 4 void showavg ( int,
int ) 5 6 int main() 7 8 char
ca 9 int i9, j2 10
showavg (i, j) 11 showavg (i, 2.5)
12 showavg (c300, 11) 13
return 0 //successful termination 14
// end main 15 16 void showavg (int
num1, int num2) 17 18 cout ltlt
float(num1 num2)/2 ltltendl 19 // end of
function
  • 5.5
  • 5.5
  • 14555.5

31
  • Real Case (A company and its delivery)

Company
Guy of delivery service
Call delivery service
Product
His job is to handle (deliver) this ?.

Control goes back (delivery confirmation).
  • Thinking?
  • For a guy who delivers the product of that
    company
  • Does he know what his job is? (function
    definition)
  • Does he know what he will deliver? (parameter)
  • For the company
  • Does the company knows what the guy will deliver?
    (argument)
  • Does the company care how he will deliver? (Does
    the main include the implementation of its
    functions?)
  • Does the company need confirm the delivery?
    (Control goes back to main or caller when the
    function is done.)

32
  • Pre-condition and post-condition
  • Pre-condition
  • To ensure there is no misuse.
  • An assertion that must be true before the
    function call
  • It may include
  • The acceptable range of argument
  • The external resources the function used and
    their status.
  • Post-condition
  • To ensure the expecting result.
  • An assertion that should be true after the
    function is called.
  • It may include
  • The results
  • All the external things this execution can
    change.

33
1 // Function void showavg (int, int). 2 //
Pre-condition 3 //
Argument two integer numbers 4 //
external resource None 5 //
Post-condition 6 //
result show the average on screen 7 //
external thing changed Only the
monitor. 8 9 void showavg (int num1, int
num2) 10 11 cout ltlt float(num1
num2)/2 ltltendl 12 // end of function
34
void my_function (
) //function prototype int main( )
my_function( ) //function
call return 0 void my_function (
) //function
definition
int k int x
, int , m , int y
int k3, m 4
35
  • Reference parameter
  • Value parameter
  • A parameter that receives a copy of the value of
    the corresponding argument.
  • The change of value of this parameter variable in
    the function wont change any thing in its caller
    (main).

36
1 // using argument and parameter. 2
include ltiostreamgt 3 using namespace std 4
void print_one_line (char ) 5 6 int
main() 7 8 char cA 9
print_one_line ( ) 10 print_one_line
(c ) 11 cout ltltWelcome!ltltendl 12
print_one_line (c d- c ) 13
print_one_line ( ) 14 return 0
15 // end main 16 17 void
print_one_line ( char ch ) 18 19 int
i 20 for ( int x 1 x lt 30 x ) 21
cout ltlt ch 22 cout ltlt endl 23
// end of function
main
function
ch
constant value


A
value of variable c
ch
A
B
value of expression
ch
B
Sequence Diagram
37
  • Reference parameter
  • A parameter that receives the location of the
    callers argument (main).
  • The change of value of this parameter variable in
    the function will bring the change to main after
    the function call.
  • The argument of its function call should be a
    variable (declared in main).
  • General format
  • void function-name( Datatype ) //prototype
  • function-name( ArgumentVariable ) //call
  • void function-name( DataType VariableName
    ) // definition

38
main
Function (char ch)
ch, i
Function ( i )


variable i
ch A
A
A
Sequence Diagram
39
1 // using reference parameter. 2 include
ltiostreamgt 3 using namespace std 4 void
showavg ( int, int, float ) 5 int main() 6
7 float cf1.2 8 int i9,
j2 9 showavg (i, j,cf) 10
cout ltlti ltlt endl ltlt cf ltltendl 11 return 0
//successful termination 12 // end
main 13 14 void showavg (int num1, int
num2 , float avg) 15 16 avg
float(num1 num2)/2 17 num1 2 18
// end of function
  • 9
  • 5.5

40
main
showavg
num1
num2
avg, cf
i
j
9 2 1.2
9 2
cf
1. 2
num1
num2
avg, cf
i
j
cf
2 2 5.5
9 2
5.5
Sequence Diagram
41
  • Return
  • Return results by using reference parameters
  • Return result by using return statement in
    function
  • Function prototype
  • Tells compiler return type
  • int square( int )
  • Function takes an int and returns an int
  • Function call
  • cout ltlt square(x)
  • After finished, passes back result

42
  • Return
  • Return result by using return statement in
    function
  • Function definition
  • return-value-type function-name( parameter-list
    ) statements
  • return Result
  • Return-value-type Data type of result returned
    (use void if nothing returned)
  • The value of Result will be evaluated and passed
    back to caller (main).
  • If no data to return (void), use return

43
1 2 // using return statement. 3
include ltiostreamgt 4 5 using
stdcout 6 using stdendl 7 8
int square( int ) // function prototype 9
10 int main() 11 12 // loop 10
times and calculate and output 13 //
square of x each time 14 for ( int x 2 x
lt 10 x ) 15 cout ltlt square( x ) ltlt
" " // function call 16 17 cout ltlt
endl 18 19 return 0 // indicates
successful termination 20 21 // end
main 22
44
23 // square function definition returns
square of an integer 24 int square( int y )
// y is a copy of argument to function 25

26 return y y // returns square
of y as an int 27
28 //
end function square
  • 4 9 16 25 36 49 64 81 100

45
1 2 // using reference parameters for
several return values. 3 include
ltiostreamgt 4 5 using stdcout 6
using stdendl 7 8 void
square_and_root( int, int, float ) //
function prototype 9 10 int main() 11
12 int s 13 float r 14 for
( int x 2 x lt 5 x ) 15
square_and_root( x, s, r ) // function call 16
cout ltlt s ltlt , " ltlt r ltlt " //
show two results 17 18 cout ltlt
endl 19 return 0 // indicates
successful termination 20 21 // end
main 22
46
23 // function definition returns square and
square root 24 void square_and_root( int x,
int y, float z ) 25
26 y
x x // returns square of x as an int
27 z sqrt(x) // returns square root
of x as an float 28 // end function square

4, 1.4121 9, 1.73205 16, 2 25, 2.23607
47
24 int square( int y ) 25
26
return y y 27
28
24 void square_and_root( int x, int y, float
z ) 25
26 y x x 27
z sqrt(x) 28
  • The function using return statement is easy to
    read and can return one value to its caller.
  • The function using reference parameter
  • has a long list of parameters.
  • has a complicated execution.
  • can return more values.
  • Exercises

48
1 include ltiostreamgt 2 using namespace
std 3 4 5 int main() 6 7 for (
int x 1 x lt 30 x ) 8
cout ltlt 9 cout ltlt endl 10 for
( int x 1 x lt 30 x ) 11
cout ltlt 12 cout ltlt endl 13
cout ltltWelcome!ltltendl 14 for ( int x
1 x lt 30 x ) 15 cout ltlt
16 cout ltlt endl 17 for ( int x
1 x lt 30 x ) 18 cout
ltlt 19 cout ltlt endl 20 21
return 0 22
  • Welcome!

1 include ltiostreamgt 2 using namespace
std 3 void print_one_line ( ) 4 5 int
main() 6 7 print_one_line ( ) 8
print_one_line ( ) 9 cout
ltltWelcome!ltltendl 10 print_one_line ( )
11 print_one_line ( ) 12
return 0 13 // end main 14 15 void
print_one_line ( ) // function heading 16 //
function body 17 for ( int x 1 x lt 30
x ) 18 cout ltlt 19
cout ltlt endl 20 // end of function
Function prototype
Function call
Function definition
49
  • AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  • Welcome!
  • BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

1 // using argument and parameter. 2
include ltiostreamgt 3 using namespace std 4
void print_one_line (char ) 5 6 int
main() 7 8 char cA 9
print_one_line ( ) 10 print_one_line
(c ) 11 cout ltltWelcome!ltltendl 12
print_one_line (c d- c ) 13
print_one_line ( ) 14 return 0
15 // end main 16 17 void
print_one_line ( char ch ) 18 19 for (
int x 1 x lt 30 x ) 20
cout ltlt ch 21 cout ltlt endl 22 //
end of function
Type of argument
Argument
Parameter
50
  • How to solve real problems by using arguments and
    parameters
  • Question on page 19 Get the average of two
    numbers
  • Two factors (xy) /2 (or (ab)/2)
  • Two arguments
  • Two parameter variables

51
1 //using multiple arguments and parameters. 2
include ltiostreamgt 3 using namespace
std 4 void showavg ( int, int ) 5 6
int main() 7 8 showavg (9, 8)
9 showavg (7, 4) 10 return
0 //successful termination 11 // end
main 12 13 void showavg (int num1, int
num2) 14 15 cout ltlt float(num1
num2)/2 ltltendl 16 // end of function
  • The average number is printed out when the
    function is called every time.
  • How can the caller use the result of function?

52
  • Do we need return?
  • Program using return statement

1 // using return statement. 2 include
ltiostreamgt 3 using namespace std 4 float
get_avg ( int, int ) 5 6 int main() 7 8
cout ltlt get_avg (9, 8) ltltendl 9
cout ltlt get_avg (7, 4) ltltendl 10
return 0 //successful termination 11
// end main 12 13 float get_avg (int
num1, int num2) 14 15 return
float(num1 num2)/2 16 // end of
function
53
  • Program using reference parameter

1 // using return statement. 2 include
ltiostreamgt 3 using namespace std 4 void
get_avg ( int, int, float ) 5 6 int
main() 7 8 int r 9 get_avg
(9, 8, r ) 10 cout ltlt r ltltendl 11
get_avg (7, 4, r ) 12 cout ltlt
r ltltendl 13 return 0 //successful
termination 14 // end main 15 16
void get_avg (int num1, int num2, float
res) 17 18 res float(num1
num2)/2 19 // end of function
54
  • Solution for exercises
  • Get the larger one of two numbers
  • Two factors
  • Two arguments
  • Two parameter variables

55
1 // using return statement. 2 include
ltiostreamgt 3 using namespace std 4 int
get_larger ( int, int ) 5 6 int main() 7
8 int x, y 9 cin gtgt x gtgt
y 10 cout ltlt get_larger (x, y) ltltendl
//function call 11 return 0 //successful
termination 12 // end main 13 14
int get_larger (int num1, int num2) 15 16
if (num1 gt num2) 17 return num1 18
else return num2 19 // end of function
56
1 // using return statement. 2 include
ltiostreamgt 3 using namespace std 4 int
get_larger ( int, int ) 5 6 int main() 7
8 int x, y 9 cin gtgt x gtgt
y 10 cout ltlt get_larger (x, y) ltltendl
11 return 0 //successful termination
12 // end main 13 14 int get_larger
(int num1, int num2) 15 16 return
(num1 gt num2)? num1 num2 17 // end of
function
57
1 // using reference parameter. 2 include
ltiostreamgt 3 using namespace std 4 void
get_larger ( int, int, int ) 5 6 int
main() 7 8 int x, y, larger 9
cin gtgt x gtgt y 10 get_larger (x, y,
larger ) 11 cout ltlt larger ltltendl
12 return 0 //successful termination
13 // end main 14 15 void get_avg
(int num1, int num2, int res) 16 17
res (num1 gt num2)? num1 num2 18 //
end of function
58
  • Random number generator
  • Usage
  • Format
  • Example

59
  • Random selection
  • rolling dice, and etc.
  • rand function (ltcstdlibgt)
  • i rand()
  • Generates unsigned integer between 0 and RAND_MAX
    (usually 32767)
  • Generates integer between a and b.
  • i rand() 6 1
  • Rand() 6 generates a number between 0 and 5
    (scaling)
  • x y is between 0 and y 1, i.e., 10 3 is 1
  • 1 makes the range 1 to 6 (shift)
  • Example Program to roll dice.

60
1 // Shifted, scaled integers produced by 1
rand() 6. 2 include ltiostreamgt 3
include ltiomanipgt 4 include ltcstdlibgt //
contains function prototype for rand 5 6
using namespace std 7 8 int main() 9
10 // loop 20 times 11 for ( int
counter 1 counter lt 20 counter ) 12
13 // pick random number from 1 to 6
and output it 14 cout ltlt setw( 10 ) ltlt (
1 rand() 6 ) 15 // if counter
divisible by 5, begin new line of output 16
if ( counter 5 0 ) 17 cout ltlt
endl 18 19 // end for structure 20
21 return 0 // indicates successful
termination 22 // end main
61
  • 6 6 5 5 6
  • 5 1 1 5
    3
  • 6 6 2 4
    2
  • 6 2 3 4
    1
  • Thinking
  • Is this fair?

62
1 // Roll a six-sided die 6000 times. 2
include ltiostreamgt 3 include ltiomanipgt 4
include ltcstdlibgt // contains function
prototype for rand 5 6 using namespace
std 7 8 int main() 9 10 int
frequency1 0 11 int frequency2 0 12
int frequency3 0 13 int frequency4
0 14 int frequency5 0 15 int
frequency6 0 16 int face // represents
one roll of the die 17
63
18 // loop 6000 times and summarize
results 19 for ( int roll 1 roll lt
6000 roll ) 20 face 1 rand()
6 // random number from 1 to 6 21 22
// determine face value and increment
appropriate counter 23 switch ( face )
24 case 1 // rolled 1 25
frequency1 26
break 27 case 2 // rolled
2 28 frequency2 29
break 30 case 3 // rolled
3 31 frequency3 32
break 33 case 4 //
rolled 4 34 frequency4 35
break 36 case 5 //
rolled 5 37 frequency5 38
break
64
39 case 6 // rolled 6 40
frequency6 41
break 42 default // invalid
value 43 cout ltlt
"Program should never get here!" 44 45
// end switch 46 47 // end for
48 49 // display results in tabular
format 50 cout ltlt "Face" ltlt setw( 13 ) ltlt
"Frequency" 51 ltlt "\n 1" ltlt setw( 13
) ltlt frequency1 52 ltlt "\n 2" ltlt
setw( 13 ) ltlt frequency2 53 ltlt "\n
3" ltlt setw( 13 ) ltlt frequency3 54 ltlt
"\n 4" ltlt setw( 13 ) ltlt frequency4 55
ltlt "\n 5" ltlt setw( 13 ) ltlt frequency5 56
ltlt "\n 6" ltlt setw( 13 ) ltlt frequency6 ltlt
endl 57 58 return 0 // indicates
successful termination 59 60 // end main
65
Face Frequency 1 1003 2
1017 3 983 4 994 5
1004 6 999
66
  • Calling rand() repeatedly
  • Gives the same sequence of numbers
  • To get different random sequences
  • Provide a seed value
  • Like a random starting point in the sequence
  • The same seed will give the same sequence
  • srand(seed)
  • ltcstdlibgt
  • Used before rand() to set the seed

67
1 // Randomizing die-rolling program. 2
include ltiostreamgt 3 include ltiomanipgt 4
include ltcstdlibgt 5 using namespace std 6
7 int main() 8 9 unsigned
seed 10 11 cout ltlt "Enter seed " 12
cin gtgt seed 13 srand( seed ) //
seed random number generator 14 // loop
10 times 15 for ( int counter 1 counter
lt 10 counter ) 16 // pick random
number from 1 to 6 and output it 17 cout
ltlt setw( 10 ) ltlt ( 1 rand() 6 ) 18
// if counter divisible by 5, begin new line of
output 19 if ( counter 5 0 ) 20
cout ltlt endl 21 // end for 22
return 0 // indicates successful
termination 23 // end main
68
  • Enter seed 67
  • 6 1 4 6
    2
  • 1 6 1 6
    4
  • Enter seed 432
  • 4 6 3 1
    6
  • 3 1 5 4
    2
  • Enter seed 67
  • 6 1 4 6
    2
  • 1 6 1 6
    4

69
  • Can use the current time to set the seed
  • Use current time as seed
  • srand( time( 0 ) )
  • time( 0 )
  • ltctimegt
  • Returns current time in seconds
  • Number shiftingValue rand() scalingFactor
  • shiftingValue first number in desired range
  • scalingFactor width of desired range

70
1 // Shifted, scaled integers produced by 1
rand() 6. 2 include ltiostreamgt 3
include ltiomanipgt 4 include ltcstdlibgt //
contains function prototype for rand 5
include ltctimegt // contains function prototype
for time 6 using namespace std 7 8
int main() 9 10 srand ( time( 0 )) 11
for ( int counter 1 counter lt 20
counter ) 12 13 // pick random
number from 1 to 6 and output it 14 cout
ltlt setw( 10 ) ltlt ( 1 rand() 6 ) 15
// if counter divisible by 5, begin new line of
output 16 if ( counter 5 0 ) 17
cout ltlt endl 18 19 // end
for structure 20 21 return 0 //
indicates successful termination 22 // end
main
71
  • 1 1 1 3 3
  • 1 4 5 6
    6
  • 5 2 3 6
    1
  • 1 5 6 3
    3
  • 1 5 2 1 4
  • 2 2 3 5
    2
  • 4 6 1 3
    5
  • 5 5 6 5
    2

72
  • Scope
  • Introduction
  • Local scope
  • Global scope
  • Name precedence
  • Static variable

73
  • Introduction (Lifetime)

5 int main() 6 7 float cf1.2 8
int i9, j2 9 showavg (i,
j,cf) 10 cout ltlti ltlt endl ltlt cf
ltltendl 11 return 0 //successful
termination 12 // end main 13 14
void showavg (int num1, int num2 , float
avg) 15 16 avg float(num1
num2)/2 17 num1 2 18 // end of
function
main
cf
j
i
1. 2
9 2
showavg
avg
num1
num2
5.5
cf
5.5
9 2
Lifetime
74
  • Introduction (scope)
  • Scope
  • Portion of program where identifier can be used.
  • Local scope
  • Global scope

75
  • Local scope
  • Local variables, function parameters
  • Scope begins at declaration, ends at right brace
  • Variable created when program enters its block
  • Variable invalid when program leaves block
  • Variable destroyed when program reaches the right
    brace of this block

76
1 // using arguments and parameters. 2
include ltiostreamgt 3 using namespace std 4
void showavg ( int, int, float ) 5 int
main() 6 7 float cf1.2 8
int j 9 for ( j 1 j lt 5 j ) 10
int i 9 11 showavg( i, j, cf
) // function call 12 cout ltlti ltlt
endl ltlt cf ltltendl 13 14 return 0
//successful termination 15 // end
main 16 17 void showavg (int num1, int
num2 , float avg) 18 19 avg
float(num1 num2)/2 20 // end of
function
i
num1
77
int i ii1
int i ii1
int i i i2
78
  • Global scope
  • Global variables (constants), function
    definitions and prototypes
  • Defined outside of any function in a file
  • Scope begins at declaration, ends at the end of
    this file
  • Variable created when program starts
  • Variable is valid from its declaration to the end
    of this file.
  • Variable destroyed when program ends

79
1 // using global variables. 2 include
ltiostreamgt 3 using namespace std 4 5
double c_area( int ) 6 const double
pi 3.14 7 8 int main() 9 10
cout ltlt When pi is " ltlt pi ltltendl 11 12
for ( int x 1 x lt 10 x ) 13
cout ltlt c_area( x ) ltlt " " 14 cout ltlt
endl 15 return 0 16 // end main 17
18 double c_area( int radius) 19

20 return radius radius pi

21 // end function square
1 // using global variables. 2 include
ltiostreamgt 3 using namespace std 4 5
const double pi 3.14 6 7 double
c_area( int radius) 8
9
return radius radius pi
10
// end function square 11 12 int
main() 13 14 cout ltlt When pi is " ltlt
pi ltltendl 15 16 for ( int x 1 x lt 10
x ) 17 cout ltlt c_area( x ) ltlt " "
18 cout ltlt endl 19 return 0 20
// end main 21
80
  • Thinking

- - End of
local End of file block
No Yes
81
  • Name precedence
  • When a function declares a local identifier with
    the same name as a global identifier, the local
    identifier takes precedence within the function.
  • The precedence that a local identifier in a
    function has over a global identifier with the
    same name in any references that the function
    makes to that identifier also called name
    hiding.

82
1 // using name precedence. 2 include
ltiostreamgt 3 using namespace std 4 5
double c_area( int ) 6 const double
pi 3.14 7 8 int main() 9 10
cout ltlt When pi is " ltlt pi ltltendl 11 13
cout ltlt c_area(10 ) ltlt " " 14 cout ltlt
endl 15 return 0 16 // end main 17
18 double c_area( int radius) 19

20 int pi 3 20 return
radius radius pi
21 // end
function square
pi
3.14
main
c_area
pi
3
83
When pi is 3.14 300
84
  • Static variable
  • Variables exist for entire program
  • Static local variables in function
  • Keeps value between function calls
  • Variable created once when program first entered
    the function
  • Only known in own function
  • Variable destroyed when program ends

85
1 // using local static. 2 include
ltiostreamgt 3 using namespace std 4
void useStaticLocal( ) 5 6 int main() 7
8 for ( int x 1 x lt 10 x ) 9
useLocal( ) 10 return 0 11
// end main 12 13 void useLocal ( ) 14
15 // initialized only first time
useStaticLocal is called 16 int y 50
17 18
cout ltlt "local x is " ltlt y ltlt endl 19
// end function useStaticLocal
main
useLocal
Y50
51
useLocal
Y50
51
useLocal
Y50
51

86
local x is 50 local x is 50 local x is 50 local x
is 50 local x is 50 local x is 50 local x is
50 local x is 50 local x is 50 local x is 50
87
1 // using local static. 2 include
ltiostreamgt 3 using namespace std 4
void useStaticLocal( ) 5 6 int main() 7
8 for ( int x 1 x lt 10 x ) 9
useStaticLocal( ) 10 return 0
11 // end main 12 13 void
useStaticLocal ( ) 14 15 //
initialized only first time useStaticLocal is
called 16 static int y 50
17 18 cout ltlt
"local static x is " ltlt y ltlt endl 19
// end function useStaticLocal
main
useStaticLocal
Y50
51
useStaticLocal
52
useStaticLocal
53

88
local static x is 50 local static x is 51 local
static x is 52 local static x is 53 local static
x is 54 local static x is 55 local static x is
56 local static x is 57 local static x is
58 local static x is 59
89
  • Inline function
  • Inline functions
  • Keyword inline before function
  • Asks the compiler to copy code into program
    instead of making function call
  • Reduce function-call overhead
  • Compiler can ignore inline
  • Good for small, often-used functions
  • Example
  • inline double cube( const double s )
  • return s s s
  • const tells compiler that function does not
    modify s

90
1 // Using an inline function to
calculate. 2 include ltiostreamgt 3
using namespace std 4 5 // Definition
of inline function cube. Definition of function 6
// appears before function is called, so a
function prototype 7 // is not required.
First line of function definition acts as 8
// the prototype. 9 inline double cube( const
double side ) 10
11 return side
side side // calculate cube 12 // end
function cube 13 14
int main() 15 16 double
sideValue 17 cout ltlt "Enter the side
length of your cube " 18 cin gtgt
sideValue 19 // calculate cube of
sideValue and display result 20 cout ltlt
"Volume of cube with side " 21 ltlt
sideValue ltlt " is " ltlt cube( sideValue ) ltlt
endl 22 return 0 // indicates successful
termination 23 // end main
91
  • Enter the side length of your cube 3.5
  • Volume of cube with side 3.5 is 42.875

92
  • Function overloading
  • Function overloading
  • Functions with same name and different parameters
  • More general, should perform similar tasks
  • I.e., function to square ints and function to
    square floats
  • int square( int x) return x x
  • float square(float x) return x x
  • Overloaded functions distinguished by signature
  • Based on name and parameter types (order matters)

93
1 // Using function overloading to
calculate. 2 include ltiostreamgt 3
using namespace std 4 5 inline double
square ( const double side ) 6
7 cout
ltlt double 8 return side side //
calculate double square 9 // end function
square 10 11
inline int square ( const int side ) 12
13
cout ltlt integer 14 return side
side // calculate int square 15 // end
function square 16
17 int main() 18 19 // calculate
squre of sideValue and display result 20
cout ltlt Square with side 2 is " ltlt square( 2 )
ltlt endl 21 cout ltlt Square with side 3.2
is " ltlt square( 3.2 ) ltlt endl 22 return 0
// indicates successful termination 23 //
end main
94
  • Square with side 2 is integer 4
  • Square with side 3.2 is double 10.24

95
1 // Fig. 3.4 fig03_04.cpp 2 //
Finding the maximum of three floating-point
numbers. 3 include ltiostreamgt 4 5
using stdcout 6 using stdcin 7
using stdendl 8 9 double maximum(
double, double, double ) // function
prototype 10 11 int main() 12 13
double number1 14 double number2 15
double number3 16 17 cout ltlt "Enter
three floating-point numbers " 18 cin gtgt
number1 gtgt number2 gtgt number3 19 20 //
number1, number2 and number3 are arguments to 21
// the maximum function call 22 cout
ltlt "Maximum is " 23 ltlt maximum(
number1, number2, number3 ) ltlt endl 24 25
return 0 // indicates successful termination
96
26 27 // end main 28 29 //
function maximum definition 30
// x, y and z are parameters
31 double maximum( double x, double y, double
z ) 32
33 double max x // assume x
is largest 34
35 if ( y gt max )
// if y is larger, 36 max y
// assign y to max 37
38 if
( z gt max ) // if z is larger, 39
max z // assign z to max
40
41 return max // max is
largest value
42 // end function maximum
  • Enter three floating-point numbers 99.32 37.3
    27.1928
  • Maximum is 99.32
  • Enter three floating-point numbers 1.1 3.333
    2.22
  • Maximum is 3.333
  • Enter three floating-point numbers 27.9 14.31
    88.99
  • Maximum is 88.99
Write a Comment
User Comments (0)
About PowerShow.com