Category : Pascal Source Code
Archive   : PASTUT.ZIP
Filename : CHAP06.TXT

 
Output of file : CHAP06.TXT contained in archive : PASTUT.ZIP



Chapter 6
ARRAYS, TYPES, CONSTANTS, AND LABELS


ARRAYS
____________________________________________________________

At the beginning of this tutorial we said that a computer
program is composed of data and executable statements to do
something with that data. Having covered nearly all of the
programming statements, we must now go back and fill in some
gaps in our data definition and look at the array in
particular.

One of the most useful Pascal data ================
structures is the array, which is, in the ARRAYS.PAS
simplest terms, a group of 2 or more ================
identical terms, all having the same type.
Let's go directly to an example to see
what an array looks like. Display the Pascal program
ARRAYS.PAS and notice line 5 starting with the word
Automobiles. The variable Automobiles is defined as an
integer variable but in addition, it is defined to have twelve
different integer variables, namely Automobile[1],
Automobile[2], Automobile[3], .. Automobile[12].

The square braces are used in Pascal to denote a subscript for
an array variable. The array definition given in line 5 is
the standard definition for an array, namely a variable name,
followed by a colon and the reserved word array, with the
range of the array given in square brackets followed by
another reserved word of and finally the type of variable for
each element of the array.


USING THE ARRAY
____________________________________________________________

In using the elements of the array in a program, each of the
elements of the array are required to be used in exactly the
same manner as any simple variable having the same type. Each
time one of the variables is used, it must have the subscript
since the subscript is now part of the variable name. The
subscript moreover, must be of the type used in the definition
and it must be within the range defined or it will be
construed as an error.

Now consider the program itself. As Index is varied from 1
to 12, the range of the subscripts of the variable Automobile,
the 12 variables are set to the series of values 11 to 22.
Any integer values could be used, this was only a convenient
way to set the values to some well defined numbers. With the
values stored, a header is now printed and the list of values
contained in the array is printed. Note carefully that,

Page 6-1

Arrays, Types, Constants, and Labels

although the subscripts are limited to 1 through 12, the
values stored in each of the 12 variables are limited only by
the range of integers, namely -32768 to 32767. Review this
material and this program as long as needed to fully
understand it, as it is very important.

Keep in mind that the array is actually composed of 12
different integer type variables that can be used in any way
that it is legal to use any other integer type variable.
Compile and run this program.



DOUBLY INDEXED ARRAYS
____________________________________________________________

After understanding the above example =================
program, load the program ARRAYS2.PAS to ARRAYS2.PAS
see the next level of complexity of =================
arrays. You will see that Checkerboard is
defined as an array from 1 to 8, but
instead of it being a simple data type, it is itself another
array from 1 to 8 of type integer. The variable Checkerboard
is actually composed of 8 elements, each of which is 8
elements, leading to a total of 64 elements, each of which is
a simple integer variable. This is called a doubly
subscripted array and it can be envisioned in exactly the same
manner as a real checker board, an 8 by 8 matrix. Another way
to achieve the same end is to define the double array as in
the next line of the program where Value is defined as a total
of 64 elements.

To use either of the two variables in a program, we must add
two subscripts to the variable name to tell the program which
element of the 64 we desire to use. Examining the program
will reveal two loops, one nested within the other, and both
ranging in value from 1 to 8. The two loop indices can
therefore be used as subscripts of the defined array
variables. The variable Checkerboard is subscripted by both
of the loop indices and each of the 64 variables is assigned
a value as a function of the indices. The assigned value has
no real meaning other than to illustrate to you how it is
done. Since the value of Checkerboard is now available, it
is used to define some values to be used for the variable
Value in line 12 of the program.

After defining all of those variables, and you should
understand that we have defined a total of 128 variables in
the double loop, 64 of Checkerboard and 64 of Value, they can
be printed out. The next section of the program does just
that, by using another doubly nested loop, with a Write
statement in the center. Each time we go through the center
of the loop we tell it to print out one of the 64 variables
in the Checkerboard matrix with the indices Index and Count

Page 6-2

Arrays, Types, Constants, and Labels

defining which of the variables to write each time. Careful
study of the loop should reveal its exact operation.

