The data file animals.dat gives the names of 22 animals (in alphabetic order), their average gestation period (length of pregnancy) in days and their average life span in years. (Source: New York Zoological Society)
Problem Statement
Input/Output Description
Mathematical Equations
The median is the middle number in an ordered (from lowest to highest or vice versa) set of values. If there is an odd number of values, the middle number is one of the numbers of the set. If there is an even number of values, the median is the mean of the two values in the middle, a value not in the set. To order the numbers, a sort algorithm will used. The selection sort is used in this program.
The standard deviation of a set of values is the statistically standard measure of variations from the mean. It is obtained from the formula
σ = √( ∑(xi-μ)2 /(N-1) )
where μ is the mean of the set of values, referred to as x's, ∑(xi-μ)2 is the sum of the squares of the differences of each x value and the mean of the x values, and N is the number of values.
Algorithm
Code
c This program determines the median, mean, and standard deviation c of the average gestation period and of the average life span of c the 22 selected animals. PROGRAM stats c Specification statements PARAMETER (numdat=22) REAL mdgest, mdlife, mngest, mnlife, sdevgest, sdevlife REAL sumgest, sumlife, sumsqg, sumsql INTEGER numdat, hold, place,keep, j, m, p, q INTEGER gest(numdat), life(numdat) CHARACTER*15 animal(numdat), save DATA sumgest, sumlife, sumsqg, sumsql/0,0,0,0/ c Variable Definitions c mdgest = median gestation period c mdlife = median life span c mngest = mean gestation period c mnlife = mean life span c sdevgest = standard deviation for the gestation period c sdevlife = standard deviation for the life span period c sumgest = sum of the gestation periods of the 22 animals c sumlife = sum of the life spans of the 22 animals c sumsqg = sum of the squares of the differences of each gestation c value and the mean gestation value c sumsql = sum of the squares of the differences of each life span c and the mean life span c hold, place, keep, save = variables used in sorting values c numdat = number of data values (22 in this case) c gest = set of 22 gestation periods c animal = set of 22 animals' names c life = set of 22 life spans OPEN(UNIT=20, FILE='animals.dat') c Read the values from the data file animals.dat into the arrays c animal (contains the animals' names), gest (contains the gestation c period in days for each animal), and life (contains the life span c in years for each animal). DO 100 k = 1, numdat READ (20,*) animal(k), gest(k), life(k) 100 CONTINUE c Sort (from highest to lowest) the values in the array gest using c the selection sort. So that the three are not separated from each c other, all three must be moved at the same time. DO 200 j = 1,numdat - 1 place = j start = j + 1 DO 300 m = start, numdat IF (gest(m) .LT. gest(place)) place = m 300 CONTINUE save = animal(j) hold = gest(j) keep = life(j) animal(j) = animal(place) gest(j) = gest(place) life(j) = life(place) animal(place) = save gest(place) = hold life(place) = keep 200 CONTINUE c Sort (from highest to lowest) the values in the array life using c the selection sort. DO 400 j = 1,numdat - 1 place = j start = j + 1 DO 500 m = start, numdat IF (life(m) .LT. life(place)) place = m 500 CONTINUE hold = life(j) save = animal(j) life(j) = life(place) animal(j) = animal(place) life(place) = hold animal(place) = save 400 CONTINUE PRINT * c Determine the median for the set of gestation values and the set c of life span values. If numdat is odd, the location of the median c in the array is (numdat/2 + 1). If numdat is even, there are two c middle values and the locations of these values are (numdat/2) and c (numdat/2 + 1). The median is the mean of these two middle values. IF (mod(numdat,2) .NE. 0) THEN mdgest = real(gest(numdat/2 + 1)) mdlife = real(life(numdat/2 + 1)) ELSE mdgest = (real(gest(numdat/2)+gest(numdat/2 + 1)))/2.0 mdlife = (real(life(numdat/2)+life(numdat/2 + 1)))/2.0 END IF PRINT *, 'The median gestation period is', mdgest PRINT *, 'The median life span is', mdlife c Find the mean gestation period (in days) and the mean life span c (in years) by suming the values in each set and dividing by c numdat. DO 800 p = 1, numdat sumgest = sumgest + gest(p) sumlife = sumlife + life(p) 800 CONTINUE mngest = real(sumgest)/real(numdat) mnlife = real(sumlife)/real(numdat) c Find the sample standard deviation, the standard measure of c variations from the mean, for both sets of values. DO 900 q = 1, numdat sumsqg = sumsqg + (real(gest(q)) - mngest)**2 sumsql = sumsql + (real(life(q)) - mnlife)**2 900 CONTINUE sdevgest = sqrt(sumsqg/real(numdat-1)) sdevlife = sqrt(sumsql/real(numdat-1)) PRINT * PRINT *, 'The mean gestation period is', mngest, ' days' PRINT *, 'with a standard deviation of', sdevgest PRINT * PRINT *, 'The mean life span is', mnlife, ' years' PRINT *, 'with a standard deviation of', sdevlife END
Output
The median gestation period is 112.000 The median life span is 11.0000 The mean gestation period is 154.000 days with a standard deviation of 143.870 The mean life span is 16.0909 years with a standard deviation of 14.8032