Modular%20Programming%20With%20Functions - PowerPoint PPT Presentation

About This Presentation
Title:

Modular%20Programming%20With%20Functions

Description:

Exercise: void function. Write a program to generate the following output? for (i=1; i =5; i ) ... Exercise. What is the output of the following program ... – PowerPoint PPT presentation

Number of Views:165
Avg rating:3.0/5.0
Slides: 72
Provided by: csU66
Learn more at: http://www.cs.utsa.edu
Category:

less

Transcript and Presenter's Notes

Title: Modular%20Programming%20With%20Functions


1
Modular Programming With Functions
CS 2073 Computer Programming w/Eng. Applications
Ch 4

Turgay Korkmaz Office SB 4.01.13 Phone (210)
458-7346 Fax (210) 458-4437 e-mail
korkmaz_at_cs.utsa.edu web www.cs.utsa.edu/korkmaz
2
Name Addr Content



Lecture 16



Lecture
3
4.1 Modularity
  • How do you solve a big/complex problem?
  • Divide it into small tasks and solve each task.
    Then combine these solutions.

4
4.1 Modularity (contd)
  • In C we use functions also referred to as modules
    to perform specific tasks that we determined in
    our solution

Shows how the program separated into tasks and
which tasks reference other tasks. NOTE It does
NOT indicate the sequence of steps in the program!
5
Advantages of using modules
  • Modules can be written and tested separately
  • Modules can be reused
  • Large projects can be developed in parallel
  • Reduces length of program, making it more
    readable
  • Promotes the concept of abstraction
  • A module hides details of a task
  • We just need to know what this module does
  • We dont need to know how it does it

6
4.2 Programmer Defined Functions
  • Every C program starts with main()function
  • Additional functions are called or invoked when
    the program encounters function names
  • Functions could be
  • Pre-defined library functions (e.g., printf, sin,
    tan) or
  • Programmer-defined functions (e.g., my_printf,
    area)
  • Functions
  • Perform a specific task
  • May take arguments
  • May return a single value to the calling function
  • May change the value of the function arguments
    (call by reference)

7
Function definition
return_type function_name (parameters)
declarations statements
int my_add_func(int a, int b) int sum sum
a b return sum
8
Programmer-Defined Functions Terminology
  • Function Prototype describes how a function is
    called
  • int my_add_func(int a, int b)
  • Function Call
  • result my_add_func(5, X)
  • Function implementation
  • int my_add_func(int a, int b)
  • Function parameters
  • Formal parameters
  • Actual parameter
  • Formal parameters must match with actual
    parameters in order, number and data type.
  • If the type is not the same, type conversion will
    be applied (coercion of arguments). But this
    might cause some errors (double?int) so you need
    to be careful!

9
Example Pre-defined Functions
So far, we used several pre-defined
functions! include ltstdio.hgt include
ltmath.hgt int main(void) double angle
printf(Input angle in radians \n)
scanf(lf, angle) printf(The sine of the
angle is f\n, sin(angle) ) return
0
double sin(double radian) double sin(double
radian) / details of computing sin /
10
Example Programmer-defined Functions
  • include ltstdio.hgt
  • int main(void)
  • double x1,y1,x2,y2, dist
  • printf(Enter x1 y1 x2 y2 )
  • scanf(lf lf lf lf, x1,y1,x2,y2)
  • dist sqrt(pow((x2-x1),2)
  • pow((y2-y1),2))
  • printf(Distance is lf\n, dist)
  • return 0
  • include ltstdio.hgt
  • double distance(double x1,y1,x2,y2)
  • int main(void)
  • double x1,y1,x2,y2, dist
  • printf(Enter x1 y1 x2 y2 )
  • scanf(lf lf lf lf, x1,y1,x2,y2)
  • dist distance(x1,y1,x2,y2)
  • printf(Distance is lf\n, dist)
  • return 0
  • double distance(double x1,y1,x2,y2)
  • return sqrt(pow((x2-x1),2)
  • pow((y2-y1),2))

11
Exercise
(6,8)
(-3,5)
(4,-1)
  • Suppose you are given the coordinate points of a
    triangle as shown above, write a program that can
    find the length of each edge
  • User enters (x1, y1), (x2, y2), and (x3, y3)

