10REM > %.COMPLEX LIBRARY INCLUDING TRANCEDENTAL FUNCTIONS. 20PROCINITCOMPLEX 30PROCHELP 40END 50REM---------------------------------------------------------------------- 60REM > TSTCMPLX 70ON ERROR INSTALL "%.COMPLEX":RUN 80PROCINITCOMPLEX 90ON ERROR OFF 100MODE9 110FORX%=0TO1280STEP4:X=-2+2.5*X%/1280. 120 FORY%=0TO1024STEP4:Y=-1.25+2.5*Y%/1024. 130 PROCSET(0,0,Z()) 140 PROCSET(X,Y,C()) 150 N%=0 160 REPEAT 170 N%+=1 180 PROCMUL(Z(),Z(),A()) 190 PROCADD(A(),C(),Z()) 200 UNTIL N%=20 OR FNABS(Z())>2. 210 IF N%=20 GCOL0 ELSE GCOL((N%MOD7)+1) 220 PLOT69,X%,Y% 230 NEXT 240NEXT 250END 260: 270: 280: 290REM > TSTCMPLX2 300ON ERROR INSTALL "%.COMPLEX":RUN 310PROCINITCOMPLEX 320S=1.2 330ON ERROR OFF 340MODE9 350FORX%=0TO1024STEP4:X=-S+2*S*X%/1024. 360 FORY%=0TO1024STEP4:Y=-S+2*S*Y%/1024. 370 PROCSET(X,Y,Z()) 380 PROCSET(.6,0,C()) 390 N%=0 400 REPEAT 410 N%+=1 420 PROCRPOWER(Z(),5,A()) 430 PROCADD(A(),C(),Z()) 440 UNTIL N%=10 OR ABS(Z(0))>10 OR ABS(Z(1))>10 OR FNABS(Z())>10 450 IF ABS(Z(0))<10 OR ABS(Z(1))<10 PLOT69,X%,Y% 460 NEXT 470NEXT 480END 490: 500: 510: 520REM > TSTCMPLX3 530ON ERROR INSTALL "%.COMPLEX":RUN 540PROCINITCOMPLEX 550S=1.2 560ON ERROR OFF 570MODE9 580FORX%=0TO1024STEP4:X=-S+2*S*X%/1024. 590 FORY%=0TO1024STEP4:Y=-S+2*S*Y%/1024. 600 PROCSET(X,Y,Z()) 610 PROCSET(.6,0,C()) 620 N%=0 630 REPEAT 640 N%+=1 650 PROCPOWER(Z(),Z(),A()) 660 PROCRPOWER(Z(),5,B()) 670 A()=A()+B() 680 PROCADD(A(),C(),Z()) 690 UNTIL N%=10 OR ABS(Z(0))>10 OR ABS(Z(1))>10 OR FNABS(Z())>10 700 IF ABS(Z(0))<10 OR ABS(Z(1))<10 PLOT69,X%,Y% 710 NEXT 720NEXT 730END 740: 750: 760: 770REM > TSTCMPLX4 780ON ERROR INSTALL "%.COMPLEX":RUN 790PROCINITCOMPLEX 800S=2.2 810ON ERROR OFF 820MODE9 830FORX%=0TO1024STEP4:X=-S+2*S*X%/1024. 840 FORY%=0TO1024STEP4:Y=-S+2*S*Y%/1024. 850 PROCSET(X,Y,Z()) 860 PROCSET(.5,0,C()) 870 N%=0 880 REPEAT 890 N%+=1 900 PROCSIN(Z(),A()) 910 PROCRPOWER(Z(),2,B()) 920 A()=A()+B() 930 Z()=A()+C() 940 UNTIL N%=10 OR ABS(Z(0))>10 OR ABS(Z(1))>10 OR FNABS(Z())>10 950 IF ABS(Z(0))<10 OR ABS(Z(1))<10 PLOT69,X%,Y% 960 NEXT 970NEXT 980END 990: 1000: 1010: 1020REM > TSTCMPLX5 1030ON ERROR INSTALL "%.COMPLEX":RUN 1040PROCINITCOMPLEX 1050S=3.5 1060ON ERROR OFF 1070MODE9 1080FORX%=0TO1024STEP4:X=-S+2*S*X%/1024. 1090 FORY%=0TO1024STEP4:Y=-S+2*S*Y%/1024. 1100 PROCSET(X,Y,Z()) 1110 PROCSET(1,1,C()) 1120 N%=0 1130 REPEAT 1140 N%+=1 1150 PROCSIN(Z(),A()) 1160 PROCEXP(Z(),B()) 1170 A()=A()+B() 1180 Z()=A()+C() 1190 UNTIL N%=10 OR ABS(Z(0))>10 OR ABS(Z(1))>10 OR FNABS(Z())>10 1200 IF ABS(Z(0))<10 OR ABS(Z(1))<10 PLOT69,X%,Y% 1210 NEXT 1220NEXT 1230END 1240: 1250: 1260: 1270REM > TSTCMPLX6 1280ON ERROR INSTALL "%.COMPLEX":RUN 1290PROCINITCOMPLEX 1300S=3.25 1310ON ERROR OFF 1320MODE18 1330FORX%=0TO1024STEP2:X=-S+2*S*X%/1024. 1340 FORY%=0TO1024STEP2:Y=-S+2*S*Y%/1024. 1350 PROCSET(X,Y,Z()) 1360 PROCSET(0.5,0,C()) 1370 N%=0 1380 REPEAT 1390 N%+=1 1400 PROCSINH(Z(),A()) 1410 PROCSIN(Z(),B()) 1420 A()=A()+C() 1430 Z()=A()+B() 1440 UNTIL N%=10 OR ABS(Z(0))>10 OR ABS(Z(1))>10 OR FNABS(Z())>10 1450 IF ABS(Z(0))<10 OR ABS(Z(1))<10 PLOT69,X%,Y% 1460 NEXT 1470NEXT 1480END 1490REM----------------------------------------------------------------------- 1500DEFPROCHELP 1510CLS 1520PRINT"THIS LIBRARY PROVIDES THE FOLLOWING PROCEDURES:"' 1530PRINT"U(),V() AND W() DENOTE COMPLEX VARIABLES." 1540PRINT"X AND Y DENOTE REAL VALUES." 1550PRINT"PROCADD( U(),V(),RETURN W()) PROCSUB( U(),V(),RETURN W())" 1560PRINT"PROCMUL( U(),V(),RETURN W()) PROCDIV( U(),V(),RETURN W())" 1570PRINT"PROCRPOWER(U(), X,RETURN W()) PROCPOWER(U(),V(),RETURN W())" 1580PRINT"PROCEXP( U(), RETURN W()) PROCLN( U(), RETURN W())" 1590PRINT"PROCSIN( U(), RETURN W()) PROCCOS( U(), RETURN W())" 1600PRINT"PROCSINH( U(), RETURN W()) PROCCOSH( U(), RETURN W())" 1610PRINT"PROCTAN( U(), RETURN W()) PROCSET( X, Y,RETURN W())" 1620PRINT 1630PRINT"ALSO SUPPLIED ARE THE FOLLOWIG REAL FUNCTIONS:" 1640PRINT"FNSH(X) FNCH(X) FNREAL(Z())" 1650PRINT"FNIMAG(Z()) FNABS(Z()) FNARG(Z())" 1660PRINT'"OF WHICH THE FIRST TWO GIVE THE HYPERBOLIC SINE AND COSINE" 1670PRINT"OF A REAL VALUE."' 1680PRINT"CALL THE PROCEDURE PROCINITCOMPLEX,TO DEFINE THE COMPLEX VARIABLES" 1690PRINT"A() TO Z() AND THE INTERNAL DUMMY'S _A(),_B(),_C(),_A,_B AND _C" 1700PRINT"THE MULTYVALUED ROUTINES GIVE YOU THE PRINCIPAL VALUE ONLY." 1710PRINT'"TESTS HAVE BEEN RUN AGAINST ACORN FORTRAN" 1720PRINT'"6 EXAMPLE PROGRAMS WITH INTERESTING FRACTALS CAN BE FOUND INSIDE THE CODE." 1730PRINT'"YOU CAN SPLIT THEM OFF FOR TESTING, OR" 1740PRINT'"YOU CAN LEAVE THEM THERE,THEY ARE IGNORED." 1750ENDPROC 1760 1770REM----------------------------------------------------------------------- 1780DEFPROCINITCOMPLEX 1790_A=0 1800_B=0 1810_C=0 1820DIM _A(1),_B(1),_C(1) 1830DIM A(1),B(1),C(1),D(1),E(1),F(1),G(1),H(1),I(1),J(1),K(1),L(1),M(1),N(1),O(1),P(1),Q(1),R(1),S(1),T(1),U(1),V(1),W(1),X(1),Y(1),Z(1) 1840ENDPROC 1850REM-----------------------------------------------REAL HYPERBOLIC SINE---- 1860DEFFNSH(Y):=(EXPY-EXP(-Y))/2 1870REM-----------------------------------------------REAL HYPERBOLIC COSINE-- 1880DEFFNCH(Y):=(EXPY+EXP(-Y))/2 1890REM-----------------------------------------------COMPLEX SINE------------ 1900DEFPROCSIN(U(),W()) 1910_A(0)=SINU(0)*FNCH(U(1)):_A(1)=COSU(0)*FNSH(U(1)):W()=_A() 1920ENDPROC 1930REM-----------------------------------------------COMPLEX COSINE---------- 1940DEFPROCCOS(U(),W()) 1950_A(0)=COSU(0)*FNCH(U(1)):_A(1)=-SINU(0)*FNSH(U(1)):W()=_A() 1960ENDPROC 1970REM-----------------------------------------------COMPLEX TANGENT--------- 1980DEFPROCTAN(U(),W()) 1990PROCSIN(U(),_B()) 2000PROCCOS(U(),_C()) 2010PROCDIV(_B(),_C(),_A()) 2020W()=_A() 2030ENDPROC 2040REM-----------------------------------------------COMPLEX HYPERBOLIC SINE- 2050DEFPROCSINH(U(),W()) 2060_A(0)=FNSH(U(0))*COSU(1):_A(1)=FNCH(U(0))*SINU(1):W()=_A() 2070ENDPROC 2080REM-----------------------------------------------COMPLEX HYPERBOLIC COSINE 2090DEFPROCCOSH(U(),W()) 2100_A(0)=FNCH(U(0))*COSU(1):_A(1)=FNSH(U(0))*SINU(1):W()=_A() 2110ENDPROC 2120REM-----------------------------------------------COMPLEX MULTIPLICATION-- 2130DEFPROCMUL(U(),V(),W()) 2140_A(0)=U(0)*V(0)-U(1)*V(1):_A(1)=U(0)*V(1)+U(1)*V(0):W()=_A() 2150ENDPROC 2160: 2170REM-----------------------------------------------COMPLEX DIVISION-------- 2180DEFPROCDIV(U(),V(),W()):_A=V(0)*V(0)+V(1)*V(1):_A(0)=(U(0)*V(0)+U(1)*V(1))/_A:_A(1)=(U(1)*V(0)-U(0)*V(1))/_A:W()=_A() 2190ENDPROC 2200REM-----------------------------------------------COMPLEX ADDITION-------- 2210DEFPROCADD(U(),V(),W()) 2220_A()=U()+V():W()=_A() 2230ENDPROC 2240REM-----------------------------------------------COMPLEX SUBTRACTION----- 2250DEFPROCSUB(U(),V(),W()) 2260_A()=U()-V():W()=_A() 2270ENDPROC 2280REM-----------------------------------------COMPLEX TO A REAL(BROKEN) POWER 2290DEFPROCRPOWER(U(),X,W()) 2300_C=FNABS(U())^X 2310_B=FNARG(U())*X 2320W(0)=_C*COS_B:W(1)=_C*SIN_B:ENDPROC 2330REM-----------------------------------------E TO A COMPLEX POWER----------- 2340DEFPROCEXP(U(),W()) 2350_A=EXP(U(0)):_A(0)=_A*COSU(1):_A(1)=_A*SINU(1):W()=_A() 2360ENDPROC 2370REM-----------------------------------------NATURAL LOG OF A COMPLEX------- 2380DEFPROCLN(U(),W()) 2390_A(0)=LN(FNABS(U())):_A(1)=FNARG(U()) 2400W()=_A() 2410ENDPROC 2420REM-----------------------------------------COMPLEX TO A COMPLEX POWER----- 2430DEFPROCPOWER(U(),V(),W()) 2440PROCLN(U(),_B()) 2450PROCMUL(V(),_B(),_B()) 2460PROCEXP(_B(),_B()) 2470W()=_B() 2480ENDPROC 2490REM-----------------------------------------SET A COMPLEX TO A VALUE------- 2500DEFPROCSET(X,Y,W()) 2510W(0)=X 2520W(1)=Y 2530ENDPROC 2540REM-----------------------------------------GET REAL PART OF COMPLEX------- 2550DEFFNREAL(U()):=U(0) 2560REM-----------------------------------------GET IMAGINAIRY PART OF COMPLEX- 2570DEFFNIMAG(U()):=U(1) 2580REM-----------------------------------------GET ABSOLUTE VALUE OF COMPLEX-- 2590DEFFNABS(U()):=SQR(U(0)*U(0)+U(1)*U(1)) 2600REM-----------------------------------------GET ARGUMENT OF COMPLEX-------- 2610DEFFNARG(U()) 2620IF U(0)=0 THEN 2630 IF U(1)>0 _A=PI/2 ELSEIF U(1)<0 _A=-PI/2 ELSE _A=0 2640ELSE 2650 _A=ATN(U(1)/U(0)) 2660 IFU(0)<0 AND U(1)>=0 _A=_A+PI 2670 IFU(0)<0 AND U(1)<0 _A=_A-PI 2680ENDIF 2690=_A