C*********************************************************************** C THIS ROUTINE IS A REVISION OF AN ORIGINAL ROUTINE WITH THE FOLLOWING C REF. ALGORITHM AS 45 APPLIED STATISTICS (J.R.STATIST.SOC C), C (1971) VOL.20, NO.3 C C GIVEN A VECTOR OF FREQUENCIES, OR A VECTOR OF RAW DATA, A C HISTOGRAM IS PLOTTED SHOWING THE FREQUENCY DISTRIBUTION C*********************************************************************** SUBROUTINE HISTGM (FREQ,MM,LENG,CUT) C C DECLARATIONS C INTEGER SCALE DIMENSION CUT(*), FREQ(MM) CHARACTER*1 BDY(80), IOUT(80), TIC, IBLANK, ISTAR, IDASH C C DATA STATEMENTS C DATA TIC, IBLANK, ISTAR, IDASH /'+',' ','*','-'/ DATA IWRITE /6/, ETA /1.0E-38/, IWIDTH /80/ C INITIALIZE BDY DO 5 I=1,12 5 BDY(I)=IDASH DO 6 I=13,80 6 BDY(I)=IBLANK C C CHECK VALUES OF INPUT PARAMETERS AND TYPE OF INPUT C M=MM K=(IWIDTH-15)/5 IF (M.GT.K) M=K LINE=M*5+15 LENGTH=LENG-10 IF (LENGTH.LE.0) LENGTH=50 FM=FLOAT(M) WRITE (IWRITE,120) (INT(FREQ(I)),I=1,M) WRITE (IWRITE,130) (IDASH,I=1,LINE) C C FIND LARGEST FREQUENCY AND SCALE IF NECESSARY C MAX=0 DO 10 I=1,M IF (FREQ(I).GT.MAX) MAX=FREQ(I) 10 CONTINUE SCALE=1 DIV=1 IF (MAX.LE.LENGTH) GO TO 20 SCALE=(MAX+LENGTH-1)/LENGTH WRITE (IWRITE,80) (ISTAR,II=1,4),SCALE DIV=1./FLOAT(SCALE) C C CLEAR OUTPUT TO BLANKS C 20 M4=M*4 DO 30 I=1,M4 30 IOUT(I)=IBLANK C C FOR EACH LINE OF PRINT, PLACE OUTPUT CHARACTERS IN THEIR C APPROPRIATE POSITION IN THE OUTPUT VECTOR C MAX=FLOAT(MAX)*DIV+.5 DO 60 I=1,MAX K=MAX+1-I DO 50 J=1,M INDEX=FREQ(J)*DIV+.5 IF (INDEX.NE.K) GO TO 50 IND=(J-1)*4+1 IND1=IND+3 DO 40 KK=IND,IND1 40 IOUT(KK)=ISTAR 50 CONTINUE L=K*SCALE M4=M*4 C C PRINT LINE OF FREQUENCIES C 60 WRITE (IWRITE,90) L,(IOUT(J),J=1,M4) DO 70 J=1,M IND=(J-1)*5+13 BDY(IND)=TIC DO 70 I=1,4 IND1=IND+I 70 BDY(IND1)=IDASH BDY(LINE)=IDASH L1=LINE-1 BDY(L1)=IDASH IND1=M*5+13 BDY(IND1)=TIC WRITE (IWRITE,130) (BDY(I),I=1,LINE) WRITE (6,100) (CUT(J),J=1,M,2) WRITE (6,110) (CUT(J),J=2,M,2) C C FORMAT STATEMENTS C RETURN C 80 FORMAT (' Each ',4A1,' approximately equals',I4,' points'/) 90 FORMAT (' ',I8,4X,20(1X,4A1)) 100 FORMAT (' Interval ',10(1X,G9.3)) 110 FORMAT (' End-points 0.00 ',10(1X,G9.3)) 120 FORMAT ('0Frequency ',20I5) 130 FORMAT (' ',80A1) END