1 control structures and data files turgay korkmaz office: sb 4.01.13 phone: (210) 458-7346 fax:...

Post on 27-Dec-2015

227 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Control Structures and Data Files

Turgay Korkmaz

Office: SB 4.01.13 Phone: (210) 458-7346

Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu

web: www.cs.utsa.edu/~korkmaz

CS 2073Computer Programming

w/Eng. Applications Ch 3

2

Lecture++;

Name Addr Content

Lecture 7

3

3.1 Algorithm Development So far, we considered very simple

programs (read, compute, print) Top-down Design

Start from the big picture Use a process called divide-and-conquer Keep dividing the problem until steps are

detailed enough to convert to a program Refinement with Pseudo-code (English like

statements) and Flowchart (diagram, graph)

4

Pseudo-code Notation and Flowchart Symbols

5

Structured Programming

Sequence

Selection

Repetition

yesno

yes

no

Use simple control structures to organize the solution to a problem

6

Sequence

7

Selection

8

Repetition

9

Extras Evaluation of alternative solution

A problem can be solved in many different ways

Which is the best (e.g, faster, less memory req) Error condition

Do not trust user! Check the data. A=b/c; Be clear about specifications

Generation of Test Data Test each of the error conditions Program validation and verification Program walkthrough

10

3.2 Conditional Expressions Selection and repetition structures use

conditions, so we will first discuss them A condition is an expression (e.g., x= a

> b) that can be evaluated to be TRUE (any value > 0) or FALSE (value of 0)

Conditional Expression is composed of expressions combined with relational and/or logical operators

11

Relational Operators

== equality (x == 3) != non equality (y != 0) < less than (x < y) > greater than (y > 10) <= less than equal to (x <= 0) >= greater than equal to (x >= y)

!!! a==b vs. a=b !!!

12

Examples

A < B fabs(denum) < 0.0001 D = b > c; if (D)

A=b+c; Mixing with arithmetic op

X+Y >= K/3

4

2

-0.01

?

6

4

2

1

10

A

B

denum

D

b

c

X

Y

K

13

Logical Operators ! not !(x==0) && and (x>=0) && (x<=10) || or (x>0) || (x<0)

A B A && B A || B !A !BFalse False False False True True

False True False True True False

True False False True False True

True True True True False False

14

Examples A<B && C>=5 A+B * 2 < 5 && 4>=A/2 A<B || C<B && A-2 < 10 A < B < C ???? A<B<C is not the same as

(A<B) && (B<C)

4

2

6

A

B

C

15

Precedence for Arithmetic, Relational, and Logical Operators

16

Exercise Assume that following variables are

declareda = 5.5 b = 1.5 k = -3

Are the following true or falsea < 10.0 + ka + b >= 6.5k != a-b!(a == 3*b)a<10 && a>5fabs(k)>3 || k<b-a

17

Exercise: Logical Circuit

y1 = x1 && x2;y2 = x3 || x4;y3 = !x5;z1 = y1 || y2; z2 = y2 && y3Without using y1, y2, y3

z1 = x1 && x2 || (x3 || x4);z2 = (x3 || x4) && !x5;

ANDx1

x2

x3

x4

x5

y1

z2

z1

y3

y2

Write a program that reads x1, x2, x3, x4, x5 and computes/prints z1, z2

OR

NOT

OR

AND

Exercise

18

a

bC

x

19

Lecture++;

Name Addr Content

Lecture 8

20

3.3 Selection Statements

if if else switch

21

if statement if(Boolean expression)

statement; /* single statement */

if(Boolean expression) { /* more than one statement */

statement1;…

statement n; }

22

if statement - examplesif (x > 0)

k++;

if(x > 0) {y = sqrt(x);k++;

}

if(x > 0) /* a common mistake */ y = sqrt(x);

k++;

Name Addr Content

x 9

y 5

k 4

23

if else statement

if(Boolean expression)statement;

elsestatement;

if(Boolean expression) {statement block

} else {statement block

}

24

if else statement What does the following program do? Assume that x, y, temp are declared.

if (x > y)

temp = x;

else

temp = y;

Name Addr Content

x 9

y 5

temp ?

if (x > y){ temp = x;

} else { temp = y;

}

25

Exercise Write an if-else statement to find both the

maximum and minimum of two numbers. Assume that x, y, min, max are declared.

if (x > y) { max = x; min = y;} else { max = y; min = x;}

