4.5. while Repetition
Statement
A repetition
statement (also called a looping
statement or a loop) allows you to specify that a program should repeat an
action while some condition remains true.
As an example of C++'s while repetition statement, consider a program segment designed
to find the first power of 3 larger than 100. Suppose the integer variable
product has been initialized to 3. When the
following while repetition statement finishes executing,
product contains the result:
int product = 3;
while ( product <= 100 )
product = 3 * product;
When the while statement begins execution, the value
of product is 3. Each repetition of the while multiplies
product by 3, so product takes on the values 9, 27,
81 and 243 successively. When product becomes 243, the condition—product
<= 100—becomes false. This terminates the repetition, so the
final value of product is 243. At this point,
program execution continues with the next statement after the while
statement.
Common Programming Error 4.5
|
Not providing, in the body of a
while statement, an action that eventually causes
the condition in the while to become false
normally results in an infinite loop, in which the repetition statement never
terminates. |
The UML activity diagram of Fig. 4.5 illustrates the flow of
control that corresponds to the preceding while statement. Once again, the symbols in the diagram
(besides the initial state, transition arrows, a final state and three notes)
represent an action state and a decision. This diagram also introduces the UML's
merge symbol, which joins two flows of activity into one flow of
activity. The UML represents both the merge symbol and the decision symbol as
diamonds. In this diagram, the merge symbol joins the transitions from the
initial state and from the action state, so they both flow into the decision
that determines whether the loop should begin (or continue) executing. The
decision and merge symbols can be distinguished by the number of "incoming" and
"outgoing" transition arrows. A decision symbol has one transition arrow
pointing to the diamond and two or more transition arrows pointing out from the
diamond to indicate possible transitions from that point. In addition, each
transition arrow pointing out of a decision symbol has a guard condition next to
it. A merge symbol has two or more transition arrows pointing to the diamond and
only one transition arrow pointing from the diamond, to indicate multiple
activity flows merging to continue the activity. Note that, unlike the decision
symbol, the merge symbol does not have a counterpart in C++ code. None of the
transition arrows associated with a merge symbol have guard conditions.

The diagram of Fig. 4.5
clearly shows the repetition of the while
statement discussed earlier in this section. The transition arrow emerging from
the action state points to the merge, which transitions back to the decision
that is tested each time through the loop until the guard condition product
> 100 becomes true. Then the while
statement exits (reaches its final state) and control passes to the next
statement in sequence in the program.