TURBO-LESSONS - A Pascal Tutorial        Version 1.01    Page 38


TURBO-LESSON 10: WHILE STATEMENT

OBJECTIVES - In lesson 10 you will learn about:

1. CONSTant declaration
2. WHILE statement
3. Delay timing loop

1.  CONSTant declaration.

In the declaration section of the Pascal programs in previous 
lessons, only VAR and PROGRAM have appeared.

CONST is used to declare constants and assign values to them.  
The form is:

CONST  Constant_Name_1   =  Value_1;
       Constant_Name_2   =  Value_2;
               .
               .
               .
       Constant_Name_n   =  Value_n;

Some examples:

CONST  PI            =  3.14159;
       Fahr_Freeze   =  32;
       Cels_Freeze   =  0;
       Message_1     =  'This is a string constant';

##### DO: 

Run PROG10 a time or two to see what it does.

##### DO:

Edit the constant declaration, Wobble_Size = 5;
                         to    Wobble_Size = 10;

Run the program.  What effect did you see from the change?

TURBO-LESSONS - A Pascal Tutorial        Version 1.01    Page 39


##### DO:

Change the value of Left_Edge to 20 and run the program.

To understand how Left_Edge and Wobble_Size work, look at the 
WriteLn statement:

WriteLn(': ':Left_Edge,  First:Index,  Last:2,  Message);

  (1)  ': ' is printed in the right 2 columns of a field whose 
       width is determined by the value of Left_Edge.

  (2) First initial is printed in the rightmost column of a field 
      of width, Index.  Note that Index is changing in the FOR 
      loop, so the width of this field changes.

  (3) Last initial is printed next in the rightmost column of a 
      2-character wide field.

  (4) The string constant, Message, is printed immediately to the 
      right of Last initial.

##### DO:

Run the program several times with the values of the constants 
reset to various values.  (LIVE DANGEROUSLY - try some wild 
values:  50 for Wobble_Size or 70 for Left_Edge.  Your CRT won't 
explode!  At least mine hasn't - yet!)


2.  WHILE statement.

The three Pascal REPETITION Structures are:
  (1)  WHILE 
  (2)  REPEAT
  (3)  FOR

The form of the WHILE statement is:

WHILE condition DO statement;

Note that the statement is often a block statement and appears:

WHILE condition DO
  BEGIN
    Statement_1;
    Statement_2;
       .
       .
       .
    Statement_n;
  END;          

The WHILE is executed "while" the condition is true.  

Contrast the REPEAT which is executed while the condition is 
false, UNTIL the condition becomes true.  

TURBO-LESSONS - A Pascal Tutorial        Version 1.01    Page 40


##### DO:

Run PROG10 again, using 0 as the number "less than 8".

How many times was the loop executed?

You could substitute REPEAT for WHILE in PROG10.

##### DO:

Replace:     WHILE Count > 0 DO
   with:     REPEAT

    add:     UNTIL Count = 0;   after:   END; {WHILE}

(Notice that you don't have to remove the BEGIN END when you 
change the loop from WHILE to REPEAT.  They are not needed in 
the REPEAT statement, but a block statement is always acceptable 
wherever a simple statement can be used.)

Run the program several times to verify that it still works the 
same as with the WHILE loop.

##### DO:

Run the program with 0 for the "number less than 8".

How many times was the loop executed?

Notice that the WHILE loop may be executed 0 times, but the 
REPEAT loop is always executed at least once, since the condition 
is not checked until the end of the loop.  

NOTE: YOU SHOULD BE ON THE LOOKOUT FOR SUCH CONTRASTS BETWEEN 
      "INTERCHANGEABLE" STATEMENTS.  CHOOSING THE BEST STATEMENT 
      TO USE IN EACH CASE IS BASED ON THIS KIND OF AWARENESS.

##### DO:

Change the REPEAT loop back to the original WHILE loop.
(An easy way would be to load a fresh copy of the original 
PROG10.) 

Change the WHILE statement to accept only Last initials less than 
'G'.

WHILE Last < 'G' DO

Run the program.   How did it work?

The WHILE loop didn't terminate at all - you had to abort the 
program, right?  (If it is still executing, use Ctrl-C or Ctrl-
Scroll-Lock.)

TURBO-LESSONS - A Pascal Tutorial        Version 1.01    Page 41


One of the things needed in controlling loops: something in the 
loop must be related to the condition.  

In the original WHILE loop, the Count was being decreased in the 
loop.

When the condition was changed to (Last < 'G'), the loop no 
longer has any effect on the condition.  

Either the loop will not be executed at all, if Last is = or > 
'G', or it will execute indefinitely if Last is < 'G'.  

##### DO:

Change the WHILE statement to:

WHILE (Last < 'G') AND (Count > 0) DO

Run the program several times using last initials before and 
after G in the alphabet.

##### DO:

Run the program with last initial of 'a' (lower-case a).

How many times did the loop execute?

Why?    

The ASCII value of 'G' is 71.  The ASCII value of 'a' is 91.  So 
'a' is > 'G'.   (More on how to handle this problem in a later 
lesson.)


3.  Delay timing loop.

You may have noticed the "wobble" proceeds faster in one 
direction than the other.  This is due to a timing delay in the 
first WHILE loop.  

FOR Delay := 1 to 500 DO; {Do nothing, except loop}

This looks a little strange?   There should be a statement after 
the DO?

Pascal has a "null" statement for just such times as this.  When 
a statement is required, but none is present, Pascal just 
substitutes its "null" or "do-nothing" statement.  

TURBO-LESSONS - A Pascal Tutorial        Version 1.01    Page 42


##### DO:

Change the delay in the loop from 500 to 2000 and run the 
program.

##### DO:

Add a timing loop to the other WHILE loop and run the program.

How did it work?

You didn't forget to add BEGIN END when you added the delay 
statement, did you?

One last little twist on timing loops:

##### DO:

Change the Wobble_Size to 10.

Change both delay statements to:

FOR Delay := 1 to 500 * Index DO; 

Run the program.  Note that delays don't have to be constant.  
This delay varies as the FOR loop progresses!


NOTE: I HOPE YOU HAVE ENJOYED THESE FIRST 10 TURBO-LESSONS.  YOUR 
COMMENTS AND SUGGESTIONS WOULD BE WELCOME!  
