I am reading the book "How to solve it by computer" by RG Dromey. I am stuck on a sentence that is trying to explain termination of loops. Here goes the problem:
Suppose we wish to establish that an array of
n
elements is in strictly ascending order (i.e.a[1] < a[2] < ... < a[n]
) . To do this we can use the following instructions:a[n+1] := a[n]; i := 1; while a[i] < a[i+1] do i := i+1
(Now if n
is the number of elements, what does i
stand for in this case? Does it stand for values?)
If
n
was assigned the value 5 and the data set was 2, 3, 5, 11, 14, then the first assignment prior to the loop would result in the array configuration below:
(This is where I get confused.)
a[1] a[2] a[3] a[4] a[5] a[6] 2 3 5 11 14 14
The two 14's guarantee that the test
a[i] < a[i+1]
will be false wheni = n
and so the loop will terminate correctly wheni = n
if not before.
(This is confusing.)
i is simply the index
i := 1; means i is equal 1
i := i+1 means add 1 to i
n = 5
a[5] = 14
a[5+1] = a[6] = 14
14 < 14 is false - the loop terminates