C*********************************************************************** C * C G O D D A R D C O M P U T E R S C I E N C E I N S T I T U T E * C * C (1) PROGRAM NAME, MOVING AVERAGES * C (2) CALLING NAME, MOVAR * C (3) STATUS/CHANGE LEVEL, PGM.= GCSL023, PCR.= 00-02-67 * C (4) PROGRAMMED BY, T. A. SAMPLE * C (5) ADAPTED TO HP FORMAT ROLAND JAHN 04-70 * C * C SUPPORTED IN PART BY GRANT NO. FR00197 BY THE * C SPECIAL RESEARCH RESOURCES BRANCH, NIH-USPHS. * C * C*********************************************************************** PROGRAM GC23B DIMENSION TS(2000),NCOM(36) C C READ AND PRINT HEADER AND PARAMETERS C CALL THE READ SUBROUTINE C 10 READ (5, 140) (NCOM(I),I=1,36) READ (5, 150) M,N,IS1,IS2 WRITE (6, 180) (NCOM(I),I=1,36),M,N,IS1,IS2 CALL READ(TS,M) C C INITIALIZE SUMMATION CELL AND COUNTERS C IF (IS1-2) 30,20,30 20 WRITE (2, 170) PAUSE 30 SUM = 0.0 RN= N LINE = 0 C C FORM FIRST SUM C DO 40 I=1,N 40 SUM = SUM + TS(I) C C START LOOP NOW C I=1 N1=N C C OUTPUT THAT WHICH IS COMPUTED C 50 AV = SUM/RN WRITE (6, 160) I,N1,AV IF (IS1-2) 80,70,80 70 WRITE (4, 160) I,N1,AV 80 LINE = LINE+1 IF (LINE-45) 120,100,100 100 WRITE (6, 190) 110 LINE=0 C C ARE WE THROUGH? C 120 N1=N1+1 IF(N1-M) 130, 130, 200 C C NO,COMPUTE NEXT AVERAGE BY SUBTRACTING FROM BOTTOM END C AND ADDING FROM TOP C 130 SUM = SUM - TS(I) + TS(N1) I=I+1 GO TO 50 C C FORMAT STATEMENTS C 140 FORMAT( 36A2 ) 150 FORMAT(2(1X,I4),2(4X,I1)) 160 FORMAT(11X,I5,17X,I5,10X,E20.7) 170 FORMAT(/5(1H*),43HGCSL023---READY PUNCH AND THEN PUSH THE RUN 1 ,7H BUTTON,5(1H*) /) 180 FORMAT( 30(/) 25HMOVING AVERAGES (GCSL023)//36A2//2HM=I4,5X 1 ,2HN=I4,5X,4HIS1=I1,5X,4HIS2=I1// 24X,18HBEGINNING OF RANGE,7X,12HEND OF RANGE,7X,12HAVERAGE OVER 3 ,11H THIS RANGE//) 190 FORMAT( 30(/) 5X,18HBEGINNING OF RANGE,7X,12HEND OF RANGE,7X 1 ,23HAVERAGE OVER THIS RANGE //) C C PROGRAM CONTROL LOGIC C 200 IF(IS2) 210, 210, 10 210 CONTINUE END SUBROUTINE READ(TS,M) DIMENSION TS(1) READ (5, 9000) (TS(I),I=1,M) 9000 FORMAT(7F10.0) RETURN END TEST CASE FOR MOVING AVERAGE PROGRAM 00070000200000100000 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 3061 2 11 18 3062 1700 -7066 92 87 1011 -198 198 -643 18 0 0 106 987 -314 806 9470 311 111 222 333 444 555 667 778 889 990 001 112 223 334