Chap 4
Chap 4
Turgay Korkmaz
Office: SB 4.01.13
Phone: (210) 458-7346
Fax: (210) 458-4437
e-mail: [email protected]
web: www.cs.utsa.edu/~korkmaz
1
Name Addr Content
Lecture++;
Lecture 16
2
4.1 Modularity
How do you solve a big/complex problem?
Divide it into small tasks and solve each
task. Then combine these solutions.
functions also
referred to as
modules to
perform specific
tasks that we Shows how the program
separated into tasks and which
determined in our tasks reference other tasks.
solution NOTE: It does NOT indicate the
sequence of steps in the
program! 4
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 don’t need to know how it does it
5
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)
6
Function definition
10
Exercise
(6,8)
(-3,5)
(4,-1)
12
Void Functions
A void function may be called to
perform a particular task (clear the screen)
modify data
13
Exercise: void function
#include <stdio.h>
Write a program to void print_i_star(int i);
Function name
Return Type
int fact(int n)
Parameter Declarations
{
Declarations int factres = 1;
while(n>1)
{
Statements
factres = factres*n;
n--;
}
return(factres); 15
}
Example – use fact()
#include <stdio.h>
int fact(int n); /* prototype */
int main(void)
{ t=5
int t= 5,s;
s=?
s = fact(t) + fact(t+1);
Function call
while(n>1)
{
factres = factres*n; n=5
n--;
} factres = 1
return(factres);
} 17
Example – execution of factorial
function (cont’d)
t=5
int fact(int n)
{ s=?
int factres = 1;
while(n>1)
{
factres = factres*n; n=5 4 3 2 1
n--;
} factres = 1 5 20
return(factres); 60 120
} 18
Example – execution of factorial
function (cont’d)
#include <stdio.h>
int fact(int n); /* prototype */
int main(void)
{ t=5
int t= 5,s;
s=?
s = 120 + fact(t+1);
Function call
printf(“result is %d\n”, s);
return 0;
}
19
Example – execution of factorial
function (cont’d)
fact( 6 )
t=5
int fact(int n)
{ s=?
int factres = 1;
t+1
while(n>1)
{
factres = factres*n; n=6
n--;
} factres = 1
return(factres);
} 20
Example – execution of factorial
function (cont’d)
t=5
int fact(int n)
{ s=?
int factres = 1;
while(n>1)
{
factres = factres*n; n=6 5 4 3 2 1
n--;
} factres = 1 6 30
return(factres); 120 360 720
} 21
Example – execution of
factorial function (cont’d)
#include <stdio.h>
int fact(int n); /* prototype */
int main(void)
{ t=5
int t= 5,s;
s = 840
s = 120 + 720;
Lecture++;
Lecture 17
25
Function Examples
26
Exercise
Write a function to compute maximum and
minimum of two numbers
int max(int a, int b)
{ int min(int a, int b)
if (a > b) {
return a; if (a < b)
else return a;
return b; else
} return b;
} 27
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,4+3*2);
temp = max(x,max(y,z));
}
28
Example for void function
29
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
30
Solution
char get_letter_grade(int score)
{
char grade;
if ((score >= 80) && (score <=100))
grade = 'A';
else if ((score >= 60) && (score <= 79))
grade = 'B';
else if ((score >= 40) && (score <= 59))
grade = 'C';
else if ((score >= 0) && (score <= 39))
grade = 'D';
return grade;
} 31
Exercise
Write a function to compute logba
log10 a
log b a
log10 b
34
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
35
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 <stdio.h>
int fact(int n); /* prototype */
int main(void)
{
int t= 5,s;
t=5
s = fact(t) + fact(t+1);
printf(“result is %d\n”, s);
return 0;
s=?
}
int fact(int n)
{
int factres = 1; n=5
while(n>1) {
factres = factres*n; factres = 1
n--;
}
return(factres);
} 36
Scope of a function or variable
Same variable name can be used in
different functions
#include <stdio.h>
int fact(int n); /* prototype */
int main(void)
{
int t= 5,s;
t=5
s = fact(t) + fact(t+1);
printf(“result is %d\n”, s);
return 0;
s=?
}
int fact(int t)
{
int s = 1; t=5
while(t>1) {
s = s*t; s=1
t--;
}
return(s);
} 37
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.
38
Global vs Local Variable
#include <stdio.h>
int z = 2;
void function1() z=2 5 9 12
{ int a = 4;
printf("Z = %d\n",z);
z = z+a; a=4
}
int main()
{ int a = 3; a=3
z = z + a;
function1();
printf("Z = %d\n",z); Output
z = z+a;
return 0; Z=5
} Z=9
39
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.
40
Skip
Study section 4.3 from the textbook
41
Name Addr Content
Lecture++;
Lecture 18
42
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?
43
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?
44
Uniform Random numbers
(cont’d)
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?
45
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
46
Example: generate 10 RNs
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
/* Declare variables. */
unsigned int seed;
int k;
/* Exit program. */
return 0;
} 47
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-a+1) + a;
}
48
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;
} 49
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 <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned int seed; /* Declare variables */
int secret;
while(1){
secret = rand_int(1,100);
playHiLo(secret);
}
return 0;
50
}
int rand_int(int a,int b)
{
return rand()%(b-a+1) + a;
}
void playHiLo(int s)
{
int i, guess;
52
Random Number Summary
#include <stdlib.h>
srand(seed);
rn = rand(); /* [0 RAND_MAX] (e.g., 32,767) */
int rand_int(int a,int b)
{
return rand()%(b-a+1) + a;
}
double rand_float(double a,double b)
{
return ((double)rand()/RAND_MAX)*(b-a)+a;
}
53
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
54
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-3r2+r3,
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/1000=0.6.
Can you write a simulation program for any configuration where reliability of each
component could be different
55
#include <stdio.h> /* Determine simulation reliability
#include <stdlib.h> estimates. */
#include <math.h> for (k=1; k<=n; k++) {
Comp6, r6
Comp3, r3
Comp4, r4
Comp5, r5
58
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
59
4.9 Recursive Functions*
A function that invokes itself is a recursive function.
int fact(int k)
{ k!=k*(k-1)!
if (k == 0)
return 1;
else
return k*fact(k-1);
}
60
#include <stdio.h>
int fact(int k)
{
if (k == 0)
return 1;
else
return k*fact(k-1);
}
int main()
{
int n;
int nf;
printf("Enter n\n");
scanf("%d",&n);
nf = fact(n);
system("pause");
return(0);
} 61
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)
62
Fibonacci Numbers
int fibonacci(int k)
{
int term;
term = 1;
if (k>1)
term = fibonacci(k-1)+fibonacci(k-2);
return term;
}
63
#include <stdio.h>
/* Iterative Version of
int fibonacci(int k)
Fibonacci Function */
{
int term = 1;
int fibonacci(int k)
{
if (k>1)
int a,b,c,i;
term = fibonacci(k-1)+fibonacci(k-2);
if (k<=1)
return(term);
return 1;
}
else
{
int main()
a = 1;
{
b = 1;
int n;
i = 2;
int nfib;
while (i<=k)
{
printf("Enter n\n");
c = a + b;
scanf("%d",&n);
a = b;
b = c;
nfib = fibonacci(n);
i = i + 1;
}
printf("Fibonacci = %d\n",nfib);
return(c);
}
system("pause");
}
return(0);
} 64
Extra examples
65
Exercise
Given radius and height of a cylinder. Write a
function to compute the surface area.
A = 2*pi*r*(r*h)
#define PI 3.14
66
Exercise
Given radius and height of a cylinder. Write a
function to compute the volume.
V = pi*r2*h
#define PI 3.14
67
Exercise
Write a function to compute the median of 3
numbers x, y and z.
Possible order of numbers
x<y<z -> median y
68
Solution
int median(int x, int y, int z)
{
if (((x<y) && (y<z)) || ((z<y) && (y<x)))
return y;
else if (((y<x) && (x<z)) || ((z<x) && (x<y)))
return x;
else
return z;
}
69
Exercise
Assume you have maximum and minimum
functions implemented. Use these to find
median of 3 numbers
a < b < c -> 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
70
Solution
71