12
Value Returning Functions
  • Function returns a single value to the calling
    program
  • Function definition declares the type of value to
    be returned
  • A return expression statement is required in the
    function definition
  • The value returned by a function can be assigned
    to a variable, printed, or used in an expression

13
Void Functions
  • A void function may be called to
  • perform a particular task (clear the screen)
  • modify data
  • perform input and output
  • A void function does not return a value to the
    calling program
  • A return statement can be used to exit from
    function without returning any value

14
Exercise void function
include ltstdio.hgt void print_i_star(int
i) main() int i for (i1 ilt5 i)
print_i_star( i ) void
print_i_star(int i) int j for (j1 jlti
j) printf() printf(\n)
return
  • Write a program to generate the following output?


for (i1 ilt5 i) for (j1 jlti j)
printf() printf(\n)
15
Example value returning function
n!n(n-1)1, 0! 1 by definition
int fact(int n) int factres 1
while(ngt1) factres factresn n--
return(factres)
16
Example use fact()
include ltstdio.hgt int fact(int n) / prototype
/ int main(void) int t 5,s s
fact(t) fact(t1) printf(result is d\n,
s) return 0
t 5
s ?
Function call
17
Example execution of factorial function (contd)
fact( 5 )
t 5
s ?

n 5
factres 1
int fact(int n) int factres 1
while(ngt1) factres factresn n--
return(factres)
18
Example execution of factorial function (contd)
t 5
s ?

n 5 4 3 2 1
factres 1 5 20 60 120
int fact(int n) int factres 1
while(ngt1) factres factresn n--
return(factres)
19
Example execution of factorial function (contd)
include ltstdio.hgt int fact(int n) / prototype
/ int main(void) int t 5,s s 120
fact(t1) printf(result is d\n, s)
return 0
t 5
s ?
Function call
20
Example execution of factorial function (contd)
fact( 6 )
t 5
s ?

n 6
factres 1
int fact(int n) int factres 1
while(ngt1) factres factresn n--
return(factres)
t1
21
Example execution of factorial function (contd)
t 5
s ?

n 6 5 4 3 2 1
factres 1 6 30 120 360 720
int fact(int n) int factres 1
while(ngt1) factres factresn n--
return(factres)
22
Example execution of factorial function (contd)
include ltstdio.hgt int fact(int n) / prototype
/ int main(void) int t 5,s s 120
720 printf(result is d\n, s) return
0
t 5
s 840
result is 840
23
Example reuse of factorial function
  • Write a statement to compute
  • Enter X, Z, K, D
  • y(fact(X)fact(Z)5)/(fact(K)-fact(D))

24
Example reuse of factorial function in another
function
  • Write a select function that takes n and k and
    computes n choose k where
  • int select(int n, int k)
  • return fact(n)/(fact(n-k)fact(k))

25
Name Addr Content



Lecture 17



Lecture
26
Function Examples
27
Exercise
  • Write a function to compute maximum and minimum
    of two numbers

int max(int a, int b) if (a gt b) return
a else return b
int min(int a, int b) if (a lt b) return
a else return b
28
Exercise
  • Are following calls to max function valid?
  • What will be the result?
  • int max(int a, int b)
  • int min(int a, int b)
  • int main()
  • int x 2, y 3, z 7, temp
  • temp max(x,y)
  • temp max(4,6)
  • temp max(4,432)
  • temp max(x,max(y,z))

29
Example for void function
  • void print_date(int mo, int day, int year)
  • /output formatted date /
  • printf(i/i/i\n, mo, day, year )
  • return

30
Exercise
  • Write a function that takes score as parameter
    and computes and returns letter grade based on
    the scale below.
  • 80-100 A
  • 60-79 B
  • 40-59 C
  • 0-39 D

31
Solution
  • char get_letter_grade(int score)
  • char grade
  • if ((score gt 80) (score lt100))
  • grade 'A'
  • else if ((score gt 60) (score lt 79))
  • grade 'B'
  • else if ((score gt 40) (score lt 59))
  • grade 'C'
  • else if ((score gt 0) (score lt 39))
  • grade 'D'
  • return grade

32
Exercise
  • Write a function to compute logba

double log_any_base(double a, double b)
return log(a)/log(b)
33
Exercise Trace functions
  • What is the output of the following program

