
                 CHAPTER 3 - The simple Pascal data types


             TURBO   Pascal  has  5  basic  data  types  which   are
        predefined  and can be used anywhere in a  program  provided
        you  use  them properly.  The five types and  a  very  brief
        description follows;

            integer   Whole numbers from -32768 to 32767
            byte      The integers from 0 to 255
            real      Floating point numbers from 1E-38 to 1E+38
            boolean   Can only have the value TRUE or FALSE
            char      Any character in the ASCII character set

             Please note that the byte type of data is not a part of
        the  standard  Pascal  definition  but  is  included  as  an
        extension to the TURBO Pascal compiler.

             TURBO Pascal version 4.0 has three additional "integer"
        types  available which are not available with  version  3.0,
        and they are defined as follows;

            shortint  The integers from -128 to 127
            word      The integers from 0 to 65535
            longint   The integers from -2147483648 to 2147483647

             In  addition  to  the above  data  types  TURBO  Pascal
        version  4.0 has the following data types available  but  in
        order  to use them, you must have an 80X87 math  coprocessor
        installed in your system;

            single    Real type with 7 significant digits
            double    Real type with 15 significant digits
            extended  Real type with 19 significant digits
            comp      The integers from about -10E18 to 10E18

             A  complete definition of the available types for  each
        compiler can be found on pages 41 and 42 of the TURBO Pascal
        version 3.0 reference manual, and on pages 39 through 44  of
        the  reference manual for version 4.0.  It would be good  to
        read these pages now for a good definition prior to learning
        how  to define and use them in a program.  Note that all  of
        these will be used in example programs in this chapter.

             The integers are by far the easiest to understand so we
        will start with a simple program that uses some integers  in
        a  very simple way.  Load INTVAR into your TURBO system  and
        lets take a look at it.

                            OUR FIRST VARIABLES

             Immediately following the program statement is  another
        reserved word, "var".  This reserved word is used to  define
        a  variable before it can be used anywhere in  the  program.


                                  Page 13









                 CHAPTER 3 - The simple Pascal data types


        There is an unbroken rule of Pascal that states "Nothing can
        be used until it is defined."  The compiler will complain by
        indicating a compilation error if you try to use a  variable
        without properly defining it.  It seems a bit bothersome  to
        have  to  define every variable prior to its use,  but  this
        rule  will  catch many spelling errors of  variables  before
        they cause trouble.  Some other languages will simply define
        a  new variable with the new name and go merrily on its  way
        producing some well formatted garbage for you.

             Notice that there is only one "var", but it is used  to
        define  three different variables, Count, X, and Y.  Once  a
        var  is recognized, the compiler will continue to  recognize
        variable definitions line after line until it finds  another
        reserved word.  It would be permissible to put a var on  the
        second line also but it is not necessary.  It would also  be
        permissible to put all three variables on one line but  your
        particular programming style will dictate where you put  the
        three  variables.  Following the colon on each line  is  the
        word  "integer"  which  is a standard  identifier  which  is
        different from a reserved word.  An identifier is predefined
        like a reserved word but you can redefine it thereby  losing
        its  original purpose and meaning.  For now and for  a  long
        time,  don't do that.  Page 38 contains a list  of  standard
        identifiers in TURBO Pascal 3.0.  There is no  corresponding
        list in the reference manual for TURBO Pascal 4.0.

                           OUR FIRST ARITHMETIC

             Now  that  we have three variables defined  as  integer
        type variables, we are free to use them in a program in  any
        way we desire as long as we use them properly.  If we  tried
        to  assign a real value to X, the compiler will generate  an
        error, once again preventing a garbage output.  Observe  the
        start  of  the main body of the program.   There  are  three
        statements  assigning  values to X, Y, and  Count.   A  fine
        point of mathematics would state that Count is only equal to
        the  value of X+Y until one of them was modified,  therefore
        the  equal sign used in so many other languages is not  used
        here.  The sign := is used, and can be read as "is  replaced
        by  the  value of", when reading a listing to  preserve  the
        mathematical  purity of Pascal.  Another quicker way  is  to
        use the word "gets".  Thus X := X + 1 would be read "X  gets
        the  value of X plus 1".  We will see later that the  simple
        equal sign is reserved for use in a different manner.

             The  first three statements give X the value of  12,  Y
        the  value  of 13, and Count the value of 12+13 or  25.   We
        need  to  get those values out of the computer, so  we  need
        another extension to the Writeln statement.  The first  part
        of the data within the parentheses should be familiar to you


                                  Page 14









                 CHAPTER 3 - The simple Pascal data types


        now,  but the second part is new.  Multiple outputs  can  be
        handled within one Writeln if the fields are separated by  a
        comma.   To output a variable, simply write  the  variable's
        name in the output field.  The number following the variable
        in  each case is the number of output columns to be used  by
        the output data.  This number is optional and can be omitted
        allowing the system to use as many columns as it needs.  For
        purposes  of  illustration,  they  have  all  been  assigned
        different  numbers  of  columns.  At  this  point,  you  can
        compile and run INTVAR and examine its output.

             To  illustrate  the various ways to output  data,  load
        INTVAR2   and  observe  that  even  though  the  output   is
        identical,  it is output in a completely  different  manner.
        Observe  especially  that  a Writeln all  by  itself  simply
        moves the cursor to the beginning of a new line on the video
        monitor.

             Compile and run this program and observe its output.

                      NOW LET'S USE LOTS OF VARIABLES

             Load  ALLVAR to observe a short program using all 5  of
        the  basic  data types.  The variables are  simply  assigned
        values and the values are printed.  A complete and  detailed
        description of the options available in the Write  statement
        is given in the TURBO reference manual version 3.0 on  pages
        111  through 113, and on pages 500 through 502  for  version
        4.0.  It would be to your advantage to read this section  at
        this time since very little explanation will be given  about
        Write  statements from this point on.  We will  discuss  the
        method  by which we can write to disk files or other  output
        devices when the time comes.

             Back  to  the basic types.  Pascal does lots  of  cross
        checking  for obvious errors.  It is illegal to  assign  the
        value of any variable with a value that is of the wrong type
        or outside the allowable range of that variable.  There  are
        routines to convert from one system to another when that  is
        necessary.  Suppose, for example, that you wished to use the
        value of an integer in a calculation of real numbers.   That
        is  possible  by first converting the integer  into  a  real
        number  of  the  same  value and using  the  new  real  type
        variable  in  the desired calculations.  The new  real  type
        variable  must of course be defined in a var statement as  a
        real type variable before it can be used.  Details of how to
        do the conversion will be given later.

             Since we have some variables defined, it would be  nice
        to  use  the  properties of computers  for  which  they  are
        famous, namely some mathematics.  Two programs are available


                                  Page 15









                 CHAPTER 3 - The simple Pascal data types


        for your observation to illustrate the various kinds of math
        available, REALMATH using real variables, and INTMATH  using
        integer variables.  You can edit, compile, and run these  on
        your  own  with  no  comment from  me  except  the  comments
        embedded into the source files.  Chapter 6 on pages 51 to 54
        of  your  version  3.0  TURBO  reference  manual  completely
        defines the simple mathematics available.  The corresponding
        list  for  version  4.0 is found in chapter 3  on  pages  46
        through 49.

             A  byte  type  variable is used just  like  an  integer
        variable  but with a much smaller value.  Only one  byte  of
        computer memory is used for each variable defined as a  byte
        type  variable,  but  2  are  used  for  each  integer  type
        variable.

                             BOOLEAN VARIABLES

             Lets take a look at the boolean variable which is  only
        allowed  to  take on two different values,  TRUE  or  FALSE.
        This  variable  is  used  for loop  controls,  end  of  file
        indicators  or  any other TRUE or FALSE  conditions  in  the
        program.   Variables can be compared to determine a  boolean
        value.  Following  is  a complete  list  of  the  relational
        operators available with Pascal.

             =    equal to
             <>   not equal to
             >    greater than
             <    less than
             >=   greater than or equal to
             <=   less than or equal to

             These  operators  can  be used to compare  any  of  the
        simple types of data including integer, char, byte, and real
        type  variables or constants.  An illustration is  the  best
        way to learn about the boolean variable so load BOOLMATH and
        observe it.

             In  BOOLMATH we define a few boolean variables and  two
        integer  type variables for use in the program and begin  by
        assigning   values  to  the  two  integer  variables.    The
        expression  "Junk  = Who" in line 14 is actually  a  boolean
        operation  that is not true since the value of Junk  is  not
        equal  to the value of Who.  The result is  therefore  FALSE
        and  that value is assigned to the boolean variable A.   The
        boolean variable B is assigned the value of TRUE because the
        expression  "Junk  =  (Who  -  1)"  is  true.   The  boolean
        variables  C  and D are likewise assigned some values  in  a
        manner that should not need any comment.  After assigning  a



                                  Page 16









                 CHAPTER 3 - The simple Pascal data types


        value to the variable with the big name, the values are  all
        printed out.

                   WHERE DO WE USE THE BOOLEAN VARIABLES?

             We  will find many uses for the boolean  type  variable
        when we study the loops and conditional statements soon, but
        until  then  we can only learn what they are.  Often,  in  a
        conditional  statement,  you will want to  do  something  if
        either  of two things are true, in which case you  will  use
        the  reserved word "and" with two boolean  expressions.   If
        either  of the two are true, the result will be true.   Line
        29  is an example of this.  If the boolean variables  B,  C,
        and D, are all true, then the result will be true and A will
        be assigned the value of TRUE.  If any one of them is false,
        the result will be false and A will be assigned the value of
        FALSE.

             In Line 31, where the "or" operator is illustrated,  if
        any of the three boolean variables is true, the result  will
        be  true,  and if all three are false, the  result  will  be
        false.   Another  boolean  operator is the  "not"  which  is
        illustrated  in  line 30.  Examine line 33  which  says  the
        result  is true only if the variable Junk is one  less  than
        Who, or if Junk is equal to Who.

             Compile and run this program, then add some  additional
        printout to see if the boolean variables change the way  you
        think they should in the last few statements.

                    LETS LOOK AT THE CHAR TYPE VARIABLE

             A  char  type variable is a very useful  variable,  but
        usually not when used alone.  It is very powerful when  used
        in an array or some other user defined data structure  which
        is beyond the scope of this chapter.  A very simple program,
        CHARDEMO is included to give you an idea of how a char  type
        variable  can be used.  Study then compile and run  CHARDEMO
        for a very brief idea of what the char type variable is used
        for.

             Examine the sample program CONVERT for several examples
        of converting data from one simple variable to another.  The
        program is self explanatory.

                     THIS IS FOR TURBO PASCAL 4.0 USERS

             If  you  are using TURBO Pascal version  3.0,  you  are
        finished   with   this  chapter  because  the   data   types
        illustrated in the last two programs are not available  with
        that compiler.


                                  Page 17









                 CHAPTER 3 - The simple Pascal data types



             If you are using TURBO Pascal 4.0, display the  program
        NEWINT4  for an example of using the extended integer  types
        available  with that compiler.  Four variables  are  defined
        and values assigned to each, then the results are displayed.
        When you compile and run the program, you will see that  the
        variable Big_int can indeed handle a rather large number.

             It must be pointed out that the calculation in lines 13
        and 21 result in a different answer even though they  appear
        to  be  calculating the same thing.  An  explanation  is  in
        order.  The quantity named MaxInt used in lines 10 and 13 is
        a constant built into the system that represents the largest
        value that an integer type variable can store.  On the first
        page  of  this  chapter we defined that as  32767  and  when
        running  the program you will find that Index displays  that
        value as it should.  The constant MaxInt has a type that  is
        of  a  universal_integer  type  as do  all  of  the  numeric
        constants in line 13.  The result then is calculated to  the
        number of significant digits dictated by the left hand  side
        of  the  assignment  statement  which  is  of  type  longint
        resulting in a very large number.

             When we get to line 21, however, the variable Index  is
        of  type integer so the calculations are done as though  the
        constants were of type integer also which causes some of the
        more  significant  digits to be  truncated.   The  truncated
        result  is  converted to type longint and  assigned  to  the
        variable  Big_int  and the truncated value is  displayed  by
        line 22.

             After that discussion it should be apparent to you that
        it  is important what types you use for your variables.   It
        must  be  emphasized that it would not be wise  to  use  all
        large type variables because they use more storage space and
        slow down calculations.  Experience will dictate the  proper
        data types to use for each application.

                         NOW FOR THE NEW REAL TYPES

             If you are using TURBO Pascal 4.0, display the  program
        NEWREAL4 for an example using the new "real" types available
        with  version  4.0.  Note that you must have an  80X87  math
        coprocessor  installed  to  compile and  run  this  program.
        There is a note given in the file to aid you in selecting it
        for use.

             This program should be self explanatory so nothing will
        be  said  except that when you run it you  can  observe  the
        relative  accuracy  of  each of the  variable  types.   Once



                                  Page 18









                 CHAPTER 3 - The simple Pascal data types


        again, you should keep in mind that use of the larger "real"
        types costs you a bit in storage space and run-time speed.


                           PROGRAMMING EXERCISE

        1.  Write a program containing several variable  definitions
            and do some math on them, printing out the results.













































                                  Page 19
