The loop is a common element in all programming languages. A loop can be used to iterate through an array, to perform an action a specific number of times, to read a file from disk...the possibilities are endless.
A D V E R T I S E M E N T
In this section, I will discuss the for loop, the while loop, and the repeat loop. For the most part they work in very similar ways. All loops have these common elements:
Your choice of loop type depends on how you want to control and terminate the
looping.
A starting point
A body, usually enclosed in begin and end keywords, that contains the statements to execute on each pass
An ending point
A test for a condition that determines when the loop should end
Optional use of the Break and Continue procedures
The For loopThis is the most common loop type. For loops are
executed a fixed number of times, determined by a count. They terminate when the
count is exhausted. The count (loop) is held in a variable that can be used in
the loop. The count can proceed upwards or downwards, but always does so by a
value of 1 unit. This count variable can be a number or even an enumeration.
Counting up Here is a simple example
counting up using numeric values:
var
count : Integer;
begin
For
count := 1 to 5 do
end;
Count is now 1
Count is now 2
Count is now 3
Count is now 4
Count is now 5
The ShowMessageFmt routine is useful for displaying information - click on it to
read more.
Counting up using an enumeration
sets are very readable ways of assigning values to variables
by name. They can also be used to control For loops:
type
TWeekDay = (Monday=1, Tuesday, Wednesday, Thursday, Friday);
var
weekday : TWeekDay;
hours : array[TWeekDay] of byte;
begin
// Set up the hours every day to zero
for weekDay := Monday to Friday do
hours[weekDay] := 0;
// Add an hour of overtime to the working hours
on Tuesday to Thursday
for weekDay := Tuesday to Thursday do
Inc(hours[weekDay]);
end;
Note the use of the Inc routine to increment the hours.
Counting down, using characters We can also
use single letters as the count type, because they are also ordinal types:
var
letter : Char;
begin
for letter := 'G' downto 'A' do
ShowMessage('Letter = '+letter)
end;
Letter = G
Letter = F
Letter = E
Letter = D
Letter = C
Letter = B
Letter = A
The For statements in the examples above have all executed one statement. If you
want to execute more than one, you must enclose these in a Begin and
End pair.
The Repeat loopThe Repeat loop type is used for loops where we do not
know in advance how many times we will execute. For example, when we keep asking
a user for a value until one is provided, or the user aborts. Here, we are more
concerned with the loop termination condition.
Repeat loops always execute at least once. At the end, the Until
condition is checked, and the loop aborts of condition works out as true.
var
exit : Boolean;// Our exit condition
flag
i : Integer;
begin
i := 1;
exit := False; // do not exit
until we are ready
repeat
Inc(i);// Increment a count
if
Sqr(i) > 99
then exit := true; // Exit if
the square of our number exceeds 99
until exit;// Shorthand
for 'until exit := true'
end;
Upon exit, i will be 10 (since Sqr(10) > 99)
Here we exit the repeat loop when a Boolean variable is true. Notice that we use
a shorthand - just specifying the variable as the condition is sufficient since
the variable value is either true or false.
var
i : Integer;
begin
i := 1;
repeat
Inc(i);// Increment a count
until (Sqr(i)
> 99) or (Sqrt(i) > 2.5);
end;
Upon exit, i will be 7 (since Sqrt(7) > 2.5)
Notice that compound statements require separating brackets. Notice also that
Repeat statements can accomodate multiple statements without the need for a
begin/end pair. The repeat and until clauses form a natural pairing.
While loopsWhile loops are very similar to Repeat loops except that they
have the exit condition at the start. This means that we use them when we wish
to avoid loop execution altogether if the condition for exit is satisfied at the
start.
var
i : Integer;
begin
i := 1;
while (Sqr(i)
<= 99) and (Sqrt(i) <= 2.5) do
Inc(i);// Increment a count
end;
Upon exit, i will be 7 (since Sqrt(7) > 2.5)
Notice that our original Repeat Until condition used
Or as the compound
condition joiner - we continued until either condition was met. With our While
condition, we use And
as the joiner - we continue whilst neither condition is met. Have a
closer look to see why we do this. The difference is that we repeat an action
until something or something else happens. Whereas we keep doing an action while
neither something nor something else have happened.