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!