Name Addr Content

x 9

y 5

max ?

min ?

9595

3895

3883

6683

6666

26

if else statement

if (x > y)

temp = x;

else

temp = y;

Split the following statement into two separate if statements

if (x > y)

temp = x;

if (x <= y)

temp = y;

Flow chart for previous slide

27

x > y

temp=xtemp=y

T

if (x > y)

temp = x;

else

temp = y;

if (x > y)

temp = x;

if (x <= y)

temp = y;

x > y

temp=x

temp=y

T

x <= yT

28

nested if-else

if(x > y)if(y < z)

k++;else

m++;else

j++;

x > y

y < z

k++m++

j++

T

T

F

F

if(x > y) {if(y < z) {

k++;} else {

m++;}

} else {j++;

}

29

Exercise

x > y

y < z

k++m++

j++

T

T

F

F

int x=9, y=7, z=2, k=0, m=0, j=0;if(x > y)

if(y < z)k++;

elsem++;

elsej++;

What are the values of j, k and m?

30

Exercise: Find the value of a

int a = 750;if (a>0) if (a >= 1000) a = 0; else if (a <500) a =a*2; else a =a*10;else a =a+3;

a > 0

a >= 1000

a = 0

a =a+3 a < 500

a =a*2a =a*10

T

T

T

31

Exercise: Find the value of a

int a = 750;if (a>0) { if (a >= 1000) { a = 0; } else { if (a <500) { a =a*2; } else { a =a*10; } }} else { a =a*3;}

a > 0

a >= 1000

a = 0

a =a+3 a < 500

a=a*2a =a*10

T

T

T

32

Indentation

int a = 750;if (a>0) if (a >= 1000) a = 0; else if (a <500) a=a*2; else a=a*10;else a =a+3;

int a = 750;if (a>0)if (a >= 1000)a = 0;elseif (a <500)a=a*2;elsea=a*10;elsea = a+3;

Not good

Good

33

Indentation (cont’d) What is the output of the following

programs int a = 5, b = 3; if (a>10) {

a = 50;b = 20;}printf(" a = %d, b = %d\n",a, b);

if (a>10) a = 50; b = 20;

printf(" a = %d, b = %d\n",a, b);if (a>10) a = 50;b = 20;

printf(" a = %d, b = %d\n",a, b);

if (a>10) { a = 50; b = 20;}printf(" a = %d, b = %d\n",a, b);

Not good

Good

34

Exercise: Region in a plane

Write a program that reads a point (x, y) from user and prints its region

Region 1

Region 4

Region 2

Region 3

For example

Enter x y: 3 -1

This point is in Region 4

Enter x y: -1 -5

This point is in region 3

Enter x y: 0 5 ???????

35

Lecture++;

Name Addr Content

Lecture 9

36

Switch Statementswitch(expression) {

case constant:statement(s);break;

case constant:statement(s);break;

default: /* default is optional */

statement(s);}

37

Switch Statement Expression must be of type integer or character The keyword case must be followed by a constant break statement is required unless you want all

subsequent statements to be executed.

switch (op_code) {

case ‘N’: printf(“Normal\n”); break;

case ‘M’: printf(“Maintenance Needed\n”);

break; default: printf(“Error\n”); break; }

38

Exercise Convert the switch statement into if statement.

switch (op_code) { case ‘N’: printf(“Normal\n”); break; case ‘M’: printf(“Maintenance Needed\n”); break; default: printf(“Error\n”); break;}

if (op_code == ‘N’) printf(“Normal\n”); else if (op_code == ‘M’) printf(“Maintenance Needed\n”);else printf(“Error\n”);

39

Exercise

Convert the following nested if/else statements to a switch statement

if (rank==1 || rank==2) printf("Lower division \n");else{ if (rank==3 || rank==4) printf("Upper division \n"); else   {  if (rank==5) printf("Graduate student \n"); else printf("Invalid rank \n"); }}

