PROGRAM ARRAY3 c c What if I don't know how much array space I will need when I first c write my Fortran Program c c John Mahaffy 2/3/95 c IMPLICIT NONE INTEGER I,J,IERR,N,NDAT c c Declare A, B, and C to be arrays to be ALLOCATABLE c REAL, ALLOCATABLE :: A(:),B(:),C(:) REAL CSUM,CMAX,CMIN,AVERAGE,DUMMY c c One way to decide on how much space you need is to count information c in the input. Be sure to include options for error conditions. c OPEN(11,FILE='array3a.in',ERR=400) NDAT=0 10 READ(11,*,END=20) DUMMY NDAT=NDAT+1 GO TO 10 20 CONTINUE IF(NDAT.EQ.0) go to 400 c c Having gone through Unit 11, I need to reposition it at the beginning c REWIND(11) c c I've dropped the STAT optional argument this time. The program will c stop at the ALLOCATE statement if any problems develop. c ALLOCATE (A(1:NDAT),B(NDAT),C(NDAT)) PRINT *, 'ERROR FLAG =', IERR c c Set values of A and B c DO 30 I=1,NDAT READ(11,*) A(I), B(I) 30 CONTINUE c c Process as before c C(1:NDAT)=A(1:NDAT)+B(1:NDAT) CSUM=SUM(C(1:NDAT)) CMIN=MINVAL(C(1:NDAT)) CMAX=MAXVAL(C(1:NDAT)) C AVERAGE=CSUM/NDAT WRITE(*,'(//,'' RESULTS FOR ELEMENTS 1 THROUGH '',I3,'' OF C'')') & NDAT WRITE(6,2002)AVERAGE,CMIN,CMAX 2002 FORMAT(' AVERAGE OF SELECTED ELEMENTS IN C = ', F8.3,/, & ' MINIMUM OF SELECTED ELEMENTS IN C = ', F8.3,/, & ' MAXIMUM OF SELECTED ELEMENTS IN C = ', F8.3) WRITE(6,2003) C(1:NDAT) 2003 FORMAT(' C = ',/,(1P,8E10.2)) c STOP 400 PRINT *,' Empty or missing input file: array3a.in' STOP END