int counter - KSU Web Home

Lecture 4A
Repetition
Richard Gesick
CSE 1311
Overview
• Iteration
• 3 kinds of loops
– for
– while
– do while
• Infinite Loops
CSE 1311
Example: Computing Velocity over a Range of Time.
• Sequential structures
are not well suited for
computing the same
quantities repeatedly.
• Flow charts and
pseudocode are useful
to describe repetition.
CSE 1311
Looping
• In computing, we often need to perform the same
operations on multiple items.
• Typically, these tasks follow this pattern:
– initialize values
(set total to 0)
– process items one at a time (add price to total)
– report results
(report total)
The flow of control that programmers use to
complete jobs with this pattern is called looping,
or repetition.
CSE 1311
Iteration
• One thing that computers do well is repeat
commands
• Programmers use loops to accomplish this
• 3 kinds of loops in C++
– for loop
– while loop
– do while loop
CSE 1311
Criteria for loops
1.Usually have some initial condition
• Starting a counter
• Beginning in a certain state
2.Must have a test to continue
3.Must make progress towards finishing
CSE 1311
Loops in Everyday Life
• Bad children are told to write sentences on
the board
“I will not pour Clorox in the fish tank”
• Have to write this sentence either
– A certain number of times
– Until the teacher is happy
– As many as you can during break
CSE 1311
The for Loop
• Ideal when you know the number of iterations
to perform before the loop begins
• Examples:
– Find the sum of 5 numbers
– Find the maximum of 20 numbers
– Print the odd numbers from 1 to 10
CSE 1311
The for loop
• Good when you know exactly how many times you
need to execute something
• Has format:
for (<initialization>; <test to continue>; <increment>) {
// everything in here is what is repeated
// over and over again
}
• Initialization is where the counter is given a starting value
• The test determines whether or not to continue
• The increment can be any amount, including negative, and
occurs after the loop statements execute
CSE 1311
More for Loop Syntax
for ( initialization; loop condition; loop update )
{
// loop body
}
Notes:
• semicolons separate terms in the loop header
• no semicolon follows the loop header
• curly braces are required only if more than
one statement is in the loop body
CSE 1311
for Loop Flow of Control
CSE 1311
for Loop Flow of Control
1. The initialization statement is executed (once
only).
2. The loop condition is evaluated. If the condition
is true, the loop body is executed.
3. The loop update statement is executed, and the
loop condition is reevaluated (#2).
• And so on, until the condition is false.
CSE 1311
Satisfying the Teacher
• Example: 1000 sentences? No problem…
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<“I will not pour Clorox…”<<endl;
}
// Remember, counter++ is the same as
// counter = counter + 1
CSE 1311
“But I want them numbered!”
• No problem…
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
counter
1
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
counter
true
1
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
counter
1
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
Output: 1 I will not pour Clorox in the Fish Tank
CSE 1311
Why this works
counter
2
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
counter
true
2
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
counter
2
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
Output: 2 I will not pour Clorox in the Fish Tank
CSE 1311
Why this works
counter
3
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
counter
true
3
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
counter
3
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
Output: 3 I will not pour Clorox in the Fish Tank
CSE 1311
Why this works
counter
4
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
When will it end?
• We see that this will go on for a while
• It’s a little more interesting later around
1000
CSE 1311
Why this works
counter
true
999
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
counter
999
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
Output: 999 I will not pour Clorox in the Fish Tank
CSE 1311
Why this works
counter
1000
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
true for last time
counter
1000
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
(are we finished?)
counter
1000
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
Output: 1000 I will not pour Clorox in the Fish Tank
CSE 1311
Why this works
counter
1001
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
}
CSE 1311
Why this works
false
counter
1001
int counter;
for (counter = 1; counter <= 1000; counter++) {
cout<<counter<<“ I will not pour…”<<endl;
} // Jump down here and continue
…
…
CSE 1311
Final Output
1 I will not pour Clorox in the fish tank.
2 I will not pour Clorox in the fish tank.
3 I will not pour Clorox in the fish tank.
4 I will not pour Clorox in the fish tank.
.
.
.
999 I will not pour Clorox in the fish tank.
1000 I will not pour Clorox in the fish tank.
CSE 1311
Another Example of Repetition
int num;
for ( num = 1 ; num <= 3 ; num++ )
{
cout<<num << “ Potato”<<endl;
}
CSE 1311
num
?
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
CSE 1311
num
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
CSE 1311
1
num
int num;
true
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
CSE 1311
1
num
1
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
1Potato
CSE 1311
num
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
1Potato
CSE 1311
2
num
int num;
true
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
1Potato
CSE 1311
2
num
2
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
1Potato
2Potato
CSE 1311
num
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
1Potato
2Potato
CSE 1311
3
num
int num;
true
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
1Potato
2Potato
CSE 1311
3
num
3
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
1Potato
2Potato
3Potato
CSE 1311
num
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
1Potato
2Potato
3Potato
CSE 1311
4
num
int num;
false
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
OUTPUT
1Potato
2Potato
3Potato
CSE 1311
4
num
int num;
false
for ( num = 1 ; num <= 3 ; num++ )
cout<<num << “ Potato”<<endl;
When the loop control condition is evaluated
and has value false, the loop is said to be
“satisfied” and control passes to the
statement following the For statement.
CSE 1311
4
The output was:
1Potato
2Potato
3Potato
CSE 1311
int count ;
for ( count = 4 ; count > 0 ; count-- )
{
cout<<count<<endl;
}
cout<<“Done”<<endl;
OUTPUT:
CSE 1311
4
3
2
1
Done
The while Loop
• The while loop is designed for repeating a set of
operations on data items when we don't know how
many data items there will be.
• We will get some signal when we have reached the
end of the items to process.
• The end of data items could be indicated by a special
input value called a sentinel value or by reaching the
end of a file
• Receiving the signal is an event; we call this eventcontrolled looping
CSE 1311
The while loop
• Good for when you don’t know how many
times to repeat
• Teacher says “Write until I’m happy”
• Has format:
while (<boolean value>) {
// stuff to repeat over and over
}
CSE 1311
The while Statement
Syntax:
while (boolean_expression)
statement;
while (boolean_expression) {
statement1;
…
statement_n;
}
Examples
while (!isspace(ch))
cin.get(ch); //statement repeated until a
// space character is read
while (x>y) {
++cl;
--x;
}
//statement block executed
//while x>0
CSE 1311
Operation of the while Loop
• If the condition evaluates to true, the loop body is
executed, then the condition is re-evaluated.
• As long as the condition evaluates to true, we continue
to repeat the loop body.
• The loop body must "update the loop condition"; that
is, it must perform some operation that eventually will
cause the loop condition to evaluate to false
• Typically, the loop update will be an attempt to read
the next input value, in order to detect the sentinel
value or the end of the file.
CSE 1311
Loop Characteristics
All loops have the following three
characteristics:
• initialization
• test
• update
CSE 1311
Count-controlled Loop
int count ;
count = 4;
// initialize loop variable
while (count > 0)
// test expression
{
cout<<count<<endl; // repeated action
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
// update loop variable
Count-controlled Loop
int count ;
count
count = 4;
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
Count-controlled Loop
int count ;
count
count = 4;
4
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
Count-controlled Loop
int count ;
count
count = 4;
4
while (count > 0)
TRUE
OUTPUT
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
Count-controlled Loop
int count ;
count
count = 4;
4
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
Count-controlled Loop
int count ;
count = 4;
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
count
3
OUTPUT
4
Count-controlled Loop
int count ;
count
count = 4;
3
while (count > 0)
TRUE
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
Count-controlled Loop
int count ;
count
count = 4;
3
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
3
Count-controlled Loop
int count ;
count
count = 4;
2
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
3
Count-controlled Loop
int count ;
count
count = 4;
2
TRUE
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
3
Count-controlled Loop
int count ;
count
count = 4;
2
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
3
2
Count-controlled Loop
int count ;
count
count = 4;
1
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
3
2
Count-controlled Loop
int count ;
count
count = 4;
1
while (count > 0)
TRUE
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
3
2
Count-controlled Loop
int count ;
count
count = 4;
1
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
3
2
1
Count-controlled Loop
int count ;
count
count = 4;
0
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
3
2
1
Count-controlled Loop
int count ;
count
count = 4;
0
FALSE
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
3
2
1
Count-controlled Loop
int count ;
count
count = 4;
0
while (count > 0)
{
cout<<count<<endl;
count -- ;
}
cout<<“Done”<<endl;
CSE 1311
OUTPUT
4
3
2
1
Done
Example: Re-Writing 1-1000
(using a while loop)
int counter = 1;
counter
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
}
CSE 1311
Example: Re-Writing 1-1000
(using a while loop)
int counter = 1;
counter
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
}
CSE 1311
Example: Re-Writing 1-1000
(using a while loop)
int counter = 1;
counter
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
}
Output: 1 I will not pour Clorox in the fish tank
CSE 1311
Example: Re-Writing 1-1000
(using a while loop)
int counter = 1;
counter
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
}
CSE 1311
Example: Re-Writing 1-1000
(using a while loop)
int counter = 1;
counter
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
}
CSE 1311
Example: Re-Writing 1-1000
(using a while loop)
int counter = 1;
counter
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
}
Output: 1 I will not pour Clorox in the fish tank
CSE 1311
Example: Re-Writing 1-1000
(using a while loop)
int counter = 1;
counter
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
}
CSE 1311
Example: Re-Writing 1-1000
(using a while loop)
int counter = 1;
counter
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
}
CSE 1311
Example: Re-Writing 1-1000
(using a while loop)
int counter = 1;
counter
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
}
Output: 1 I will not pour Clorox in the fish tank
CSE 1311
Infinite Loops
•
•
•
•
This loop isn’t making a lot of progress!
Loops that repeat forever are called infinite loops
Apparently “lock up”
Output:
1 I will not pour Clorox in the fish tank
1 I will not pour Clorox in the fish tank
1 I will not pour Clorox in the fish tank
1 I will not pour Clorox in the fish tank
.
.
.
CSE 1311
}
Continue
forever
Problem Solved…
counter
int counter = 1;
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
Problem Solved…
counter
int counter = 1;
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
Problem Solved…
counter
int counter = 1;
1
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
Output: 1 I will not pour Clorox in the fish tank
CSE 1311
Problem Solved…
counter
int counter = 1;
2
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
// Remember, counter++ is the same as
// counter = counter + 1
CSE 1311
Example: Re-Writing 1-1000
(using a while loop)
int counter = 1;
counter
2
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
Problem Solved…
int counter = 1;
counter
2
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
Problem Solved…
int counter = 1;
counter
2
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
Output: 2 I will not pour Clorox in the fish tank
CSE 1311
Problem Solved…
int counter = 1;
counter
3
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
How does it end?
int counter = 1;
counter
999
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
How does it end?
int counter = 1;
counter
999
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
How does it end?
int counter = 1;
counter
999
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
Problem Solved…
int counter = 1;
counter
999
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
Output: 999 I will not pour Clorox in the fish tank
CSE 1311
How does it end?
int counter = 1;
counter
1000
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
How does it end?
int counter = 1;
counter
1000
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
How does it end?
int counter = 1;
now false
counter
1000
while (counter < 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
// So we never print out
// 1000 I will not pour Clorox in the fishtank
CSE 1311
Another Problem Solved
int counter = 1;
counter
now true
1000
while (counter <= 1000) {
cout<<counter<< “ I will not…”<<endl;
counter++;
}
CSE 1311
Example
bool teacherHappy = false;
int lineNumber = 1;
while (!teacherHappy) {
cout<<lineNumber << “ I will not…”<<endl;
lineNumber++;
teacherHappy = attitudeFunction ( );
}
// assume attitudeFunction can change
// teacherHappy
CSE 1311
The do-while loop
• Similar to while loop
• Must execute at least one time (test is at
bottom)
• Has format:
do {
}while (<boolean value>);
CSE 1311
Example
(count from 1 to 3)
int counter = 0;
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
CSE 1311
counter
0
Example
(count from 1 to 3)
int counter = 0;
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
CSE 1311
counter
0
Example
(count from 1 to 3)
int counter = 0;
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
CSE 1311
counter
1
Example
(count from 1 to 3)
int counter = 0;
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
Output: 1
CSE 1311
counter
1
Example
(count from 1 to 3)
int counter = 0;
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
CSE 1311
counter
1
Example
(count from 1 to 3)
int counter = 0;
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
CSE 1311
counter
2
Example
(count from 1 to 3)
int counter = 0;
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
Output: 2
CSE 1311
counter
2
Example
(count from 1 to 3)
int counter = 0;
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
CSE 1311
counter
2
Example
(count from 1 to 3)
int counter = 0;
counter
3
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
// Note: counter is now 3, but we still have
// to finish out the loop – it doesn’t skip
CSE 1311
Example
(count from 1 to 3)
int counter = 0;
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
Output: 3
CSE 1311
counter
3
Example
(count from 1 to 3)
counter
int counter = 0;
do {
counter++;
cout<<counter<<endl;
} while (counter < 3);
now false, so loop is finished
CSE 1311
3
Summary
• for loops good for when you know how many
times you want to repeat
• while and do-while good for when you don’t
• All loops must finish, or they become infinite
loops
• All loops must have a test to continue, or they
become infinite loops
CSE 1311