1 Control Structures and Data Files Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 web:

Slides:



Advertisements
Similar presentations
INTEC CS160 - Jeanine Ingber Engineering Problem Solving with C Fundamental Concepts Chapter 3 Control Structures and Data Files.
Advertisements

Modular Programming With Functions
Computer Programming w/ Eng. Applications
BBS514 Structured Programming (Yapısal Programlama)1 Selective Structures.
CS1010 Programming Methodology
For loops For loops are controlled by a counter variable. for( c =init_value;c
Selection Statements Selects statements to execute based on the value of an expression The expression is sometimes called the controlling expression Selection.
1 ICS103 Programming in C Lecture 8: Data Files. 2 Outline Why data files? Declaring FILE pointer variables Opening data files for input/output Scanning.
1 Engineering Problem Solving With C++ An Object Based Approach Chapter 3 Control Structures.
1 ICS103 Programming in C Lecture 7: Repetition Structures.
Programming Control Flow. Sequential Program S1 S2 S5 S4 S3 int main() { Statement1; Statement2; … StatementN; } Start End.
ספטמבר 04Copyright Meir Kalech1 C programming Language Chapter 2: Control Flow.
12-2 Know how if and switch C statements control the sequence of execution of statements. Be able to use relational and logical operators in the conditional.
CONTROL STATEMENTS Lakhbir Singh(Lect.IT) S.R.S.G.P.C.G. Ludhiana.
CMSC 104, Version 8/061L22Arrays1.ppt Arrays, Part 1 of 2 Topics Definition of a Data Structure Definition of an Array Array Declaration, Initialization,
Programming Variables. Named area in the computer memory, intended to contain values of a certain kind (integers, real numbers, characters etc.) They.
Algorithms and Computing Lecture 3 Control Statements By Dr. M. Tahir Khaleeq.
13&14-2 Know the forms of loop statements in C (while,do/while,for). Understanding how data conversion occurs. Read/Write data in files using Unix redirection.
18-2 Understand “Scope” of an Identifier Know the Storage Classes of variables and functions Related Chapter: ABC 5.10, 5.11.
Lecture 10: Reviews. Control Structures All C programs written in term of 3 control structures Sequence structures Programs executed sequentially by default.
Structured Program Development Outline 2.1Introduction 2.2Algorithms 2.3Pseudo code 2.4Control Structures 2.5The If Selection Structure 2.6The If/Else.
Reviw: Control Structures
Repetitive Structures BBS514 Structured Programming (Yapısal Programlama)1.
1 Flowchart notation and loops Implementation of loops in C –while loops –do-while loops –for loops Auxiliary Statements used inside the loops –break –continue.
Programming C for Engineers An exercise is posted on the web site! Due in one week Single submission.
Chapter 3 - Structured Program Development Outline 3.1Introduction 3.2Algorithms 3.3Pseudocode 3.4Control Structures 3.5The If Selection Structure 3.6The.
1 ELEC 206 Chapter 3 Control Structures 5-Step Problem Solving Methodology 1. State the problem clearly. 2. Describe the input and output. 3. Work a.
Control structures Algorithm Development Conditional Expressions Selection Statements 1.
Lecture 13: Arrays, Pointers, Code examples B Burlingame 2 Dec 2015.
Beginning C For Engineers Fall 2005 Lecture 3: While loops, For loops, Nested loops, and Multiple Selection Section 2 – 9/14/05 Section 4 – 9/15/05 Bettina.
CISC105 – General Computer Science Class 4 – 06/14/2006.
1 ICS103 Programming in C Lecture 7: Repetition Structures.
IT CS 200: R EPEATATION Lect. Napat Amphaiphan. T HE ABILITY TO DO THE SAME TASK AGAIN BY AGAIN UNTIL THE CONDITION IS MET LOOP 2.
CS Class 04 Topics  Selection statement – IF  Expressions  More practice writing simple C++ programs Announcements  Read pages for next.
1 Midterm 1 Review. 2 Midterm 1 on Friday February 27 Closed book, closed notes No computer can be used 50 minutes 4 or 5 questions write full programs.
CC213 Programming Applications Week #2 2 Control Structures Control structures –control the flow of execution in a program or function. Three basic control.
1 ICS103 Programming in C Lecture 7: Repetition Structures.
Problem Solving and Program Design in C Chap. 5 Repetition and Loop Statement Chow-Sing Lin.
BIL 104E Introduction to Scientific and Engineering Computing Lecture 6.
The following statements are for y = -1; if ( x ) if ( x>0 ) y = 1; else y = 0; A. y= -1 x0 B. y= 0 x0 C. y= 1 x
 Real numbers representation - Floating Point Notation  First C Program  Variables Declaration  Data Types in C ◦ char, short, int, long, float, double,
CHAPTER 4 REPETITION STRUCTURES 1 st semester King Saud University College of Applied studies and Community Service Csc 1101 A.AlOsaimi.
Simple C Programs.
Engineering Problem Solving with C
Control Structures and Data Files
EKT120 COMPUTER PROGRAMMING
EKT150 INTRODUCTION TO COMPUTER PROGRAMMING
2008/11/19: Lecture 18 CMSC 104, Section 0101 John Y. Park
Engineering Problem Solving with C++, Etter/Ingber
Week 4 – Repetition Structures / Loops
Lecture 13 & 14.
Engineering Problem Solving with C Fundamental Concepts
Selection and Repetition (Loop) Chapter 4 and 5
CSI 121 Structure Programming Language Lecture 10: Iteration (Part 1)
Control Structures Lecture 7.
Looping.
Arrays, Part 1 of 2 Topics Definition of a Data Structure
If statement.
Structured Program
Chapter 4 - Program Control
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays, Part 1 of 2 Topics Definition of a Data Structure
EPSII 59:006 Spring 2004.
2008/11/19: Lecture 18 CMSC 104, Section 0101 John Y. Park
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays, Part 1 of 2 Topics Definition of a Data Structure
ICS103: Programming in C 5: Repetition and Loop Statements
Presentation transcript:

1 Control Structures and Data Files Turgay Korkmaz Office: SB Phone: (210) Fax: (210) web: CS 2073 Computer Programming w/Eng. Applications Ch 3

2 Lecture++; NameAddrContent Lecture7

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

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) < D = b > c; if (D) A=b+c; Mixing with arithmetic op X+Y >= K/ ? 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) ABA && BA || B!A!B False True FalseTrueFalseTrue False TrueFalse TrueFalseTrue False

