home *** CD-ROM | disk | FTP | other *** search
/ PCDisk Magazine Disks / PCDisk Magazine - Disk 4.img / CURVEFIT.BAS (.txt) next >
Encoding:
GW-BASIC  |  1984-07-09  |  14.8 KB  |  214 lines

  1. 160  RESTART=0
  2. 180  IFRESTART=1THENCLEAR:RESTART=1
  3. 200  KEYOFF:SCREEN0,0:WIDTH80:CLS:DEFDBLA,B,C,D,Q:ONERRORGOTO60000
  4. 260  FLAGDATA=0:FLAGMESSAGE=0:DATAFILE$="":FILENAME$="":FLAGSTAT=0:FORI=1TO14:KEY(I)OFF:NEXT:TITLE$="CURVE  FITTER":XAXIS$="X AXIS":YAXIS$="Y AXIS":IFRESTART=1THENPICK=1:GOTO900
  5. 500  LOCATE9,1,0:LEFT.COLUMN=11:RIGHT.COLUMN=70:UPPER.ROW=8:LOWER.ROW=17:PRINT"":PRINT"                                 CURVE FITTER":PRINT:PRINT:PRINT"                       COPYRIGHT (C) 1984 SCOTT CAMAZINE":GOSUB30140
  6. 700  LOCATE20,34:PRINT"Version 1.6";:FORPAUSE=1TO4000:NEXT
  7. 820  CLS:SCREEN0:GOSUB2120
  8. 900  IFPICK=1THENGOSUB5060
  9. 920  IF PICK=1 THEN GOSUB 17000:GOSUB 22000
  10. 940  IF PICK=1 THEN GOSUB 17520
  11. 960  IF PICK=2 THEN GOSUB 17520
  12. 980  IFPICK=2THENGOSUB9000
  13. 1000  IF PICK=2 THEN GOSUB 14000
  14. 1020  IF PICK=3 THEN FLAGSTAT=0:GOSUB 6060
  15. 1040  IFPICK=3THENGOSUB11980
  16. 1060  IFPICK=3THENGOSUB4000
  17. 1080  IFPICK=3THENGOSUB10000
  18. 1100  IFPICK=3THENPG%=1:GOSUB17000:GOSUB22000
  19. 1120  IFPICK=4THENGOSUB6060
  20. 1140  IFPICK=4THENGOSUB10000
  21. 1160  IFPICK=4THENPG%=1:GOSUB17000:GOSUB22000
  22. 1180  IFPICK=4THENGOSUB12460
  23. 1200  IFPICK=5THENGOSUB13160
  24. 1220  GOTO820
  25. 2120  LOCATE4,1,0:PRINT"                                CURVE FITTER":PRINT"                                ------------":PRINT:PRINT"         1. LOAD/MODIFY Data ":PRINT:PRINT"         2. SET/CHANGE  Plotting INTERVAL & LABELS for the graph":PRINT
  26. 2340  PRINT"         3. View EQUATIONS, CORRELATION COEFFICIENTS and FIT CURVE ":PRINT:PRINT"         4. VIEW GRAPH of Data Points":PRINT:PRINT"         5. EXIT to DOS      ":PRINT:GOSUB30000:PRINT
  27. 2500  LOCATE22,12:PRINT"Please Make a Choice  ":A$=INKEY$:PICK=VAL(A$):IFINT(PICK)<>PICKTHENLOCATE22,32:PRINTSTRING$(10,32);:GOTO2500
  28. 2620  IFPICK<1ORPICK>6THENLOCATE22,32:PRINTSTRING$(10,32);:GOTO2500
  29. 2640  RETURN
  30. 4000  IFFLAGDATA=0THEN24400
  31. 4080  CLS:LOCATE5,1:PRINT"               Choose One of the Following Curves":PRINT"         -----------------------------------------------":PRINT:PRINT"         1. LINEAR Regression:          Y = a + bX":PRINT
  32. 4220  PRINT"         2. EXPONENTIAL Regression:     Y = a(b^X)":PRINT:PRINT"         3. SECOND ORDER Regression:    Y = a + bX + c(X^2)":PRINT:PRINT"         4. LOGARITHMIC Regression:     Y = a + b lnX":PRINT
  33. 4340  PRINT"         5. POWER Regression:           Y = a(X^b)":PRINT:GOSUB30000
  34. 4400  LOCATE22,12:PRINT"Please Make a Choice  
  35. 4440  A$=INKEY$:IFA$=""THEN4440
  36. 4460  CHOICE=VAL(A$):IFINT(CHOICE)<>CHOICETHENLOCATE22,34:PRINTSTRING$(10,32):GOTO4400
  37. 4500  IFCHOICE<1ORCHOICE>5THENLOCATE22,34:PRINTSTRING$(10,32):GOTO4400
  38. 4520  RETURN
  39. 5060  RESTART=0:IFFLAGDATA=1THENRESTART=1:GOTO180
  40. 5100  FLAGDATA=1:CLS:LOCATE1,15:PRINT"DATA INPUT AND MODIFICATION":LOCATE2,15:PRINT"---------------------------":PRINT:PRINT:PRINT"READ DATA FROM A DISK FILE (1)  OR  TYPE IN DATA (2)":PRINT
  41. 5240  A$=INKEY$:IFA$=""THEN5240
  42. 5260  RD=VAL(A$):IF RD=1 THEN GOSUB 18020:PG%=1:RETURN
  43. 5300  IFRD<>2THEN5060
  44. 5340  PRINT:INPUT"HOW MANY X,Y PAIRS OF DATA DO YOU WISH TO ENTER";COUNT:IFCOUNT<3THENPRINT"Please Input at Least 3 Points":GOTO5340
  45. 5380  IFINT(COUNT)<>COUNTTHENCLS:GOTO5340
  46. 5400  IFCOUNT>60THENPRINT"There must be between 3 and 60 Points ":GOTO5340
  47. 5420  DIMA(COUNT):DIMB(COUNT):DIMX(COUNT):DIMY(COUNT):FILENAME$="NONE":CLS:LOCATE1,3:PRINT"N","X VALUE","Y VALUE":PRINTSTRING$(40,42);:PRINT"          DATA ENTRY ROUTINE":J=5:FORI=1TOCOUNT
  48. 5490  IFJ=20THENJ=5:CLS:PRINT"   N","X VALUE","Y VALUE":PRINTSTRING$(60,42)
  49. 5500  LOCATE J,3:PRINT I:LOCATE J,16:INPUT"",X:X(I)=X:LOCATE J,30:INPUT"",Y:Y(I)=Y:J=J+1:NEXT I:GOSUB 7500:RETURN
  50. 6060  IFFLAGDATA=0THEN24400
  51. 6080  IFFLAGSTAT=1THENRETURN
  52. 6100  LOCATE22,1:PRINTSTRING$(75,32);:LOCATE22,1:PRINT"PLEASE WAIT ......calculating";:SUMX=0:SUMY=0:SUMX2=0:SUMX3=0:SUMX4=0:SUMY2=0:SUMXY=0:SUMXLOGY=0:SUMLOGY=0:SUMSQLOGY=0:SUMX2Y=0:NN=COUNT:SUMLOGX=0:SUMSQLOGX=0:SUMLOGXLOGY=0:E=2.71828
  53. 6200  SUMLOGXY=0:FORI=1TOCOUNT:IFY(I)<=0ORX(1)<=0THENIFFLAGMESSAGE=0THENGOSUB24000
  54. 6260  SUMX=SUMX+X(I):SUMY=SUMY+Y(I):SUMX2=SUMX2+X(I)^2:SUMY2=SUMY2+Y(I)^2:SUMX3=SUMX3+X(I)^3:SUMX4=SUMX4+X(I)^4:SUMXY=SUMXY+X(I)*Y(I):SUMX2Y=SUMX2Y+X(I)^2*Y(I):IFY(I)>0THENSUMXLOGY=SUMXLOGY+X(I)*LOG(Y(I))
  55. 6400  IFY(I)>0THENSUMSQLOGY=SUMSQLOGY+LOG(Y(I))^2
  56. 6420  IFY(I)>0THENSUMLOGY=SUMLOGY+LOG(Y(I))
  57. 6440  IFX(I)>0THENSUMLOGX=SUMLOGX+LOG(X(I))
  58. 6460  IFX(I)>0THENSUMSQLOGX=SUMSQLOGX+LOG(X(I))^2
  59. 6480  IFX(I)>0THENSUMLOGXY=SUMLOGXY+LOG(X(I))*(Y(I))
  60. 6500  IFX(I)>0ANDY(I)>0THENSUMLOGXLOGY=SUMLOGXLOGY+LOG(X(I))*LOG(Y(I))
  61. 6520  NEXTI:XMEAN=SUMX/COUNT:YMEAN=SUMY/COUNT:SDX=SQR((SUMX2-(SUMX^2/COUNT))/COUNT):SDY=SQR((SUMY2-(SUMY^2/COUNT))/COUNT):DETL=COUNT*SUMX2-SUMX^2:AL=-(SUMX2*(-SUMY)-SUMX*(-SUMXY))/DETL:BL=-(COUNT*(-SUMXY)-SUMX*(-SUMY))/DETL
  62. 6700  NUMERATORL=COUNT*SUMXY-SUMX*SUMY:DENOMINATORL=((COUNT*SUMX2)-(SUMX^2))*((COUNT*SUMY2)-(SUMY^2)):R1=NUMERATORL/SQR(DENOMINATORL):IFSUMLOGY=0THEN6980
  63. 6820  LOGBE=((NN*SUMXLOGY)-(SUMX*SUMLOGY))/((NN*SUMX2)-(SUMX^2)):LOGAE=(SUMLOGY/NN)-(LOGBE*(SUMX/NN)):AE=E^LOGAE:BE=E^LOGBE:RA2=((NN*SUMXLOGY)-(SUMX*SUMLOGY)):RC2=(NN*SUMSQLOGY)-(SUMLOGY^2):RB2=(NN*SUMX2)-(SUMX^2):R2=RA2/(SQR(RB2*RC2))
  64. 6980  GOSUB20000:NUMERATORS=AS*SUMY+BS*SUMXY+C*SUMX2Y-COUNT*(YMEAN^2):DENOMINATORS=SUMY2-COUNT*(YMEAN^2):QUOTIENT=NUMERATORS/DENOMINATORS:R3=SQR(QUOTIENT):IFSUMLOGX=0THEN7320
  65. 7180  DETLG=NN*SUMSQLOGX-SUMLOGX^2:ALG=-(SUMSQLOGX*(-SUMY)-SUMLOGX*(-SUMLOGXY))/DETLG:BLG=-(NN*(-SUMLOGXY)-SUMLOGX*(-SUMY))/DETLG:NUMERATORLG=NN*SUMLOGXY-SUMLOGX*SUMY:DENOMINATORLG=((NN*SUMSQLOGX)-(SUMLOGX^2))*((NN*SUMY2)-(SUMY^2))
  66. 7280  R4=NUMERATORLG/SQR(DENOMINATORLG)
  67. 7320  IFSUMLOGX=0ORSUMLOGY=0THEN60000
  68. 7360  DETP=NN*SUMSQLOGX-SUMLOGX^2:LOGAP=-(SUMSQLOGX*(-SUMLOGY)-SUMLOGX*(-SUMLOGXLOGY))/DETP:AP=E^LOGAP:BP=-(NN*(-SUMLOGXLOGY)-SUMLOGX*(-SUMLOGY))/DETP:NUMERATORP=NN*SUMLOGXLOGY-SUMLOGX*SUMLOGY
  69. 7440  DENOMINATORP=((NN*SUMSQLOGX)-(SUMLOGX^2))*((NN*SUMSQLOGY)-(SUMLOGY^2)):R5=NUMERATORP/SQR(DENOMINATORP)
  70. 7500  LOW=X(1):HIGH=X(1):MAX=Y(1):MIN=Y(1):FORI=1TOCOUNT:IFX(I)>HIGHTHENHIGH=X(I)
  71. 7640  IFX(I)<LOWTHENLOW=X(I)
  72. 7660  IFY(I)>MAXTHENMAX=Y(I)
  73. 7680  IFY(I)<MINTHENMIN=Y(I)
  74. 7700  NEXTI:FLAGSTAT=1:RETURN
  75. 9000  LOCATE24,1:PRINT"WOULD YOU LIKE TO CHANGE THE PLOTTING INTERVAL (Y/N)?";
  76. 9100  A$=INKEY$:IFA$=""THEN9100
  77. 9120  IFA$="n"ORA$="N"THENRETURN
  78. 9140  IFFLAGDATA=0THEN24400
  79. 9160  FLAGINTERVAL=1
  80. 9180  CLS:LOCATE 2,1:PRINT"X HAS A MINIMUM VALUE OF ";LOW:PRINT"X HAS A MAXIMUM VALUE OF ";HIGH:PRINT:PRINT"Y HAS A MINIMUM VALUE OF ";MIN:PRINT"Y HAS A MAXIMUM VALUE OF ";MAX
  81. 9380  INPUT"WHAT IS THE MINIMUM VALUE TO PLOT ON THE X-AXIS";NLOW:INPUT"WHAT IS THE MAXIMUM VALUE TO PLOT ON THE X-AXIS";NHIGH:PRINT:INPUT"WHAT IS THE MINIMUM VALUE TO PLOT ON THE Y-AXIS";NMIN:INPUT"WHAT IS THE MAXIMUM VALUE TO PLOT ON THE Y-AXIS";NMAX
  82. 9480  IF NLOW<>0 THEN LOW=NMIN:FLAGSTAT=0
  83. 9520  IF NHIGH<>0 THEN HIGH=NHIGH:FLAGSTAT=0
  84. 9530  IF NMIN<>O THEN MIN=NMIN:FLAGSTAT=0
  85. 9540  IF NMAX<>0 THEN MAX=NMAX:FLAGSTAT =0
  86. 9640  PRINT:INPUT"DO YOU WANT TO SAVE NEW INTERVALS - ENTER Y OR N ";A$:IF A$="N"OR A$="n"THEN 9720                                                              CLS
  87. 9700  IFA$="Y"ORA$="y"THENGOSUB19000:GOTO9720
  88. 9720  RETURN
  89. 10000  IFFLAGDATA=0THEN24400
  90. 10140  YAXISHEIGHT=165:XOFFSET=70:XAXISLENGTH=640-XOFFSET:YRANGE=YMAX-YMIN:XRANGE=XMAX-XMIN:CLS:SCREEN2
  91. 10320  CLS:LOCATE2,(1/2*(75-LEN(TITLE$))+5):PRINTTITLE$:LOCATE25,(1/2*(80-LEN(XAXIS$))):PRINTXAXIS$:FORL=1TOLEN(YAXIS$):LOCATE(1/2*(20-LEN(YAXIS$)))+L,1:PRINTMID$(YAXIS$,L,1):NEXTL:FORMARK=0TO9:LOCATE23,MARK*7+6
  92. 10580  PRINTUSING"#####.#";XMIN+(0.1*MARK*XRANGE):NEXTMARK:FORMARK=0TO10:LOCATEMARK*2+1,2:PRINTUSING"#####.#";YMIN+((1-0.1*MARK)*YRANGE):NEXTMARK:IF0<XMAXAND0>XMINTHENXX=0 ELSEXX=XMIN
  93. 10820  IF0<YMAXAND0>YMINTHENYY=0 ELSEYY=YMIN
  94. 10840  XO=(XX-XMIN)*(XAXISLENGTH/XRANGE)+XOFFSET:YO=YAXISHEIGHT-(YY-YMIN)*(YAXISHEIGHT/YRANGE):LINE(XO,165)-(XO,0):FORK=0TO10:LINE(XO,16.5*K)-(XO+3,16.5*K):NEXTK:LINE(XOFFSET,YO)-(640,YO):FORM=0TO11:LINE(57*M+XOFFSET,YO)-(57*M+XOFFSET,YO+3)
  95. 11120  NEXTM:FORI=1TOCOUNT:A(I)=(X(I)-XMIN)*(XAXISLENGTH/XRANGE)+XOFFSET:B(I)=YAXISHEIGHT-(Y(I)-YMIN)*(YAXISHEIGHT/YRANGE):CIRCLE(A(I),B(I)),3:NEXTI:IFPICK=3THEN11360
  96. 11320  GOSUB13120:IFPICK=4THENSCREEN0:RETURN
  97. 11360  FORX=XMINTOXMAXSTEP(XMAX-XMIN)/300:IFCHOICE=1THENY1=AL+BL*X
  98. 11480  IFCHOICE=2THENY1=AE*BE^X
  99. 11500  IFCHOICE=3THENY1=AS+BS*X+C*(X^2)
  100. 11520  IFCHOICE=4ANDX<=0THENLOCATE25,1:PRINT"please wait";:GOTO11660
  101. 11540  IFCHOICE=4ANDX>0THENY1=ALG+BLG*LOG(X)
  102. 11560  IFCHOICE=5ANDX<=0THENLOCATE25,1:PRINT"please wait";:GOTO11660
  103. 11580  IFCHOICE=5ANDX>0THENY1=AP*X^BP
  104. 11600  IFY1<YMINORY1>YMAXTHENLOCATE25,1:PRINT"please wait";:GOTO11660
  105. 11620  LOCATE25,1:PRINTSTRING$(12,32);:PSET((X-XMIN)*(XAXISLENGTH/XRANGE)+XOFFSET,YAXISHEIGHT-(Y1-YMIN)*(YAXISHEIGHT/YRANGE))
  106. 11660  NEXTX:LOCATE25,1:PRINTSTRING$(12,32);:LOCATE19,60:IFCHOICE=1THENPRINT"LINEAR      ";
  107. 11740  IFCHOICE=2THENPRINT"EXPONENTIAL ";
  108. 11760  IFCHOICE=3THENPRINT"SECOND ORDER";
  109. 11780  IFCHOICE=4THENPRINT"LOGARITHMIC ";
  110. 11800  IFCHOICE=5THENPRINT"POWER       ";
  111. 11820  LOCATE1,(1/2*(75-LEN(TITLE$))+5):PRINTTITLE$:GOSUB13120:SCREEN0:RETURN
  112. 11980  IFFLAGSTAT=0THENGOSUB24600 ELSECLS
  113. 12020  LOCATE1,40:PRINT"EQUATIONS AND CORRELATION COEFFICIENTS FOR THE CURVES":PRINT:PRINT"LINEAR REGRESSION EQUATION: ":PRINT"Y = ";AL;" + ";BL;" X ":PRINT"CORRELATION COEFFICIENT = ";R1:PRINT:PRINT"EXPONENTIAL REGRESSION EQUATION: 
  114. 12140  PRINT"Y = ";AE;"(";BE;"^X)":PRINT"CORRELATION COEFFICIENT = ";R2:PRINT:PRINT"SECOND ORDER FIT EQUATION: ":PRINT"Y = ";AS;" + ";BS;" X + ";C;" X^2":PRINT"CORRELATION COEFFICIENT = ";R3:PRINT:PRINT"LOGARITHMIC REGRESSION EQUATION: 
  115. 12260  PRINT"Y = ";ALG;" + ";BLG;" lnX ":PRINT"CORRELATION COEFFICIENT = ";R4:PRINT:PRINT"POWER REGRESSION EQUATION: ":PRINT"Y = ";AP;"  X^";BP:PRINT"CORRELATION COEFFICIENT = ";R5:PRINT:GOSUB13100:CLS:RETURN
  116. 12460  CLS:PRINT"WOULD YOU LIKE TO REVIEW THE GRAPH (Y/N)";
  117. 12540  A$=INKEY$:IFA$=""THEN12540
  118. 12560  IFA$="Y"ORA$="y"THENSCREEN2:GOSUB10320
  119. 12580  RETURN
  120. 13100  LOCATE24,1:PRINT"PRESS ANY KEY TO CONTINUE";
  121. 13120  A$=INKEY$:IFA$=""THEN13120
  122. 13140  RETURN
  123. 13160  CLS:LOCATE5,34:PRINT"CURVE FITTER":LOCATE8,26:PRINT"Copyright 1984 Scott Camazine":LOCATE20,23:PRINT"Press [F2] to RUN the Program Again":LOCATE22,23:PRINT"    Or  [ESC] to Return to DOS
  124. 13300  A$=INKEY$:IFA$=""THEN13300
  125. 13320  IFA$=CHR$(27)THENSYSTEM ELSERUN
  126. 13340  END
  127. 14000  CLS:LOCATE2,10:PRINT"CURRENT VALUES FOR AXIS LABELS":LOCATE3,10:PRINT"----------------------------------------------------":COLOR0,7:LOCATE5,1:PRINT" TITLE OF GRAPH: ";:COLOR7,0:PRINT"  ";TITLE$
  128. 14180  COLOR0,7:LOCATE7,1:PRINT" LABEL FOR X AXIS: ";:COLOR7,0:PRINT"  ";XAXIS$:COLOR0,7:LOCATE9,1:PRINT" LABEL FOR Y AXIS: ";:COLOR7,0:PRINT"  ";YAXIS$:LOCATE12,1:PRINT"Would You Like to CHANGE the TITLE or LABELS for the Graph (Y/N)?
  129. 14260  A$=INKEY$:IFA$=""THEN14260
  130. 14280  IFA$="N"ORA$="n"THENCLS:RETURN
  131. 14380  LOCATE 14,1:PRINT"ENTER THE TITLE FOR THE GRAPH":LOCATE 15,1:PRINT STRING$(55,254):LOCATE 15,1
  132. 14540  INPUT NTITLE$:IF NTITLE$<>"" THEN TITLE$=NTITLE$
  133. 14880  LOCATE 17,1:PRINT"ENTER THE LABEL FOR THE X AXIS":LOCATE 18,1:PRINT STRING$(20,254):LOCATE 18,1
  134. 15080  INPUT NXAXIS$:IF NXAXIS$<>"" THEN XAXIS$=NXAXIS$
  135. 15420  LOCATE 20,1:PRINT"ENTER THE TITLE FOR THE Y AXIS":LOCATE 21,1:PRINT STRING$(20,254):LOCATE 21,1
  136. 15680  INPUT NYAXIS$:IF NYAXIS$<>"" THEN YAXIS$=NYAXIS$
  137. 16000  LOCATE 21,1:INPUT "DO YOU WANT TO SAVE NEW LABELS/TITLES? (Y/N) ";A$
  138. 16010  IF A$="N" OR A$="n" THEN RETURN
  139. 16020  IF A$="Y" OR A$="y" THEN GOSUB 19000
  140. 16030  RETURN
  141. 17000  IF PG%=0 THEN PG%=1
  142. 17030  IF PG%>4 THEN PG%=4
  143. 17040  PS%=15*(PG%-1)+1:IF COUNT<PS%THEN PG%=PG%-1:GOTO 17000 ELSE ED%=PS%+14
  144. 17060  CLS:LOCATE 1,1:PRINT"DATA FILE:  ";FILENAME$;"        ";COUNT;" data points         ";"PAGE: ";PG%:LOCATE 3,1:PRINT"N","X VALUE","Y VALUE":PRINT STRING$(50,42):J=5:FOR I=PS%TO ED%:IF I>COUNT THEN 17480
  145. 17200  LOCATE J,2:PRINT I:LOCATE J,15:PRINT X(I):LOCATE J,29:PRINT Y(I):J=J+1:NEXT I
  146. 17480  RETURN
  147. 17520  IF FLAGDATA=0 THEN 24400
  148. 17560  CLS:XMIN=LOW:XMAX=HIGH:YMIN=MIN:YMAX=MAX:CLS:LOCATE 2,10:PRINT"CURRENT VALUES FOR PLOTTING INTERVAL AND AXIS LABELS":LOCATE 3,10:PRINT"----------------------------------------------------
  149. 17680  COLOR0,7:LOCATE5,1:PRINT" TITLE OF GRAPH: ";:COLOR7,0:PRINT"  ";TITLE$:COLOR0,7:LOCATE7,1:PRINT" LABEL FOR X AXIS: ";:COLOR7,0:PRINT"  ";XAXIS$:COLOR0,7:LOCATE9,1:PRINT" LABEL FOR Y AXIS: ";:COLOR7,0:PRINT"  ";YAXIS$
  150. 17740  LOCATE 12,1:PRINT"PLOTTING INTERVAL FOR X AXIS: ";LOW;" to ";HIGH:LOCATE 14,1:PRINT"PLOTTING INTERVAL FOR Y AXIS: ";MIN;" to ";MAX:GOSUB 13100:RETURN
  151. 18020  INPUT"WHAT DATA FILE WOULD YOU LIKE";FILENAME$:CLS:OPEN FILENAME$ FOR INPUT AS #1:DIMX(1000):DIMY(1000):INPUT#1,TITLE$,XAXIS$,YAXIS$,LOW,HIGH,MIN,MAX:I=0
  152. 18220  INPUT#1,X,Y:I=I+1:X(I)=X:Y(I)=Y:IFEOF(1)THEN18340
  153. 18320  GOTO18220
  154. 18340  CLOSE:COUNT=I:DIM A(COUNT):DIM B(COUNT):CLS:RETURN
  155. 19000  LOCATE 21,1:PRINT STRING$(70,32):LOCATE 22,1:PRINT STRING$(70,32):LOCATE 21,1:PRINT:INPUT"WHAT NAME WOULD YOU LIKE FOR THE DATA FILE";DATAFILE$:OPEN DATAFILE$ FOR OUTPUT AS #2:WRITE#2,TITLE$,XAXIS$,YAXIS$,LOW,HIGH,MIN,MAX:I=1:FOR I=1 TO COUNT
  156. 19180  WRITE#2,X(I),Y(I):NEXTI:CLOSE:CLS:RETURN
  157. 20000  A1=COUNT:A2=SUMX:A3=SUMX2:B1=SUMX:B2=SUMX2:B3=SUMX3:C1=SUMX2:C2=SUMX3:C3=SUMX4:D1=-SUMY:D2=-SUMXY:D3=-SUMX2Y:AA1=(B2*C3)-(B3*C2):AA2=-((B1*C3)-(B3*C1)):AA3=(B1*C2)-(B2*C1):BB1=-((A2*C3)-(A3*C2)):BB2=(A1*C3)-(A3*C1):BB3=-((A1*C2)-(A2*C1))
  158. 20420  CC1=(A2*B3)-(A3*B2):CC2=-((A1*B3)-(A3*B1)):CC3=(A1*B2)-(A2*B1):DETS=(A1*AA1)+(A2*AA2)+(A3*AA3):AS=-((D1*AA1)+(D2*AA2)+(D3*AA3))/DETS:BS=-((D1*BB1)+(D2*BB2)+(D3*BB3))/DETS:C=-((D1*CC1)+(D2*CC2)+(D3*CC3))/DETS:RETURN
  159. 22000  LOCATE21,1:PRINTSTRING$(70,32):LOCATE21,1:PRINT"WOULD YOU LIKE TO CHANGE ANY OF THE VALUES (Y/N)?";:LOCATE22,1:PRINTCHR$(27);"  TO GO BACK A PAGE,  ";CHR$(26);" TO GO FORWARD
  160. 22080  A$=INKEY$:IFA$=""THEN22080
  161. 22100  IFA$="Y"ORA$="y"THEN22120
  162. 22103  IF LEN(A$)=2 AND ASC(RIGHT$(A$,1))=75 AND PS%<>1 THEN PG%=PG%-1:GOSUB 17000:GOTO 22000
  163. 22107  IF LEN(A$)=2 AND ASC(RIGHT$(A$,1))=77 AND ED%<>COUNT THEN PG%=PG%+1:GOSUB 17000:GOTO 22000
  164. 22110  IF A$="N"OR A$="n"THEN 22310
  165. 22115  BEEP:BEEP:GOTO22000
  166. 22120  LOCATE21,1:PRINTSTRING$(70,32):LOCATE22,1:PRINTSTRING$(70,32):LOCATE21,1:A$="":PRINT"(C)HANGE, (D)ELETE, or (A)DD ? ";A$
  167. 22200  A$=INKEY$:IFA$=""THEN22200
  168. 22220  LOCATE21,1:PRINTSTRING$(70,32);:LOCATE21,1:IFA$="C"ORA$="c"THEN22320
  169. 22260  IFA$="D"ORA$="d"THEN22520
  170. 22280  IFA$="A"ORA$="a"THEN22880
  171. 22300  BEEP:BEEP:GOTO22000
  172. 22310  LOCATE21,1:PRINTSTRING$(70,32):LOCATE22,1:PRINTSTRING$(70,32):LOCATE21,1:PRINT"WOULD YOU LIKE TO SAVE THE DATA ON DISK? (Y/N)
  173. 22313  A$=INKEY$:IFA$=""GOTO22313
  174. 22314  IFA$="Y"ORA$="y"THENGOSUB19000:RETURN
  175. 22315  RETURN
  176. 22320  LOCATE21,1:INPUT"WHAT IS THE SUBSCRIPT (N) OF THE DATA POINT YOU WISH TO CHANGE  ";PJ%:IFPJ%<1ORPJ%>COUNTTHENLOCATE22,1:PRINTSTRING$(78,32);:GOTO22000
  177. 22335  IFPG%=1THENLJ%=PJ%+4
  178. 22336  IFPG%=2THENLJ%=PJ%-11
  179. 22337  IFPG%=3THENLJ%=PJ%-26
  180. 22338  IFPG%=4THENLJ%=PJ%-41
  181. 22340  COUNT=COUNT:DIMSX(COUNT):DIMSY(COUNT):FORSXI=1TOPJ%-1:SX(SXI)=X(SXI):NEXTSXI:LOCATELJ%,16:INPUT"",X(PJ%):FORSXI=PJ%TOCOUNT:SX(SXI)=X(SXI):NEXTSXI:ERASEX:DIMX(COUNT):FORSXI=1TOCOUNT:X(SXI)=SX(SXI):NEXT
  182. 22380  FORSYI=1TOPJ%-1:SY(SYI)=Y(SYI):NEXT:LOCATELJ%,30:INPUT"",Y(PJ%):FORSYI=PJ%TOCOUNT:SY(SYI)=Y(SYI):NEXT:ERASEY:DIMY(COUNT):FORSYI=1TOCOUNT:Y(SYI)=SY(SYI):NEXT:ERASESX,SY,A,B:DIMA(COUNT):DIMB(COUNT):LOCATE20,1:PRINTSTRING$(70,32)
  183. 22430  LOCATE21,1:PRINTSTRING$(60,32):LOCATE22,1:PRINTSTRING$(70,32):FLAGSTAT=0:DAXY$="YES":GOSUB17000:GOTO22000
  184. 22520  LOCATE21,1:INPUT"WHAT IS THE SUBSCRIPT (N) OF THE DATA POINT YOU WISH TO DELETE ";J:IFJ<1ORJ>COUNTTHENLOCATE22,1:PRINTSTRING$(78,32);:GOTO22000
  185. 22580  IFCOUNT-1=2THENLOCATE22,1:PRINTSTRING$(78,32);:GOTO22000
  186. 22585  LOCATE20,1:PRINTSTRING$(70,32):LOCATE21,1:PRINTSTRING$(70,32):LOCATE22,1:PRINTSTRING$(70,32):COUNT=COUNT-1:DIMSX(COUNT),SY(COUNT):FORSXI=1TOJ-1:SX(SXI)=X(SXI):NEXT:FORSXI=JTOCOUNT:SX(SXI)=X(SXI+1):NEXTSXI
  187. 22700  FORSYI=1TOJ-1:SY(SYI)=Y(SYI):NEXTSYI:FORSYI=JTOCOUNT:SY(SYI)=Y(SYI+1):NEXTSYI:ERASEX,Y:DIMX(COUNT):DIMY(COUNT):FORSXI=1TOCOUNT:X(SXI)=SX(SXI):NEXTSXI:FORSYI=1TOCOUNT:Y(SYI)=SY(SYI):NEXTSYI
  188. 22800  ERASESX,SY,A,B:DIMA(COUNT):DIMB(COUNT):DAADJ=DAADJ-1:DAXY$="YES":FLAGSTAT=0:GOSUB17000:GOTO22000
  189. 22880  LOCATE21,1:INPUT"WHAT IS THE SUBSCRIPT (N) OF THE DATA POINT YOU WISH TO ADD ";J%:IFJ%<1THENLOCATE21,1:PRINTSTRING$(78,32);:GOTO22000
  190. 22940  IFCOUNT+1=61THENLOCATE21,1:PRINTSTRING$(78,32)
  191. 22945  IFCOUNT+1=61THENBEEP:BEEP:LOCATE21,1:PRINT"LIMIT 60 POINTS -- CAN'T ADD":FORT=1TO1000:NEXTT:GOTO22000
  192. 22946  COUNT=COUNT+1:IFPG%=1THENL%=J%+4
  193. 22951  IFPG%=2THENL%=J%-11
  194. 22952  IFPG%=3THENL%=J%-26
  195. 22953  IFPG%=4THENL%=J%-41
  196. 22959  DIMSX(COUNT):DIMSY(COUNT):FORSXI=1TOJ%-1:SX(SXI)=X(SXI):NEXTSXI:LOCATEL%,1:PRINTSTRING$(60,32):LOCATEL%,2:PRINTJ%:LOCATEL%,16:INPUT"",SX(J%):FORSXI=J%TOCOUNT-1:SX(SXI+1)=X(SXI):NEXTSXI:ERASEX:DIMX(COUNT)
  197. 23000  FORSXI=1TOCOUNT:X(SXI)=SX(SXI):NEXTSXI:FORSYI=1TOJ%-1:SY(SYI)=Y(SYI):NEXTSYI:LOCATEL%,30:INPUT"",SY(J%):FORSYI=J%TOCOUNT-1:SY(SYI+1)=Y(SYI):NEXTSYI:ERASEY:DIMY(COUNT):FORSYI=1TOCOUNT:Y(SYI)=SY(SYI):NEXTSYI
  198. 23080  ERASESX,SY,A,B:DIMA(COUNT):DIMB(COUNT):LOCATE20,1:PRINTSTRING$(70,32):LOCATE22,1:PRINTSTRING$(70,32):DAAJ=DAAJ+1:DAXY$="YES":FLAGSTAT=0:GOSUB17000:GOTO22000
  199. 24000  CLS:LOCATE10,1:PRINT"THE CALCULATION OF CERTAIN OF THESE CURVES INVOLVES TAKING ":PRINT"      THE LOGARITHM OF THE X AND/OR Y VALUES ":PRINT:PRINT"YOU CANNOT TAKE THE LOGARITHM OF A NON-POSITIVE NUMBER":PRINT
  200. 24160  PRINT"THEREFORE NEGATIVE OR ZERO VALUES OF X ARE NOT ALLOWED FOR THE":PRINT"      LOGARITHMIC CURVE FITTING ROUTINE ":PRINT"ALSO NEGATIVE OR ZERO VALUES OF Y ARE NOT ALLOWED FOR THE ":PRINT"      EXPONENTIAL CURVE FITTING ROUTINE 
  201. 24240  PRINT"FOR THE POWER CURVE BOTH X AND Y MUST BE POSITIVE":PRINT:PRINT"THESE NON-POSITIVE VALUES HAVE BEEN ELIMINATED FROM THE ":PRINT"      CALCULATIONS, BUT WILL BE PLOTTED ON THE SCREEN":FORP=1TO4000:NEXTP:FLAGMESSAGE=1:LOCATE3,13:RETURN
  202. 24400  CLS:BEEP:LOCATE10,1:PRINT"You Must Enter the Data Before Proceeding with Other Options":FORK=1TO3000:NEXTK:CLS:RETURN820
  203. 24600  CLS:BEEP:LOCATE10,1:PRINT"You Must Choose the Other Options Before Printing the Equations":FORK=1TO3000:NEXTK:CLS:RETURN820
  204. 30000  LEFT.COLUMN=6:RIGHT.COLUMN=75:UPPER.ROW=2:LOWER.ROW=19
  205. 30140  FORI=LEFT.COLUMN+1TORIGHT.COLUMN:LOCATEUPPER.ROW,I:PRINTCHR$(205):NEXT:LOCATEUPPER.ROW,RIGHT.COLUMN:PRINTCHR$(187):FORJ=UPPER.ROW+1TOLOWER.ROW-1:LOCATEJ,RIGHT.COLUMN:PRINTCHR$(186):NEXT:LOCATELOWER.ROW,RIGHT.COLUMN:PRINTCHR$(188)
  206. 30400  FORK=RIGHT.COLUMN-1TOLEFT.COLUMN+1STEP-1:LOCATELOWER.ROW,K:PRINTCHR$(205):NEXT:LOCATELOWER.ROW,LEFT.COLUMN:PRINTCHR$(200):FORL=LOWER.ROW-1TOUPPER.ROW+1STEP-1:LOCATEL,LEFT.COLUMN:PRINTCHR$(186):NEXT
  207. 30640  LOCATEUPPER.ROW,LEFT.COLUMN:PRINTCHR$(201):RETURN
  208. 60000  LOCATE 12,30:BEEP:IF ERR=53 THEN PRINT"FILE NOT FOUND.......Please Try Again":FOR K=1 TO 3000:NEXT:CLS:PG%=1:RESUME 820
  209. 60100  IF ERR=6 THEN PRINT"In this Interval an OVERFLOW error has occured":PRINT"Choose Another Plotting Interval":FOR K=1 TO 3000:NEXT:CLS:RESUME 9180
  210. 60120  IF ERR=11 THEN PRINT"In this Interval a DIVISION BY ZERO error has occured":PRINT"Choose Another Plotting Interval":FOR K=1 TO 3000:NEXT:CLS:RESUME 9180
  211. 60140  IF ERR=71 THEN PRINT"DISK DRIVE NOT READY":GOSUB 13100:CLS:RESUME 18020
  212. 60160  IF ERR=52 OR ERR=76 THEN PRINT"File name missing or Drive invalid ":GOSUB 13100:CLS:PG%=1:RESUME 18020
  213. 60180  END
  214.