switch(rank) {case 1:case 2: printf("Lower division \n"); break;

case 3:case 4: printf("Upper division \n"); break;case 5: printf("Graduate student \

n"); break;default: printf("Invalid rank \n");

}

40

More selection examples

41

Write if-else statement

score > 70

age > 18

Good jobExcellent job

age > 18

Very bad

You passYou fail

T

TT

Good luck next time

Don’t worry

42

if (score > 70) {printf(“You Pass\n”);if (age > 18) {

printf(“Good job \n”);} else {

printf(“Excellent job\n”);}

} else {printf(“You Fail\n”);if (age > 18) {

printf(“ Very bad \n”);} else {

printf(“ Don’t worry \n”);}

printf(“ Good luck next time \n”);}

43

get b, c from usera = b + c

a <= 10 and b-c > 6TF

F

Print “RIGTH-LEFT”, a, b, ca= 10 - c * c

c = a+bPrint “FINAL”, a, b, c

Print “LEFT-LEFT”, a, b, cb= a * -c

c != b

a*b<=12

Print “RIGTH”, a, b, cb= 5 + c * 2T

Print “LEFT-RIGTH”, a, b, cc= 5 + c * 2

F T

Print “RIGHT”, a, b, c meansprintf(“RIGHT a=%lf b=%lf c=%lf \n”,a, b, c);

44

a=b+c; if (a<=10 && b-c>6) { printf("RIGHT a=%lf b=%lf c=%lf \n", a, b, c);

b=5+c*2; if (a*b<=12) {

} else { printf("RIGHT-LEFT a=%lf b=%lf c=%lf \n",a, b, c); a=10-c*c; }} else { if (c != b) { printf("LEFT-RIGHT a=%lf b=%lf c=%lf \n",a, b, c); c=5+c*2; } printf("LEFT-LEFT a=%lf b=%lf c=%lf \n",a, b, c); b=a*-c;}c=a+b;printf("Final a=%lf b=%lf c=%lf \n",a, b, c);

45

Exercise: which task takes more time

Suppose we have two tasks A and B A takes Ah hours, Am minutes, and As

seconds B takes Bh hours, Bm minutes, and Bs

seconds User enters Ah Am As Bh Bm Bs Write if-else statements to print out

which task takes more time?

46

Max, Min, Median Write a program that reads 3 numbers a, b

and c from user and computes minimum, median and maximum of the numbers.

Example: a = 2, b = 5, c = 3

minimum = 2, maximum = 5, median = 3 a = 2, b = 2, c = 3

minimum = 2, maximum = 3, median = 2

47

Another if-else flowchart

if( A > 8) { A=b+c; if(A < 4) B=b*c; if(A > 8) B=b/c;} else { A=b-c; if(A < 5) B=b+c; else B=b%c; A=B; }

A > 8

A < 4

A > 8

B=b*c

B=b/c

A=b-c

A < 5

B=b+cB=b%c

A=B

A=b+c

T

TT

T

48

Exercise: Assign Letter Grade Given a score and the following grading scale

write a program to find the corresponding grade.

90-100 A80-89 B70-79 C60-69 D

0-59 F

49

Solution-1 if ((score >= 90) && (score <=100)) grade = 'A'; else if ((score >= 80) && (score <= 89)) grade = 'B'; else if ((score >= 70) && (score <= 79)) grade = 'C'; else if ((score >= 60) && (score <= 69)) grade = ‘D'; else if ((score >= 0) && (score <= 59)) grade = ‘F'; else printf("Invalide Score\n");

50

Solution-2if ((score >= 0) && (score <= 100))

if (score >= 90) grade = 'A';

else if (score >= 80) grade = 'B';

else if (score >= 70) grade = 'C';

else if (score >= 60) grade = ‘D';

else grade = ‘F';

else printf("Invalide Score\n");

51

Triangle inequality

Suppose we want to check if we can make a triangle using a, b, c

a

b

c

|a-b| <= c |a-c| <= b |b-c| <= a

a+b >= c a+c >= b b+c >= a

52

Charge for money transfer

Suppose you transfer $N and bank’s charge occurs as follows.

Write a program that reads N and computes cost

Otherwise 30$10000 N1000 ifN of 1%.0$15

1000N500 if N of 2% $10500$ N if 10$

cos t

53

Compute Queuing Delay

Write C program that computes and prints out average delay in a queuing system, where the average delay is given as follows

1 if

1 0 if )1()1(21

222

AvgDelay

54

#include <stdio.h>int main(void){ /* Declare variables. If needed, you can declare more*/ double rho, mu, sigma, AvgDelay;

printf("Enter rho(utilization), mu(service time) and " "sigma (standard deviation of service time) : "); scanf("%lf %lf %lf", &rho, &mu, &sigma); /* Compute and print the average delay using rho, mu, sigma */ if( rho > 0 && rho < 1) { AvgDelay = (rho / (1 - rho)) – rho*rho / (2 * (1-rho)) * (1-mu*mu*sigma*sigma); printf("AvgDelay = %lf \n", AvgDelay); } else if (rho >=1){ printf("AvgDelay is infinity \n"); } else printf("rho cannot be negative \n"); system("pause"); /* Exit program. */ return 0;}

