TURBO-LESSONS - A Pascal Tutorial        Version 1.01    Page 65


TURBO-LESSON 14:   INTRODUCTION TO PROCEDURES

OBJECTIVES - In this lesson, you will learn about:

1.  PROCEDURE declaration
2.  Using a Procedure
3.  Using Parameters
4.  A counter with error checking


1.  PROCEDURE declaration.

The PROCEDURE subprogram is similar to the FUNCTION subprogram 
introduced in an earlier lesson.   The form of the declaration 
is:

PROCEDURE Add(No_1, No_2 : Integer; VAR Sum : Integer);

BEGIN
  Sum := No_1 + No_2;
END;

Add is the name of the Procedure.

No_1, No_2, and Sum are integer variables called "parameters".

VAR in front of Sum indicates that this parameter is a "two-way 
street".  It can receive data from the calling program, and 
return data to the calling program.  No_1 and No_2 can only 
receive data from the calling program. 

The BEGIN END block defines the processing performed by the 
procedure:  

Add the value in the memory location, No_1, to the value in 
memory location, No_2, and place the result in the memory 
location, Sum.  

TURBO-LESSONS - A Pascal Tutorial        Version 1.01    Page 66


2.  Using a Procedure.

A reference to this procedure in the main program (or another 
procedure or function) would have the following form:

Add(2, Count, Adjusted_Count);

The procedure is "called" or utilized by simply using its name as 
a statement.  (When you define a Procedure or Function, you are 
adding additional "statements" to your programming language.) 

Notice that there are three "parameters" here, and three in the 
Procedure declaration.  The three here are associated with the 
ones in the declaration by position.  

The first parameter here, the integer, 2, provides input to the 
first parameter of the procedure, No_1.  

The second, the variable, Count, provides input to the second 
parameter of the procedure, No_2.  

The third, Adjusted_Count, provides input to the third 
parameter of the procedure, Sum.  

Since Sum is declared VAR, variable, it also provides output back 
to Adjusted_Count.  

 In the Main Program     In Procedure Add

               2 ----------> No_1    { When Procedure      }
           Count ----------> No_2    {    is called        }
  Adjusted_Count ----------> Sum     {                     }
---------------------------------------------------------------
  Adjusted_Count <---------- Sum     { When Procedure ends }

##### DO:

Inspect PROG14.  

Run the program.

##### DO:

Add the following statement as the first statement in the main 
program:

Sum := 10;

Run the program.

Does it make any difference what value is stored in Sum before 
Procedure Add is referenced?  Look at the procedure - is Sum used 
as an input for the calculation, or only as a result?

TURBO-LESSONS - A Pascal Tutorial        Version 1.01    Page 67


3.  Using Parameters.

You have already been using parameters, but in this section, you 
will see a little more of the power and flexibility of 
parameters.

##### DO:

Change the Add statement in the main program to:

Add(2, 2, Adjusted_Count);

Run the program.    Is the result as expected?

##### DO:

Change the Add to:

Add(Count, Count, Adjusted_Count);

Run the program.   Any surprizes?

##### DO:

Change the Add to:

Add(2, 3, 4);

Run the program.   What happened?

The compiler refused to accept 4 as a variable identifier.  

The VAR preceding Sum in the procedure declaration puts a limit 
on the corresponding parameter in the calling program: it has to 
be a variable location to receive the value of Sum when the 
procedure finishes its calculation.

The first two parameters in the procedure, No_1 and No_2, are 
used only for input to the procedure - they do not provide any 
output back to the corresponding parameters in the calling 
program.

For this reason, the first two parameters in the calling program 
are less restricted.  They can be constants, variables, or 
expressions, as long as they are of the same type, integer, as 
the corresponding parameters in the procedure.

TURBO-LESSONS - A Pascal Tutorial        Version 1.01    Page 68


##### DO:

Change the Add statement:

Add(4, 2 * Count + 5, Adjusted_Count);

Run the program.   Does the expression work o.k. as a parameter?

##### DO:

Change the Add to:

Add(Count, Count, Count);

Also change the WriteLn to print the value of Count instead of 
Adjusted_Count.

Run the program.   Any problems?


4.  A counter with error checking.

You could use the Procedure Add as a counter by using the 
following call:

Add(Count, 1, Count);

The procedure would add 1 to Count and put the result in Count.

You could accomplish the same thing with the statement

Count := Count + 1;

So why bother to use the procedure?

What if Count reaches the upper limit of the integer range, 
32767?

In the main program you could expand the counting statement to:

IF Count < 32767
   THEN
     Count := Count + 1
   ELSE
     WriteLn('Counter reached upper limit');

TURBO-LESSONS - A Pascal Tutorial        Version 1.01    Page 69


PROGRAMMING NOTE: HOW DO YOU DECIDE WHAT GOES INTO THE MAIN 
                  PROGRAM AND WHAT TO PUT IN SUBPROGRAMS?  

                  FROM THE FOLLOWING DISCUSSION, TRY TO FORMULATE 
                  AT LEAST ONE RULE FOR MAKING THIS DECISION.  

This looks a little messy, maybe you should use a procedure to 
get this out of the main program.  

Not a bad reason, but there's a more important reason:

Ask yourself, "How much of the processing in the IF statement 
above is of interest in the main program?"

Probably only the fact that a count is being incremented.  The 
error checking and how it is done is probably of little interest 
and just clutters up the main program.

##### DO: 

Write your own procedure to increment the counter, Count.

Call the procedure, Increment.

Check for the upper limit of the integer range.  (The IF 
statement above would be one way.)

Note that only one parameter is needed, preceded by VAR.

##### DO:

In the main program, add the following to check out your 
procedure:

FOR I := 1 to 10 DO
  BEGIN
    Increment(Count);
    WriteLn('Count = ', Count);
  END;

Run the program using the following values as input for count:

0,  3,  -34, 32760

(PROG14A is provided in case you need help.)   

You could also write a procedure, Decrement, to decrease a 
counter.  Note that the error checking would be checking the 
lower limit, -32768, or perhaps 0 depending on how you intended 
to use the counter.


