1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax:...

71
1 Modular Programming With Functions 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 CS 2073 Computer Programming w/Eng. Applications Ch 4

Transcript of 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax:...

Page 1: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

1

Modular Programming With Functions

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

CS 2073Computer Programming

w/Eng. Applications Ch 4

Page 2: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

2

Lecture++;

Name Addr Content

Lecture 16

Page 3: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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.

Divide and Conquer

Page 4: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

4

Structure Chart

4.1 Modularity (cont’d)

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!

Page 5: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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 don’t need to know how it does it

Page 6: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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)

Page 7: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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;

}

Page 8: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

8

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){

…}

Programmer-Defined Functions Terminology

Function parametersFormal parametersActual parameterFormal 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 (doubleint) so you need to be careful!

Page 9: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

9

Example: Pre-defined Functions

So far, we used several pre-defined functions!#include <stdio.h>#include <math.h>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 */}

Page 10: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

10

Example: Programmer-defined Functions

#include <stdio.h>

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 <stdio.h>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));}

Page 11: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

Exercise

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)

11

(-3,5)

(4,-1)

(6,8)

Page 12: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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

Page 13: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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

Page 14: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

14

Exercise: void function Write a program to

generate the following output?

***************

for (i=1; i<=5; i++) { for (j=1; j<=i; j++) printf(“*”); printf(“\n”);}

#include <stdio.h>void print_i_star(int i);main(){ int i; for (i=1; i<=5; i++) { print_i_star( i ); }} void print_i_star(int i){ int j; for (j=1; j<=i; j++) printf(“*”); printf(“\n”); return;}

Page 15: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

15

Example: value returning function

int fact(int n){ int factres = 1; while(n>1) {

factres = factres*n;n--;

} return(factres);}

n!=n*(n-1)*…*1, 0! = 1 by definition

Return TypeFunction name

Parameter Declarations

Declarations

Statements

Page 16: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

16

Example – use fact()

#include <stdio.h>int fact(int n); /* prototype */

int main(void){ int t= 5,s; s = fact(t) + fact(t+1);

printf(“result is %d\n”, s); return 0;}

t = 5

s = ?

Function call

Page 17: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

17

Example – execution of factorial function (cont’d)

int fact(int n){ int factres = 1; while(n>1) {

factres = factres*n;n--;

} return(factres);}

t = 5

s = ?

n = 5

factres = 1

fact( 5 )

Page 18: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

18

Example – execution of factorial function (cont’d)

int fact(int n){ int factres = 1; while(n>1) {

factres = factres*n;n--;

} return(factres);}

t = 5

s = ?

n = 5 4 3 2 1

factres = 1 5 20 60 120

Page 19: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

19

Example – execution of factorial function (cont’d)

#include <stdio.h>int fact(int n); /* prototype */

int main(void){ int t= 5,s; s = 120 + fact(t+1);

printf(“result is %d\n”, s); return 0;}

t = 5

s = ?

Function call

Page 20: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

20

Example – execution of factorial function (cont’d)

int fact(int n){ int factres = 1; while(n>1) {

factres = factres*n;n--;

} return(factres);}

t = 5

s = ?

n = 6

factres = 1

t+1

fact( 6 )

Page 21: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

21

Example – execution of factorial function (cont’d)

int fact(int n){ int factres = 1; while(n>1) {

factres = factres*n;n--;

} return(factres);}

t = 5

s = ?

n = 6 5 4 3 2 1

factres = 1 6 30 120 360 720

Page 22: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

22

Example – execution of factorial function (cont’d)

#include <stdio.h>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

Page 23: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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));

!!

5!*!

DK

ZXy

Page 24: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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));

}

!)!(

!

kkn

n

k

n

Page 25: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

25

Lecture++;

Name Addr Content

Lecture 17

Page 26: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

26

Function Examples

Page 27: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

27

Exercise Write a function to compute maximum

and minimum of two numbers

int max(int a, int b){ if (a > b) return a; else return b;}

int min(int a, int b){ if (a < b) return a; else return b;}

Page 28: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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,4+3*2);temp = max(x,max(y,z));

}

Page 29: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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;

}

Page 30: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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 B40-59 C0-39 D

Page 31: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

31

Solutionchar 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;}

Page 32: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

32

Exercise

Write a function to compute logba

double log_any_base(double a, double b){ return log(a)/log(b);}

b

aab

10

10

log

loglog

Page 33: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

33

Exercise: Trace functions What is the output of the following program

Output

Out1 = 2Out2 = 4Out3 = 3

#include <stdio.h>int function1(int x){ x = 2; printf("Out1 = %d\n",x); return(x+1);}int main(){ int x = 4, y; y = function1(x); printf("Out2 = %d\n",x); printf("Out3 = %d\n",y); return 0;}

Page 34: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

34

Exercise What is the output of the following program

#include <stdio.h>

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 2In function 1In function 3In function 2

Page 35: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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

Page 36: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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 <stdio.h>int fact(int n); /* prototype */int main(void){ int t= 5,s; s = fact(t) + fact(t+1); printf(“result is %d\n”, s); return 0;}

