Java Reference
In-Depth Information
Process 0;
Process 1;
Process n-1;
We can easily write down a postcondition for the loop:
See lesson page
7-3 to obtain
the schema.
0..n-1 have been processed
To develop a loop invariant, we make a copy of the postcondition and replace n
in it by a fresh variable k :
invariant: 0..k-1 have been processed
How does it start? The invariant has the nice property that assigning 0 to k
truthifies it, because the invariant then means that no natural numbers have been
processed.
When does it stop? The loop should stop when k=n because then the
invariant implies that the postcondition is true. So, the loop should continue as
long as k!=n .
How does it make progress? Variable k starts out at 0 and is supposed to
end up at n , so to make progress, increment k .
How does it fix the invariant? Since k is being incremented, the next num-
ber must be processed. The invariant tells us that the next number is k .
This leads to the loop schema of Fig. 7.2.
7.4.2
A loop to count the w's
We write a loop to count the number of w 's in a string s , starting with the schema
of Fig. 7.2. We can use this schema because the task is to process the characters
of s , and these have numbers in the range 0..s.length()-1 , so we are really
processing the integers in this range.
The first step is to rewrite the schema in the context of our problem. We
begin by replacing n in the schema by s.length() .
Activity
7-3.2
// Process the n natural numbers 0..n-1 (for n≥0)
int k= 0;
// { invariant: 0..k-1 have been processed }
while (k != n) {
Process k;
k= k + 1;
}
// { 0..n-1 have been processed }
Figure 7.2:
A schema to process natural numbers 0..n-1
Search WWH ::

Custom Search