After printing out the matrix defined by the variable
Checkerboard we still have the matrix defined by the variable
Value intact (In fact, we still have all of Checkerboard
available because we haven't changed any of it). Before
printing out the matrix defined by Value, let's change a few
of the elements just to see how it is done. The code in lines
24 to 26 simply change three of the variables to illustrate
that you can operate on all of the matrix in loops, or on any
part of the matrix in simple assignment statements. Notice
especially line 26, in which Value[3,6] (which was just set
to the value of 3), is used as a subscript. This is perfectly
legal since it is defined as a simple integer variable and is
within the range of 1 to 8, which is the requirement for a
subscript of the variable Value. The last part of the program
simply prints out the 64 values of the variable Value in the
same manner as above. Notice that when you run the program,
the three values are in fact changed as expected.


ARRAYS ARE FLEXIBLE
____________________________________________________________

A few more words about arrays before we go on. The arrays in
the last program were both defined to be square, namely 8 by
8, but that choice was purely arbitrary. The subscripts were
chosen to go from 1 to 8 but they could have been chosen to
go from 101 to 108 or any other range needed to clearly define
the problem at hand. And, as you may have guessed, you are
not limited to a doubly subscripted matrix but you can define
a variable with as many subscripts as you need to achieve your
desired end. There is a practical limit to the number of
subscripts because you can very quickly use up all of your
available memory with one large subscripted variable.


THE TYPE DEFINITION
____________________________________________________________

Now that you understand arrays, lets look =================
at a more convenient way to define them by TYPES.PAS
examining the Pascal file TYPES.PAS. You =================
will notice a new section at the beginning
of the listing which begins with the word
type. The word type is another reserved word which is used
at the beginning of a section to define "user-defined types".
Beginning with the simple predefined types we studied earlier,
we can build up as many new types as we need and they can be
as complex as we desire. The six names (from Array_Def to
Boat) in the type section are not variables, but are defined
to be types and can be used in the same manner as we use
integer, byte, real, etc.

Page 6-3

Arrays, Types, Constants, and Labels


PASCAL CHECKS TYPES VERY CAREFULLY
____________________________________________________________

This is a very difficult concept, but a very important one.
The Pascal compiler is very picky about the types you use for
variables in the program, doing lots of checking to insure
that you do not use the wrong type anywhere in the program.
Because it is picky, you could do very little without the
ability to define new types when needed, and that is the
reason Pascal gives you the ability to define new types to
solve a particular problem.

Some of these types are used in the var declaration part of
the program. Notice that since Airplane is an array of
Dog_Food and Dog_Food is in turn an array of boolean, then
Airplane defines a doubly subscripted array, each element
being a boolean variable. This does not define any variables,
only a user defined type, which can be used in a var to define
a matrix of boolean variables. This is in fact done in the
definition of Puppies, which is an array composed of 72 (6
times 12) boolean variables. In the same manner, Stuff is
composed of an array of 14 variables, each being an integer
variable. The elements of the array are, Stuff[12],
Stuff[13], .. Stuff[25]. Notice also that Stuff2 is also
defined in exactly the same manner and is also composed of 14
variables.

Careful inspection will reveal that Kitties is a variable
which has the same definition as Puppies. It would probably
be poor programming practice to define them in different
manners unless they were in fact totally disassociated. In
this example program, it serves to illustrate some of the ways
user-defined types can be defined. Be sure to compile and run
this program.


IS THE CONCEPT OF "TYPES" IMPORTANT?
____________________________________________________________

If you spend the time to carefully select the types for the
variables used in the program, the Pascal compiler will do
some debugging for you since it is picky about the use of
variables with different types. Any aid you can use to help
find and remove errors from your program is useful and you
should learn to take advantage of type checking. The type
checking in Pascal is relatively weak compared to some other
languages such as Modula-2 or Ada, but still very useful.

In a tiny program like this example, the value of the type
declaration part cannot be appreciated, but in a large program
with many variables, the type declaration can be used to great
advantage. This will be illustrated later.


Page 6-4

Arrays, Types, Constants, and Labels


THE CONSTANT DECLARATION
____________________________________________________________

Examining the Pascal example program ================
CONSTANT.PAS will give us an example of a CONSTANT.PAS
constant definition. The reserved word ================
const is the beginning of the section that
is used to define constants that can be
used anyplace in the program as long as they are consistent
with the required data typing limitations. In this example,
Max_Size is defined as a constant with the value of 12. This
is not a variable and cannot be changed in the program, but
is still a very valuable number. For the moment ignore the
next two constant definitions. As we inspect the type
declarations, we see two user-defined types, both of which are
arrays of size 1 to 12 since Max_Size is defined as 12. Then
when we get to the var declaration part, we find five
different variables, all defined as arrays from 1 to 12 (some
are type integer and some are type char). When we come to the
program we find that it is one big loop which we go through
12 times because the loop is executed Max_Size times.

In the above definition, there seems to be no advantage to
using the constant, and there is none, until you find that for
some reason you wish to increase the range of all arrays from
12 to 18. In order to do so, you only need to redefine the
value of the constant, recompile, and the whole job is done.
Without the constant definition, you would have had to change
all type declarations and the upper limit of the loop in the
program. Of course that would not be too bad in the small
example program, but could be a real mess in a 2000 line
program, especially if you missed changing one of the 12's to
an 18. That would be a good example of data in and garbage
out. This program should give you a good idea of what the
constant can be used for, and as you develop good programming
techniques, you will use the constant declaration to your
advantage.


THE TURBO PASCAL TYPED CONSTANT
____________________________________________________________

We skipped over the second and third constant declarations for
a very good reason. They are not constant declarations.
TURBO Pascal has defined, as an extension, the "typed
constant". Using the syntax shown, Index_Start is defined as
an integer type variable and is initialized to the value of
49. This is a true variable and can be used as such in the
program. The same effect can be achieved by simply defining
Index_Start as an integer type variable in the var declaration
part and setting it to the value of 49 in the program itself.
Since it does not really fit the definition of a constant,
it's use is discouraged until you gain experience as a Pascal

Page 6-5

Arrays, Types, Constants, and Labels

programmer. Until then it will probably only be confusing to
you. In like manner, Check_It_Out is a boolean type variable
initialized to the value TRUE. It is not a constant.

The typed constants defined in the last paragraph have one
additional characteristic, they are initialized only once,
when the program is loaded. Even when used in a procedure or
function, they are only initialized when the program is
loaded, not upon each call to the procedure or function.
Don't worry too much about this at this point, when you gain
experience with Pascal, you will be able to use this
information very effectively.


THE LABEL DECLARATION
____________________________________________________________

Finally, the example program LABELS.PAS ================
will illustrate the use of labels. In the LABELS.PAS
Pascal definition, a label is a number ================
from 0 to 9999 that is used to define a
point in the program to which you wish to
jump. All labels must be defined in the label definition part
of the program before they can be used. Then a new reserved
word goto is used to jump to that point in the program. The
best way to see how the goto is used with labels is to examine
the program before you.

TURBO Pascal has an extension for labels. Any valid
identifier, such as used for variables, can be used as a label
in addition to the values from 0 to 9999. These are
illustrated in the example program.

When you compile and run this program, the output will look
a little better than the program does.



THE PACKED ARRAY
____________________________________________________________

When Pascal was first defined in 1971, many of the computers
in use at that time used very large words, 60 bits being a
typical word size. Memory was very expensive, so large
memories were not too common. A Pascal program that used
arrays was inefficient because only one variable was stored
in each word. Most of the bits in each word were totally
wasted, so the packed array was defined in which several
variables were stored in each word. This saved storage space
but took extra time to unpack each word to use the data. The
programmer was given a choice of using a fast scheme that
wasted memory, the array, or a slower scheme that used memory
more efficiently, the packed array.


Page 6-6

Arrays, Types, Constants, and Labels

The modern microcomputer has the best of both schemes, a short
word, usually 16 bits, and a large memory. The packed array
is therefore not even implemented in many compilers and will
be ignored during compilation. The packed array is
specifically ignored by all versions of TURBO Pascal.


ONE MORE TURBO PASCAL EXTENSION
____________________________________________________________

Standard Pascal, as defined by Nicklaus Wirth, requires that
the various fields in the definition part of the program come
in a specific order and each must appear only once. The
specific order is, label, const, type, var, and finally the
procedures and functions. Of course, if any are not needed,
they are simply omitted. This is a rather rigid requirement
but it was required by the pure Pascal definition probably to
teach good programming techniques to beginning students.

All versions of TURBO Pascal are not nearly as rigid as the
standard Pascal requirement. You are permitted to use the
fields in any order and as often as you wish provided that you
define everything before you use it, which is the unbroken
rule of Pascal. It sometimes makes sense to define a few
variables immediately after their types are defined to keep
them near their type definitions, then define a few more types
with the variables that are associated with them also. TURBO
Pascal gives you this extra flexibility that can be used to
your advantage.


PROGRAMMING EXERCISES
____________________________________________________________

1. Write a program to store the integers 201 to 212 in an
array then display them on the monitor.

2. Write a program to store a 10 by 10 array containing the
products of the indices, therefore a multiplication
table. Display the matrix on the video monitor.

3. Modify the program in 2 above to include a constant so
that by simply changing the constant, the size of the
matrix and the range of the table will be changed.











Page 6-7


  3 Responses to “Category : Pascal Source Code
Archive   : PASTUT.ZIP
Filename : CHAP06.TXT

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/