(Latest Revision: Sun Nov 4 15:54:53 PST 2007 )
======================
LOOPS - Section 2.3
======================
Examples:
#1: WHILE-LOOP CODE:
/*
initialization - not part of the loop - just
getting N ready for use in the loop.
*/
N = 5 ;
/* The code in between the lines below is
considered one statement. Execution begins on
the line starting with the keyword [while].
The expression inside parentheses is checked
(in this case N > 0).
If true, then the loop continues:
execution next proceeds to the statements
inside the braces following the keyword
[while], and then back to the line
starting with the keyword [while] - as
before.
If false, then execution of the loop is terminated:
execution skips the statements inside braces and
proceeds to whatever comes after the loop
(in this case the cout << endl << endl statement).
*/
/* ------------------------------------------ */
while (N > 0)
{
cout << "WHILE-LOOP! " ;
N = N - 1 ;
}
/* ------------------------------------------ */
cout << endl << endl ;
WHAT IS THE OUTPUT?
WHILE-LOOP! WHILE-LOOP! WHILE-LOOP! WHILE-LOOP! WHILE-LOOP!
Comment: Notice that when the loop executes it is
possible that the statements inside the
braces may not execute even once. Notice
there is no semi-colon after while (N
> 0) - very important there NOT be a
semi-colon there.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#2: DO-LOOP CODE:
/*
initialization - not part of the loop - just
getting N ready for use in the loop.
*/
N = 4 ;
/* The code in between the lines below is
considered one statement. Execution begins
with the first statement inside the { } braces.
The statements inside the braces are executed
in the normal order determined by C++ syntax.
After execution reaches the end of the set of
statements inside the braces, the expression
after the keyword [while] is evaluated (in this
case N > 0).
If true, then the loop continues:
execution next proceeds to the statements
inside the braces following the keyword
[do], and then back to the line starting
with the keyword [while] - as before.
If false, then execution of the loop is terminated:
execution proceeds to whatever comes after
the loop (in this case the cout <<
endl << endl statement).
*/
/* ------------------------------------------ */
do
{
cout << "DO-LOOP! " ;
N = N - 1 ;
}
while (N > 0) ;
/* ------------------------------------------ */
cout << endl << endl ;
WHAT IS THE OUTPUT?
DO-LOOP! DO-LOOP! DO-LOOP! DO-LOOP!
Comment: Notice that when the loop executes, the
statements inside the braces must execute
at least once. Notice there IS a
semi-colon after while (N > 0) - very
important that the semi-colon be there.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#3: FOR-LOOP CODE:
FORMAT: for
(
Initialization_Action ;
Boolean_Expression - condition for continuing ;
Update_Action
)
single- or compound-statement
/* The code in between the lines below is
considered one statement. The for-loop
executes like this:
1. Do the action called for by the first item
in the parenthesized list (the one following
the keyword [for] (in this case N = 0).
2. Next the value of the second item in that
list is checked to determine whether true or
false (in this case N < 3).
3. If true, then
execute the statements inside the
braces, execute the action(s) called
for by the third item in the
parenthesized list (in this case N++),
and then go back to step 2.
4. else the value is false and execution of the loop terminates:
execution skips the statements inside
braces and proceeds to whatever comes
after the loop
(in this case the cout << endl << endl statement).
*/
/* ------------------------------------------ */
for (N = 0; N < 3; N++)
{
cout << "FOR-LOOP! " ;
}
/* ------------------------------------------ */
cout << endl << endl ;
WHAT IS THE OUTPUT?
FOR-LOOP! FOR-LOOP! FOR-LOOP!
Comment: Some people consider the FOR-LOOP to be a
way to do "WHILE-LOOPING," but with a
simplified syntax. On the other hand,
some people prefer to use WHILE-LOOPS.
Basically, a FOR-LOOP can do anything a
WHILE-LOOP can do, and vice-versa.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Exercise #24 on page 69 of Savitch:
What is the output of this code?
int x = 10 ;
do
{
cout << x << endl ;
x = x - 3 ;
} while (x > 0) ;
Here's how to carefully "desk check"
Do a time line:
x == 10
go to top of statement list
output 10
x == 7
check x > 0 -- answer: true
return to top of statement list
output 7
x == 4
check x > 0 -- answer: true
return to top of statement list
output 4
x == 1
check x > 0 -- answer: true
return to top of statement list
output 1
x == -2
check x > 0 -- answer: false
do not return to top of statement list - go on to
next statement below.
Summary of outputs:
10
7
4
1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
When you start experimenting with writing loops in
your programs, be ready for the possibility of an
"infinite loop".
Savitch's Example:
x = 2;
while (x != 12)
{
cout << x << endl ;
x = x + 2 ;
}
The code above correctly prints out the first five
positive even integers: 2, 4, 6, 8, 10. Suppose
the programmer decides to modify the code to print
out the first five positive odd integers, and
makes this change:
x = 1; // different initial value for x
while (x != 12)
{
cout << x << endl ;
x = x + 2 ;
}
Maybe this looks like it ought to work OK. We can
compile and execute a program containing this
code. It would be natural to do that as a way to
test it. However if we do that the code will "run
away". There is nothing built into the loop to
make it stop. It is an example of what we call an
"infinite loop". When you run this you will just
see an unending stream of odd numbers.
Another example might be this:
x = 2;
while (x != 12) ; // Error - the semi-colon on this line
{
cout << x << endl ;
x = x + 2 ;
}
This is also an "infinite loop." This one doesn't
do anything. So if you run a program with this
loop inside, you will just see the cursor blinking
off and on seemingly without end.
If you make a mistake and execute a program
containing an infinite loop, what should you do?
The answer is: abort the program by doing a
control-C.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
The commands below are seldom used (and probably
should never be used in loops)
break: ends the nearest enclosing switch or
loop statement
continue: ends the current iteration of the
nearest enclosing loop.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
====================================
Suggested Exercise
====================================
Design the loop required for problem #1 on page 87
- For, While, and Do Loop versions