int fact(int n){ int factres = 1; while(n>1) {

factres = factres*n;n--;

} return(factres);}

t = 5

s = ?

n = 5

factres = 1

Page 37: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

37

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; s = fact(t) + fact(t+1); printf(“result is %d\n”, s); return 0;}

int fact(int t){ int s = 1; while(t>1) {

s = s*t;t--;

} return(s);}

t = 5

s = ?

t = 5

s = 1

Page 38: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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.

Page 39: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

39

Global vs Local Variable#include <stdio.h>int z = 2;void function1(){ int a = 4; printf("Z = %d\n",z); z = z+a;}

int main(){ int a = 3; z = z + a; function1(); printf("Z = %d\n",z); z = z+a; return 0;}

Output

Z = 5Z = 9

z=2 5 9 12

a=4

a=3

Page 40: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

40

Storage Class - 4 typesStorage 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.

Page 41: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

41

Skip

Study section 4.3 from the textbook

Page 42: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

42

Lecture++;

Name Addr Content

Lecture 18

Page 43: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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?

Page 44: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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?

Page 45: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

45

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 followingprintf(“%d %d %d\n”,rand(), rand(), rand());

What will be the output, if we re-run the same program?

Page 46: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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

Page 47: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

47

Example: generate 10 RNs#include <stdio.h>#include <stdlib.h>

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 (k=1; k<=10; k++) printf("%i ",rand()); printf("\n"); /* Exit program. */ return 0;}

Page 48: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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-a+1) + a;}

Page 49: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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 adouble rand_float(double a,double b)

{ return ((double)rand()/RAND_MAX)*(b-a)+a;}

Page 50: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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 <stdio.h>#include <stdlib.h>

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;}

Page 51: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

51

int rand_int(int a,int b){ return rand()%(b-a+1) + a;}

void playHiLo(int s){ int i, guess;

for(i=1; i <=6; i++){ printf("Enter your guess : "); scanf("%d", &guess); if (guess > s) printf("It is Higher than secret\n"); else if (guess < s) printf("It is Lower than secret\n"); else { printf("Cong! you won\n"); return; } } printf("Sorry! Try again\n"); return;}

Page 52: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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

Page 53: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

53

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;}

Page 54: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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

Page 55: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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-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

Page 56: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

56

#include <stdio.h>#include <stdlib.h>#include <math.h>

double rand_float(double a,double b);

int main(void){ unsigned int seed; int n, k; double component_reliability, a_series, a_parallel, series_success=0, parallel_success=0, 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 = 3*component_reliability - 3*pow(component_reliability,2) + pow(component_reliability,3);

/* Determine simulation reliability estimates. */ for (k=1; k<=n; k++) {

num1 = rand_float(0,1); num2 = rand_float(0,1); num3 = rand_float(0,1);

if (((num1<=component_reliability) && (num2<=component_reliability)) && (num3 <=component_reliability)) series_success++;

if (((num1<=component_reliability) || (num2<=component_reliability)) || (num3 <=component_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;}

Page 57: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

57

Exercise What will be the “if condition” in

the simulation code of the following systemComp1, r1

Comp3, r3

Comp5, r5

Comp4, r4

Comp2, r2

Comp6, r6

if ( ( (num1<=r1 && num2<=r2) || (num4<=r4 && (num3<=r3||num5<=r5)) ) && (num6<=r6) ) success++;

Page 58: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

58

SKIP REST

Study 4.6 and 4.7 from the textbook

Page 59: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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

z=x * tri(3, 5) + y; z=x * (0.5*(3)*(5)) + y; k=2*PI*r; k=2*3.14*r;

Page 60: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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 k*fact(k-1);}

k!=k*(k-1)!

Page 61: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

61

#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); printf("Factorial = %d\n", nf);

system("pause"); return(0);}

Page 62: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

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)

Page 63: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

63

Fibonacci Numbers

int fibonacci(int k){ int term; term = 1; if (k>1) term = fibonacci(k-1)+fibonacci(k-2); return term;}

Page 64: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

64

#include <stdio.h>

int fibonacci(int k){ int term = 1;

if (k>1) 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 (k<=1) return 1; else { a = 1; b = 1; i = 2; while (i<=k)

{ c = a + b; a = b; b = c; i = i + 1;}

return(c); }}

Page 65: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

65

Extra examples

Page 66: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

66

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

double area(double radius, double height)

{return 2*PI*radius*(radius+height);

}

Page 67: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

67

Exercise Given radius and height of a cylinder. Write a

function to compute the volume. V = pi*r2*h

#define PI 3.14

double volume(double radius, double height)

{return(PI*radius*radius*height);

}

Page 68: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

68

Exercise Write a function to compute the median

of 3 numbers x, y and z. Possible order of numbers

x<y<z -> median y x<z<y -> median z y<x<z -> median x y<z<x -> median z z<x<y -> median x z<y<x -> median y

Page 69: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

69

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;

}

Page 70: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

70

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

Page 71: 1 Modular Programming With Functions Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: korkmaz.

71

Solution

int median(int x, int y, int z){

return(max(min(x,y),min(x,z),min(y,z)));}