100 !GRAPH1** VERSION 1**21-3-77** !PHYSICS SECTION**AUTHOR A E LAWRENCE 110 DIMT%(120%),A(500%,2%),B$(64%)\T%(0%)=30%\T%(1%)=6%\ G$=CHR$(13%)+CHR$(10%) 120 DEFFNA%(A,B)\IFINT(A/B+.5)==A/BTHENFNA%=1%ELSEFNA%=0% 130 FNEND 140 T%(2%)=-7%\GOSUB2360\&\T%(2%)=9%\GOSUB2360\& "GRAPH1-"+RIGHT(J$,3%)+"-PHYSICS V 1 *";\J$=NUM$(ASCII(J$)/2)\ ONERRORGOTO2020\&J$+"*"\&\GOTO160 150 READB$\J%=J%+1%\GOTO150IFJ%<12% 160 OPENB$+"GRAPH1.BAS"FORINPUTASFILE1%\RESTORE\&\& "PLOT OF Y AGAINST X. PLEASE GIVE X AS A FUNCTION OF U,V,W & H."\ &"X="; 170 INPUTLINEB$(5%)\IFASCII(B$(5%))=47%THENB$(5%)=RIGHT(B$(5%),2%)\Y%=1% 175 IFCVT$$(B$(5%),4%)=""THENCLOSE1%\J%=0%\GOTO890 180 B$(5%)="860 DEF FNX(U,V,W,H)="+B$(5%) 190 &"AND Y AS FUNCTION OF U,V,W & H."UNLESSY%\&"Y=";\INPUTLINEH$ 200 IFY%THEN210ELSE& "AFTER A SHORT DELAY, 'DO YOU WISH...' WILL BE PRINTED.IF ANYTHING"\ &"ELSE HAPPENS, YOU HAVE MADE AN ERROR, AND MUST START AGAIN BY"\& "RUNNING GRAPH1 AS BEFORE."+CHR$(10%) 210 B$(6%)='885 KILL"G1'+J$+'.BAS"'+G$+ '880 DEF FNY(U,V,W,H)='+H$\ B$(6%)='895 Y%=1%'+G$+B$(6%)IFY%\ K$=""\FORJ%=1%TO4% 220 READ F$\IFINSTR(20%,B$(5%)+H$,F$)=0THEN230ELSE IFLEN(K$)>0THENK$=K$+","+F$ELSEK$=K$+F$ 230 NEXTJ%\B$(7%)="1040 &"+CHR$(34%)+K$+CHR$(34%)\ B$(8%)="1060 INPUT"+K$\GOTO240IFLEN(K$)>0%\PRINT "INVALID EXPRESSIONS FOR X & Y! TRY AGAIN: X=";\ RESTORE\GOTO170 240 OPEN"G1"+J$+".BAS"FOR OUTPUT ASFILE2% 245 READB$,B%\J%=J%+1% 250 INPUTLINE#1%,E$\IFLEFT(E$,B%)<>B$THEN%,E$;ELSE %,B$(J%)\IFJ%<8%THEN245ELSE280 260 GOTO250 280 INPUTLINE#1%,E$\%,E$;\GOTO280 320 %,CHR$(26%);\CLOSE1%,2%\CHAIN"G1"+J$+".BAS"860 400 T%(0%)=30%\T%(1%)=6%\T%(2%)=-8%\T%(3%)=J%\GOSUB2360\ Z%=ASCII(MID(J$,29%,1%))-1%\RETURN 860 DEF FNX(U,V,W,H)=U 880 DEF FNY(U,V,W,H)=V 890 ONERRORGOTO1900\GOSUB400 960 &"DO YOU WISH TO SEE X AND Y ";UNLESSY%\ INPUT"AS THEY ARE CALCULATED (Y OR N)";G$ 1010 H%=INSTR(1%,G$,"/")\IFH%=0%THEN1030ELSE OPENRIGHT(G$,H%+1%)FORINPUTASFILE2%\GOSUB3900\ GET#2%\H%=CVT$%(B$(1%))\W%=2%\L%=1%\GOTO1025IFH%<1% 1015 FORS%=W%UNTILS%=255%/V%+1%ORL%=H%+1%\X=CVT$F(B$(S%))\ Y=CVT$F(RIGHT(B$(S%),V%+1%))\L%=L%+1%\GOSUB2400\NEXTS%\ IFL%"Y"THEN1220ELSE& "PLOTTING ORDER:"\&" X"," Y" 1160 &A(J%,1%),A(J%,2%) FOR J%=1%TON% 1200 ! THE VALUES ARE NOW IN PLOTTING ORDER IN A. WE NOW RECORD THE LIMITS IN X1,X2,Y1 AND Y2 1220 X1,X2=A(1%,1%)\Y1=A(1%,2%)\Y2=A(N%,2%)\ FOR K%=2% TO N%\X1=A(K%,1%)IFA(K%,1%)>X1\X2=A(K%,1%)IFA(K%,1%)") ELSE1380 1360 I$=MID(G$,H%+1%,M%-H%-1%)\GOTO3420IFINSTR(1%,I$,"-")\ GOTO3400IFINSTR(1%,I$,"EX")\G=1.662878\ G$=RIGHT(G$,M%+1%)\ W%=INSTR(1%,I$,"I")\ H%=INSTR(1%,I$,"/")\O%=INSTR(H%+1%,I$,"/") 1375 R%=INSTR(1%,I$,"A")\S%=INSTR(1%,I$,"M")\U%=INSTR(1%,I$,"O") 1380 IFH%THENQ%=VAL(MID(I$,H%+1%,O%-H%-1%))ELSEQ%=64% 1385 IFQ%>250%THEN INPUT"GRAPH REALLY OVER A METRE LONG (Y OR N)";R$\ IFR$="N"THEN1340 1390 E%=INSTR(1%,G$,"/")\GOTO1480UNLESSE%\A%(0%)=E%\ IFINSTR(2%,G$,"%")THENE%,A%(0%)=E%+1%\J%=1% 1400 FORE%=1%TO5%\A%(E%)=INSTR(A%(E%-1%)+1%,G$,"+")\ IFA%(E%)=0%THEN1440 1420 NEXT E% 1440 IFMID(G$,LEN(G$),1%)="+"THENE%=E%-1%ELSEA%(E%)=LEN(G$)+1% 1460 OPENMID(G$,A%(A%-1%)+1%,A%(A%)-A%(A%-1%)-1%)FOROUTPUTASFILEA% FORA%=1%TOE%\IFJ%THENGOSUB400\Z%=72%UNLESSNOTZ% 1480 IFG$="MORE"THEN3370 1490 R%,U%=-1%IFW% 1500 &"X-AXIS LABEL";\INPUTLINEX$\X$=CVT$$(X$,4%)\ &"AND Y-AXIS LABEL";\INPUTLINEY$\Y$=CVT$$(Y$,4%)\&\ &"THE POINTS ARE INDICATED AS '*', & THE LEAST SQUARES FIT BY ###.." 1510 IFS%THEN&"MULTIPLE POINTS BY 1,2,3,...,9,A,B,..." ELSE&"REPEATED POINTS BY 'X'." 1520 & 1530 IFU%=0%THEN1570 ELSEIFY1<0THENY1=0ELSE IFY2>0THENY2=0 1540 IFX1<0THENX1=0ELSEIFX2>0THENX2=0 1550 IFW%=0%THEN1570 1560 X1=-C/MIFX1<-C/M\X2=-C/MIFX2>-C/M\Y1=CIFY1C 1570 Z1=Y1\Z2=Y2\B%=Q%\I%=1%\GOSUB2760\Y0=Z0\Y3%=1/S+.1\ Y6=Z6\Y7=Z7\ V%=LEN(NUM$(INT((ABS(Y1)+ABS(Y2)+Q%*Y7)/Y6)))+1%\ B%=Z%-V%\Z1=X1\Z2=X2\T%(0%)=Z%\GOSUB2760 1580 X0=Z0\X6=Z6\X3%=1/S+.1\X7=Z7\ &#G%,CHR$(12%)+CHR$(13%);TAB(3%);"Y"FORG%=J%TOE%\K%=0% 1585 IFJ%THEN&"WIDTH=";Z%ELSE&CHR$(140%); !VDU BLANK & HOME 1590 IFINSTR(1%,I$,"U")=0%THEN1610ELSEIFINSTR(1%,I$,"D") THENG=1.658219ELSEIFINSTR(1%,I$,"V")THENG=2.5ELSEG=1.662878 1595 IFG*X7>Y7THENY7=G*X7\ Y6=10%*Y7\Y3%=10%\ Y0=INT(((Y1+Y2)/2%-(Q%+1%)/2%*Y7)/Y6)*Y6\GOTO1610 1600 X7=Y7/G\X6=10%*X7\X3%=10%\X0=INT(((X1+X2)/2-(Z%+1%-V%)/2%*X7)/X6)*X 6 1610 C%=(A(N%,2%)-Y0)/Y7\ IFNOT(C%>10%IMPU%<>0%)THEN Y0=(INT(A(N%,2%)/Y6+.5)-1%)*Y6 1620 L%=INT((A(1%,2%)-Y0)/Y7+.5)\L1%=L%+5% 1750 L1%=Q%IFU%\IFLEN(NUM$(INT((X1+X2)/2/X6)))>X3%THENO%=1%ELSEO%=0% 1760 F$=SPACE$(Z%)IFO%\GOSUB3260\FORG%=J%TOE%\&#G%\ &#G%,F$IFO%\NEXTG%\GOSUB3230\O%=O%+1% 1780 T%(A%)=32%FORA%=1%TOZ%\ Z1%=INT(((L1%*Y7-C+Y0)/M-X0)/X7+.5)\ T%(Z1%+V%+1%)=35%IFZ1%+V%-4%\ IFFNA%(L1%,Y3%)THENF%=43%ELSEF%=46% 1880 GOTO3100 1900 IFERR=28THEN2040 1903 IFERL>4080ANDERL<4430THEN &"CAN'T CALCULATE M,C OR R CORRECTLY:-";\GOSUB1950\ &CHR$(10)\RESUME1340 1905 IFERL=1380THEN&"SWITCH (Y SCALE) ERROR."\ RESUME1340 1907 IFERL>1000ANDERL<1040THEN&"SWITCH ERROR-"\GOSUB1950\ &" ON INPUT FILE"\RESUME960 1908 IFERL>3390ANDERL<3900THENGOSUB1950\&"-P,S OR MORE"\ RESUME3360 1910 IFNOT(ERR=48%ORERR=49%ORERR>52%)THEN1920 ELSEIFERL=860ORERL=880ORERL=1060THENGOSUB1950\ &" - TRY AGAIN:"\RESUME1060 1920 GOTO1960UNLESSERL=1460\&"DUPLICATE ERROR:-";\ J%=0%\GOSUB400\GOSUB1950\&\RESUME1340 1950 T%(2%)=9%\T%(1%)=6%\T%(3%)=ERR\B$=J$\GOSUB2360\ &CVT$$(RIGHT(J$,3%),4%);\J$=B$\RETURN 1960 IFERR=50ANDERL=1060THENRESUME1120 1965 IFERL=4000THENGOSUB1950\ &"-AGAIN:"\RESUME 1970 IFERL>1510ANDERL<1880ORERL>2600ANDERL<3340THEN GOSUB1950\&" - CANNOT PLOT. TRY AGAIN:"\ RESUME1030 1980 IFERR<>52THEN2100ELSE&"PARDON? -AGAIN:"\RESUME 2020 IFERR<>28THEN2100 2040 IFLINE>240THENKILL"G1"+J$+".BAS" 2080&"PLOT ABORTED."\GOTO2340 2100 IFERL=160AND(ERR=5ORERR=10ORERR=8ORERR=14ORERR=2)THEN RESUME150ELSEIFERL=150THEN&CHR$(12%)+ "PLEASE TYPE 'SAVEGRAPH1' , & THEN 'RUNNH' ."\ GOTO2340 2150 IFERR=11THENIFERL=280%THENRESUME320ELSEIFERL=250%THEN &"CORRUPTED FILE!" 2200 &"ERROR- ";\GOSUB1950\GOTO2340 2340 RESUME4440 2360 CHANGET%TOA$\J$=SYS(A$)\RETURN 2380 !SUBROUTINE TO CALCULATEX,Y AND TO ORDER MATRIX 2390 X=FNX(U,V,W,H)\Y=FNY(U,V,W,H)\&"X=";X;"Y=";YIFG$="Y" 2400 GOTO2420UNLESSN%\IFA(N%,2%)>YTHENI%=N%+1%\GOTO2470 2410 IFA(1%,2%)>YTHEN2430ELSEB%=1%\GOTO2460 2420 I%=1%\GOTO2470 2430 F%=1%\B%=N% 2440 I%=(F%+B%)/2.+.5\IFY>A(I%,2%)THENB%=I%ELSEF%=I% 2450 IFB%-F%>1%THEN2440 2460 FORJ%=N%TOB%STEP-1%\A(J%+1%,1%)=A(J%,1%)\A(J%+1%,2%)=A(J%,2%)\ NEXTJ%\I%=B% 2470 A(I%,1%)=X\A(I%,2%)=Y\N%=N%+1%\RETURN 2760 E=(Z1-Z2)/(B%-1%)\GOTO2765UNLESSINSTR(1%,I$,"*")\ Q=0\S=.5\Z7=E 2762 Z6=2%*Z7\Q=Q+1%\Z0=INT(Z2/Z6)*Z6\RETURNIFZ0=Z2ORQ=2\ Z7=E*(B%-1%)/(B%-3%)\GOTO2762 2765 IFE=0THENP%,Q=0ELSE P%=-INT(-LOG10(ABS(E/5%)))\Q=E/10^P% 2770 S=.05*(2%+2%*SGN(INT(Q))+SGN(INT(Q/2%))+5%*SGN(INT(Q/2.5))) \ Z6=10^(P%+1%)\ Z7=S*Z6 2780 Z0=INT(((Z1+Z2)/2-(B%+1%)/2%*Z7)/Z6)*Z6 2790 IF(Z1-Z0)/Z7<=B%-1%THENRETURNELSEE=E*1.1\ GOTO2765 3100 T%(V%)=F% 3110 IFF%=43%THENO$=CVT$$(NUM$(INT((L1%*Y7+Y0)/Y6+.5)),128%) 3120 IFL1%=L%THENX%=V%+1%+INT((A(I%,1%)-X0)/X7+.5)ELSE3300 3140 IFX%Z%THEN3180 3160 IFT%(X%)=32%THENT%(X%)=42%ELSE IFS%=0%THENT%(X%)=88%ELSE IFT%(X%)=42%THENT%(X%)=50%ELSE IFT%(X%)=35%THENT%(X%)=49%ELSE IFT%(X%)=57%THENT%(X%)=65%ELSE T%(X%)=T%(X%)+1% 3180 I%=I%+1%\IFI%>N%THENL%=L1%+1%ELSE3290 3220 GOTO 3300 3230 &#G%,TAB(V%-1%);"@";FORG%=J%TOE%\ FORK%=0%TOZ%-2%-V%\ IFFNA%(K%,X3%)THENR$="+"ELSER$="." 3240 &#G%,R$;FORG%=J%TOE%\NEXTK%\K%=0% 3250 &#G%FORG%=J%TOE%\RETURN 3260 FORK%=0%TOB%-2%\&#G%,TAB(V%+K%-1%);FORG%=J%TOE%\X8=K%*X7+X0\ X=INT(X8/X6+.5)\IFFNA%(K%,X3%)=0%ORPOS(J%)<>V%+K%-1%OR POS(J%)+LEN(NUM$(X))>Z%-1%THEN3280ELSE&#G%,X;FORG%=J%TOE% 3270 IFO%=1%THENF$=LEFT(F$,V%+K%)+"^"+RIGHT(F$,V%+K%+2%) 3280 NEXTK%\F$=CVT$$(F$,128%)IFO%=1%\K%=0%\RETURN 3290 L%=INT((A(I%,2%)-Y0)/Y7+.5)\GOTO3120 3300 GOTO3310IFNOT(Y7*L1%==-Y0)ORR%=0%\ T%(G%)=45%IFT%(G%)=32%FORG%=V%+1%TOZ% 3310 GOTO3320IFR%=0%OR(-X0/X7>Z%-V%)OR(X0/X7>0)\ G%=INT(V%+1.5-X0/X7)\T%(G%)=46%IFT%(G%)=32% 3320 CHANGET%TOG$\IFF%=43%THEN G$=LEFT(G$,1%)+O$+RIGHT(G$,LEN(O$)+2%) 3330 K%=K%+1%\G$=MID(Y$,K%,1%)+RIGHT(G$,2%)UNLESSK%>LEN(Y$)\ G$=CVT$$(G$,128%)\ &#G%,G$FORG%=J%TOE%\ L1%=L1%-1%\IFL1%>-1%ORI%"\&#G%," SCALE";TAB(32%); X$\&#G%,"*";Y6;TAB(25%);"HORIZONTAL SCALE *";X6\ NEXTG%\FORG%=1%TOE% 3350 R$=CHR$(10)+STRING$(Z%-2%,42%)+CHR$(12)+CHR$(13)+CHR$(10)+CHR$(10)\ R$=R$+"BEST SLOPE="+NUM$(M)+" BEST INTERCEPT="+NUM$(C)\ R$=R$+CHR$(12)FORD%=1%TO3%\&#G%,R$\NEXTG%\ CLOSEG%FORG%=1%TOE%\&\&"-";FORK%=1%TOZ%-2%\& \ IFJ%THENJ%=0%\GOSUB400 3360 PRINT"TYPE 'MORE'IF YOU WANT ANOTHER PLOT ";UNLESSY%\ INPUT"WITH THE SAME FUNCTIONS X & Y";G$ 3370 IFG$="P"THEN1220ELSEIFG$="MORE"THENINPUT "SHALL I DESTROY ALL THE PREVIOUS POINTS (Y OR N)";T$ ELSEIFG$="S"THEN3870ELSE4440 3380 IFT$="Y"THENN%=0%ELSE3960 3390 GOTO960 3400 &"NEW COORDINATES\"\PRINT"X","Y"\A$="" 3402 FORK%=1%TON%\W%=1% 3404 A%=INSTR(W%,A$,CVT%$(K%))\IFA%/2%<>A%/2.THEN3410ELSEIFA%THEN 3415ELSEY=A(K%,1%)\X=A(K%,2%)\N%=N%-1%\A(J%,A%)=A(J%+1%,A%) FORJ%=K%TON%FORA%=1%TO2%\GOSUB2400\PRINTX,Y 3406 FORA%=1%TOLEN(A$)/2%\L%=CVT$%(RIGHT(A$,2%*A%-1%))\W%=SGN(K%-I%)\ A$=LEFT(A$,2%*A%-2%)+CVT%$(L%+W%)+RIGHT(A$,2%*A%+1%)IF L%>K%ANDL%<=I%ANDW%=-1%ORL%>=I%ANDL% Y INTERCHANGED!'\GOTO1120 3415 W%=A%+1%\GOTO3404 3420 FORI%=1%TO(N%+1%)/2%\G=-A(N%+1%-I%,2%)\P=A(N%+1%-I%,1%)\ A(N%+1%-I%,A%)=(3%-2%*A%)*A(I%,A%)FORA%=1%TO2%\ A(I%,1%)=P\A(I%,2%)=G\NEXTI%\ &"Y ----> -Y COMPLETED!"\GOTO1120 3870 &"OUTPUT TO";\INPUTLINEV$\OPENV$FOROUTPUTASFILE2%\ GOSUB3900\LSETB$(1%)=CVT%$(N%)+"N"\W%=2%\L%=1% 3880 FORJ%=W%UNTILJ%=255%/V%+1%ORL%=N%+1%\ LSETB$(J%)=CVTF$(A(L%,1%))+CVTF$(A(L%,2%))\L%=L%+1%\ NEXTJ%\PUT#2%\IFL%0THENM=(A+SGN(F)*SQR(A*A+4))/2ELSE M=-2/(A-SGN(F)*SQR(A*A+4)) 4380 C=(R-M*T)/N% 4400 & "THE BEST STRAIGHT LINE IS Y=MX+C, WHERE M="M;"& C="C\ &\E=X1-X2\G=Y1-Y2\M1=M*E/G\Q=0\FORK%=1%TON%\ X=A(K%,1%)/E\Y=A(K%,2%)/G\J=J+Y*Y\Q=Q+(X-Y)*(X+Y)\NEXTK%\ D=Q+J 4420 K=M1*M1*(J-R*R/G/G/N%)+D-T*T/E/E/N%+2%*M1*(P-R*T/N%)/G/E\ K=K/(1+M1*M1)/(D+J-(T*T/E/E+R*R/G/G)/N%)\& "COEFFICIENT OF DETERMINATION: R^2="K*100%;"%"\&\ GOTO1340 4440 END Ready 8