include ltstdio.hgt int function1(int x) x
2 printf("Out1 d\n",x)
return(x1) int main() int x 4, y y
function1(x) printf("Out2 d\n",x)
printf("Out3 d\n",y) return 0
Output Out1 2 Out2 4 Out3 3
34
Exercise
  • What is the output of the following program

include ltstdio.hgt void function2()
printf("In function 2\n") void function1()
function2() printf("In function 1\n")
void function3() printf("In function 3\n")
function2() int main() function1()
function3() return 0
Output In function 2 In function 1 In function
3 In function 2
35
Parameter Passing
  • Call by value
  • formal parameter receives the value of the actual
    parameter
  • function can NOT change the value of the actual
    parameter (arrays are an exception)
  • Call by reference
  • actual parameters are pointers (ch 5 and 6)
  • function can change the value of the actual
    parameter

36
Scope of a function or variable
  • Scope refers to the portion of the program in
    which
  • It is valid to reference the function or variable
  • The function or variable is visible or accessible

include ltstdio.hgt int fact(int n) / prototype
/ int main(void) int t 5,s s fact(t)
fact(t1) printf(result is d\n, s)
return 0 int fact(int n) int factres
1 while(ngt1) factres factresn n--
return(factres)
t 5
s ?

n 5
factres 1
37
Scope of a function or variable
  • Same variable name can be used in different
    functions

include ltstdio.hgt int fact(int n) / prototype
/ int main(void) int t 5,s s fact(t)
fact(t1) printf(result is d\n, s)
return 0 int fact(int t) int s 1
while(tgt1) s st t-- return(s)
t 5
s ?

t 5
s 1
38
Scope
  • Local scope
  • a local variable is defined within a function or
    a block and can be accessed only within the
    function or block that defines it
  • Global scope
  • a global variable is defined outside the main
    function and can be accessed by any function
    within the program file.

39
Global vs Local Variable
  • include ltstdio.hgt
  • int z 2
  • void function1()
  • int a 4
  • printf("Z d\n",z)
  • z za
  • int main()
  • int a 3
  • z z a
  • function1()
  • printf("Z d\n",z)
  • z za
  • return 0

z2 5 9 12
a4
a3

Output Z 5 Z 9
40
Storage Class - 4 types
  • Storage class refers to the lifetime of a
    variable
  • automatic - key word auto - default for local
    variables
  • Memory set aside for local variables is not
    reserved when the block in which the local
    variable was defined is exited.
  • external - key word extern - used for global
    variables
  • Memory is reserved for a global variable
    throughout the execution life of the program.
  • static - key word static
  • Requests that memory for a local variable be
    reserved throughout the execution life of the
    program. The static storage class does not
    affect the scope of the variable.
  • register - key word register
  • Requests that a variable should be placed in a
    high speed memory register.

41
Skip
  • Study section 4.3 from the textbook

42
Name Addr Content



Lecture 18



Lecture
43
4.4 Random Numbers
  • What is a random number?
  • Tossing a coin (0, 1) Rolling a die (1, 2,6)
  • Min, Max, Avg, possible outcomes are equally
    likely or not,
  • Engineering problems require use of random
    numbers
  • How can you compute the area of an irregular
    shape?

44
Uniform Random numbers
  • All outcomes are equally likely
  • For example fair die, where each outcome has the
    same probability of 1/6,
  • So we can generate uniform random numbers between
    1 and 6 by rolling a die.
  • What if we need random numbers in another range?
    For example, 1 and 100?

45
Uniform Random numbers (contd)
  • In Standard C library, we have a function rand()
    to generate random numbers between 0 and RAND_MAX
  • RAND_MAX is a system dependent constant (e.g.,
    32,767) defined in stdlib.h
  • What will be the output of the following
  • printf(d d d\n,rand(), rand(), rand())
  • What will be the output, if we re-run the same
    program?

46
Pseudo-random Numbers
  • Computers generate random numbers using a seed
    number and an algorithm.
  • So, if you give the same seed, you will always
    get the same sequence of pseudo-random numbers
  • In Standard C library, we have a function
    srand(int seed) to give a new seed number

