Title: Control Structures - Repetition
1Control Structures - Repetition
2Chapter 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
3Why 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
4Why 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
5The 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
6Phases of Loop Execution
- Loop entry gt flow of control reaches first
statement inside loop - Iteration gt each pass thru the loop
- Loop test gt condition tested before each
iteration - Loop exit gt when termination condition occurs
- in while statement, loop is NOT executed another
time
7While Loop Illustration
Loop Iteration
Loop Test
Loop Exit
Loop Entry
8Counter 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
9Count Controlled Loop
- Uses a Loop Control Variable (LCV)
x 0while (x lt 10) cout ltlt count ltlt
x ltlt endl x x 1
What gets printed?
10Count Controlled Loops
The LCV must be ...
- I nitialized
- I ncremented
- I nspected
11Count Controlled Loops
x 0while (x lt 10) cout ltlt count ltlt
x ltlt endl x x 1
12Sentinel 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
cingtgtvariable while(variable ! sentinel) . .
. cingtgt variable
13Flag 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
-
14EOF Controlled Loops
Do you need to know how many items are in the
file? Why? Why not?
15Testing 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
16Testing 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
17EOF Controlled Loops
- Can also be used in keyboard entry
situationscingtgtvariable - while(cin)
- . . .
- cingtgtvariable // Ctrl-Z to signify eof
-
- Although a sentinel controlled loop might be more
user friendly
18EOF 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())
coutltltch infile.get(ch)
19A 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
20The for ( ) Loop
- Example -- what gets printed?
How did it Happen?
- x gets initialized
- value of x inspected
- x gets incremented
21The 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
22for 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?
23A 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
24The Do-While Statement
- Condition tested at end/bottom of loop
- Guarantees loop body executes at least once
25The do-while Illustrated
Note alwaysat least oneiteration
Loop Iteration
Loop Entry
Loop Exit
Loop Trest
26The Do-While Statement
- Can be used for a counting loop
What gets printed??
How do you change it to go 10 times?
27The Do While Statement
- This logic sometimes more suitable for some
algorithms - Example trap for valid input
do cout ltlt Enter value (1 - 5) -gt cin
gtgt value if (value lt 1 value gt 5)
cout ltlt Invalid input\a ltlt endl while
(value lt 1 value gt 5)
What makes this easier than the while ( ) loop
for this task?
28do-while Loop vs. while Loop
- PRE-TEST loop (entry-condition)
- The looping condition is tested before executing
the loop body. - Loop body may not be executed at all.
- POST-TEST loop (exit-condition)
- The looping condition is tested after executing
the loop body. - Loop body is always executed at least once.
29The 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
30The 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
31Guidelines 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 gt use while
32Testing 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
33Testing 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
34Testing 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