INTRODUCTION TO PL/I, ALGORITHMS, AND STRUCTURED PROGRAMMING
3rd Edition 1997
by R. A. Vowels, emphasizes fundamentals of structured programming
through study of PL/I. It is designed for a reader's first or second
exposure to computer programming, and is intended to provide a sound
grounding for the reader who desires to study PL/I in greater depth.
The book is organized into two parts. The first part (Chapters 0 to 9) is concerned with elements of PL/I. The second part (Chapters 10 to 26) introduces traditional and new algorithms.
First Part - PL/I and Structured Programming
The first part emphasizes fundamentals of structured programming through study of a subset of PL/I. The subset is concise, well-defined, and is easy to learn.
The first chapter outlines some historical aspects of computing. The second introduces the concept of algorithms, flowcharts, and complete working programs illustrating basic elements including conditional statements. Subsequent chapters cover numeric data, expressions and assignments, free format input and output (GET LIST and PUT LIST), formatted input and output including picture formats (GET EDIT and PUT EDIT), loops and conditional statements, statement grouping using simple DO-groups, structured loops including DO WHILE, declarations, arrays, debugging, string data concepts, subroutines, functions, and program structure. In this flexible text, some later chapters can be covered earlier, or may be omitted at first reading. For example, the chapter on string handling may be covered earlier if it is desired to provide practice in this area before others. The section on EDIT-directed input-output may be omitted, or covered later.
The importance of structured programming is stressed from the beginning. All of the example programs are enhanced by a uniformly-applied style of indenting both loops and conditionals.
Second Part - Algorithms and PL/I
The second part explores more PL/I and contains a detailed exposition
on important algorithms,
some traditional, some new. For most of these topics, no prior or special knowledge is assumed. Popular sort algorithms are examined: the Bubble Sort, Shell Sort, Heap Sort, Quicksort, and Hash Sort. Various search algorithms are studied: linear, binary, hash, binary search tree. The chapter on recursion commences with some short examples, and culminates with Quicksort and algorithms for space-filling curves. Algorithms for solving linear equations including tri-diagonal and banded systems (Gauss, Gauss-Siedel), matrix inversion, roots of polynomials are covered in detail. Algorithms for performing Fourier Transforms are included. The significant string search algorithms studied include the Knuth-Morris-Pratt, Rabin-Karp, Boyer-Moore, and Baeza-Yates-Gonnet. Graphics algorithms for creating fractals and space-fillling curves, reading and creating picture files (PCX and TIFF files), and data compression, are provided. The adventurous will find that the large bibliography includes many works appropriate for further reading, study or research.
The second part is not just algorithms. Some additional PL/I topics
are included: separate theme chapters are devoted to decimal and
complex arithmetic, file processing, list processing (including
binary search trees and the new strongly typed facilities of IBM
PL/I for OS/2, VisualAge PL/I for Windows, AIX, and Enterprise
PL/I for z/OS), text processing including string searching, recursion,
and the macro processor.
The most important area of exception
handling is included for its three benefits: to enable errors to
be detected, to enable error recovery to be performed, and to
provide debugging facilities.
Chapters 10 to 26 can be studied in any order, as they are mostly independent. They can be selected at will according to the reader's interests.
The reader is expected to run as many of the exercises as possible on his/her computer (there are over 240 exercises) since practice is essential in developing programming expertise.
The book will be found helpful as a reference. Appendices contain a summary of PL/I statements, a list of built-in functions, and algorithms for many of the new built-in functions. Comes with a floppy disc with the programs, subroutines, and functions from the book. ISBN 0-9596384-9-0
Contents
PART 1 - Introduction to PL/I
Preface ix
0 Introduction
The Mechanical Era
The Evolution of Calculators
Early Calculating Machines
The First Mechanical Pre-computers
The First Mechanical Computer
The Electronic Era
Speed, Complexity, Miniaturization
The Software Era
The Compiler
Technological Advances
What is a Computer?
1 Algorithms and Programs
Algorithms, flowcharts, basic machine concepts, machine
instructions, PL/I programs, loops and control statements
2 Data Representation
2.1 Character Sets
2.2 Numbers
2.3 Data Types: Fixed-point constants, floating-point constants
2.4 Names
2.5 Integer and Floating-point
2.6 Some Basic Definitions
2.7 Introduction to computer peripherals and media
Exercises
3 Expressions and Assignments
3.1 Arithmetic Expressions
Operators and Operands, Evaluation, Priority of operators, parentheses,
prefix operators
Exercises
3.2 Priority of Operators
Evaluation and priority, Expressions with same priority operators,
Parenthesized expressions
Exercises
3.3 Assignment Statement
Exercises
3.4 Built-in Functions
Exercises
3.5 Comments
3.6 Logical Expressions
Exercises
4 Input-Output
4.1 Supplying Data, Getting Results
4.2 Layout of printed results
Tab settings
4.3 Control over Layout
Exercises
4.4 Catenation
4.5 Long Statements
4.6 Complete PL/I programs
4.7 Presentation
Exercises
4.8 Edit-Directed Input and Output
4.9 The PUT EDIT Statement
Integer output, fixed-point output, Data format items,
floating-point output, character string output, control format items
4.10 Iteration Factor
4.11 General PUT EDIT statement
4.12 Picture Format
4.13 The GET EDIT statement
Reading Strings
4.14 Summary of Format Items
4.15 Summary of GET and PUT statements
Exercises
5 Control Statement
5.1 The DO FOREVER Statement
The GO TO statement, Labels
5.2 The IF Statement
Compound Comparisons
Exercises
5.3 Value Loops
5.4 A Count Loop
5.5 Program Genesis
5.6 Loop with an ON Statement
Exercises
6 DO Statements, Arrays
6.1 Iterative Statements and the Loop
6.2 DO Statement for a Count Loop
6.3 Generalized DO Statement
6.4 DO Statement for a Value Loop (DO . . . WHILE)
6.5 DO Statement for a Hybrid Loop
Exercises
6.6 Arrays
Subscripted Variables & Declarations, Fish Survey example,
Declarations - main points
Exercises
6.7 Sorting Case Study
Exercises
6.8 Searching
6.9 Leaving Footprints
A Note on Floating-point
Structured Programming - a Perspective
Exercises
7 Declarations
7.1 DECLARE Statements and Attributes
Default data attributes, the DEFINE ALIAS statement, Types of declarations,
Long declarations, Special Points.
7.2 Factoring
Exercises
8 String Processing
8.1 Introduction
8.2 Character Data and Constants
Coded values
8.3 Declarations, Character Names, and Assignments
Padding and Truncation
8.4 Input and Output of Strings
8.5 Character Operations
Exercises
8.6 Building, Extracting, and Searching Strings
Catenation, the Built-in Functions SUBSTR, INDEX, SEARCH, SEARCHR,
and REVERSE
Exercises
8.7 Graph Plotting
8.8 The Binary Search
8.9 Algebraic Expression Case Study
8.10 Summary of Character Operations
Exercises
9 Subroutines, Procedures, Program Structure
9.1 Introduction
9.2 Fundamentals
9.3 How to call a Subroutine
9.4 How to Write a Subroutine
Exercises
9.5 Subroutines with Parameters
9.6 Scope of Declarations
9.7 The Effect of Scope at Execution Time
Modular Programs
Exercises
9.8 Generalizing a Program
Exercises
9.9 The %INCLUDE Statement
9.10 The Preprocessor
9.11 Function Procedures
Exercises
9.12 Blocks
9.13 Plotting a Graph
Epilog
Exercises
Syntax Diagrams for Part 1
PART 2 - Algorithms and PL/I
10 Sorting
10.1 Cocktail-Shaker Sort
10.2 Double-Bubble Sort
10.3 Shell Sort
10.4 Heap Sort
10.5 Indirect Addressing
10.6 Hash Sort
10.7 Hash Sort Version 2
10.8 Sorting Structures
10.9 Sorting Structures, on Two Fields
11 Recursion
11.1 Factorial
11.2 Fibonacci Numbers
11.3 Multiplication
11.4 Greatest Common Divisor
11.5 Base Conversion
11.6 Quicksort
11.7 Quicksort Version 2
11.8 Quicksort Version 3
11.9 Sierpiski Curves
11.10 Hilbert Curves
11.11 Penrose Curves
11.12 Dragon Curves
Exercises
12 Linked Lists and Trees
12.1 Linked List
12.2 Creating a One-Way Linked List
Appending to the Tail, Creating and Deleting Nodes
12.3 Circular Linked List - Josephus' Problem
Exercises
12.4 Two-Way Linked List
Exercises
12.5 Binary Tree
12.6 Binary Search Tree
Searching, Traversal, Insertion
12.7 Sorting Using Red-Black Binary Tree
Insertion, Left Rotation, Right Rotation, Rebalance the tree and re-color nodes,
Red-Black Tree algorithm, Shortened version of the RE_BALANCE_TREE algorithm
12.8 Displaying a Tree Decorated with Nodes
Normal and sideways
12.9 Deleting a Node from a Red-Black Tree
Splicing out and re-structuring
12.10 Algebraic Expressions and Trees
Exercise
12.11 Indirect Sort of a Linked List
Exercise
13 Complex Arithmetic
13.1 Complex Arithmetic Facilities
13.2 Exponentiation, taking roots
13.3 Complex Roots of a Quadratic Equation
13.4 Real and Complex Roots of a Cubic Equation
13.5 Real and Complex Roots of a Polynomial
13.6 Fractals
The Mandelbrot Set
13.7 Making a Picture File (PCX format)
13.8 Complex Roots of Complex Linear Equations
13.9 Electrical Circuit
13.10 Impedance of an Electrical Circuit
14 Using Published Algorithms
14.1 Fast Fourier Transform
14.2 Fast Fourier Transforms of Real, Sine, and Cosine Functions
14.3 Matrix Multiplication
14.4 Directed Graphs - Transitive Closure
14.5 Integration with the IBM SSP
14.6 Matrix Inversion with the IBM SSP
14.7 Matrix Inversion with IMSL
14.8 Transposing without Transposing
15 Text Processing
15.1 A Simple Text Editor
Exercises
Example - Converting a plain text file to HTML format
15.2 String Searching
15.3 Classic String Search
15.4 The Knuth-Morris-Pratt String Search
Exercise
15.5 The Boyer-Moore String Search
15.6 The Rabin-Karp String Search
15.7 The Baeza-Yates-Gonnet String Search
15.8 Approximate Searching
15.9 Approximate Searching (Unrestricted)
15.10 Approximate String Search
16 Files
16.1 Record-Oriented Input-Output
16.2 Sequential Record-Oriented File
16.3 Random-Access Files
16.4 Operations on Direct Access Files
16.5 Varying-Length Records
16.6 Self-Defining (Varying-Length) Records
16.7 PICTURE Data
16.8 Stream Files
16.9 EDIT Input and Output
16.10 PICTURE Data
17 Solving Simultaneous Equations
17.1 Solving Equations using Gauss Elimination
17.2 Gauss-Siedel Iteration
17.3 Tri-Diagonal System of Linear Equations
17.4 Banded System of Equations
17.5 Sparse Matrices
17.6 Matrix Inversion
17.7 Printing Arrays
18 Decimal Facilities
18.1 Introduction
18.2 Declarations
18.3 Care Required
18.4 Restrict Accuracy
18.5 The Intermediate Steps
18.6 Addition and Subtraction
18.7 Multiplication
18.8 Division
18.9 Precision
Exercise
18.10 Large Decimal Numbers
18.11 TIME and DATE
18.12 DAYS and DAYSTODATE
18.13 DAYS, and the UNION attribute
18.14 PICTURE Formats
19 Graphics
19.1 Seashells
19.2 New Shapes
19.3 Uccello's Chalice
19.4 Making a Picture File (TIFF File)
Color TIFF File
19.5 Reading and Displaying a Picture File (PCX File)
Summary of SELECT Statement
20 Searching
20.1 Linear Search
20.2 Binary Search
20.3 Hash Search
20.4 Hash Table with Quadratic Searching
Exercise
21 Numerical Methods
21.1 Integration - Rectangle Method
21.2 Trapezoidal Method
21.3 Simpson's Rule
21.4 Differentiation
21.5 Solving a Differential Equation: Euler's Method
21.6 Solving a Differential Equation: The Runge-Kutta Method
22 Debugging: Detecting & Intercepting Errors
22.1 Introduction
22.2 What kinds of error may occur?
22.3 Checking for errors
22.4 Intercepting Errors
22.5 Execute an ON statement first
22.6 Substring errors
22.7 Errors in Procedures
22.8 Production Run Monitor
22.9 Stuck in a Loop?
22.10 Long-Running Program?
22.11 Recovering after an Error
22.12 Using conditions to validate input data
22.13 Extended Exponent Range
22.14 Summary
23 Whole Array Operations
23.1 One-Dimensional Arrays
23.2 Two-Dimensional Arrays
23.3 Printing Tables
23.4 Cross-Sections of Arrays
24 The Macro Processor
24.1 The Macro Processor
24.2 Text Replacement
24.3 Text Generation
24.4 Expression Evaluation
24.5 Generating a Frequently-needed Expression
25 IBM PL/I for OS/2
25.1 DO Statements
25.2 New Data Types
25.3 Building Blocks
25.4 Multi-threading
26 What's next? - Visual PL/I
Appendices
A Built-in Functions
A.1 Built-in Functions
A.2 Division
A.3 Macro Built-in Functions
B Character Sets - ASCII and EBCDIC
C IBM PL/I for OS/2 and the PC
D Graphics Codes
E Quick Reference to PL/I Statements
F %INCLUDE Files
G Pre-processor Procedures
H PL/I Resources
I Sample Compilation
J Graphics Displays
Bibliography
Index
See a list of the main algorithms.
Details: Introduction to PL/I, Algorithms, and Structured Programming
by R. A. Vowels, 3rd Edition, 1997, ISBN 0-9596384-9-0, 731 pages, A4 size.
For further information, contact r|o|b|i|n|5|1 at dodo dot com dot au
[remove the vertical bars, and translate the other words accordingly.]
Copyright (c) 1998 by R. A. Vowels. All rights reserved.
Updated 10th January 2005.