1 Overview.- 2 Introduction to Computer Systems.- 2.1 The components of a computer system.- 2.2 Software.- 2.3 Problems.- 2.4 Bibliography.- 3 Introduction to Operating Systems.- 3.1 History of Operating Systems.- 3.1.1 The 1940s.- 3.1.2 The 1950s.- 3.1.3 The 1960s.- 3.1.4 The 1960s and 1970s.- 3.1.5 The 1970s and 1980s.- 3.2 Networking.- 3.3 Problems.- 3.4 Bibliography.- 4 Introduction to Using a Computer System.- 4.1 Files.- 4.2 Editors.- 4.3 Stand Alone Systems.- 4.4 Networked Systems.- 4.5 Multi-User Systems.- 4.6 Other Useful Things to Know.- 4.7 Bibliography.- 5 Introduction to Problem Solving.- 5.1 Natural Language.- 5.2 Artificial Language.- 5.2.1 Notations.- 5.3 Resume.- 5.4 Algorithms.- 5.4.1 Top Down.- 5.4.2 Bottom up.- 5.4.3 Stepwise Refinement.- 5.5 Systems Analysis and Design.- 5.5.1 Problem Definition.- 5.5.2 Feasibility Study and Fact Finding.- 5.5.3 Analysis.- 5.5.4 Design.- 5.5.5 Detailed Design.- 5.5.6 Implementation.- 5.5.7 Evaluation and testing.- 5.5.8 Maintenance.- 5.6 Conclusions.- 5.7 Problems.- 5.8 Bibliography.- 6 Introduction to Programming Languages.- 6.1 Some Early Theoretical Work.- 6.2 What is a programming language.- 6.3 Program Language Development and Engineering.- 6.4 The Early Days.- 6.4.1 Fortran.- 6.4.2 Cobol.- 6.4.3 Algol.- 6.5 Chomsky and Program Language Development.- 6.6 Lisp.- 6.7 Snobol.- 6.8 Second Generation Languages.- 6.8.1 PL/1 and Algol 68.- 6.8.2 Simula.- 6.8.3 Pascal.- 6.8.4 APL.- 6.8.5 Basic.- 6.8.6 C.- 6.9 Some Other Strands in Language Development.- 6.9.1 Abstraction, Stepwise Refinement and Modules.- 6.9.2 Structured Programming.- 6.9.3 Standardisation.- 6.10 Ada.- 6.11 Modula.- 6.12 Modula.- 6.13 Other Language Developments.- 6.13.1 Logo.- 6.13.2 Postscript, TeX and LaTeX.- 6.13.3 Prolog.- 6.13.4 SQL.- 6.13.5 ICON.- 6.14 Object Orientated Programming — OOP.- 6.14.1 Oberon and Oberon.- 6.14.2 Smalltalk.- 6.14.3 C.- 6.15 Fortran.- 6.16 The Future and Further Sources.- 6.16.1 Fortran 1996.- 6.16.2 High Performance Fortran — HPF.- 6.16.3 Network Sources.- 6.17 Summary.- 6.18 Bibliography.- 7 Introduction to Programming.- 7.1 Elements of a programming language.- 7.2 Variables — name, type and value.- 7.3 Notes.- 7.4 Some more Fortran rules.- 7.5 Good Programming Guidelines.- 7.6 Fortran Character set.- 7.6.1 Notes.- 7.7 Problems.- 8 Introduction to Arithmetic.- 8.1 Rounding and truncation.- 8.2 Example 1: Time taken for light to travel from the Sun to Earth.- 8.3 The PARAMETER statement.- 8.4 Precision and size of numbers.- 8.5 Health Warning: Optional Reading, Beginners are Advised to Leave until Later.- 8.5.1 Selecting different INTEGER Kinds.- 8.5.2 Selecting different REAL Kinds.- 8.5.3 Specifying Kind Types for Literal Integer and Real Constants.- 8.5.4 Positional Number Systems.- 8.5.5 Bit Data Type and Representation Model.- 8.5.6 Integer Data Type and Representation Model.- 8.5.7 Real Data Type and Representation Model.- 8.5.8 IEEE 754.- 8.5.9 Example 2: Testing the numerical representation of different kind types on a system.- 8.5.10 Example 3: Binary Representation of Different Integer Kind Type Numbers.- 8.5.11 Summary of how to select the appropriate KIND type.- 8.6 Summary.- 8.7 Problems.- 8.8 Bibliography.- 9 Arrays 1: Some Fundamentals.- 9.1 Tables of data.- 9.1.1 Telephone directory.- 9.1.2 Book catalogue.- 9.1.3 Examination marks or results.- 9.1.4 Monthly rainfall.- 9.2 Arrays in Fortran.- 9.3 The DIMENSION Attribute.- 9.4 An index.- 9.5 Control structure.- 9.6 Monthly Rainfall.- 9.6.1 Example 1: Rainfall.- 9.7 People’s Weights.- 9.7.1 Example 2: People’s Weights.- 9.8 Summary.- 9.9 Problems.- 10 Arrays 2: Further Examples.- 10.1 Higher dimension arrays.- 10.1.1 Example 1: A Map.- 10.1.2 Example 2: Booking arrangements in a theatre or cinema.- 10.2 Additional forms of the DIMENSION attribute and DO loop statement.- 10.2.1 Example 3: Voltage from-20 to+20 volts.- 10.2.2 Example 4: Longitude from-180 to +180.- 10.2.3 Notes.- 10.3 The DO loop and straight repetition.- 10.3.1 Example 5: Table of Temperatures.- 10.3.2 Example 6: Means and Standard Deviations.- 10.4 Summary.- 10.5 Problems.- 11 Arrays 3: Further Examples.- 11.1 Terminology.- 11.1.1 Rank.- 11.1.2 Bounds.- 11.1.3 Extent.- 11.1.4 Size.- 11.1.5 Shape.- 11.1.6 Conformable.- 11.2 Whole array manipulation.- 11.2.1 Assignment.- 11.2.2 Expressions.- 11.3 Array Sections.- 11.3.1 Example 1: Ages.- 11.3.2 Example 2: Examination Results.- 11.4 Allocatable Arrays.- 11.4.1 Example 3: Height Above Sea Level.- 11.5 Array Element Ordering.- 11.5.1 Array Element Ordering and Physical and Virtual Memory.- 11.6 Array Constructors.- 11.7 Masked Array Assignment and the WHERE Statement.- 11.7.1 Notes.- 11.8 Summary.- 11.9 Problems.- 12 Output.- 12.1 Integers, I format.- 12.2 Reals, F format.- 12.3 Reals, E format.- 12.4 Spaces.- 12.5 Alphanumeric or character format, A.- 12.6 Common mistakes.- 12.7 OPEN (and CLOSE).- 12.7.1 The OPEN statement.- 12.7.2 Writing.- 12.8 Repetition.- 12.9 Some more examples.- 12.10 Implied DO loops.- 12.11 Formatting for a line-printer.- 12.11.1 Mechanics of carriage control.- 12.11.2 Generating a new line, on both line-printers and terminals.- 12.12 Summary.- 12.13 Problems.- 13 Reading in Data.- 13.1 Fixed fields on input.- 13.1.1 Integers, the I format.- 13.1.2 Reals, the F and E formats.- 13.2 Blanks, nulls and zeros.- 13.3 Characters.- 13.4 Skipping spaces and lines.- 13.5 Reading.- 13.6 File manipulation again.- 13.7 Errors when reading.- 13.8 Summary.- 13.9 Problems.- 14 Functions.- 14.1 An Introduction to Predefined Functions and Their Use.- 14.1.1 Example 1: Simple function usage.- 14.2 Generic Functions.- 14.2.1 Example 2: The ABS Generic function.- 14.3 Elemental Functions.- 14.3.1 Example 3: Elemental Function Use.- 14.4 Transformational Functions.- 14.4.1 Example 4: Simple Transformational Use.- 14.4.2 Example 5: Intrinsic DOT_PRODUCT use.- 14.5 Notes on Function Usage.- 14.6 Example 6: Easter.- 14.7 Complete List of Predefined Functions.- 14.7.1 Inquiry Functions.- 14.7.2 Transfer and Conversion Functions.- 14.7.3 Computational Functions.- 14.7.4 Array Functions.- 14.7.5 Pre-Defined Subroutines.- 14.8 Supplying your own functions.- 14.8.1 Example 7: Simple User Defined Function.- 14.9 An Introduction to the Scope of Variables and Local Variables.- 14.10 Recursive Functions.- 14.10.1 Example 8: Recursive Factorial Evaluation.- 14.11 Example 9: Recursive version of GCD.- 14.12 Example 10: After Removing Recursion.- 14.13 Internal functions.- 14.13.1 Example 11: Stirling’s Approximation.- 14.14 Resume.- 14.15 Function Syntax.- 14.16 Rules and Restrictions.- 14.17 Problems.- 14.18 Bibliography.- 14.18.1 Recursion and Problem Solving.- 15 Control Structures.- 15.1 Selection between courses of action.- 15.1.1 The BLOCK IF statement.- 15.1.2 Example 1: Quadratic Roots.- 15.1.3 Note.- 15.1.4 Example 2: Date calculation.- 15.1.5 The CASE Statement.- 15.1.6 Example 3: Simple calculator.- 15.1.7 Example 4: Counting Vowels, Consonants, etc.- 15.2 The three forms of the DO statement.- 15.2.1 Example 5: Sentinel Usage.- 15.2.2 CYCLE and EXIT.- 15.2.3 Example 6: e**x Evaluation.- 15.2.4 Example 7: Wave Breaking on an Offshore Reef.- 15.3 Summary.- 15.4 Problems.- 15.5 Bibliography.- 16 Character.- 16.1 Character Input.- 16.2 Character Operators.- 16.3 Character Sub-Strings.- 16.4 Character functions.- 16.5 Summary.- 16.6 Problems.- 17 Complex.- 17.1 Example.- 17.2 Complex and Kind Type.- 17.3 Summary.- 17.4 Problems.- 18 Logical.- 18.1 I/O.- 18.2 Summary.- 18.3 Problems.- 19 User Defined Types.- 19.1 Example 1 — Dates.- 19.2 Type Definition.- 19.3 Variable Definition.- 19.4 Example 2 — Address lists.- 19.5 Example 3: Nested User Defined Types.- 19.6 Problems.- 19.7 Bibliography.- 20 Dynamic Data Structures.- 20.1 Example 1: Simple Pointer Concepts.- 20.2 Example 2: Singly linked list.- 20.3 Other Dynamic Data Structures.- 20.4 Trees.- 20.4.1 Example 3: Perfectly Balanced Tree.- 20.5 Using Linked Lists for Sparse Matrix Problems.- 20.5.1 Inner Product of two Sparse Vectors.- 20.6 Data Structures Summary.- 20.7 Problems.- 20.8 Bibliography.- 21 Files.- 21.1 Files in Fortran.- 21.2 Summary of options on OPEN.- 21.3 More fool proof i/o.- 21.4 Summary.- 21.5 Problems.- 22 An Introduction to Subroutines.- 22.1 Simple Subroutine Example.- 22.2 Defining a subroutine.- 22.3 Referencing a subroutine.- 22.4 Dummy Arguments or Parameters, and Actual Arguments.- 22.5 Interface.- 22.6 Intent.- 22.7 Local Variables.- 22.7.1 Local Variables and the SAVE attribute.- 22.8 Scope of Variables.- 22.9 Status of the Action Carried out in the Subroutine.- 22.10 Why Bother.- 22.11 Summary.- 22.12 Problems.- 23 Subroutines.- 23.1 Example 1: Introduction to Arrays as Parameters.- 23.1.1 Explicit Shape Dummy Arrays.- 23.2 Example 2: Characters as parameters and assumed length dummy arguments.- 23.3 Example 3: Using Hoare’s Quick Sort Algorithm.- 23.3.1 Note 2 — Intent Attribute.- 23.3.2 Note 3 — Explicit shape dummy array.- 23.3.3 Note 4 — Assumed Length Dummy Argument.- 23.3.4 Note 5 — Recursive Subroutine.- 23.3.5 Note 6 — Internal Subroutines and Scope.- 23.3.6 Note 7 — Flexible Design.- 23.4 Example 4: Rank two and higher arrays as parameters.- 23.4.1 Assumed Shape Arrays.- 23.5 Summary.- 23.6 Problems.- 23.7 Bibliography.- 24 An Introduction to Modules.- 24.1 Modules for global data.- 24.1.1 Example 1: Modules for Precision Specification and Constant Definition.- 24.1.2 Note.- 24.1.3 Example 2: Constant Definition and Array Definition.- 24.2 Modules for derived data types.- 24.2.1 Example 3: Person Data Type.- 24.3 Modules for explicit procedures interfaces.- 24.3.1 Example: Using Quicksort.- 24.4 Modules containing procedures.- 24.5 Example 4 — The Solution of Linear Equations Using Gaussian Elimination.- 24.5.1 Notes.- 24.6 Notes on Module Usage and Compilation.- 24.7 Summary.- 24.8 Problems.- 24.9 Bibliography.- 25 Formal Syntax and Some Additional Features.- 25.1 Program Units.- 25.2 Procedure — Function or Subroutine.- 25.2.1 Internal Procedure.- 25.3 Module.- 25.4 Executable Statements.- 25.5 Statement Ordering.- 25.6 Entities.- 25.7 Scope and Association.- 25.8 Modules and Scope.- 25.8.1 Public and Private Attributes.- 25.8.2 USE, ONLY and Rename.- 25.9 Keyword and Optional Arguments.- 25.10 Syntax Summary of Some Frequently used Fortran Constructs.- 25.10.1 Main Program.- 25.10.2 Subprogram.- 25.10.3 Module.- 25.10.4 Internal Procedure.- 25.10.5 Procedure heading.- 25.10.6 Procedure ending.- 25.10.7 Specification construct.- 25.10.8 Derived Type definition.- 25.10.9 Interface block.- 25.10.10 Specification statement.- 25.10.11 Type specification.- 25.10.12 Attribute Specification.- 25.10.13 Executable construct.- 25.10.14 Action statement.- 26 Case Studies.- 26.1 Example 1 — Solving a System of First Order Ordinary Differential Equations using Runge-Kutta-Merson.- 26.1.1 Note: Alternative form of the Allocate statement.- 26.1.2 Note: Automatic arrays.- 26.1.3 Note: Dummy Procedure Arguments.- 26.2 Example 2 — Generic Procedures.- 26.3 Example 3 — A Function that returns a variable length array.- 26.4 Example 4 — Operator and Assignment Overloading.- 26.5 Example 5: A Subroutine to Extract the Diagonal Elements of a Matrix.- 26.6 Modules and Packaging.- 26.7 Problems.- 26.8 Bibliography.- 27 Converting from Fortran 77.- 27.1 Deleted Features.- 27.2 Obsolescent Features.- 27.2.1 Arithmetic IF.- 27.2.2 Real and Double precision DO Control Variables.- 27.2.3 Shared DO termination and non ENDDO termination.- 27.2.4 Alternate RETURN.- 27.2.5 PAUSE Statement.- 27.2.6 ASSIGN and assigned GOTO statements.- 27.2.7 Assigned FORMAT statements.- 27.2.8 H Editing.- 27.3 Better Alternatives.- 28 Miscellanea.- 28.1 Program Development and Software Engineering.- 28.1.1 Modules.- 28.1.2 Programming Style — Programs should be Easy to Read.- 28.1.3 Programming Style — Programs should Behave Well.- 28.2 Data Structures.- 28.3 Algorithms.- 28.4 Recursion.- 28.5 Structured Programming and the GOTO Statement.- 28.6 Efficiency, space time trade off.- 28.7 Program Testing.- 28.8 Simple Debugging Techniques.- 28.9 Software Tools.- 28.9.1 Cross Referencing.- 28.9.2 Pretty print.- 28.9.3 NAGWare f90 Tools.- 28.10 Numerical Software Sources.- 28.11 Coda.- 28.12 Bibliography: All sources (bar one) taken from comp.software-eng.- 28.12.1 Software Engineering.- 28.12.2 Programming Style.- 28.12.3 Software Testing.- 28.12.4 Fun.- Appendix A, Sample Program Examples.- Appendix B, ASCII Character Set.- Appendix C, Intrinsic Functions and Procedures.- Appendix D, English and Latin Texts.- Appendix E, Coded Text Extracts.- Appendix F, NAG.- Appendix G, Annex D, ISO/IEC 1539: 1991 (E).