SUB HISTOG(NR,NC) DIM #3,B(250,15) \ DIM IFR(10),BA(10) COM V(7,15) H9=.9E-38 AB$="PLEASE TYPE Y OR N" \ & ON ERROR GOTO <> ! <<*TYP>> PRINT "TYPE THE COLUMN NUMBER OF THE VARIABLE TO BE USED " \ & INPUT "IN THE HISTOGRAM";IA \ PRINT IF IA<1 OR IA>NC THEN PRINT "YOU MUST SPECIFY A COLUMN BETWEEN 1 "+ & "AND";NC;". PLEASE TRY AGAIN" \ GOTO <> ! <<*TIN>> PRINT "ENTER THE NUMBER OF INTERVALS YOU WANT IN THE HISTOGRAM" \ & INPUT "(MAXIMUM OF 10)";IN1 \ PRINT IF IN1<2 OR IN1>10 THEN PRINT "YOU MUST SPECIFY 2 TO 10 INTERVALS"+ & ". PLEASE TRY AGAIN" \ GOTO <> AMIN=V(2,IA) \ AMAX=V(1,IA) ! <<*UBA>> PRINT "DO YOU WISH TO SPECIFY THE LOWER AND UPPER BOUNDARIES FOR" \ & INPUT "THE HISTOGRAM (Y/N)";L$ \ PRINT L$=LEFT(L$,1) IF L$="N" GOTO <> IF L$<>"Y" THEN PRINT AB$ \ GOTO <> PRINT "RANGE OF DATA IS";AMIN;" TO";AMAX \ PRINT ! <<*ABA>> PRINT "ENTER MINIMUM AND MAXIMUM VALUES FOR THE HISTOGRAM" \ & INPUT "(FORM: XX.X,XX.X)";AMIN,AMAX \ PRINT IF AMIN>AMAX THEN Q=AMIN \ AMIN=AMAX \ AMAX=Q IL=0 FOR I=1 TO NR IF B(I,IA)<>H9 THEN & IF B(I,IA)>AMAX OR B(I,IA)> PRINT IL;" VALUE(S) ARE OUTSIDE YOUR BOUNDARIES" \ PRINT ! <<*OKB>> INPUT "DO YOU STILL WISH TO USE THESE BOUNDARIES";L$ \ PRINT L$=LEFT(L$,1) IF L$="Y" GOTO <> IF L$="N" GOTO <> PRINT AB$ \ GOTO <> <<*PBA>> R=(AMAX-AMIN)/IN1 \ & BA(0)=AMIN \ & BA(I)=BA(I-1)+R FOR I=1 TO IN1-1 BA(IN1)=AMAX ! ! COUNT FREQUENCY IN EACH INTERVAL ! MAT IFR=ZER FOR I=1 TO NR IF B(I,IA)=H9 OR B(I,IA)BA(IN1) GOTO <> FOR J=1 TO IN1 IF B(I,IA)> NEXT J IFR(IN1)=IFR(IN1)+1 <<*NI1>> NEXT I MAX=IFR(1) FOR J=2 TO IN1 IF IFR(J)>MAX THEN MAX=IFR(J) NEXT J ! ! GET HORIZONTAL FORMAT ! XMIN=ABS(AMIN) XMAX=ABS(AMAX) IF XMIN=0. THEN NIB=0 ELSE NIB=LOG10(XMIN) \ IF XMIN>=1. THEN NIB=NIB+1 IF XMAX=0. THEN NIA=0 ELSE NIA=LOG10(XMAX) \ IF XMAX>=1. THEN NIA=NIA+1 NAL=NIA IF NIB>NIA THEN NAL=NIB IF NAL>3 THEN NFA=0 \ GOTO <> IF NAL<1 THEN NFA=-NAL+3 ELSE NFA=4-NAL <<*FFD>> IF NIA<=0 THEN NIA=1 IF AMAX<0. THEN NIA=NIA+1 IF NIB<=0 THEN NIB=1 IF AMIN<0. THEN NIB=NIB+1 IF NIB>NIA THEN NIA=NIB ND=NIA+NFA IF ND>8 THEN S$=" ##.##^^^^" \ ND=9 \ GOTO <> S$=" " IF ND<8 THEN S$=S$+" " FOR I=ND+1 TO 8 S$=S$+"#" FOR I=1 TO NIA S$=S$+"." IF NFA>0 THEN S$=S$+"#" FOR I=1 TO NFA ! ! PRINT FREQUENCY COUNTS ACROSS TOP OF GRAPH AND THEN ! PRINT HISTOGRAM ! <<*ADT>> M=MAX \ IST=1 \ X=M IL=(ND+1)/2 <<*RED>> IF IN1>5 AND M<19 GOTO <> IF IN1<6 AND M<20 GOTO <> IST=IST*2 \ Y=X/IST \ M=Y \ IF M<>Y THEN M=M+1 GOTO <> <<*RE1>> M1=M*IST PRINT \ PRINT TAB(15);"HISTOGRAM FOR VARIABLE";IA V$=" ### "+CHR$(124) IF IN1>5 AND M<18 THEN PRINT IF IN1<6 AND M<19 THEN PRINT IF IN1>5 THEN & IN$="### " \ ST$="----+" \ AST$=" * " \ SP$=SPACE$(5) ELSE & IN$=" ### " \ ST$="---------+" \ AST$=" * " \ & SP$=SPACE$(10) PRINT "FREQUENCY "; \ PRINT USING IN$,IFR(J); FOR J=1 TO IN1 \ & PRINT \ & FOR J=1 TO M PRINT USING V$,M1; M1=M1-IST FOR K=1 TO IN1 IF IFR(K)>M1 THEN PRINT AST$; ELSE PRINT SP$; NEXT K PRINT NEXT J ! ! PRINT INTERVAL BOUNDS ALONG BOTTOM OF GRAPH ! PRINT " --------+"; \ PRINT ST$; FOR J=1 TO IN1 \ PRINT \ & IF IN1>5 THEN & PRINT SPACE$(5-IL); \ PRINT USING S$,BA(J); FOR J=0 TO IN1 STEP 2 \ & PRINT \ & PRINT SPACE$(10-IL); \ PRINT USING S$,BA(J); FOR J=1 TO IN1 STEP 2 \ & PRINT ELSE & PRINT SPACE$(5-IL); \ PRINT USING S$,BA(J); FOR J=0 TO IN1 \ PRINT ! <<*MOR>> INPUT "DO YOU WISH TO PRINT MORE HISTOGRAMS";L$ \ PRINT \ & L$=LEFT(L$,1) \ & IF L$="Y" GOTO <> IF L$<>"N" THEN PRINT AB$ \ GOTO <> GOTO <> ! ! ERROR RECOVERY ROUTINE ! <<*ERT>> IF ERL=<> OR ERL=<> OR ERL=<> THEN & PRINT "YOU TYPED CHARACTERS THAT CANNOT BE INTERPRETED. SEPARATE "+ & "TWO OR MORE" \ PRINT "NUMBERS WITH A COMMA, BUT DO NOT END A "+ & "LINE WITH A COMMA" \ PRINT "PLEASE TRY AGAIN" \ PRINT IF ERL=<> THEN RESUME <> IF ERL=<> THEN RESUME <> IF ERL=<> THEN RESUME <> PRINT \ PRINT "CALCULATIONS CANNOT BE COMPLETED BECAUSE COMPUTATION"+ & " CREATED NUMBERS" \ PRINT "OUTSIDE THE RANGE OF THIS COMPUTER" \ & PRINT \ PRINT "HISTOG ERROR";ERR;" AT LINE";ERL \ PRINT \ & PRINT "PLEASE RECORD THE ABOVE LINE AND CONTACT JOHN PENN IN BR "+ & "AT 3886" \ PRINT RESUME <> <<*END>> SUBEND