# Computing and Printing the Input Data and Their Average: Version 4

 WARNING: This example assumes the output is sent to a printer, and as a result, every formatted output contains printer control.

### Problem Statement

The mean, variance and standard deviation of a set of data can be computed with the following formulas:

Write a program to read in a set of real values and use the above formulas to compute the mean, variance and standard deviation. Moreover, this program should generate a table containing the following addition information:

• the input data,
• the distance between the data to the mean, and
• if a data is greater than the sum of mean and standard deviation, a mark Good should be displayed; if a data is less than mean - standard deviation, a mark Bad should be displayed.
The input data and the table should be printed as follows:

```         1    1    2    2    3    3    4
....5....0....5....0....5....0....5....0
Input Data:

No  Data
=== ======
1   6.60
2   6.00
3   4.00
:
:
:
10   5.20

Mean               :       6.7100000
Variance           :       3.3498888
Standard Deviation :       1.8302702

Analysis Table:

No  Data    Dev
=== ======  =====
1   6.60  -0.11
2   6.00  -0.71
4   9.00   2.29 <-- Good
6   7.30   0.59
7   9.50   2.79 <-- Good
8   8.00   1.29
9   7.00   0.29
10   5.20  -1.51
```

This problem was discussed in one-dimensional array processing. Click here to review the previous version for comparison.

### Solution

```! --------------------------------------------------------------------
! PROGRAM  MeanVariance:
!    This program reads in an array and computes the mean, variance
! and standard deviation of the data stored in the array.  Then, it
! displays an analysis table.  If a value is greater than the value
! of (mean + standard deviation), it displays a "good".  If a value
! is less than the value of (mean - standard deviation), it displays
! --------------------------------------------------------------------

PROGRAM  MeanVariance
IMPLICIT  NONE

INTEGER, PARAMETER :: MAX_SIZE = 50       ! maximum array size
REAL, DIMENSION(1:MAX_SIZE) :: Data       ! input array
REAL               :: Mean, Variance, StdDev   ! results
INTEGER            :: n                   ! actual array size
INTEGER            :: i                   ! running index
CHARACTER(LEN=20)  :: For_Title    = '(A, A)'
CHARACTER(LEN=20)  :: For_Data     = '(I4, F7.2)'
CHARACTER(LEN=20)  :: For_Result   = '(A, A, F15.7)'
CHARACTER(LEN=20)  :: For_Analysis = '(I4, 2F7.2, A)'

READ(*,*)  (Data(i), i = 1, n)
WRITE(*,For_Title)  " ", " Input Data:"   ! display the input
WRITE(*,*)
WRITE(*,For_Title)  " ", "  No  Data"
WRITE(*,For_Title)  " ", "=== ======"
WRITE(*,For_Data)   (i, Data(i), i = 1, n)

Mean = 0.0                                ! compute mean
DO i = 1, n
Mean = Mean + Data(i)
END DO
Mean = Mean / n

Variance = 0.0                            ! compute variance
DO i = 1, n
Variance = Variance + (Data(i) - Mean)**2
END DO
Variance = Variance / (n - 1)
StdDev   = SQRT(Variance)                 ! compute standard deviation

WRITE(*,*)                                ! display result
WRITE(*,For_Result) " ", "Mean               : ", Mean
WRITE(*,For_Result) " ", "Variance           : ", Variance
WRITE(*,For_Result) " ", "Standard Deviation : ", StdDev
WRITE(*,*)
WRITE(*,For_Title)  " ", "Analysis Table:"! display an analysis table
WRITE(*,*)
WRITE(*,For_Title)  " ", " No  Data    Dev "
WRITE(*,For_Title)  " ", "=== ======  ====="
DO i = 1, n
IF (Data(i) > Mean + StdDev) THEN
WRITE(*,For_Analysis)  i, Data(i), Data(i) - Mean, " <-- Good"
ELSE IF (Data(i) < Mean - StdDev) THEN
WRITE(*,For_Analysis)  i, Data(i), Data(i) - Mean, " <-- Bad"
ELSE
WRITE(*,For_Analysis)  i, Data(i), Data(i) - Mean
END IF
END DO

END PROGRAM  MeanVariance
```

### Program Input and Output

If the input data consist of the following:
```10
6.6  6.0  4.0  9.0
4.5  7.3  9.5  8.0
7.0  5.2
```
The output of the program is:
```         1    1    2    2    3    3    4
....5....0....5....0....5....0....5....0
Input Data:

No  Data
=== ======
1   6.60
2   6.00
3   4.00
4   9.00
5   4.50
6   7.30
7   9.50
8   8.00
9   7.00
10   5.20

Mean               :       6.7100000
Variance           :       3.3498888
Standard Deviation :       1.8302702

Analysis Table:

No  Data    Dev
=== ======  =====
1   6.60  -0.11
2   6.00  -0.71
4   9.00   2.29 <-- Good
6   7.30   0.59
7   9.50   2.79 <-- Good
8   8.00   1.29
9   7.00   0.29
10   5.20  -1.51
```

### Discussion

We will not discuss the logic of this program. In what follows, only the output part will be addressed. Please click here for the details of program logic.
• The first part of printing the input values are the same as the previous three examples.
• Let us look at the analysis table:
```         1    1    2    2    3    3    4
....5....0....5....0....5....0....5....0
No  Data    Dev
=== ======  =====
1   6.60  -0.11
2   6.00  -0.71
```CHARACTER(LEN=20)  :: For_Analysis = '(I4, 2F7.2, A)'