340 likes | 460 Views
Control Structures - Repetition. Chapter 5. Chapter Topics. Why Is Repetition Needed The Repetition Structure Counter Controlled Loops Sentinel Controlled Loops Flag Controlled Loops EOF Controlled Loops for Loops The do … while Looping Structure. Why Is Repetition Needed?.
E N D
Control Structures - Repetition Chapter 5
Chapter Topics • Why Is Repetition Needed • The Repetition Structure • Counter Controlled Loops • Sentinel Controlled Loops • Flag Controlled Loops • EOF Controlled Loops • for Loops • The do … while Looping Structure
Why Is Repetition Needed? • Consider a task that the computer might automate • Calculate and print paychecks • Read invoices from a file and print monthly statements • Read inputs from a sensor and adjust the air-fuel mixture of an engine • In general • The "Input – process – output" cycle
Why Is Repetition Needed? • The algorithm requires a set of actions to be done over and over again • Same set of actions • Number of times to be executed is unknown at design time • We need a structure which allows • Statement(s) to be repeated • A method of testing to see whether the statements should be repeated
The Repetition Structure • The while loopprovides therepetition structure • Statement(s) tobe repeated • A means of checking whether the statement(s) will be repeated • Syntax: while ( logicalExpression ) statement;
while (condition) false true statement 1 statement 2 Phases of Loop Execution • Loop entry => flow of control reaches first statement inside loop • Iteration => each pass thru the loop • Loop test => condition tested before each iteration • Loop exit => when termination condition occurs • in while statement, loop is NOT executed another time
While Loop Illustration Loop Iteration Loop Test Loop Exit Loop Entry
Counter Controlled Loops • For when you know exactly how many times the loop should run • There are 10 employees for which to print checks • There are 60 sensor inputs per second • The program needs a Loop Control Variable
Count Controlled Loop • Uses a Loop Control Variable (LCV) x = 0;while (x <= 10) { cout << “count = “ << x << endl; x = x + 1; } What gets printed?
Amen Count Controlled Loops • Initialized • Incremented • Inspected The LCV must be ...
Initialized Inspected Incremented Count Controlled Loops x = 0;while (x <= 10) { cout << “count = “ << x << endl; x = x + 1; }
Sentinel Controlled Loops • Suppose you want to read some positive integers and average them • You do not have a preset number of data items in mind. • Suppose the number–999 marks the end of data. • Then the -999 is your "sentinel" View sample program cin>>variable; while(variable != sentinel) { . . . cin>> variable; }
The flag is set according to some condition Flag Controlled Loops • A flag controlled loop uses a Boolean variable to control the loop • ExampleLet found be the Boolean variablefound = false; while(!found) { . . . if(expression) found = true; }
EOF Controlled Loops • End of File Controlled Do you need to know how many items are in the file? Why? Why not?
Testing the State of an I/O Stream • The name of the input stream (used by itself) returns a value • returns a 0 if it is NOT successful • it returns a NON zero value if it IS successful
Testing the State of an I/O Stream • When reading a file (a named input stream) we wish to know when it reaches the end • Since the name returns a 0 or non-0, this can be used as a Boolean value • Used to control program sequencing, control a file reading loop
EOF Controlled Loops • Can also be used in keyboard entry situationscin>>variable; while(cin) { . . . cin>>variable; // Ctrl-Z to signify eof } • Although a sentinel controlled loop might be more user friendly
EOF Controlled Loops • In addition to checking the value of an input stream variable … • The function eof with an input stream variable can also be used to determine the end of file status. • Syntax: istreamVar.eof() • Example infile.get(ch); while(!infile.eof()) { cout<<ch; infile.get(ch); }
A Special Count Controlled Loop • The for ( … ) statement • Initialization : initializes the LCV • Condition : usually a comparison, acts like a while ( …) • Incrementing statement : LCV is incremented (or decremented) for ( initialization ; test expression ; update ) { 0 or more statements to repeat }
The for ( … )Loop • Example -- what gets printed? How did it Happen? • x gets initialized • value of x inspected • x gets incremented
The for ( … )Loop • All three of the portions inside the parentheses can be multiple statements separated by commas • Any or all of the three portions inside the parenthesis may be missing • accomplish those tasks some other way • the two semicolons MUST be there
for Loops • Note the sequence of events in a for loop Is it possible that the initialization and condition could be set so that that the loop statement would never execute?
A Different Looping Statement • Recall that the while ( … ) statement always checked the condition BEFORE the loop • In certain situations wewish to check the condition at … • The END ofthe loop • After the statement
The Do-While Statement • Condition tested at end/bottom of loop • Guarantees loop body executes at least once
The do-while Illustrated Note: alwaysat least oneiteration Loop Iteration Loop Entry Loop Exit Loop Trest
The Do-While Statement • Can be used for a counting loop What gets printed?? How do you change it to go 10 times?
The Do While Statement • This logic sometimes more suitable for some algorithms • Example : trap for valid input do { cout << “Enter value (1 - 5) -> “; cin >> value; if (value < 1 || value > 5) cout << “Invalid input\a” << endl; while (value < 1 || value > 5); What makes this easier than the while ( … ) loop for this task?
POST-TEST loop (exit-condition) The looping condition is tested after executing the loop body. Loop body is always executed at least once. PRE-TEST loop (entry-condition) The looping condition is tested before executing the loop body. Loop body may not be executed at all. do-while Loop vs. while Loop
The break;Statement • We saw it in the switch statement • Causes immediate exit from innermost block • switch, while, do-while, for • Can be used to break out of purposely designed infinite loop • not a good idea … a lazy shortcut • Use only as last resort to avoid baffling combinations of multiple Boolean flags and nested ifs
The continue;Statement • Valid only in loops • Terminates current loop iteration • NOT entire loop • Causes branch to bottom of loop • skips rest of loop statements • Loop then prepares for next iteration • for (…) would increment lcv • all loops would check condition
Guidelines for Choosing a Looping Statement • Simple count-controlled • use for (…) loop • Event controlled, body always executed at least once • use do-while • Event controlled and nothing known about first execution • use while, possibly for • When in doubt => use while
Testing and Debugging • For do-while loops, make sure to try data sets to make loop go exactly one time • For data-dependant loop where expressions based on values other than constants • make sure to test for proper number of iterations • Make sure switch statements have every branch tested • including default
Testing and Debugging • Remember to use break at end of case alternatives in switch statements • otherwise next case is also executed! • Case labels in switch statement must be values or named constants -- no variables • Both switch expression & case constant cannot be floating point • Provide default for switch when possibility of case values not being matched
Testing and Debugging • Make sure all needed switch cases are present • Choose looping structure carefully • for( ; ; ) loop heading must have two semicolons -- even if portions omitted • Break statement can exit only one level of nesting • innermost switch or loop where break is located