55

Spell out a number in textusing if-else and switch

Write a program that reads a number between 1 and 999 from user and spells out it in English.

For example: 453 Four hundred fifty three 37 Thirty seven 204 Two hundred four

56

Lecture++;

Name Addr Content

Lecture 10

60

Loop (Repetition) Structures

61

Problem: Conversion tabledegrees radians

Degrees to Radians

0 0.000000 10 0.174533 20 0.349066 30 0.523599

…340 5.934120

350 6.108653 360 6.283186

radians = degrees * PI / 180;

62

#include <stdio.h>#define PI 3.141593

int main(void){ int degrees=0; double radians;

printf("Degrees to Radians \n"); degrees = 0; radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians);

degrees = 10; radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians);

degrees = 20; radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians);… degrees = 360; radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians);}

Sequential Solution

degrees = ??? radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians);

Not a good solution

63

Loop Solution

degrees = ??? radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians);

#include <stdio.h>#define PI 3.141593

int main(void){ int degrees=0; double radians;

printf("Degrees to Radians \n"); while (degrees <= 360) {

radians = degrees*PI/180; printf("%6i %9.6f \n", degrees,

radians); degrees += 10; } }

degrees+=10means

degrees= degrees+10

64

Loop (Repetition) Structures

while statement do while statement for statement Two new statements used with

loops break and continue

65

while statement

while(expression)statement;

while(expression) { statement;statement;

…}

66

Example#include <stdio.h>#define PI 3.141593

int main(void){ int degrees=0; double radians;

printf("Degrees to Radians \n"); while (degrees <= 360) { radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); degrees += 10; }return 0;}

67

do while

dostatement;

while(expression);

do {statement1;statement2;

...} while(expression);

note - the expression is tested after the statement(s) are executed, so statements are executed at least once.

68

Example#include <stdio.h>#define PI 3.141593

int main(void){ int degrees=0; double radians;

printf("Degrees to Radians \n"); do { radians = degrees*PI/180; printf("%6i %9.6f \n",degrees,radians); degrees += 10; } while (degrees <= 360); return 0;}

69

for statement for(initialization ; test ; increment or decrement )

statement;

for(initialization ; test ; increment or decrement ){

statement;statement;

…}

70

Example#include <stdio.h>#define PI 3.141593

int main(void){ int degrees; double radians;

printf("Degrees to Radians \n"); for (degrees=0; degrees<=360; degrees+=10) { radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); } return 0;}

71

for statement

initializetest

Increment ordecrement

true

statement(s)statement(s)

72

Examples

int sum =0, i;for( i=1 ; i < 7;i=i+2 ){

sum = sum+i;}

int fact=1, n;for( n=5 ; n>1 ; n--){

fact = fact * n;}

?

0

5

1

i

sum

n

fact

1

1

3

4

5

9

7

n--; means n=n-1;n++; means n=n+1;

73

ExerciseDetermine the number of times that each of the following for loops are executed.

for (k=3; k<=10; k++) { statements;

}

for (k=3; k<=10; ++k) { statements;

}

for (count=-2; count<=5; count++) { statements;

}

1

increment

initialfinal

74

Example What will be the output of the following program, also

show how values of variables change in the memory.int sum1, sum2, k;sum1 = 0;sum2 = 0;for( k = 1; k < 5; k++) { if( k % 2 == 0) sum1 =sum1 + k; else sum2 = sum2 + k;}printf(“sum1 is %d\n”, sum1);printf(“sum2 is %d\n”, sum2);

0 2 6

0 1 4

1 2 3 4 5

sum1

sum2

k

sum1 is 6sum2 is 4

75

For vs. while loopConvert the following for loop to while loop

for( i=5; i<10; i++) { pritntf(“ i = %d \n”, i);

}

i=5;while(i<10){ pritntf(“ i = %d \n”, i); i++;

}

76

break statement break;

terminates loop execution continues with the first statement

following the loop

sum = 0;for (k=1; k<=5; k++) {

scanf(“%lf”,&x); if (x > 10.0) break; sum +=x;}printf(“Sum = %f \n”,sum);

