Computers in Engineering WWW Site - Example 5.5

Example 5.5


FORTRAN Version

!
      PROGRAM P55
!
      IMPLICIT NONE
      CHARACTER (LEN=3) :: MONTH(12)
      CHARACTER (LEN=1) :: S(30)
      INTEGER :: I,K,JJ,UNITS(12)
      REAL :: SALES(12)
!
!
      PRINT *, 'This is Program >> P55  - Print a simple Histogram'
!
!     Tell program where data for  READ   is coming from
      OPEN(UNIT=5, FILE='P55.DAT')      ! UNIT=5 is the default input
!
!
L1:   DO I=1, 12
         READ 15,MONTH(I),UNITS(I),SALES(I)
      END DO L1
   15 FORMAT(A3,I7,F5.1)
!
L2:   DO I=1,30
         S(I)='*'
      END DO L2
!
      PRINT 100
  100 FORMAT('1MONTH UNITS SOLD'/)
L3:   DO I=1,12
         JJ=(UNITS(I)-590)/10
         PRINT 30,MONTH(I),(S(K),K=1,JJ)
   30    FORMAT('  ',A3,'  ',30A1)
      END DO L3
!
      PRINT 101
  101 FORMAT(/' MONTH SALES'/)
L4:      DO I=1,12
         JJ=SALES(I)*5
         PRINT 30,MONTH(I),(S(K),K=1,JJ)
      END DO L4
!
      STOP
      END PROGRAM P55
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
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 >> P55  - Print a simple Histogram
 MONTH UNITS SOLD

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

MONTH SALES

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

Pascal Version

{$G256}
{$P512}
{$D+}
PROGRAM p55 (input, output);
VAR
  month : ARRAY[1..12] OF string[3];
  s : ARRAY[1..30] OF STRING[1];
  units : ARRAY[1..12] OF INTEGER;
  sales : ARRAY[1..12] OF REAL;
  i, jj, k : INTEGER;
BEGIN
  FOR i := 1 TO 12 DO
    readln ( month[i], units[i], sales[i] );

  FOR i := 1 TO 30 DO
    s[i] := '*';

  writeln ( ^l );
  writeln ( 'month units sold' );
  FOR i := 1 TO 12 DO
    BEGIN
      jj := (units[i] - 590) DIV 10;
      write ( ' ':2, month[i], ' ':2 );
      FOR k := 1 TO jj DO
        write ( s[k] );
      writeln
    END; { end for }

  writeln ( ^l );
  writeln ( 'month sales' );
  FOR i := 1 TO 12 DO
    BEGIN
      jj := trunc (sales[i] * 5.0);
      write ( ' ':2, month[i], ' ':2 );
      FOR k := 1 TO jj DO
        write ( s[k] );
      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: 08/07/97