SCREEN 12:CLS OX=44 OY=64 XM=640-2*OX YM=480-2*OY FO=8 SV=7 TE=0 WINDOW(-OX,-OY)-(XM+OX,YM+OY) PAINT(1,1),FO PSET(0,0),SV:LINE-(0,YM),SV:LINE-(XM,YM),SV LINE-(XM,0),TE:LINE-(0,0),TE NX=13 NY=10 DX=XM/NX DY=YM/NY FOR Y=DY TO YM STEP DY PSET(1,Y),SV:LINE-(XM-1,Y),SV PSET(1,Y+1),TE:LINE-(XM-1,Y+1),TE PSET(1,Y+2),TE:LINE-(XM-2,Y+2),TE NEXT Y FOR X=DX TO XM STEP DX PSET(X,1),TE:LINE-(X,YM-1),TE PSET(X-1,1),TE:LINE-(X-1,YM-1),TE PSET(X+1,1),SV:LINE-(X+1,YM-1),SV NEXT X PI=4*ATN(1) YC=YM/2:KY=-120 T=XM:W=2*PI/T NT=16 XD=T/NT GR=32 DEF FNY1(X)=SIN(W*XD*INT(X/XD)) DEF FNY2(X)=(SIN(W*X))*SGN(SGN(SIN(W*X))+1) DEF FNY3(X)=-SGN(-1+SGN(100-X))*SGN(1-SGN(X-200)) rem GOSUB GRAPHIC rem DIM A(2*GR),B(2*GR) gosub newline input"Input number of harmonics (1-100)";gr gosub newline inputf: gosub newline input"Select function (1-16-step sin; 2-plus sin; 3-puls";nf if nf<>1 and nf<>2 and nf<>3 then goto inputf on nf gosub defa,defb,defc def fny(x)=(ff1)*fny1(x)+(ff2)*fny2(x)+(ff3)*fny3(x) gosub graphic dim a(2*gr),b(2*gr) gosub newline ?" CALCULATING ALL ";GR;" HARMONICS" GOSUB FURIE locate 1,1:?" ":locate 1,1:?"HIT to restore" wata1: if inkey$<>chr$(13) then wata1 locate 1,1:?" ":locate 1,1:?"hit - restore" GOSUB STORE gosub newline ?"hit - to quit" wata2: if inkey$<>chr$(27) then wata2 STOP GRAPHIC: GC=2: rem GRAPHICS COLOR AY=YC PSET(0,AY) FOR X=1 TO XM Y=KY*FNY(X)+YC LINE -(X,Y),GC AY=Y NEXT X RETURN FURIE: locate 1,36:?"DONE - %" U=1 FOR I=0 TO GR A(I+1)=0:B(I+1)=0 NI=4*GR DXI=T/NI FOR X=0 TO T STEP DXI A(I+1)=A(I+1)+(2/T)*FNY(X)*(COS(I*W*X))*DXI B(I+1)=B(I+1)+(2/T)*FNY(X)*(SIN(I*W*X))*DXI NEXT X REM ?"A(";I;")=";A(I+1) REM ?"B(";I;")=";B(I+1) P=INT(100*(U/(GR+1))):U=U+1 LOCATE 1,43:?P NEXT I RETURN STORE: REM CLS gosub newline locate 1,1:?"NOW RESTORING FUNCTION AT ";GR;" HARMONICS" PSET(0,YC) FOR X=1 TO XM SG=A(1)/2 FOR I=1 TO GR SG=SG+A(I+1)*COS(I*W*X)+B(I+1)*SIN(I*W*X) NEXT I Y=KY*SG+YC LINE -(X,Y),13 NEXT X RETURN NEWLINE: locate 1,1:?" " locate 1,1 return defa: ff1=1:ff2=0:ff3=0 return defb: ff1=0:ff2=1:ff3=0 return defc: ff1=0:ff2=0:ff3=1 return