14 Examples A =5 A+B * 2 =A/2 A<B || C<B && A-2 < 10 A < B < C ???? A<B<C is not the same as (A<B) && (B<C) ABCABC

15 Precedence for Arithmetic, Relational, and Logical Operators

16 Exercise Assume that following variables are declared a = 5.5b = 1.5 k = -3 Are the following true or false a < k a + b >= 6.5 k != a-b !(a == 3*b) a 5 fabs(k)>3 || k<b-a

17 Exercise: Logical Circuit y1 = x1 && x2; y2 = x3 || x4; y3 = !x5; z1 = y1 || y2; z2 = y2 && y3 Without using y1, y2, y3 z1 = x1 && x2 || (x3 || x4); z2 = (x3 || x4) && !x5; AND x1 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 abCabC x

19 Lecture++; NameAddrContent Lecture8

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 - examples if (x > 0) k++; if(x > 0) { y = sqrt(x); k++; } if(x > 0) /* a common mistake */ y = sqrt(x); k++; NameAddrContent x9 y5 k4

23 if else statement if(Boolean expression) statement; else statement; 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; NameAddrContent x9 y5 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; } NameAddrContent x9 y5 max? min?

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 <= y T

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++; else m++; else j++; 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; else if (a <500) a=a*2; else a=a*10; else a = 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: This point is in region 3 Enter x y: 0 5 ???????