sum = 0;k=1;while (k<=5) {

scanf(“%lf”,&x); if (x > 10.0) break; sum +=x; k++;}printf(“Sum = %f \n”,sum);

77

continue statement continue;

forces next iteration of the loop, skipping any remaining statements in the loop

sum = 0;for (k=1; k<=5; k++) {

scanf(“%lf”,&x); if (x > 10.0) continue; sum +=x;}printf(“Sum = %f \n”,sum);

sum = 0;k=1;while (k<=5) {

scanf(“%lf”,&x); if (x > 10.0) continue; sum +=x; k++;}printf(“Sum = %f \n”,sum);

sum = 0;k=1;while (k<=5) {

scanf(“%lf”,&x); if (x > 10.0){ k++; continue; } sum +=x; k++;}printf(“Sum = %f \n”,sum);

78

Example: what will be the output

int main(){ int a, b, c; a=5; while(a > 2) { for (b = a ; b < 2 * a ; b++ ) { c = a + b; if (c < 8) continue; if (c > 11) break; printf( “a = %d b = %d c = %d \n”, a, b, c); } /* end of for-loop */ a--; } /* end of while loop */}

a = 5 b = 5 c = 10a = 5 b = 6 c = 11a = 4 b = 4 c = 8a = 4 b = 5 c = 9a = 4 b = 6 c = 10a = 4 b = 7 c = 11a = 3 b = 5 c = 8

79

Example: A man walks Suppose a man (say, A)

stands at (0, 0) and waits for user to give him the direction and distance to go.

User may enter N E W S for north, east, west, south, and any value for distance.

When user enters 0 as direction, stop and print out the location where the man stopped

N

E

S

W

80

float x=0, y=0; char direction; float distance; while (1) { printf("Please input the direction as N,S,E,W (0 to exit): "); scanf("%c", &direction); fflush(stdin); if (direction=='0'){ /*stop input, get out of the loop */ break; } if (direction!='N' && direction!='S' && direction!='E' && direction!='W') { printf("Invalid direction, re-enter \n"); continue; } printf("Please input the mile in %c direction: ", direction); scanf ("%f", &distance); fflush(stdin); if (direction == 'N'){ /*in north, compute the y*/ y = y + distance; } else if (direction == 'E'){ /*in east, compute the x*/ x = x + distance; } else if (direction == 'W'){ /*in west, compute the x*/ x= x - distance; } else if (direction == 'S'){ /*in south, compute the y*/ y = y- distance; } } printf("\nCurrent position of A: (%4.2f, %4.2f)\n", x, y); /* output A's location */

81

Lecture++;

Name Addr Content

Lecture 13

82

More loop examples

83

Exercise

What is the output of the following program?for (i=1; i<=5; i++) { for (j=1; j<=4; j++){ printf(“*”);

} printf(“\n”);}

Output

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

84

Exercise What is the output of the

following program?

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

Output

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

What/how do you need to change in th following program?for (i=1; i<=5; i++) { for (j=1; j<=i; j++){ printf(“*”); } printf(“\n”);}

85

Example: nested loops to generate the following output

i=1 * i=2 + +i=3 * * * i=4 + + + +i=5 * * * * *

int i, j;for(i=1; i <= 5; i++){ printf("i=%d ", i); for(j=1; j <= i; j++) { if (i % 2 == 0) printf("+ "); else printf("* "); } printf("\n");}

86

Exercise: Modify the following program to produce the output.

for (i=A; i<=B; i++) {

for (j=C; j<=D; j++) {

printf(“*”);

}

printf(“\n”);

}

Output

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

87

Exercise Write a program using loop statements

to produce the following output.

Output * ** *** *********

88

Example Write a program that prints in two columns n

even numbers starting from 2, and a running sum of those values. For example suppose user enters 5 for n, then the program should generate the following table:

Enter n (the number of even numbers): 5Value Sum 2 2 4 6 6 12 8 2010 30

89

#include <stdio.h>int main(void){ /* Declare variables. */ int n; int sum, i; printf("Enter n "); scanf("%d",&n);

printf("Value \t Sum\n"); sum = 0; for(i=1; i <=n; i++){ sum = sum + 2*i; printf("%d \t %d\n", 2*i, sum); } return 0;}

90

Compute xy when y is integer Suppose we don’t have pow(x,y)

