For this programming assignment, you are to develop a Fortran 90/95/2003 program to automate a useful task. The aim of the assignment is for you to reveal your competence in the Fortran language and ability to write an efficient, well-structured, error-free program. You are encouraged to suggest your own topic and task. As a guideline, the topic should preferably, but not necessarily, be related to science or engineering. The task to be automated should not be too simple or complex. If you wish to propose your own topic and task, it would be more prudent for you to seek approval first before working on it just to be sure that the topic and task chosen are both appropriate for the assignment. Some suggestions of programming tasks/topics that you may like to work on are:

1. Develop a program that finds the equation of a straight line that "best fits" a set of (*x, y*) data. This equation, called a regression equation, can then be used to predict *y* for a given value of *x*.

2. Develop a menu-driven program for calculating beam deflections. Various types of loads and beam boundary conditions are to be considered in order that the program developed is general and useful.

3. Consider a cable suspended from two towers of equal height. When the cable is subjected to self-weight loading only, the cable will sag into a catenary curve. Develop a program to analyze a catenary cable of given span (horizontal distance between towers) and weight per unit length of cable. The analysis includes computing the maximum sag which occurs midway between the two towers, the length of cable required as well as the maximum tension in the cable which occurs at the support point.

4. Develop a program to analyze a plane-truss structure for the deflections and axial forces developed in all members of the truss. The program could be menu-driven to analyze either (1) standard forms or (2) non-standard forms of truss structures under various loads applied at the joints. For the latter, the program should read in data that specify the form and geometry of the non-standard truss structure to be analyzed.

5. Develop a program for finding the solution of a system of linear equations. Any suitable algorithm may be selected as the basis for developing this program.

6. Develop a program to numerically compute the value of a definite integral. Any suitable algorithm may be selected as the basis for developing this program.

7. Develop a menu-driven program that sorts a list of data. If the data are real, the sort could either be in ascending or descending numerical value order. If the data are character strings, such as names of people, the sort could either be in ascending or descending alphabetical order.

8. Develop a program to determine the roots of a *n*-th order polynomial function. Note that some roots may be complex conjugates.

9. Develop a program to calculate the statistics of a series of real data, including arithmetic mean, standard deviation, median, the largest and smallest numbers and the range, i.e. the difference between the largest and smallest numbers.

10. A popular method for solving systems of (non-linear) ordinary differential equations is the "Runge-Kutta" method of the fourth order. Write a program to solve a pair of differential equations.

Some of the suggested topics above require you to do some self-study. You may also modify or augment the above suggested tasks to suit your own preference. Your program should be as general as possible in order to be useful. The code developed should be tested to ensure that it executes well and correct with various sets of data. The code will be assessed on its capability, readability, efficiency, accuracy and whether good programming style has been adopted.

You are to submit a report documenting clearly the objective and the various phases of the top-down program design development process including the pseudocode and/or flowchart of the algorithm chosen. The report should also describe the developed code's capability, features and superiority, as well as any limitations. Test examples are to be provided to demonstrate the use of the software developed, including a description of the input data used and a printout of the results displayed by the program. The file containing the source code of the program developed should also be submitted. The assessment for this assignment will be based on (1) the report, (2) the originality, complexity, usefulness and generality of the programming task/topic chosen, and (3) the Fortran source code.