Lesson 8 - Learning Goals



8.1 What are arrays and why we use them



8.2 How to define and use FORTRAN ARRAYS



One Dimensional Arrays

To store data in the computer we must define an array and specify the type of data and how many elements will be in the array. By type we mean, REAL, INTEGER, CHARACTER, etc, and the number of elements is called the dimension of the array.

INDEX MONTH() UNITS() SALES()
1 JAN 672 3.4
2 FEB 609 3.2
3 MAR 715 3.7
4 APR 803 4.2
5 MAY 810 4.8
6 JUN 831 5.1
7 JUL 829 5.1

8
AUG 827 5.1
9 SEP 780 4.3
10 OCT 703 3.9
11 NOV 791 4.2
12 DEC 783 3.6

To store the above data we could use :

CHARACTER (LEN=3) :: MONTH(12)

INTEGER :: UNITS(12)

REAL :: SALES(12)


Input/Output of Data Arrays

PROGRAM RPARRAYS

     IMPLICIT NONE

     CHARACTER(LEN=3) :: MONTHS(12)

     READ 33,MONTHS

33   FORMAT (12(' ',A3))

     PRINT 33,MONTHS

     DO I=1,12

          PRINT 70,I,MONTHS(I)

70         FORMAT (' MONTH ',I2,' IS ',A3)

     END DO

STOP

END PROGRAM RPARRAYS

/DATA

JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC

/ENDRUN

OUTPUT :

JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC

MONTH 1 IS JAN

MONTH 2 IS FEB

MONTH 3 IS MAR

MONTH 4 IS APR

.

.

.


Indexing of Data Arrays

Before we procees to do some calculations with the above data, there is an important concept we need, that of an Index. An index is a pointer, an INTEGER number or variable ( say K ) which we can use to point at a single element of an array or at all the elements in turn. In the diagram we have 12 rows corresponding to the 12 months of the year. For this case we can use an Index which takes on values from 1 to 12. That is, the index must lie within the range of number of elements declared. Also in the diagram we have written the name of the array and a subscript in brackets beside the individual elements. This is one of the ways we can refer to a single value in the array.

INDEX MONTH() UNITS() SALES()
1 JAN 672 3.4
2 FEB 609 3.2
3 MAR 715 3.7
4 APR 803 4.2
5 MAY 810 4.8
6 JUN 831 5.1
7 JUL 829 5.1

8
AUG 827 5.1
9 SEP 780 4.3
10 OCT 703 3.9
11 NOV 791 4.2
12 DEC 783 3.6


Subscripted variable

We use the term a subscripted variable to describe an array to distinguish it from simple variables which can only store a single value.

In the diagram we should be clear in our use of the terms :

Term Example
Array MONTH
Subscripted Variable SALES(K)
Subscript (2) (K)
Index K
Array element UNITS(2)
Value of an array element 609


TRY TO USE ARRAY INSTEAD OF LARGE BLOCKS OF IF-THEN STATEMENTS

Bad :

...

IF ( MSG = = 128 ) THEN

PRINT *,'FILE TRANSFER FINISHED'

ELSE IF ( MSG = = 129 ) THEN

PRINT *,'FILE TRANSFER ABORTED'

...

ELSE IF ( MSG = = 157 ) THEN

PRINT *,'OUT OF MEMORY'

END IF

...

Better :

...

CHARACTER (LEN=30) :: MSGTAB(30)

...

PRINT *,MSGTAB(MSG-127)

...


APPLICATION OF ARRAYS :

A LOOKUP TABLE

Total mark Grade
85-100 A
80-84 A-
75-79 B+
70-74 B
65-69 B-
60-64 C+
55-59 C
50-54 C-
45-49 D
0-44 F

EVERY ROW HAS THE

SAME INFORMATION

Total mark Grade
85-100 A
80-84 A-
75-79 B+
70-74 B
65-69 B-
60-64 C+
55-59 C
50-54 C-
45-49 D
0-44 F

INTEGER :: BOTTOM(10)

^

|

85 ______________A

80 ______________A-

75 ______________B+

70 ______________B

65 ______________B-

60 ______________C+

55 ______________C

50 ______________D

0 _______________F

_________________|

CHARACTER (LEN=2) :: GRADE(10)

BUT MORE THAN ONE

TYPE IN EACH ROW

PROGRAM EXAMPLE

     IMPLICIT NONE

     INTEGER :: RANGE

     CHARACTER (LEN=2) :: GRADE(9)

     GRADE(1) = 'F'

     ...

     GRADE(9) = 'A'

     ...

     RANGE = ( INT(FINAL) - 40 ) / 5

     IF ( RANGE < 1 ) THEN

          RANGE = 1

     ELSE IF ( RANGE > 9 ) THEN

          RANGE = 9

     END IF

200  PRINT *, NAME, FINAL, GRADE(RANGE)

     STOP

END PROGRAM EXAMPLE


PROGRAM EXAMPLE

IMPLICIT NONE

INTEGER :: RANGE

CHARACTER (LEN=2) :: GRADE(9)

GRADE(1) = 'F'

...

GRADE(9) = 'A'

...

RANGE = ( INT(FINAL) - 40 ) / 5

200 PRINT *, NAME, FINAL, GRADE(RANGE)

STOP

END PROGRAM EXAMPLE


SEE OTHER PROGRAM EXAMPLES :

P52.F90

P54.F90

P55.F90

P56.F90


Go back to lecture menu

Go back to main page


Copyright © 1996 McGill University. All rights reserved.