Download - Chapter 6 Looping
![Page 1: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/1.jpg)
Chapter 6
Looping
![Page 2: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/2.jpg)
2
Chapter 6 Topics
While Statement Syntax Count-Controlled Loops Event-Controlled Loops Using the End-of-File Condition to Control
Input Data
![Page 3: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/3.jpg)
3
Chapter 6 Topics
Using a While Statement for Summing and Counting
Nested While Loops Loop Testing and Debugging
![Page 4: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/4.jpg)
4
What is a loop?
A loop is a repetition control structure that causes a single statement or block to be executed repeatedly
Loops
![Page 5: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/5.jpg)
5
Two Types of Loops
Count controlled loopsRepeat a statement or block a specified number of times
Event-controlled loopsRepeat a statement or block until a condition within the loop body changes that causes the repetition to stop
![Page 6: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/6.jpg)
6
While StatementSYNTAX
while (Expression)
{ .
. // loop body
.
}
Loop body can be a single statement, a null statement, or a block
![Page 7: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/7.jpg)
7
• When the expression is tested and found to be false, the loop is exited and control passes to the statement that follows the loop body
WHILE LOOP
FALSE
TRUE
bodystatement
Expression
![Page 8: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/8.jpg)
8
Count-controlled loops contain: An initialization of the loop control
variable An expression to test if the proper
number of repetitions has been completed
An update of the loop control variable to be executed with each iteration of the body
Count-Controlled Loops
![Page 9: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/9.jpg)
9
int count; // Loop-control variable
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 Example
![Page 10: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/10.jpg)
10
Count-controlled Loop
int count;
count = 4;
while(count > 0)
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
count
![Page 11: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/11.jpg)
11
Count-controlled Loopint count;
count = 4;
while(count > 0)
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
count
4
![Page 12: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/12.jpg)
12
Count-controlled Loop
int count;
count = 4;
while(count > 0) TRUE
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
count
4
![Page 13: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/13.jpg)
13
Count-controlled Loop
int count;
count = 4;
while(count > 0){ cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4
count
4
![Page 14: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/14.jpg)
14
Count-controlled Loopint count;
count = 4;
while(count > 0)
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4
count
3
![Page 15: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/15.jpg)
15
Count-controlled Loopint count;
count = 4;
while(count > 0) TRUE
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4
count
3
![Page 16: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/16.jpg)
16
Count-controlled Loop
int count;
count = 4;
while(count > 0)
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4 3
count
3
![Page 17: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/17.jpg)
17
Count-controlled Loop
int count;
count = 4;
while(count > 0)
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4 3
count
2
![Page 18: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/18.jpg)
18
Count-controlled Loopint count;
count = 4;
while(count > 0) TRUE
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4 3
count
2
![Page 19: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/19.jpg)
19
Count-controlled Loopint count;
count = 4;
while(count > 0){
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4 3 2
count
2
![Page 20: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/20.jpg)
20
Count-controlled Loopint count;
count = 4;
while(count > 0)
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4 3 2
count
1
![Page 21: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/21.jpg)
21
Count-controlled Loopint count;
count = 4;
while(count > 0) TRUE
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4 3 2
count
1
![Page 22: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/22.jpg)
22
Count-controlled Loop
int count;
count = 4;
while(count > 0)
{
cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4 3 2 1
count
1
![Page 23: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/23.jpg)
23
Count-controlled Loop
int count;
count = 4;
while(count > 0){ cout << count << endl;
count --;
}
cout << “Done” << endl;
OUTPUT
4 3 2 1
count
0
![Page 24: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/24.jpg)
24
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
![Page 25: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/25.jpg)
25
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
![Page 26: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/26.jpg)
26
myInfile contains 100 blood pressures
Use a while loop to read the 100 blood pressures and find their total
Example
![Page 27: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/27.jpg)
27
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;
![Page 28: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/28.jpg)
28
Types of Event-Controlled Loops
Sentinel controlled
Keep processing data until a special value that 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
28
![Page 29: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/29.jpg)
29
Examples of Kinds of Loops
Count controlled loop Read exactly 100 blood pressures from a file
End-of-file controlledloop
Read all the blood pressures from a file no matter how many are there
29
![Page 30: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/30.jpg)
30
Examples of Kinds of LoopsSentinel controlled loop
Read blood pressures until a special value selected by you(like -1) is read
Flag controlledloop
Read blood pressures until a dangerously high BP(200 or more) is read
30
![Page 31: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/31.jpg)
31
A Sentinel-controlled Loop
Requires a “priming read”
A priming read is the reading of one set of data before the loop to initialize the variables in the expression
![Page 32: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/32.jpg)
32
total = 0;
cout << “Enter a blood pressure(-1 to stop) ”;
cin >> thisBP;
// Sentinel controlled loop
![Page 33: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/33.jpg)
33
// Sentinel controlled loop, cont...
while(thisBP != -1) // While not sentinel
{
total = total + thisBP;
cout << “Enter a blood pressure(-1 to stop)”;
cin >> thisBP;
}
cout << total;
![Page 34: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/34.jpg)
34
End-of-File Controlled Loop
Uses the fact that a file goes into the fail state when you try to read a data value beyond the end of the file to control the loop
![Page 35: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/35.jpg)
35
total = 0;
myInfile >> thisBP; // Priming read
// End-of-file controlled loop
![Page 36: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/36.jpg)
36
// End-of-file controlled loop, cont...
while(cin) // While last read successful
{
total = total + thisBP;
cout << “Enter blood pressure”;
cin >> thisBP; // Read another
}
cout << total;
![Page 37: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/37.jpg)
37
// End-of-file at keyboardtotal = 0;
cout << “Enter blood pressure “
<< “(Ctrl-Z to stop)”;
cin >> thisBP; // Priming read
![Page 38: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/38.jpg)
38
// End-of-file at keyboard, cont...
while(cin) // While last read successful
{
total = total + thisBP;
cout << “Enter blood pressure”;
cin >> thisBP; // Read another
}
cout << total;
![Page 39: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/39.jpg)
39
Flag-controlled Loops
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
![Page 40: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/40.jpg)
40
Example of Flag-controlled Loop
countGoodReadings = 0;
isSafe = true; // Initialize Boolean flag
while(isSafe)
{
cin >> thisBP;
if (thisBP >= 200)
isSafe = false; // Change flag value
![Page 41: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/41.jpg)
41
Example, continued
else
countGoodReadings++;
}
cout << countGoodReadings << endl;
![Page 42: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/42.jpg)
42
Common Loop Uses
Count all data values
Count special data values
Sum data values
Keep track of current and previous values
![Page 43: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/43.jpg)
43
Current and Previous 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
![Page 44: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/44.jpg)
44
Keeping Track of Values
(x != 3) { cout << endl;}
FILE CONTENTS
previous current count
( x 0
! = 1
= ‘ ‘ 1
x ‘ ‘ 0
3 ) 1
‘ ‘ 3 1
‘ ‘ ! 0
44
![Page 45: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/45.jpg)
45
Loop Program Keeping Track of Current and Previous Values
int count;
char previous;
char current;
count = 0;
inFile.get(previous); // Priming reads
inFile.get(current);
![Page 46: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/46.jpg)
46
Keeping Track of Current and Previous Values , continued
while(inFile)
{
if((current == ‘=‘) && (previous == ‘!’))
count++;
previous = current; // Update
inFile.get(current); // Read another
}
![Page 47: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/47.jpg)
47
initialize outer loopwhile (outer loop condition){ . . .
initialize inner loopwhile(inner loop condition){ inner loop processing and update }
. . .}
Nested Loops
47
![Page 48: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/48.jpg)
48
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 1202318 2 170 2105232 3 150 151 151
![Page 49: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/49.jpg)
49
4567 1522318 1905232 151 . . . . . .There were 432 patients in file.
Read the data and display a chart
Patient ID BP Average
![Page 50: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/50.jpg)
50
Algorithm Initialize patientCount to 0 Read first ID and howMany from file
![Page 51: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/51.jpg)
51
Algorithim, cont...
While not end-of-file Increment patientCount Display ID Read and sum this patient’s BP’s Calculate and display average for
patient Read next ID and howMany from file
Display patientCount
![Page 52: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/52.jpg)
52
Designing Nested Loops
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
![Page 53: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/53.jpg)
53
Designed Nested Loop Example
#include <iostream>#include <fstream>
using namespace std;
![Page 54: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/54.jpg)
54
Designed Nested Loop Example
int main(){ int patientCount; // Declarations int thisID; int howMany; int thisBP; int totalForPatient; int count;
float average;
ifstream myInfile;
![Page 55: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/55.jpg)
55
Designed Nested Loop Example, cont....
myInfile.open(“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
![Page 56: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/56.jpg)
56
Designed Nested Loop Example, cont....
while(myInfile) // Last read successful
{ patientCount++; cout << thisID; totalForPatient = 0; // Initialize inner loop
count = 0; while(count < howMany) { myInfile >> thisBP; count ++; totalForPatient = totalForPatient + thisBP; }
![Page 57: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/57.jpg)
57
Designed Nested Loop Example, cont....
average = totalForPatient / float(howMany);
cout << int(average + .5) << endl; // Another read myInfile >> thisID >> howMany; }
cout << “There were “ << patientCount << “patients on file.” << endl;
cout << “Program terminated.” << endl;
return 0;
}
![Page 58: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/58.jpg)
58
Information About 20 Books in Diskfile
“myIn.dat”
3.98 P <eoln>7.41 H <eoln>8.79 P <eoln>
.
.
.
Price of bookHardback orPaperback?
Write a program to find total value of all books
![Page 59: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/59.jpg)
59
#include <iostream> // Access cout#include <fstream> // Access file I/O
using namespace std;
int main(void){ float price; // Declarations char kind; ifstream myInfile; float total = 0.0; int count = 1;
C++ Program
![Page 60: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/60.jpg)
60
C++ Program, cont...
myInfile.open(“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;}
![Page 61: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/61.jpg)
61
Trace of Program Variables
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 so loop terminates
![Page 62: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/62.jpg)
62
Complexity
Complexity is a measure of the amount of work involved in executing an algorithm relative to the size of the problem
![Page 63: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/63.jpg)
63
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
![Page 64: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/64.jpg)
64
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” bugs(OBOBs)
Use get function for loops controlled by detection of ‘\n’ character
![Page 65: Chapter 6 Looping](https://reader035.vdocument.in/reader035/viewer/2022062323/5681531f550346895dc14647/html5/thumbnails/65.jpg)
65
Loop Testing and Debugging
Use algorithm walk-through to verify pre- and post conditions
Trace execution of loop by hand with code walk-through
Use a debugger to run program in “slow motion” or use debug output statements