1  REM HP CONTRIBUTED LIBRARY, REV. C, 3/75
10  REM FREQUENCY BETWEEN BOUNDRIES PROGRAM
20  REM
30  REM BY TONY KOZLOWSKI
40  REM
50  REM AUTOMATIC ELECT. LABS.  NORTHLAKE ILL
60  REM DEC. 28, 1970
70  REM
80  REM MODIFIED FOR HP-2000 SERIES BY JON KRAMP
90  REM
100  REM
110  REM VARIABLE NAMES--
120  REM
130  REM "A" RAW DATA VALUES
140  REM "M" INTERVAL BOUNDRY POINTS
150  REM "R" NUMBER OF ROWS IN "A"
160  REM "C" NUMBER OF COLUMNS IN "A"
170  REM "E" INTERVAL WIDTHS CALCULATED FROM MAX IN MIN VALUES
180  REM "M1" AND "M2" MAX. AND MIN. DATA VALUES
190  REM "Q1" AND "Q2" FREQUENCY COUNTERS
200  REM
210  DIM M[201]
220  DIM A[150,5]
230  DIM T$[3]
240  DIM D$[3]
250  I9=0
260  REM PRINT TITLE
270  PRINT "FREQUENCY BETWEEN BOUNDARIES"
280  PRINT 
290  GOTO 380
300  REM AFTER THE FIRST RUN, ASK ABOUT USING THE SAME DATA AGAIN
310  PRINT 
320  PRINT "DO YOU WISH TO UTILIZE THE SAME DATA MATRIX"
330  PRINT "(YES OR NO)"
340  INPUT T$
350  IF T$="YES" THEN 800
360  GOTO 440
370  REM PRINT HEADING INFORMATION
380  PRINT 
390  PRINT "THIS PROGRAM FINDS THE NUMBER OF DATA POINTS FALLING"
400  PRINT "BETWEEN GIVEN BOUNDRIES. INPUT OF UP TO 150 VALUES"
410  PRINT "OF EACH OF UP TO 5 VARIABLES FROM A DATA FILE OR"
420  PRINT "THE TERMINAL. THE DATA MAY BE SORTED INTO UP TO 200"
430  PRINT "INTERVALS."
440  PRINT 
450  REM ASK ABOUT INPUT FROM A DATA FILE
460  PRINT "DATA MANY BE ENTERED FROM A FILE IF THIS PROGRAM HAS"
470  PRINT "HAS HAD A 'FILES' STATMENT ADDED. DO YOU WISH TO"
480  PRINT "INPUT FROM A FILE (YES OR NO)";
490  INPUT D$
500  GOTO 550
510  REM PRINT ERROR MESSAGE IF NO. OF ROWS OR COL. IS INCORRECT
520  PRINT 
530  PRINT "ERROR 01--MAX. NO OF ROWS IS 150 AND MAX. NO OF COL"
540  PRINT "          IS 5"
550  PRINT 
560  PRINT "ENTER NUMBER OF ROWS AND COLUMNS IN YOUR DATA SET";
570  INPUT R,C
580  REM CHECK FOR NO. OR ROWS OR COL. OUT OF BOUNDS
590  IF R>150 THEN 520
600  IF C>5 THEN 520
610  IF D$="YES" THEN 820
620  REM INPUT DATA FROM TERMINAL, IF REQUIRED
630  PRINT 
640  PRINT "ENTER DATA ONE ELEMENT AT A TIME"
650  PRINT "ENTER ALL DATA FOR ONE ROW IN THE ORDER OF THE COLUMNS"
660  PRINT "STARTING WITH COLUMN ONE (1)"
670  FOR Z1=1 TO R
680  PRINT 
690  PRINT "ROW  ";Z1
700  PRINT 
710  FOR Z2=1 TO C
720  INPUT Z3
730  LET A[Z1,Z2]=Z3
740  NEXT Z2
750  NEXT Z1
760  GOTO 800
770  REM PRINT ERROR MESSAGE IF ANALYSIS IS TO BE ON INVALID VARIABLE
780  PRINT 
790  PRINT "ERROR 02--DATA HAS ";C;" VARIABLES"
800  PRINT 
810  REM ASK WHICH VARIABLE ON WHICH TO WORK
820  PRINT "WHICH VARIABLE DO YOU WISH TO WORK WITH";
830  INPUT X
840  IF X>C THEN 780
850  PRINT 
860  IF D$="NO" THEN 980
865  IF D$="XX" THEN 980
870  REM ZERO OUT DATA MATRIX
880  MAT A=ZER
890  REM OPEN DATA FILE
900  REM GET DATA FROM FILE
910  FOR Z1=1 TO R
920  FOR Z2=1 TO C
930  READ #1;Z3
940  LET A[Z1,Z2]=Z3
950  NEXT Z2
960  NEXT Z1
970  REM FIND MAX AND MIN DATA VALUES
980  M1=A[1,X]
990  M2=A[1,X]
1000  FOR B=2 TO R
1010  IF A[B,X]<M1 THEN 1030
1020  M1=A[B,X]
1030  IF A[B,X]>M2 THEN 1050
1040  M2=A[B,X]
1050  NEXT B
1060  REM PRINT MAX. AND MIN. DATA VALUES
1070  PRINT "MAX. AND MIN VALUES FOR VARIABLE";X
1080  PRINT " ARE ",M1," AND ",M2
1090  PRINT 
1100  REM ASK ABOUT ENTRY OF DIFFERENT MAX. AND MIN. VALUES
1110  PRINT "DO YOU WISH TO SPECIFY DIFFERENT MAX. AND MIN."
1120  PRINT "VALUES. (YES OR NO)"
1130  INPUT T$
1140  PRINT 
1150  IF T$="NO" THEN 1250
1160  PRINT "ENTER NEW MAXIMUN AND MINIMUM VALUES"
1170  INPUT M1,M2
1175  IF M1 <= M2 THEN 1160
1180  GOTO 1250
1190  PRINT 
1200  REM PRINT ERROR MESSAGE IF NO. OF INTERVALS IS EXCESSIVE
1210  PRINT "ERROR 03--THE MAX. NO. OF INTERVALS IS 200"
1220  PRINT 
1230  GOTO 1370
1240  REM CHECK TO SEE IF OPTION INFO. IS TO BE LISTED, LIST AS NEEDED
1250  IF I9=1 THEN 1350
1260  PRINT "THREE INTERVAL OPTIONS ARE AVAILABLE, THEY ARE:"
1270  PRINT 
1280  PRINT "   1           SPECIFY THE NUMBER OF INTERVALS"
1290  PRINT "               (PROGRAM WILL CALCULATE END-POINTS)"
1300  PRINT "   2           SPECIFY THE END-POINTS OF EACH INTERVAL"
1310  PRINT "               (OTHER THAN THE MAX. AND MIN.)"
1320  PRINT "   3           SPECIFY THE WIDTHS OF THE INTERVALS"
1330  PRINT 
1340  REM ASK FOR INTERVAL OPTION
1350  PRINT "ENTER INTERVAL OPTION"
1360  INPUT Z1
1370  PRINT 
1380  REM ASK FOR NUMBER OF INTERVALS
1390  PRINT "ENTER THE NUMBER OF INTERVALS (200 MAX.)"
1400  INPUT I
1410  IF I>200 THEN 1190
1420  PRINT 
1430  K=I+1
1440  GOTO Z1-1 OF 1530,1740
1450  REM CALCULATE INTERVAL WIDTH
1460  E=(M1-M2)/I
1470  FOR J=1 TO K
1480  M[J]=M2+(E*(J-1))
1490  NEXT J
1500  M[K]=M1
1510  GOTO 1890
1520  REM ASK FOR ENTRY OF BOUNDRY POINTS
1530  PRINT 
1535  M[1]=M2
1540  PRINT "ENTER BOUNDRIES ONE AT A TIME-EXCLUDE MAX. AND MIN."
1550  PRINT "ALL BOUNDRIES MUST FALL WITHIN THE RANGE OF MAX AND MIN"
1560  PRINT "START AT THE LOW END OF THE RANGE"
1570  FOR N=2 TO I
1580  INPUT F
1590  REM CHECK FOR PROPER BOUNDRIES
1600  IF F <= M2 THEN 1620
1610  IF F<M1 THEN 1650
1620  PRINT "ERROR 05--BOUNDRY LAST ENTERED OUTSIDE PROPER RANGE"
1630  PRINT "          ENTER VALUE AGAIN"
1640  GOTO 1580
1650  IF F>M[N-1] THEN 1690
1660  PRINT "ERROR 06--LAST ENTRY HAS LOWER VALUE THAN ONE BEFORE"
1670  PRINT "          ENTER VALUE AGAIN"
1680  GOTO 1580
1690  M[N]=F
1700  NEXT N
1710  M[1]=M2
1720  M[K]=M1
1730  GOTO 1890
1740  PRINT 
1750  REM ASK FOR INTERVAL WIDTHS
1760  PRINT "ENTER INTERVAL WIDTHS (ONE AT AT TIME)"
1770  PRINT "START AT THE LOW END OF THE RANGE"
1780  M[1]=M2
1790  FOR N=2 TO K
1800  INPUT F
1810  REM CHECK FOR VALID WIDTH
1820  IF F>0 THEN 1860
1830  PRINT "ERROR 04--LAST ENTERED WIDTH ZERO (0) OR UNDER"
1840  PRINT "          ENTER VALUE AGAIN"
1850  GOTO 1800
1860  M[N]=M[N-1]+F
1870  NEXT N
1880  REM PRINT HEADING
1890  PRINT 
1900  PRINT 
1910  PRINT "INTERVAL          FOR THE REGION          THE FREQUENCY IS"
1920  REM SORT DATA INTO INTERVALS
1930  Q2=0
1940  FOR T=1 TO I
1950  Q1=0
1960  FOR U=1 TO R
1970  IF A[U,X]<M[T] THEN 2030
1980  IF A[U,X]<M[T+1] THEN 2020
1990  IF A[U,X] <> M[T+1] THEN 2030
2000  IF M[T+1]=M[K] THEN 2020
2010  GOTO 2030
2020  Q1=Q1+1
2030  NEXT U
2040  REM PRINT RESULTS
2050  Q2=Q2+Q1
2060  PRINT 
2070  PRINT T,M[T],M[T+1],Q1
2080  NEXT T
2090  PRINT 
2100  REM LIST TOTAL NUMBER OF POINTS CLASSIFIED
2110  PRINT "THE TOTAL NO. OF POINTS CLASSIFIED IS ",Q2
2120  PRINT 
2130  PRINT 
2140  PRINT 
2150  REM CHECK TO SEE IF MORE WORK IS TO BE DONE
2160  PRINT "DO YOU WISH TO DO MORE CLASIFYING (YES OR NO)"
2170  INPUT T$
2180  IF T$="NO" THEN 2270
2190  PRINT 
2195  D$="XX"
2200  REM ZERO OUT BOUNDRY MATRIX
2210  FOR X=1 TO 201
2220  LET M[X]=0
2230  NEXT X
2240  I9=1
2250  GOTO 310
2260  REM END RUN
2270  PRINT 
2280  PRINT "**END OF RUN**"
2290  PRINT 
2300  END 
