PROGRAM ARRAY3C c c What if I don't know how much array space I will need when I first c write my Fortran Program. If I don't want to bother with ALLOCATE, c or my compiler doesn't support it, I can use a Fortran 77 PARAMETER c statement to establish the available array space in one place. If c I need more later, I just change the one parameter value and recompile. c c John Mahaffy c IMPLICIT NONE INTEGER I,J,IERR,N,NDAT,NMAX PARAMETER (NMAX=10) c c Note: Once declared a PARAMETER, NMAX can never appear on the left c side of an equals sign. Try setting "NMAX=3" somewhere below c the OPEN(11,... statement. You can do Fortran arithmetic within c a PARAMETER statement as long as only constants and other c parameters are involved. Try replacing the above PARAMETER with: c " PARAMETER (N2=2, N4=4, NMAX=N2*N4+6)". Try breaking this c new statement into 2 statements, one setting N2 and N4 and the other c setting NMAX. In either case you will have to declare the type c of N2 and N4. c c Dimension A, B, and C to NMAX c REAL A(NMAX),B(NMAX),C(NMAX) REAL CSUM,CMAX,CMIN,AVERAGE,DUMMY c c Get the amount of data and see if there is enough space. c OPEN(11,FILE='array3b.in',ERR=400) READ(11,*,END=400) NDAT IF(NDAT.GT.NMAX) then print *, 'Increase NMAX to at least:', NDAT, ' and recompile' stop ENDIF 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: array3b.in' STOP END