and y is integer, write a loop to compute xyprintf(“Enter x, y :”);

scanf(“%d %d”, &x, &y);

res=1;

for(i=1; i<=y; i++){

res = res * x;

}

91

Exercise: sum

Write a program to compute the following

nin

i

...3211

Enter n

total=0;

for(i=1; i<=n; i++)

total = total + i ;

print total

ntotal 2...642

Enter n

total=0;

for(i=1; i<=n; i++)

total = total + 2 * i ;

print total

92

Exercise: sum Write a program to compute the following

mm

i

i xxxxxxx

43210

0

Enter x and m

total=0;

for(i=0; i<=m; i++)

total = total + pow(x, i);

print total

Enter x and m

total=0; sofarx=1;

for(i=0; i<=m; i++) {

total = total +sofarx;

sofarx = sofarx * x;

}

print total

93

Exercise: ln 2

Write a program to compute the following

n

1

7

1

6

1

5

1

4

1

3

1

2

1

1

12ln

Enter nln2=0;for(i=1; i<=n; i++) if ( i % 2 == 0)

ln2 = ln2 - 1.0 / i; else ln2 = ln2 + 1.0 / i; print total

94

Exercise: ex

Write C program that reads the value of x and n from the keyboard and then approximately computes the value of ex using the following formula:

Then compare your approximate result to the one returned by exp(x) in C library, and print out whether your approximation is higher or lower.

!!3!2!11

32

n

xxxxe

nx

95

int i, n; double x, ex;double powx, fact;

printf("Enter the value of x and n : ");scanf("%lf %d",&x, &n);

/* Write a loop to compute e^x using the above formula */ex=1.0; fact=1.0; powx=1.0;for(i=1; i<=n; i++){ powx = powx * x; fact = fact * i; ex = ex + powx / fact;}printf("Approx value of e^x is %lf when n=%d\n",ex, n);

/* Check if ex is higher/lower than exp(x) in math lib.*/if(ex < exp(x)) printf("ex est is lower than exp(x)=%lf\n",exp(x));else if (ex > exp(x)) printf("ex est is higher than exp(x)=%lf\n",exp(x));else printf("ex est is the same as exp(x)\n");

96

Exercise: sin x

Compute sin x using

)!12()1(

!7!5!3!1sin

12753

n

xxxxxx

nn

printf(“Enter x n :”); scanf(“%lf %d”, &x, &n);total=0; powx=x; factx=1;for(i=0; i <= n; i++){ k= 2*n+1; if (i%2==0) total= total - powx/factx; else total= total + powx/factx; powx= powx * x * x; factx = factx * k * (k-1);}printf( “sin(%lf) is %lf\n”,x, total);

97

For vs. while loop : Convert the following for loop to while loop

for( i=5; i<10; i++) {

printf(“AAA %d \n”, i);

if (i % 2==0) continue;

pritntf(“BBB %d \n”, i);

} i=5;while(i<10) { printf(“AAA %d \n”, i); if (i % 2==0) {

i++; continue;

} pritntf(“BBB %d \n”, i); i++;}

98

Skip

Study Section 3.5 from the textbook

99

Lecture++;

Name Addr Content

Lecture 14

100

3.6 Data Files So far, we used scanf and printf to

enter data by hand and print data on the screen

What if we have 1000 data points to enter? Can we still enter them by hand?

What if the output has several lines and we want to store the output results or use them with other programs?

101

Read Access to Data Files

102

Read Access to Data Files #include <stdio.h> File pointer must be defined in C program

FILE *sf; File pointer must be associated with a specific file

using the fopen function If the program and data file are in the same

directory sf = fopen(“sensor1.dat”, “r”);

Else give the full path

sf = fopen(“C:\turgay\H\Teaching\15b-FALL07-cs2073\prog\sensor1.dat”, “r”);

103

Input file - use fscanf instead of scanf#include <stdio.h> FILE *sf;double t, motion; sf = fopen(“sensor1.dat”, “r”);while( ???? ){

fscanf( sf , “%lf %lf” , &t, &motion);}

Read from Data Files

t

motion

sf

2

4.4

3

3.5

4

6.3

104

Create New Data Files Write Access to Data Files

#include <stdio.h> File pointer must be defined in C program

FILE *bf; File pointer must be associated with a specific file

using the fopen function If the program and data file are in the same

directory bf = fopen(“balloon.dat”, “w”); Else give the full path bf = fopen(“C:\turgay\H\Teaching\15b-FALL07-cs2073\prog\balloon.dat”, “w”);