35 Lecture++; NameAddrContent Lecture9

36 Switch Statement switch(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 job Excellent job age > 18 Very bad You pass You fail T T T 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 user a = b + c a 6 T F F Print “RIGTH-LEFT”, a, b, c a= 10 - c * c c = a+b Print “FINAL”, a, b, c Print “LEFT-LEFT”, a, b, c b= a * -c c != b a*b<=12 Print “RIGTH”, a, b, c b= 5 + c * 2 T Print “LEFT-RIGTH”, a, b, c c= 5 + c * 2 F T Print “RIGHT”, a, b, c means printf(“RIGHT a=%lf b=%lf c=%lf \n”,a, b, c);

44 a=b+c; if (a 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+c B=b%c A=B A=b+c T T T T

48 Exercise: Assign Letter Grade Given a score and the following grading scale write a program to find the corresponding grade A 80-89B 70-79C 60-69D 0-59F

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-2 if ((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

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

54 #include 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 text using 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++; NameAddrContent Lecture10

57 Lecture++; NameAddrContent Lecture11

MIDTERM 1 58

59 Lecture++; NameAddrContent Lecture12

60 Loop (Repetition) Structures

61 Problem: Conversion table degrees  radians Degrees to Radians … radians = degrees * PI / 180;

62 #include #define PI 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 #define PI 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+=10 means 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; … }

66 Example #include #define PI 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 do statement; while(expression); do { statement1; statement2;... } while(expression); S note - the expression is tested after the statement(s) are executed, so statements are executed at least once.

68 Example #include #define PI 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; … }

70 Example #include #define PI 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 initialize test Increment or decrement true 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; } ? i sum n fact n--; means n=n-1; n++; means n=n+1;

73 Exercise Determine 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; }

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); sum1 sum2 k sum1 is 6 sum2 is 4

75 For vs. while loop Convert 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 = 10 a = 5 b = 6 c = 11 a = 4 b = 4 c = 8 a = 4 b = 5 c = 9 a = 4 b = 6 c = 10 a = 4 b = 7 c = 11 a = 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++; NameAddrContent Lecture13

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= 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): 5 Value Sum

89 #include 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 x y when y is integer Suppose we don’t have pow(x,y) and y is integer, write a loop to compute x y printf(“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 Enter n total=0; for(i=1; i<=n; i++) total = total + i ; print total 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 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 Enter n ln2=0; for(i=1; i<=n; i++) if ( i % 2 == 0) ln2 = ln / i; else ln2 = ln / i; print total

94 Exercise: e x Write C program that reads the value of x and n from the keyboard and then approximately computes the value of e x 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.

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 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++; NameAddrContent Lecture14

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 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 FILE *sf; double t, motion; sf = fopen(“sensor1.dat”, “r”); while( ???? ){ fscanf( sf, “%lf %lf”, &t, &motion); } Read from Data Files t motion sf

104 Create New Data Files Write Access to Data Files #include 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 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 t: h: t: h: t: h:

106 At the end, Use fclose fclose(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 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.txt … grades.txt program … avg-hw.txt

109 Lecture++; NameAddrContent Lecture15

110 Reading Data Files When 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 loop Usually first line in file contains the count #include 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); } scores2.txt

113 Trailer signal or Sentinel signal #include 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); } scores3.txt

114 End of file controlled loop #include 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); } 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 file if (x < min) min = x display the minimum close file File Solution available on the next page

117 #include 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 file if (x equals y) set found to true Display found message to user Display not found message to user close file File Solution available on the next page

119 #include 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-hourpayment input.txt output.txt progra m

122 #include 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: input.txt output.txt prog Id hw1hw2hw3 hw4 Id min max avg

124 #include 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 program

126 More example Study 3.7 and 3.8 from the textbook