47
Example generate 10 RNs
include ltstdio.hgt include ltstdlib.hgt int
main(void) / Declare variables. /
unsigned int seed int k / Get seed
value from the user. / printf("Enter a
positive integer seed value \n")
scanf("u",seed) srand(seed) /
Generate and print ten random numbers. /
printf("Random Numbers \n") for (k1 klt10
k) printf("i ",rand())
printf("\n") / Exit program. /
return 0
48
RNs in a specified range a b
  • Generate a RN between 0 and 7
  • x rand() 8
  • Generate a RN between 10 and 17
  • x 10 rand() 8

int rand_int(int a,int b) return
rand()(b-a1) a
49
Floating-Point RNs in a specified range a b
  • x rand() / RAND_MAX will give a random number
    between 0.0 and 1.0
  • x rand() / RAND_MAX (b-a) will give a RN
    between 0.0 and b-a
  • The value is then shifted into range a b by
    adding a

double rand_float(double a,double b) return
((double)rand()/RAND_MAX)(b-a)a
50
Example HiLo Game
/ Write a program that allows a user to play
HiLo game. User wins if
he/she can guess the number between 1-100 within
at most 6 iterations / include
ltstdio.hgt include ltstdlib.hgt int rand_int(int
a,int b) / prototype / void playHiLo( int
s) int main(void) unsigned int seed /
Declare variables / int secret
printf("Enter a positive integer seed value
\n") scanf("u",seed) srand(seed)
while(1) secret rand_int(1,100)
playHiLo(secret) return 0
51
int rand_int(int a,int b) return
rand()(b-a1) a void playHiLo(int s)
int i, guess for(i1 i lt6 i)
printf("Enter your guess ") scanf("d",
guess) if (guess gt s) printf("It is
Higher than secret\n") else if (guess lt s)
printf("It is Lower than secret\n")
else printf("Cong! you won\n")
return printf("Sorry! Try
again\n") return
52
Exercise Another guess the number game
  • Computer selects a random number s between 1000
    9999
  • User tries to guess it by entering g
  • Computer tells how many digits are in place, out
    of place, not in secret number
  • For example, if s is 6234
  • User enters g as 7436, then computer says
  • 1 digit is in place
  • 2 digits are out of place
  • 1 digit is not in secret number
  • User keeps trying until he finds the secret number

53
Random Number Summary
  • include ltstdlib.hgt
  • srand(seed)
  • rn rand() / 0 RAND_MAX (e.g., 32,767) /
  • int rand_int(int a,int b)
  • return rand()(b-a1) a
  • double rand_float(double a,double b)
  • return ((double)rand()/RAND_MAX)(b-a)a

54
4.5 Use of Floating-Point RNs Instrumentation
Reliability
  • Reliability the portion of the time that the
    component works properly. For example, 0.8 means
    80 of the time the component is OK
  • Given the reliability of each component, can you
    determine the reliability of the whole system?
  • Analytical vs. Simulation

55
Analytical vs. Simulation
  • Suppose the reliability for each component in
    previous slide is the same and given by r
  • We can then analytically compute the overall
    reliability for the systems in (a) and (b) as r3
    and 3r-3r2r3, respectively. (how)
  • OR, we can simulate the system using RNs
  • Simulate each component by generating random
    numbers between 0 and 1.
  • If this number is less than r, then we consider
    the given component works properly.
  • If all three in (a) or at least one in (b) works
    properly, then we consider the whole system works
    properly.
  • We repeat the above experiment (say) 1000 times
    and find that 600 times the whole system worked
    properly. Then overall reliability is
    600/10000.6.
  • Can you write a simulation program for any
    configuration where reliability of each component
    could be different

56
/ Determine simulation reliability
estimates. / for (k1 kltn k)
num1 rand_float(0,1) num2
rand_float(0,1) num3 rand_float(0,1)
if (((num1ltcomponent_reliability)
(num2ltcomponent_reliability))
(num3 ltcomponent_reliability))
series_success if (((num1ltcomponent_rel
iability) (num2ltcomponent_reliabilit
y)) (num3 ltcomponent_reliability))
parallel_success
printf("Analytical Reliability \n")
printf("Series .3f Parallel .3f \n",
a_series,a_parallel) printf("Simulation
Reliability \n") printf(" Number of trials
i \n",n) printf("Series .3f Parallel .3f
\n", (double)series_success/n,
(double)parallel_success/n) return
0 double rand_float(double a,double b)
return ((double)rand()/RAND_MAX)(b-a) a
include ltstdio.hgt include ltstdlib.hgt include
ltmath.hgt double rand_float(double a,double
b) int main(void) unsigned int seed
int n, k double component_reliability,
a_series, a_parallel,
series_success0, parallel_success0,
num1, num2, num3 / Get information for the
simulation. / printf("Enter individual \
component reliability ") scanf("lf",
component_reliability) printf("Enter number
of trials \n") scanf("i", n)
printf("Enter unsigned integer seed \n")
scanf("u", seed) srand(seed)
printf("\n") / Compute Analytical
reliabilities. / a_series
pow(component_reliability,3) a_parallel
3component_reliability -
3pow(component_reliability,2)
pow(component_reliability,3)
57
Exercise
  • What will be the if condition in the simulation
    code of the following system

if ( ( (num1ltr1 num2ltr2)
(num4ltr4 (num3ltr3num5ltr5)) )
(num6ltr6) ) success
58
SKIP REST
  • Study 4.6 and 4.7 from the textbook

59
4.8 Macros
  • define macro_name(parameters) macro_text
  • macro_text replaces macro_name in the program
  • Examples
  • define area_tri(base,height) (0.5(base)(height)
    )
  • define PI 3.14
  • zx tri(3, 5) y ? zx (0.5(3)(5)) y
  • k2PIr ? k23.14r

60
4.9 Recursive Functions
  • A function that invokes itself is a recursive
    function.
  • int fact(int k)
  • if (k 0)
  • return 1
  • else
  • return kfact(k-1)

k!k(k-1)!
61
include ltstdio.hgt int fact(int k) if (k
0) return 1 else return
kfact(k-1) int main() int n int nf
printf("Enter n\n") scanf("d",n) nf
fact(n) printf("Factorial d\n", nf)
system("pause") return(0)
62
Fibonacci Numbers
  • Sequence f0,f1,f2,. First two values (f0,f1)
    are 1, each succeeding number is the sum of
    previous two numbers.
  • 1 1 2 3 5 8 13 21 34
  • F(0)1, F(1) 1
  • F(i) F(i-1)F(i-2)

63
Fibonacci Numbers
  • int fibonacci(int k)
  • int term
  • term 1
  • if (kgt1)
  • term fibonacci(k-1)fibonacci(k-2)
  • return term

64
include ltstdio.hgt int fibonacci(int k) int
term 1 if (kgt1) term
fibonacci(k-1)fibonacci(k-2)
return(term) int main() int n int
nfib printf("Enter n\n") scanf("d",n)
nfib fibonacci(n) printf("Fibonacci
d\n",nfib) system("pause") return(0)
/ Iterative Version of Fibonacci Function
/ int fibonacci(int k) int a,b,c,i if
(klt1) return 1 else a 1
b 1 i 2 while (iltk) c
a b a b b c i i 1
return(c)
65
Extra examples
66
Exercise
  • Given radius and height of a cylinder. Write a
    function to compute the surface area.
  • A 2pir(rh)
  • define PI 3.14
  • double area(double radius, double height)
  • return 2PIradius(radiusheight)

67
Exercise
  • Given radius and height of a cylinder. Write a
    function to compute the volume.
  • V pir2h
  • define PI 3.14
  • double volume(double radius, double height)
  • return(PIradiusradiusheight)

68
Exercise
  • Write a function to compute the median of 3
    numbers x, y and z.
  • Possible order of numbers
  • xltyltz -gt median y
  • xltzlty -gt median z
  • yltxltz -gt median x
  • yltzltx -gt median z
  • zltxlty -gt median x
  • zltyltx -gt median y

69
Solution
  • int median(int x, int y, int z)
  • if (((xlty) (yltz)) ((zlty) (yltx)))
  • return y
  • else if (((yltx) (xltz)) ((zltx) (xlty)))
  • return x
  • else
  • return z

70
Exercise
  • Assume you have maximum and minimum functions
    implemented. Use these to find median of 3
    numbers
  • a lt b lt c -gt median is b
  • Consider 3 pairs (a,b),(b,c),(a,c)
  • min(a,b) a
  • min(b,c) b Max(a,b,a) b
  • min(a,c) a

71
Solution
int median(int x, int y, int z) return(max(min(
x,y),min(x,z),min(y,z)))
Write a Comment
User Comments (0)
About PowerShow.com