105

Output file - use fprintf instead of printf#include <stdio.h> FILE *bf;double time=6.5, height=5.3;

bf = fopen(“balloon.dat”, “w”);

fprintf( bf , “t: %f h: %f\n”, time, height);

Write to Data Files

time

height

bf

6.5

5.3

7.1

8.3

8.3

3.7 t: 6.500000 h: 5.300000t: 7.100000 h: 8.300000t: 8.300000 h: 3.700000

106

At the end, Use fclosefclose(sf); fclose(bf);

107

Example

Read 6 values from a file named my_data.txt and write their average into another file named avg-of-6.txt

6 5

4

2 3 4

5

my_data.txt

program

4

avg-of-6.txt

108

Example: average grade Suppose we keep the id and three HW

grades of 36 students in a file named grades.txt

Write a program to compute average grade for each student and write each students avg into another file named avg-hw.txt1 5 10 15

2 10 20 30

36 4 6 20

grades.txt

program

1 10 2 20…36 10

avg-hw.txt

109

Lecture++;

Name Addr Content

Lecture 15

110

Reading Data FilesWhen to stop Counter controlled loop

First line in file contains count Use for loop

Trailer signal or Sentinel signal Data ends when a special data value is seen -999 Use while loop

End of file controlled loop When file is created EOF is inserted Use while loop feof(fileptr) > 0 when EOF reached fscanf cannot read as many values as you wanted

111

Check what fopen, fscanf, fprintf return

FILE *fp;fp=fopen(“data.txt”, “r”);if (fp==NULL){ printf(“Program cannot open the file\n”); return -1;}

N=fscanf(fp, “%d %d %d”, &v1, &v2, &v3); /* N is the number of values read successfully */

while(fscanf(fp, “%d %d %d”, &v1, &v2, &v3) == 3) { /* process v1 v2 v3 */}

if (fp=fopen(“data.txt”, “r”)) == NULL){

112

Counter controlled loopUsually first line in file contains the count

#include <stdio.h>int main(){ FILE *scorefile; int score, count, i, sum=0;

if((scorefile = fopen("scores2.txt","r")) == NULL) ){ printf(“Program cannot open the file\n”); exit(-1); } fscanf(scorefile,"%d", &count); for (i=1; i<=count; i++) {

fscanf(scorefile,"%d", &score); sum = sum + score;

} printf(“Average score %lf \n",(double)sum/count); fclose(scorefile); return(0);}

6567893248563

scores2.txt

113

Trailer signal or Sentinel signal

#include <stdio.h>int main(){ FILE *scorefile; int score, count=0, i, sum=0;

if((scorefile = fopen("scores3.txt","r")) == NULL) ){ printf(“Program cannot open the file\n”); exit(-1); } fscanf(scorefile,"%d", &score); while(score >= 0) { count++; sum = sum + score; fscanf(scorefile,"%d", &score); } printf(“Average score %lf \n",(double)sum/count); fclose(scorefile); return(0);}

567893248563-999

scores3.txt

114

End of file controlled loop#include <stdio.h>int main(){ FILE *scorefile; int score, count=0, i, sum=0;

if((scorefile = fopen("scores4.txt","r")) == NULL) ){ printf(“Program cannot open the file\n”); exit(-1); } while (fscanf(scorefile,"%d",&score) == 1) { count++; sum = sum + score; } printf(“Average score %lf \n",(double)sum/count); fclose(scorefile); return(0);}

567893248563

scores4.txt

while (feof(scorefile) <= 0) { fscanf(scorefile,"%d",&score); count++; sum = sum + score;}

115

Exercise In previous three programs, we

found average. Suppose, we want to also know

how many data points are greater than average.

Change one of the previous programs to determine the number of data points that are greater than average.

116

Exercise Given a file of integers. Write a program that finds the

minimum number in another file.

Algorithm to find minimum in a file: open file set minimum to a large value while (there are items to read)

read next number x from fileif (x < min) min = x

display the minimumclose file

File

567893248563

Solution available on the next page

117

#include <stdio.h>

int main(){ FILE *scorefile; int score; int min;

scorefile = fopen("scores.txt","r"); if (scorefile == NULL) printf("Error opening input file\n"); else { min = 110; while (feof(scorefile) <= 0) {

fscanf(scorefile,"%d",&score); if (score < min) min = score;}

}

printf("Min = %d\n",min);

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

118

Exercise Given a file of integers. Write a program that searches for

whether a number appears in the file or not.

// algorithm to check for y in a file open file set found to false

while (there are items to read and found is false)read next number x from fileif (x equals y) set found to true

Display found message to user Display not found message to user

close file

File

567893248563

Solution available on the next page

119

#include <stdio.h>

int main(){ FILE *scorefile; int score, num, found; printf("Please Enter a number\n"); scanf("%d", &num); scorefile = fopen("scores.txt","r"); if (scorefile == NULL) printf("Error opening input file\n"); else{ found = 0; while ((feof(scorefile) <= 0) && (found == 0)) {

fscanf(scorefile,"%d",&score); if (score == num) found = 1; }

if (found == 0) printf("%d does not appear in the file\n",num); else

printf("%d appears in the file\n",num); } fclose(scorefile); system("pause"); return(0);}

120

Exercise

Change the previous program to count how many times the given number appears in the file?

Instead of fount =1; put fount++;

121

Read/Write Example Suppose we have a data file that contains worker ID, the

number of days that a worker worked, and the number of hours the worker worked each day.

We would like to find out how much to pay for each worker. To compute this, find the total number of hours for each worker and multiply it by 7 dollar/hour.

For instance, your program should process the following input.txt and generate the corresponding output.txt as follows:

Id numofD hour1 hour2 hour3 Id total-hour payment 1 2 3 8 2 3 5 7 6 3 1 2 4 2 5 1 5 3 1 3 2

input.txt

1 11 772 18 1263 2 144 6 425 6 42

output.txt

program

122

#include <stdio.h> int main(void){ FILE *infp, *outfp; int ID, numofD, hour, i, total_hour; if ((infp = fopen("input.txt", "r"))==NULL){ printf("Input file cannot be opened\n"); return -1; } if ((outfp = fopen("output.txt", "w"))==NULL){ printf("Output file cannot be opened\n"); return -1; } while(fscanf(infp, "%d %d",&ID, &numofD)==2) {

total_hour=0;for(i=1; i <= numofD; i++){ fscanf(infp,”%d”,&hour); total_hour +=hour;

} fprintf(outfp, "%3d %3d %4d\n",

ID, total_hour, total_hour*7); } fclose(infp); fclose(outfp); return 0;}

