1  REM ****  HP BASIC PROGRAM LIBRARY  ******************************
2  REM
3  REM       HISS: SAMPLE STATISTICS AND HISTOGRAM FORMED FROM A SET
4  REM             OF NUMBERS
5  REM       36235 REV A
6  REM
7  REM ****  CONTRIBUTED PROGRAM  ***********************************
11  DATA 0
12  DATA 0
13  DATA 0
14  DATA 0
15  DATA 1
16  DATA 1
17  DATA 1
1000  DATA 9.E+35
1010  REM G=CELL GROUP
1020  REM G=0  DATA POINTS 1/2 CELL NUMBER ABOVE AND BELOW CELL NUMBER
1030  REM      ARE INCLUDED IN CELL
1040  REM G=1  DATA POINTS BETWEEN CELL NUMBER AND NEXT LOWEST CELL
1050  REM      NUMBER ARE INCLUDED IN CELL
1060  REM G=2  DATA POINTS BETWEEN CELL NUMBER AND NEXT HIGHEST CELL
1070  REM      ARE INCLUDED IN CELL
1080  REM T=TITLE OPTION: IF T=0 NO TITLE
1090  REM S=LIMIT OPTION:  IF S=0 NO LIMITS
1100  REM S3=LOW LIMIT  S4=HIGH LIMIT
1110  REM X=0  ACTUAL COUNT
1120  REM X=1  ACTUAL COUNT (AUTO SCALE)
1130  REM X=2  PERCENT OF TOTAL
1140  REM X=3  PERCENT OF MAXIMUM
1150  REM X1=  NUMBER OF PRINT LINES PER CELL
1160  REM X3=  INTERVALS AT WHCIH CELLS ARE LABELED
1170  REM Y=0  AUTO SCALE ON ACTUAL CELL SIZE
1180  REM Y=1  SPECIFY CELL SIZE(C)
1190  REM Y=2  SPECIFY LOWEST CELL(S1) AND CELL SIZE(C)
1200  REM Y=3  SPECIFY LOWEST CELL(S1) AND NUMBER OF CELLS(N)
1210  REM Y=4  SPECIFY LOWEST CELL(S1),NUMBER OF CELLS(N) AND
1220  REM      HIGHEST CELL(S2)
1230  REM Y=5  SPECIFY LOWEST CELL(S1), CELL SIZE(C) AND 
1240  REM      HIGHEST CELL(S2)
1250  REM Y=6  SPECIFY NUMBER OF CELLS(N), AND HIGHEST CELL(S2)
1260  REM Y=7  SPECIFY CELL SIZE(C), AND HIGHEST CELL(S2)
1270  REM Y=8  SPECIFY HIGHEST CELL(S2)
1280  DEF FNZ()=.434294*LOG(ABS(+1.E-34))
1290  DEF FNY()=EXP(FNZ()-INT(FNZ()))^2.30259
1300  DEF FNI()=INT((FNY()*100)+.5)/100*(10^INT(FNZ()))*SGN()
1310  DIM A[2000],B[100],P$[62],S$[62],T$[72]
1320  F=10^3
1330  FOR Z=1 TO 1
1340  S3=S4=S5=S6=3.E+35
1350  T4=D1=0
1360  P1=60
1370  T$=""
1380  READ T
1390  IF T<1 THEN 1410
1400  READ T$
1410  READ S
1420  IF S<1 THEN 1440
1430  READ S3,S4
1440  READ Y
1450  IF Y<1 THEN 1660
1460  GOTO Y OF 1470,1490,1510,1530,1590,1610,1630,1650
1470  READ C
1480  GOTO 1660
1490  READ S1,C
1500  GOTO 1660
1510  READ S1,N
1520  GOTO 1660
1530  READ S1,N,S2
1540  IF SGN(S1)=SGN(S2) THEN 1570
1550  C=ABS((ABS(0-S1)+ABS(0-S2))/N)
1560  GOTO 1660
1570  C=ABS((ABS(S2)-ABS(S1))/N)
1580  GOTO 1660
1590  READ S1,C,S2
1600  GOTO 1660
1610  READ N,S2
1620  GOTO 1660
1630  READ C,S2
1640  GOTO 1660
1650  READ S2
1660  READ G,X,X1,X3
1670  MAT B=ZER
1680  P$="***********************************************************"
1690  S$="- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
1700  FOR J=1 TO 1000
1710  READ A[J]
1720  IF A[J]>1.E+34 THEN 1750
1730  T4=T4+A[J]
1740  NEXT J
1750  IF Y=1 OR Y=2 OR Y=4 OR Y=5 OR Y=7 THEN 1770
1760  C=A[J]
1770  J=J-1
1780  FOR K=1 TO J-1
1790  FOR L=K+1 TO J
1800  IF A[K]>A[L] THEN 1820
1810  GOTO 1850
1820  B=A[L]
1830  A[L]=A[K]
1840  A[K]=B
1850  NEXT L
1860  NEXT K
1870  REM DETERMINES MEDIAN
1880  IF 2*INT(J/2) <> J THEN 1910
1890  W6=(A[J/2]+A[J/2+1])/2
1900  GOTO 1920
1910  W6=A[INT(J/2+1)]
1920  IF Y=1 OR Y=2 OR Y=4 OR Y=5 OR Y=7 THEN 2010
1930  REM DETERMINES ACTUAL CELL SIZE
1940  FOR K=1 TO J-1
1950  IF A[K]=A[K+1] THEN 1990
1960  C1=ABS(A[K]-A[K+1])
1970  IF C<C1 THEN 1990
1980  C=C1
1990  NEXT K
2000  REM # POINTS EACH CELL (B(K)) & MAX # POINTS (T)
2010  B=K=T=T6=T7=0
2020  J1=1
2030  IF Y>7 THEN 2050
2040  IF Y>1 THEN 2060
2050  S1=A[1]
2060  IF Y>3 THEN 2080
2070  S2=A[J]
2080  C=FNI(C)*F
2090  S1=S1*F
2100  S2=S2*F
2110  FOR K1=S1 TO S2+C STEP C
2120  K=K+1
2130  FOR L=J1 TO J+1
2140  J1=J1+1
2150  IF G>0 THEN 2200
2160  IF A[L]<((S1-(C/2))/F)+1.E-34 THEN 2340
2170  IF A[L]>((S2+(C/2))/F)+1.E-34 THEN 2360
2180  IF A[L]>((K1+(C/2))/F)+1.E-34 THEN 2380
2190  GOTO 2260
2200  IF A[L]<S1/F THEN 2340
2210  IF A[L]>(S2+C)/F THEN 2360
2220  IF G>1 THEN 2250
2230  IF A[L]<(K1+C)/F THEN 2260
2240  GOTO 2380
2250  IF A[L]>(K1/F)+1.E-34 THEN 2380
2260  T=T+1
2270  B[K]=B[K]+1
2280  IF Y>3 THEN 2310
2290  IF K1<S2 THEN 2310
2300  S2=K1
2310  IF B[K]<B THEN 2370
2320  B=B[K]
2330  GOTO 2370
2340  T6=T6+1
2350  GOTO 2370
2360  T7=T7+1
2370  NEXT L
2380  J1=J1-1
2390  NEXT K1
2400  REM  DETERMINES SPEC PRINT LIMITS
2410  IF S<1 THEN 2510
2420  FOR K=S1 TO S2 STEP C
2430  IF S3>((K+(C/2))/F)+1.E-34 THEN 2470
2440  IF S3<(K-(C/2))/F THEN 2470
2450  IF S5<3.E+34 THEN 2470
2460  S5=K/F
2470  IF S4>((K+(C/2))/F)+1.E-34 THEN 2500
2480  IF S6<3.E+35 THEN 2500
2490  S6=K/F
2500  NEXT K
2510  IF Y=3 OR Y=4 OR Y=6 THEN 2550
2520  REM DETERMINES NUMBER OF CELLS (ACTUAL CEL SIZE)
2530  N=A[J]-(A[1]/(C/F))
2540  PRINT LIN(8);
2550  IF LEN(T$)<1 THEN 2570
2560  PRINT TAB(36-LEN(T$)/2);T$
2570  IF X<2 THEN 2630
2580  IF X>2 THEN 2610
2590  PRINT TAB(28);"PERCENT OF TOTAL"
2600  GOTO 2640
2610  PRINT TAB(27);"PERCENT OF MAXIMUM"
2620  GOTO 2640
2630  PRINT TAB(30);"ACTUAL COUNT"
2640  PRINT LIN(3)
2650  PRINT "NUMBER OF DATA POINTS= ";J;
2660  PRINT TAB(36);"INTERVAL SIZE= ";C/F
2670  PRINT "MEAN= ";T4/J;
2680  PRINT TAB(36);"MEDIAN= ";W6
2690  T4=T4/J
2700  FOR K=1 TO J
2710  D1=D1+(ABS((A[K]-T4))^2)
2720  NEXT K
2730  D1=SQR(D1/J)
2740  PRINT "STANDARD DEVIATION= ";D1
2750  IF S<1 THEN 2800
2760  IF S3>1.E+34 THEN 2780
2770  PRINT "LOWER LIMIT= ";S3;TAB(36);
2780  IF S4>1.E+34 THEN 2800
2790  PRINT "UPPER LIMIT= ";S4
2800  IF Y<2 THEN 2980
2810  T6=T7=0
2820  FOR I=1 TO J
2830  IF A[I] >= S1/F THEN 2850
2840  T6=T6+1
2850  IF A[I] <= S2/F THEN 2870
2860  T7=T7+1
2870  NEXT I
2880  IF T6<1 THEN 2930
2890  IF T6<2 THEN 2920
2900  PRINT "THERE ARE ";T6;" DATA POINTS BELOW ";S1/F
2910  GOTO 2930
2920  PRINT "THERE IS 1 DATA POINT BELOW ";S1/F
2930  IF T7<1 THEN 2980
2940  IF T7<2 THEN 2970
2950  PRINT "THERE ARE ";T7;" DATA POINTS ABOVE ";S2/F
2960  GOTO 2980
2970  PRINT "THERE IS 1 DATA POINT ABOVE ";S2/F
2980  PRINT LIN(5)
2990  IF X<1 THEN 3020
3000  IF X>1 THEN 3040
3010  GOTO 3130
3020  IF B<61 THEN 3300
3030  GOTO 3130
3040  IF X>2 THEN 3430
3050  REM DETERMINES # OF POINTS PER CELL AS % OF TOTAL
3060  B=K=0
3070  FOR K1=S1 TO S2 STEP C
3080  K=K+1
3090  B[K]=INT((100/T*B[K])+.5)
3100  IF B[K]<B THEN 3120
3110  B=B[K]
3120  NEXT K1
3130  IF B>1201 THEN 4320
3140  IF B<600 THEN 3190
3150  P=.05
3160  L1=100
3170  GOSUB 4180
3180  GOTO 3570
3190  IF B<120 THEN 3240
3200  P=.1
3210  L1=100
3220  GOSUB 4180
3230  GOTO 3570
3240  IF B<60 THEN 3290
3250  P=.5
3260  L1=20
3270  GOSUB 4180
3280  GOTO 3570
3290  IF B<30 THEN 3340
3300  P=1
3310  L1=10
3320  GOSUB 4180
3330  GOTO 3570
3340  IF B<12 THEN 3390
3350  P=2
3360  L1=5
3370  GOSUB 4180
3380  GOTO 3570
3390  P=5
3400  L1=2
3410  GOSUB 4180
3420  GOTO 3570
3430  REM DETERMINES # OF POINTS PER CELL AS % OF MAXIMUM
3440  P=1
3450  K=0
3460  FOR K1=S1 TO S2 STEP C
3470  K=K+1
3480  B[K]=INT((B[K]*50/B)+.5)
3490  NEXT K1
3500  P1=50
3510  PRINT TAB(9);"0    10   20   30   40   50   60   70   80   90   100"
3520  PRINT 
3530  PRINT TAB(9);"!";
3540  FOR L=1 TO 10
3550  PRINT "****!";
3560  NEXT L
3570  PRINT 
3580  K=X2=0
3590  X5=X3-1
3600  FOR K1=S1 TO S2 STEP C
3610  K=K+1
3620  IF K1<S2 THEN 3640
3630  X5=X3-1
3640  X5=X5+1
3650  IF X1=1 THEN 4030
3660  IF B[K]*P<.5 THEN 3870
3670  IF X2>0 THEN 3690
3680  PRINT TAB(9);P$[1,1];P$[1,B[K]*P]
3690  IF X1<5 THEN 3710
3700  PRINT TAB(B[K]*P+9);P$[1,1]
3710  IF K1/F=S5 OR K1/F=S6 THEN 3740
3720  IF X3=X5 THEN 3760
3730  GOTO 3780
3740  PRINT  USING 4330;S$[1,P1]
3750  IF X3 <> X5 THEN 3770
3760  X5=0
3770  PRINT K1/F;'13;
3780  PRINT TAB(B[K]*P+9);P$[1,1]
3790  IF X1<5 THEN 3810
3800  PRINT TAB(B[K]*P+9);P$[1,1]
3810  IF B[K]<B[K+1] THEN 3850
3820  PRINT TAB(9);P$[1,1];P$[1,B[K]*P]
3830  X2=1
3840  GOTO 4140
3850  X2=0
3860  GOTO 4140
3870  PRINT TAB(9);P$[1,1]
3880  IF X1<5 THEN 3900
3890  PRINT TAB(9);P$[1,1]
3900  IF K1/F=S5 OR K1/F=S6 THEN 3930
3910  IF X3=X5 THEN 3950
3920  GOTO 3970
3930  PRINT  USING 4330;S$[1,P1]
3940  IF X3 <> X5 THEN 3960
3950  X5=0
3960  PRINT K1/F;'13;
3970  PRINT TAB(9);P$[1,1]
3980  IF X1<5 THEN 4000
3990  PRINT TAB(9);P$[1,1]
4000  PRINT TAB(9);P$[1,1]
4010  X2=0
4020  GOTO 4140
4030  IF K1/F=S5 OR K1/F=S6 THEN 4060
4040  IF X3=X5 THEN 4080
4050  GOTO 4100
4060  PRINT  USING 4330;S$[1,P1]
4070  IF X3 <> X5 THEN 4090
4080  X5=0
4090  PRINT K1/F;'13;
4100  PRINT TAB(9);P$[1,1];
4110  IF B[K]*P<.5 THEN 4130
4120  PRINT P$[1,B[K]*P];
4130  PRINT 
4140  NEXT K1
4150  PRINT LIN(30)
4160  NEXT Z
4170  END 
4180  PRINT TAB(9);"0";TAB(18);
4190  L2=L1*6
4200  L4=18
4210  FOR L=L1 TO L2 STEP L1
4220  L4=L4+10
4230  PRINT L;TAB(L4);
4240  NEXT L
4250  PRINT 
4260  PRINT TAB(9);"!";
4270  FOR L=1 TO 6
4280  PRINT "*********!";
4290  NEXT L
4300  PRINT 
4310  RETURN 
4320  PRINT "PROGAM HAS EXCEED 1200 DATA POINTS PER LINE"
4330  IMAGE +,9X,60A
4340  END 
