Computers in Engineering WWW Site - Example 5.2

Example 5.2


FORTRAN Version

!
      PROGRAM P52
!
!
!     Nested loops to access arrays
!
      IMPLICIT NONE
      INTEGER :: I,J,K,UNITS(12),NQ
      REAL :: SALES(12),SQ
!
!
      PRINT *, 'This is Program >> P52  - Nested loops for arrays'
!
!     Tell program where data for  READ *  is coming from
      OPEN(UNIT=5, FILE='P52.DAT')      ! UNIT=5 is the default input
!
!
L1:   DO I=1,12
         READ 15,UNITS(I),SALES(I)
      END DO L1
   15 FORMAT(I3,F5.1)
      I=0
L2:   DO J=1,4        ! Four quarters
         NQ=0
         SQ=0
L3:      DO K=1,3     ! Each with three months
           I=I+1      ! Month pointer I goes from 1 to 12
           NQ=NQ+UNITS(I)
           SQ=SQ+SALES(I)
         END DO L3
         PRINT 25,J,NQ,SQ
   25    FORMAT(' QUARTER',I2, &  
         I7,' CARS    $',F5.1,' M')
      END DO L2
      STOP
      END PROGRAM P52
DATA:
672 3.4
609 3.2
715 3.7
803 4.2
810 4.8
831 5.1
829 5.1
727 5.1
780 4.3
703 3.9
791 4.2
783 3.6
OUTPUT:

              +--------------------------------------------------+
              |     32-bit Power for Lahey Computer Systems      |
              |   Phar Lap's 386|DOS-Extender(tm) Version 7.0    |
              |  Copyright (C) 1986-94 Phar Lap Software, Inc.   |
              |           Available Memory = 14880 Kb            |
              +--------------------------------------------------+


This is Program >> P52  - Nested loops for arrays
QUARTER 1   1996 CARS    $ 10.3 M
QUARTER 2   2444 CARS    $ 14.1 M
QUARTER 3   2336 CARS    $ 14.5 M
QUARTER 4   2277 CARS    $ 11.7 M

Pascal Version

{$G256}
{$P512}
{$D+}
PROGRAM p52 (input, output);
VAR
  month : ARRAY[1..12] OF string[3];
  units : ARRAY[1..12] OF INTEGER;
  sales : ARRAY[1..12] OF REAL;
  sq : REAL;
  i, j, nq, k : INTEGER;
BEGIN
  FOR i := 1 TO 12 DO
    readln ( month[i], units[i], sales[i] );
  i := 0;
  FOR j := 1 TO 4 DO
    BEGIN
      nq := 0;
      sq := 0;
      FOR k := 1 TO 3 DO
        BEGIN
          i := i + 1;
          nq := nq + units[i];
          sq := sq + sales[i]
        END; { end for }
      writeln;
      writeln ( 'quarter', j:2, nq:7, ' cars     $', sq:5:1, ' m' );
      writeln
    END { end for }
END.
DATA:
jan       672    3.4
feb       609    3.2
mar       715    3.7
apr       803    4.2
may       810    4.8
jun       831    5.1
jul       829    5.1
aug       727    5.1
sep       780    4.3
oct       703    3.9
nov       791    4.2
dec       783    3.6

Last modified: 22/07/97