123

Read/write Example Suppose we have a data file that contains student ID and

his/her homework grades for hw1, hw2, hw3, and hw4. We would like to find out min, max and average grade for

each student and write this information into another file. For instance, your program should process the following

input.txt and generate the corresponding output.txt as follows:

1 20 30 28 18 2 35 50 27 36 3 17 20 34 44 4 20 50 14 12 5 33 15 30 20

input.txt

1 18 30 24.00 2 27 50 37.00 3 17 44 28.75 4 12 50 24.00 5 15 33 24.50

output.txt

prog

Id hw1 hw2 hw3 hw4 Id min max avg

124

#include <stdio.h> int main(void){ FILE *infp, *outfp; int i,ID, hw, max, min; double sum; if ((infp = fopen("input.txt", "r"))==NULL){ printf("Input file cannot be opened\n"); return -1; } if ((outfp = fopen("output.txt", "w"))==NULL){ printf("Output file cannot be opened\n"); return -1; } while(fscanf(infp, "%d %d",&ID, &hw)==2) { sum=max=min=hw; for(i=1; i <= 3; i++){ fscanf(infp,”%d”,&hw); sum = sum + hw; if (hw > max) max = hw; if (hw < min) min = hw; } fprintf(outfp, "%3d \t %3d \t %4d \t %3.2lf\n",

ID, min, max, sum/4); } fclose(infp); fclose(outfp); return 0;}

Eliminate out of order records Suppose we have a data file that has 5 columns in each row,

namely student ID, hw1, hw2, hw3, hw4. We are told that most rows in this file are sorted in an

increasing order based on the ID field. Write a program to determine the students whose IDs are not in order and print the IDs and homework grades of such students into another file.

125

2 4 3 3 2

3 3 1 1 1

5 3 5 8 3

1 4 4 1 5

7 3 5 3 3

8 1 2 4 7

4 5 4 6 3

10 2 3 2 9

12 4 8 3 4

1 4 4 1 5

4 5 4 6 3program

126

More example

Study 3.7 and 3.8 from the textbook

top related