
                  CHAPTER 14 - Complete sample programs


             Prior  to this point, this tutorial has given you  many
        example  programs  illustrating a point of  some  kind,  but
        these  have  all been "nonsense" programs as  far  as  being
        useful.  It would be a disservice to you to simply quit with
        only  tiny programs to study so the following  programs  are
        offered  to  you  as examples  of  good  Pascal  programming
        practice.   They  are useful programs, but  they  are  still
        short enough to easily grasp their meaning.  We will discuss
        them one at a time.

                       AMORTIZATION TABLE GENERATOR

             This  is  not one program, but five.  Each  one  is  an
        improvement on the previous one, and the series is  intended
        to give you an idea of program development.

        AMORT1  - This  is  the  bare outline  of  the  amortization
                program.  Although  it is an operating  program,  it
                doesn't  do  very  much.   After  some  thought  and
                planning,  the main program was written to allow for
                an  initialization,  then an annual repeating  loop.
                The  annual loop would require a header,  a  monthly
                calculation,  and  an  annual  balance.  Finally,  a
                procedure  was outlined for each of these  functions
                with  a  minimum of calculations in each  procedure.
                This program can be compiled and run to see that  it
                does  do something for each month and for each year.
                It has a major problem because it does not stop when
                the loan is payed off but keeps going to the end  of
                that year. The primary structure is complete.

        AMORT2  - This  is an improvement over AMORT1.  The  monthly
                calculations  are  correct but the final payment  is
                still  incorrectly  done.  Notice that for  ease  of
                testing,  the  loan variables are simply defined  as
                constants in the initialize procedure.  To make  the
                procedures  easier to find,  comments with asterisks
                were added.  This program is nearly usable.  Compile
                and run it.

        AMORT3 - Now we calculate the final payment correctly and we
                have  a correct annual header with column  headings.
                We have introduced a new variable to be used for  an
                annual  interest accumulation.  This is neat to have
                at  income  tax  time.  This  program  can  also  be
                compiled and run.

        AMORT4  - This program does nearly everything we would  like
                it to do. All of the information needed to build the
                table for any loan is now read in from the keyboard,
                greatly   adding  to  the  flexibility.   After  the


                                 Page 90









                  CHAPTER 14 - Complete sample programs


                information  is available,  the monthly  payment  is
                calculated    in    the   newly   added    procedure
                Calculate_Payment.   The  annual  header has  a  new
                line  added to include the original loan amount  and
                the  interest rate in the information.  Compile  and
                run this program to see its operation.

        AMORT5 - The  only additional feature in this program is the
                addition of a printout of the results. Examining the
                program,  you  will notice that many of  the  output
                statements  are  duplicated with the "Lst"  included
                for  the  device selection.  Compile  and  run  this
                program, but be sure to turn your printer on to  get
                a printout of the amortization table you ask for. If
                you  are  using TURBO Pascal version 3.0,  you  will
                need  to  either  comment out line 3  or  remove  it
                altogether.

                             TOP DOWN PROGRAMMING

             The  preceding  example  is an example  of  a  top-down
        approach to programming.  This is where the overall task  is
        outlined,  and  the details are added  in  whatever  fashion
        makes  sense to the designer.  The opposite is  a  bottom-up
        programming  effort,  in which the heart of the  problem  is
        defined  and the rest of the program is built up around  it.
        In this case, the monthly payment schedule would probably be
        a  starting  point and the remainder of the  program  slowly
        built  up  around it.  Use whichever method works  best  for
        you.

             The final program AMORT5 is by no means a program which
        can  never  be  improved upon.   Many  improvements  can  be
        thought  of.   These  will be exercises for you  if  you  so
        desire.

        1.  In the data input section, ask if a printout is desired,
            and  only print if it was requested.  This would involve
            defining  a new variable and "if" statements controlling
            all write statements with "Lst" as a device selector.

        2.  Format the printout with a formfeed every three years to
            cause  a neater printout.  The program presently  prints
            data right across the paper folds  with no regard to the
            top of page.

        3.  Modify  the  program  to include  semimonthly  payments.
            Payments  twice a month are becoming popular,  but  this
            program cannot handle them.




                                 Page 91









                  CHAPTER 14 - Complete sample programs


        4.  Instead of listing the months as numbers,  put in a case
            statement to cause the months to be printed out as three
            letter  names.  You could also include the  day  of  the
            month when the payment is due.

        5.  Any  other modification you can think up.  The more  you
            modify this and other programs,  the more experience and
            confidence you will gain.

                    LIST, to list your Pascal programs

             Since the differences between TURBO Pascal 3.0 and  4.0
        are  significant, two files are included here.  If  you  are
        using TURBO Pascal 3.0, rename LIST3.PAS to LIST.PAS, and if
        you are using TURBO Pascal 4.0, rename LIST4.PAS to LIST.PAS
        before continuing on to the next section.

             LIST is a very useful program that you can use to  list
        your  Pascal  programs  on  the printer.   It  can  only  be
        compiled with TURBO Pascal because it uses TURBO extensions.
        The two extensions it uses are the string type variable  and
        (in the case of TURBO Pascal version 3.0), the absolute type
        variable.   The  absolute type variable in line 13  and  the
        coding in the Initialize procedure is an example of how  you
        can read in the parameters given on the command line.

             If  you  are  using  TURBO  Pascal  4.0  a   completely
        different  method is used in the Initialize procedure  which
        should be no problem for you to understand at this point.

             To use this program to print out the last program,  for
        example,  you  would enter the following at the  DOS  prompt
        LIST AMORT5.PAS.  This program reads in the AMORT5.PAS  from
        the  command line and uses it to define the input file.   It
        should be pointed out that this program cannot be run from a
        "compiled  in  memory"  compilation with  the  TURBO  Pascal
        compiler.  It must be compiled to a Disk file, and you  must
        quit  TURBO Pascal in order to run it from the  DOS  command
        level.

             The parameter, AMORT5.PAS, is stored at computer memory
        location  80(hexadecimal)  referred  to  the  present   code
        segment.   If you didn't understand that, don't  worry,  you
        can still find the input parameter in any program using  the
        method given in the initialize procedure for your version of
        TURBO Pascal.

             If you do not have TURBO Pascal, but you are using  MS-
        DOS or PC-DOS, you can still use this program because it  is
        on  your disk already compiled as LIST.COM, and can  be  run
        like any other .COM or .EXE program.


                                 Page 92









                  CHAPTER 14 - Complete sample programs



                  TIMEDATE, to get today's time and date

             This  is a very useful program as an example  of  using
        some  of  the extensions of TURBO Pascal if  you  are  using
        TURBO Pascal 3.0.  It interrogates the inner workings of DOS
        and  gets  the present time and date for you,  provided  you
        entered  them  correctly when you turned your  computer  on.
        The  procedure Time_And_Date can be included in  any  Pascal
        program  you  write to give you the time and date  for  your
        listings.   As an exercise in programming, add the time  and
        date to the program LIST to improve on its usefulness.

             The  program named TIMEDAT4.PAS does the same thing  as
        the last, but it works with TURBO Pascal 4.0 using the means
        of defining a DOS call as it has been revised for the  newer
        version.   It turns out to be an almost trivial program  but
        is still a good illustration of how to use some of the newer
        Borland extensions to Pascal.

                     SETTIME, a useful utility program

             This program is very interesting in that it changes the
        date  and time stamp on any file in the  current  directory.
        It  is the program used to set the time and date on  all  of
        the  files  on  the distribution disks  included  with  this
        tutorial.  It sets the time to 12:00:00 and the date to  Jan
        15, 1988 but you can use it to set any desired time.

             You  could  ask the operator for the desired  time  and
        date  or use the procedure to get the present date  and  set
        the  time  to  noon  or  whatever  time  you  desire.    Its
        usefulness is limited only by your imagination.

                        SHAPES3, an example of menus

             This program is not very useful, but it illustrates one
        way to handle menus in a Pascal program, but only if you are
        using version 3.0 of TURBO Pascal.  Chapter 13 included  the
        identical program done slightly differently for use with the
        TURBO Pascal 4.0 compiler.  You can study the structure  and
        imagine  many  ways  a  menu can  be  used  to  improve  the
        usefulness of your own programs.

                     OT, The OAKTREE directory program

             This  program should be very useful to you,  especially
        if  you have a hard disk.  It will list the entire  contents
        of  your  hard disk (or floppy) in a very easy to  read  and
        easy to use form.  The program is documented in OT.DOC,  and
        is  precompiled for you in OT.COM in case you are not  using


                                 Page 93









                  CHAPTER 14 - Complete sample programs


        TURBO  Pascal.  It uses many of the TURBO Pascal  extensions
        and will probably not compile with any other Pascal compiler
        without extensive modifications.

             You will find two versions of the source code for  this
        program, one named OT3.PAS for use with TURBO Pascal version
        3.0,  and another named OT4.PAS for use with version 4.0  of
        the  TURBO Pascal compiler.  You should rename one  of  them
        OT.PAS for use with your particular compiler.

             The  two  versions are different in a number  of  ways.
        The  first version was written for TURBO Pascal version  3.0
        over a year ago and was only slightly modified for this  new
        version  of the tutorial.  The newer version,  OT4.PAS,  was
        modified extensively to use some of the procedures  provided
        by   Borland  such  as  GetDate,  GetTime,  FindFirst,   and
        FindNext.   The program for version 4.0 is somewhat  smaller
        since  the  predefined procedures use  fewer  characters  to
        perform  a  given job, and the executable version  shows  an
        even greater reduction in size.  Apparently Borland has done
        a very good job in code size reduction with the introduction
        of version 4.0.

             It would benefit you greatly to study the two  versions
        of OT.PAS side by side and compare the benefits of using the
        predefined procedures.

             You  will find either program to be a good  example  of
        linked  lists  because it includes a sort  routine  using  a
        dynamically  allocated  B-TREE and another  sorting  routine
        that  uses  a  dynamically  allocated  linked  list  with  a
        bubble_sort.   These  methods  are  completely  defined   in
        Niklaus  Wirth's  book,  "Algorithms  +  Data  Structures  =
        Programs",  a highly recommended book if you are  interested
        in advanced programming techniques.

             It  might  also be pointed out that  both  OT3.PAS  and
        OT4.PAS also makes use of recursive methods for both sorting
        and handling subdirectories.  It is definitely an example of
        advanced programming methods, and it would be a good vehicle
        for your personal study.

                     Most Important - Your own programs

             Having completed this tutorial on Pascal, you are  well
        on your way to becoming a proficient Pascal programmer.  The
        best  way  you can improve your skills now  is  to  actually
        write Pascal programs.  Another way to aid in your  building
        of  skill and confidence is to study other Pascal  programs.
        Many   programming  examples  can  be  found  in   computing
        magazines  and  books.  One of the best books  available  is


                                 Page 94









                  CHAPTER 14 - Complete sample programs


        "Programming  in  Pascal" by Peter Grogono, and  another  is
        "Oh! Pascal!" by Doug Cooper and Michael Clancy.

             You  already  own one of the best books  available  for
        reference if you are using TURBO Pascal.  Although the TURBO
        Pascal  reference manual is worth very little as a  learning
        tool,  it is excellent as a language reference manual.   Now
        that  you have completed all 14 chapters of  this  tutorial,
        you  have  a  good grasp of the terminology  of  Pascal  and
        should  have little trouble reading and  understanding  your
        reference  manual.   Your only limitation at this  point  is
        your own perseverance and imagination.

             Happy programming.







































                                 Page 95
