1
Looping
2
Chapter 6 Topics
While Statement Syntax
Phases of Loop Execution
Two Types of Loops,Count-Controlled Loops
&Event-Controlled Loops
Using the End-of-File Condition to Control
Input Data
Using a While Statement for Summing and
Counting
How to Design Loops
Nested While Loops
Loop Testing and Debugging
3
A loop is a repetition control
structure.
it causes a single statement or block
to be executed repeatedly
What is a loop?
4
While Statement
SYNTAX
while ( Expression )
{,
,// loop body
.
}
NOTE,Loop body can be a single
statement,a null statement,or a block.
5
When the expression is tested and found to be
false,the loop is exited and control passes to
the statement which follows the loop body.
WHILE LOOP
FALSE
TRUE
body
statement
Expression
6
A Comparison of If and While
If (Expression)
Statement1
Statement2
false true
While (Expression)
Statement1
Statement2
false true
IF-THEN SRATEMENT WHILE STATEMENT
7
Phases of Loop Execution
Loop entry
Iteration
Loop test
Loop exit
Termination
8
Two Types of Loops
count controlled loops
repeat a specified number of times
event-controlled loops
some condition within the loop body
changes and this causes the repeating to
stop
9
an initialization of the loop control variable
an expression to test for continuing the loop
an update of the loop control variable to be
executed with each iteration of the body
Count-controlled loop contains
10
int count ;
count = 4; // initialize loop variable
while (count > 0) // test expression
{
cout << count << endl ; // repeated action
count -- ; // update loop variable
}
cout <<,Done” << endl ;
Count-controlled Loop
11
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
count
12
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
count
4
13
Count-controlled Loop
int count ;
count = 4;
while (count > 0) TRUE
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
count
4
14
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
count
4
15
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
count
3
16
Count-controlled Loop
int count ;
count = 4;
while (count > 0) TRUE
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
count
3
17
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
3
count
3
18
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
3
count
2
19
Count-controlled Loop
int count ;
count = 4;
while (count > 0) TRUE
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
3
count
2
20
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
3
2
count
2
21
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
3
2
count
1
22
Count-controlled Loop
int count ;
count = 4;
while (count > 0) TRUE
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
3
2
count
1
23
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
3
2
1
count
1
24
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
3
2
1
count
0
25
Count-controlled Loop
int count ;
count = 4;
while (count > 0) FALSE
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
3
2
1
count
0
26
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout << count << endl ;
count -- ;
}
cout <<,Done” << endl ;
OUTPUT
4
3
2
1
Done
count
0
27
myInfile contains 100 blood pressures
Use a while loop to read the 100 blood
pressures and find their total
Count-Controlled Loop Example
28
ifstream myInfile ;
int thisBP ;
int total ;
int count ;
count = 0 ; // initialize
while ( count < 100 ) // test expression
{
myInfile >> thisBP ;
total = total + thisBP ;
count++ ; // update
}
cout <<,The total =,<< total << endl ;
29
Event-controlled Loops
Sentinel controlled
keep processing data until a special value
which is not a possible data value is entered
to indicate that processing should stop
End-of-file controlled
keep processing data as long as there is more
data in the file
Flag controlled
keep processing data until the value of a flag
changes in the loop body
30
Examples of Kinds of Loops
Count controlled loop Read exactly 100
blood pressures
from a file.
End-of-file controlled
loop
Read all the blood
pressures from a
file no matter how
many are there.
31
Examples of Kinds of Loops
Sentinel controlled
loop
Read blood pressures
until a special value
(like -1) selected by you
is read.
Flag controlled
loop
Read blood pressures
until a dangerously high
BP (200 or more) is
read.
32
A Sentinel-controlled Loop
requires a,priming read”
“priming read” means you read one
set of data before the while
33
// Sentinel controlled loop
total = 0;
cout <<,Enter a blood pressure (-1 to stop ),;
cin >> thisBP;
while (thisBP != -1) // while not sentinel
{
total = total + thisBP;
cout <<,Enter a blood pressure (-1 to stop ),;
cin >> thisBP;
}
cout << total;
34
End-of-File Controlled Loop
depends on fact that a file goes into
fail state when you try to read a data
value beyond the end of the file
35
// End-of-file controlled loop
total = 0;
myInfile >> thisBP; // priming read
while (myInfile) // while last read successful
{
total = total + thisBP;
myInfile >> thisBP; // read another
}
cout << total;
36
//End-of-file at keyboard
total = 0;
cout <<,Enter blood pressure (Ctrl-Z to stop)”;
cin >> thisBP; // priming read
while (cin) // while last read successful
{
total = total + thisBP;
cout <<,Enter blood pressure”;
cin >> thisBP; // read another
}
cout << total;
37
Flag-controlled Loops
you initialize a flag (to true or false)
use meaningful name for the flag
a condition in the loop body changes
the value of the flag
test for the flag in the loop test
expression
38
countGoodReadings = 0;
isSafe = true; // initialize Boolean flag
while (isSafe)
{
cin >> thisBP;
if ( thisBP >= 200 )
isSafe = false; // change flag value
else
countGoodReadings++;
}
cout << countGoodReadings << endl;
39
count all data values
count special data values
sum data values
keep track of previous and current values
Looping Subtasks
Loops often used to
40
Previous and Current Values
write a program that counts the number
of != operators in a program file
read one character in the file at a time
keep track of current and previous
characters
41
Keeping Track of Values
(x != 3)
{
cout << endl;
}
FILE CONTENTS
previous current count
( x 0
! = 1
= ‘ ‘ 1
x 0
3 ) 1
‘ ‘ 3 1
‘ ‘ ! 0
42
int count;
char previous;
char current;
count = 0 ;
inFile.get (previous); // priming reads
inFile.get(current);
while (inFile)
{ if ( (current ==?=?) && (previous ==?!?) )
count++;
previous = current; // update
inFile.get(current); // read another
}
43
How to Design Loops
Designing the Flow of Control
Designing the Process Within the Loop
The Loop Exit
44
initialize outer loop
while ( outer loop condition )
{,,,
initialize inner loop
while ( inner loop condition )
{
inner loop processing and update
}
.,,
}
Pattern of a Nested Loop
45
Patient Data
A file contains blood pressure data for
different people,Each line has a patient
ID,the number of readings for that
patient,followed by the actual readings.
ID howMany Readings
4567 5 180 140 150 170 120
2318 2 170 210
5232 3 150 151 151
46
4567 152
2318 190
5232 151
.,
.,
.,
There were 432 patients in file.
Read the data and display a chart
Patient ID BP Average
47
Algorithm Uses Nested Loops
initialize patientCount to 0
read first ID and howMany from file
while not end-of-file
increment patientCount
display ID
use a count-controlled loop to read and sum
up this patient’s howMany BP’s
calculate and display average for patient
read next ID and howMany from file
display patientCount
48
To design a nested loop
begin with outer loop
when you get to where the inner loop
appears,make it a separate module and
come back to its design later
49
#include <iostream>
#include <fstream>
using namespace std;
int main ( )
{
int patientCount; // declarations
int thisID;
int howMany;
int thisBP;
int totalForPatient;
int count;
float average;
ifstream myInfile;
50
myInfile.open(“A:\\BP.dat”);
if (!myInfile ) // opening failed
{
cout <<,File opening error,Program terminated.”;
return 1;
}
cout <<,ID Number Average BP” << endl;
patientCount = 0;
myInfile >> thisID >> howMany; // priming read
51
while ( myInfile ) // last read successful
{
patientCount++;
cout << thisID;
totalForPatient = 0; // initialize inner loop
count = 0;
while ( count < howMany)
{
myInfile >> thisBP;
count ++;
totalForPatient = totalForPatient + thisBP;
}
average = totalForPatient / float(howMany);
cout << int (average +,5) << endl; // round
myInfile >> thisID >> howMany; // another read
}
52
cout <<,There were,<<
patientCount
<<,patients on file.” << endl;
cout <<,Program terminated.\n”;
return 0;
}
53
Information About 20 Books in
Diskfile
,A:\\myIn.dat”
3.98 P <eoln>
7.41 H <eoln>
8.79 P <eoln>
.
.
.
Price of book Hardback orPaperback?
WRITE A PROGRAM TO FIND TOTAL VALUE OF ALL BOOKS
54
#include <iostream> // for cout
#include <fstream> // for file I/O
using namespace std;
int main (void)
{
float price ; // declarations
char kind ;
ifstream myInfile ;
float total = 0.0 ;
int count = 1;
Program to Read Info about 20
Books From a Disk File
55
Rest of Program
myInfile.open(“A:\\myIn.dat”) ;
// count-controlled processing loop
while ( count <= 20 )
{
myInfile >> price >> kind ;
total = total + price ;
count ++ ;
}
cout <<,Total is:,<< total << endl ;
myInfile.close( ) ;
return 0 ;
}
56
Trace of Program Variables
so loop terminates
count price kind total
0.0
1 3.98?P? 3.98
2 7.41?H? 11.39
3 8.79?P? 20.18
4 etc.
20
21
57
Complexity
is a measure of the amount of work
involved in executing an algorithm
relative to the size of the problem
58
Polynomial Times
N N0 N1 N2 N3
constant linear quadratic cubic
1 1 1 1 1
10 1 10 100 1,000
100 1 100 10,000 1,000,000
1,000 1 1,000 1,000,000 1,000,000,000
10,000 1 10,000 100,000,000 1,000,000,000,000
59
Loop Testing and Debugging
test data should test all sections of program
beware of infinite loops -- program doesn?t stop
check loop termination condition,and watch for,off-
by-1” problem
use get function for loops controlled by detection of
\n? character
use algorithm walk-through to verify preconditions
and postconditions
trace execution of loop by hand with code walk-
through
use a debugger to run program in,slow motion” or
use debug output statements