|
|
DataMuseum.dkPresents historical artifacts from the history of: MIKADOS |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about MIKADOS Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 4992 (0x1380)
Types: TextFile
Notes: Mikados_K
Names: »FFTPLOT.K«
└─⟦d110b5765⟧ Bits:30005308 Eksamensopgave i dynamiske systemer med FFT
└─⟦this⟧ »FFTPLOT.K«
SEGMENT PROCEDURE FFTPLOT(N,ANTPKT:INTEGER;
X,Y : PUNKTER;
TEGN : SYMBOLER;
AFRUND:BOOLEAN);
(* PLOTTER PUNKTERNE MED KOORDINATER (X(I,J),Y(I,J))
HVOR J ER KURVENS NUMMER OG I ER PUNKTETS PAA KURVEN
N ER ANTALLET AF KURVER.
ANTPKT ER ANTALLET AF PUNKTER FAELLES FOR ALLE KURVER.
TEGN KURVE J TEGNES MED TEGNET TEGN(J)
AFRUND TRUE SAA AFRUNDES ENHEDERNE PA X-AKSEN
FALSE INGEN AFRUNDING. *)
TYPE AKSE=(XAKSE,YAKSE);
VAR SX,FX,SY,FY,XMIN,YMIN : REAL;
R,S,XP,YP,I,J,KURVE,PKT : INTEGER;
FUNCTION POW10(E:INTEGER):REAL;
(* UDREGNER 10**E FOR -37<=E<=37 *)
BEGIN
IF E>0 THEN POW10:=PWROFTEN(E)
ELSE
BEGIN
E:=-E;
POW10:=1.0/PWROFTEN(E);
END;
END;
PROCEDURE SKALERING(Y : PUNKTER;
AKS:AKSE;
D,P,Q,R : INTEGER;
VAR S,F : REAL);
(* SKALERER VAERDIERNE I Y
AKS: XAKSE INGEN VIRKNING
YAKSE HVIS VAERIDERNE ER SYMMETRISKE OM
X-AKSEN INDRETTES FORSKYDNINGEN SAA
DEN KOMMER MIDT PAA SKAERMEN.
ER DER LUTTER POSITIVE BLIVER NEDERSTE
LINIE X-AKSEN.
ER DER LUTTER NEGATIVE BLIVER DEN 0VERSTE.
D ER ANTALLET AF SKALAENHEDER PAA DEN 0NSKEDE AKSE.
P,Q Y GENNEMGAAS FRA S0JLE P TIL S0JLE Q
R ANTALLET AF PUNKTER S0JLERNE.
S DEN FUNDNE SKALAENHED
F -"- ---"-- FORSKYDNING.
PUNKT MED KOORDINATER X(I,J),Y(I,J) PLOTTES I POS.
(XP,XY) = (SX*X+FX, SY*Y+FY). (SY,FY,SX,FX BRUGES VED KALDET
AF SKALERING *)
VAR YMAX,HELP : REAL;
E : INTEGER;
BEGIN
YMIN:=Y(1,P);
YMAX:=YMIN;
FOR J:=P TO Q DO
FOR I:= 1 TO R DO
BEGIN
HELP:= Y(I,J);
IF HELP>YMAX THEN YMAX:=HELP;
IF HELP<YMIN THEN YMIN:=HELP;
END;
IF ABS(YMAX-YMIN)<=1E-10 THEN
BEGIN
IF ABS(YMAX)>=1E-10 THEN S:=10.0/YMAX ELSE S:=10
END
ELSE
S:=(D-1)/(YMAX-YMIN);
E:=TRUNC(LN(S)/LN(10));
IF S<=1 THEN E:=E-1;
S:=S/POW10(E);
IF S<2 THEN HELP:=1 ELSE
IF S<5 THEN HELP:=2 ELSE
HELP:=5;
S:=HELP*POW10(E);
IF AKS=YAKSE THEN
BEGIN
F:=(D+1 -S*(YMAX+YMIN))/2;
IF YMIN>=0 THEN F:=1;
IF YMAX<=0 THEN F:=21;
IF ABS(S*(YMIN+YMAX))<=1.5 THEN F:=11;
END
ELSE
F:=(D+1-S*(YMAX+YMIN))/2;
END (* SKALERING *);
BEGIN
SKALERING(X,XAKSE,80,1,N,ANTPKT,SX,FX);
IF TEST THEN WRITELN('SX= ',SX,'FX= ',FX);
SKALERING(Y,YAKSE,23,1,N,ANTPKT,SY,FY);
FY:=23-FY;
IF TEST THEN
BEGIN
WRITELN('SY=',SY,'FY= ',FY);
READLN;
END;
SY:=-SY;
CLEARSCREEN;
(* VANDRETTE LINIER *)
R:=2;
REPEAT
GOTOXY(10,R);
WRITE('--------------------------------------------------');
WRITE('--------------------');
R:=R+5;
UNTIL R>23;
(* ENHEDER PAA X-AKSEN *)
S:=6;
REPEAT
GOTOXY(S,24);
IF AFRUND THEN WRITE(ROUND((S-FX+4)/SX)*1.0:9:3)
ELSE WRITE((S-FX+4)/SX:9:3);
S:=S+10;
UNTIL S>70;
R:=10;
(* LODRETTE LINIER *)
REPEAT
S:=1;
REPEAT
GOTOXY(R,S);
WRITE('ø');
S:=S+1;
UNTIL S=24;
R:=R+10;
UNTIL R = 80;
(* ENHEDER PAA Y-AKSEN *)
R:=2;
REPEAT
GOTOXY(1,R);
WRITE( (R-FY)/SY:9:3);
R:=R+5;
UNTIL R>23;
(* UDTEGNING AF KURVERNE *)
FOR KURVE:=1 TO N DO
FOR PKT:=1 TO ANTPKT DO
BEGIN
XP:=ROUND(SX*X(PKT,KURVE) + FX);
IF XP>80 THEN XP:=80 ELSE
IF XP<1 THEN XP:=1;
YP:=ROUND(SY*Y(PKT,KURVE) + FY);
IF YP>23 THEN YP:=23 ELSE
IF YP<1 THEN YP:=1;
GOTOXY(XP,YP);
WRITE(TEGN(KURVE));
END;
GOTOXY(1,23);
END;
0x0000…0006 Line {l1=0x04, l2=» «, l3=0x04}
0x0006…0033 Line {l1=0x2b, l2=»SEGMENT PROCEDURE FFTPLOT(N,ANTPKT:INTEGER;«, l3=0x2b}
0x0033…005d Line {l1=0x28, l2=» X,Y : PUNKTER;«, l3=0x28}
0x005d…0089 Line {l1=0x2a, l2=» TEGN : SYMBOLER;«, l3=0x2a}
0x0089…00b5 Line {l1=0x2a, l2=» AFRUND:BOOLEAN);«, l3=0x2a}
0x00b5…00ed Line {l1=0x36, l2=» (* PLOTTER PUNKTERNE MED KOORDINATER (X(I,J),Y(I,J))«, l3=0x36}
0x00ed…0128 Line {l1=0x39, l2=» HVOR J ER KURVENS NUMMER OG I ER PUNKTETS PAA KURVEN«, l3=0x39}
0x0128…0148 Line {l1=0x1e, l2=» N ER ANTALLET AF KURVER.«, l3=0x1e}
0x0148…0186 Line {l1=0x3c, l2=» ANTPKT ER ANTALLET AF PUNKTER FAELLES FOR ALLE KURVER.«, l3=0x3c}
0x0186…01b4 Line {l1=0x2c, l2=» TEGN KURVE J TEGNES MED TEGNET TEGN(J)«, l3=0x2c}
0x01b4…01e9 Line {l1=0x33, l2=» AFRUND TRUE SAA AFRUNDES ENHEDERNE PA X-AKSEN«, l3=0x33}
0x01e9…0214 Line {l1=0x29, l2=» FALSE INGEN AFRUNDING. *)«, l3=0x29}
0x0214…0230 Line {l1=0x1a, l2=» TYPE AKSE=(XAKSE,YAKSE);«, l3=0x1a}
0x0230…0255 Line {l1=0x23, l2=» VAR SX,FX,SY,FY,XMIN,YMIN : REAL;«, l3=0x23}
0x0255…027f Line {l1=0x28, l2=» R,S,XP,YP,I,J,KURVE,PKT : INTEGER;«, l3=0x28}
0x027f…0283 Line {l1=0x02, l2=» «, l3=0x02}
0x0283…02a6 Line {l1=0x21, l2=» FUNCTION POW10(E:INTEGER):REAL;«, l3=0x21}
0x02a6…02cd Line {l1=0x25, l2=» (* UDREGNER 10**E FOR -37<=E<=37 *)«, l3=0x25}
0x02cd…02d8 Line {l1=0x09, l2=» BEGIN«, l3=0x09}
0x02d8…02fc Line {l1=0x22, l2=» IF E>0 THEN POW10:=PWROFTEN(E)«, l3=0x22}
0x02fc…0308 Line {l1=0x0a, l2=» ELSE«, l3=0x0a}
0x0308…0315 Line {l1=0x0b, l2=» BEGIN«, l3=0x0b}
0x0315…0323 Line {l1=0x0c, l2=» E:=-E;«, l3=0x0c}
0x0323…0342 Line {l1=0x1d, l2=» POW10:=1.0/PWROFTEN(E);«, l3=0x1d}
0x0342…034e Line {l1=0x0a, l2=» END;«, l3=0x0a}
0x034e…0358 Line {l1=0x08, l2=» END;«, l3=0x08}
0x0358…035c Line {l1=0x02, l2=» «, l3=0x02}
0x035c…0380 Line {l1=0x22, l2=» PROCEDURE SKALERING(Y : PUNKTER;«, l3=0x22}
0x0380…03a1 Line {l1=0x1f, l2=» AKS:AKSE;«, l3=0x1f}
0x03a1…03cb Line {l1=0x28, l2=» D,P,Q,R : INTEGER;«, l3=0x28}
0x03cb…03f3 Line {l1=0x26, l2=» VAR S,F : REAL);«, l3=0x26}
0x03f3…0411 Line {l1=0x1c, l2=» (* SKALERER VAERDIERNE I Y«, l3=0x1c}
0x0411…0431 Line {l1=0x1e, l2=» AKS: XAKSE INGEN VIRKNING«, l3=0x1e}
0x0431…0464 Line {l1=0x31, l2=» YAKSE HVIS VAERIDERNE ER SYMMETRISKE OM«, l3=0x31}
0x0464…0499 Line {l1=0x33, l2=» X-AKSEN INDRETTES FORSKYDNINGEN SAA«, l3=0x33}
0x0499…04c8 Line {l1=0x2d, l2=» DEN KOMMER MIDT PAA SKAERMEN.«, l3=0x2d}
0x04c8…0500 Line {l1=0x36, l2=» ER DER LUTTER POSITIVE BLIVER NEDERSTE«, l3=0x36}
0x0500…0520 Line {l1=0x1e, l2=» LINIE X-AKSEN.«, l3=0x1e}
0x0520…055c Line {l1=0x3a, l2=» ER DER LUTTER NEGATIVE BLIVER DEN 0VERSTE.«, l3=0x3a}
0x055c…0596 Line {l1=0x38, l2=» D ER ANTALLET AF SKALAENHEDER PAA DEN 0NSKEDE AKSE.«, l3=0x38}
0x0596…05c6 Line {l1=0x2e, l2=» P,Q Y GENNEMGAAS FRA S0JLE P TIL S0JLE Q«, l3=0x2e}
0x05c6…05ee Line {l1=0x26, l2=» R ANTALLET AF PUNKTER S0JLERNE.«, l3=0x26}
0x05ee…060c Line {l1=0x1c, l2=» S DEN FUNDNE SKALAENHED«, l3=0x1c}
0x060c…062c Line {l1=0x1e, l2=» F -"- ---"-- FORSKYDNING.«, l3=0x1e}
0x062c…0662 Line {l1=0x34, l2=» PUNKT MED KOORDINATER X(I,J),Y(I,J) PLOTTES I POS.«, l3=0x34}
0x0662…06a2 Line {l1=0x3e, l2=» (XP,XY) = (SX*X+FX, SY*Y+FY). (SY,FY,SX,FX BRUGES VED KALDET«, l3=0x3e}
0x06a2…06b6 Line {l1=0x12, l2=» AF SKALERING *)«, l3=0x12}
0x06b6…06d1 Line {l1=0x19, l2=» VAR YMAX,HELP : REAL;«, l3=0x19}
0x06d1…06e7 Line {l1=0x14, l2=» E : INTEGER;«, l3=0x14}
0x06e7…06f2 Line {l1=0x09, l2=» BEGIN«, l3=0x09}
0x06f2…0705 Line {l1=0x11, l2=» YMIN:=Y(1,P);«, l3=0x11}
0x0705…0716 Line {l1=0x0f, l2=» YMAX:=YMIN;«, l3=0x0f}
0x0716…072c Line {l1=0x14, l2=» FOR J:=P TO Q DO«, l3=0x14}
0x072c…0745 Line {l1=0x17, l2=» FOR I:= 1 TO R DO«, l3=0x17}
0x0745…0752 Line {l1=0x0b, l2=» BEGIN«, l3=0x0b}
0x0752…0768 Line {l1=0x14, l2=» HELP:= Y(I,J);«, l3=0x14}
0x0768…078d Line {l1=0x23, l2=» IF HELP>YMAX THEN YMAX:=HELP;«, l3=0x23}
0x078d…07b2 Line {l1=0x23, l2=» IF HELP<YMIN THEN YMIN:=HELP;«, l3=0x23}
0x07b2…07be Line {l1=0x0a, l2=» END;«, l3=0x0a}
0x07be…07e2 Line {l1=0x22, l2=» IF ABS(YMAX-YMIN)<=1E-10 THEN«, l3=0x22}
0x07e2…07ef Line {l1=0x0b, l2=» BEGIN«, l3=0x0b}
0x07ef…0828 Line {l1=0x37, l2=» IF ABS(YMAX)>=1E-10 THEN S:=10.0/YMAX ELSE S:=10«, l3=0x37}
0x0828…0833 Line {l1=0x09, l2=» END«, l3=0x09}
0x0833…083d Line {l1=0x08, l2=» ELSE«, l3=0x08}
0x083d…085a Line {l1=0x1b, l2=» S:=(D-1)/(YMAX-YMIN);«, l3=0x1b}
0x085a…0877 Line {l1=0x1b, l2=» E:=TRUNC(LN(S)/LN(10));«, l3=0x1b}
0x0877…0891 Line {l1=0x18, l2=» IF S<=1 THEN E:=E-1;«, l3=0x18}
0x0891…08a5 Line {l1=0x12, l2=» S:=S/POW10(E);«, l3=0x12}
0x08a5…08c3 Line {l1=0x1c, l2=» IF S<2 THEN HELP:=1 ELSE«, l3=0x1c}
0x08c3…08e3 Line {l1=0x1e, l2=» IF S<5 THEN HELP:=2 ELSE«, l3=0x1e}
0x08e3…08f5 Line {l1=0x10, l2=» HELP:=5;«, l3=0x10}
0x08f5…090c Line {l1=0x15, l2=» S:=HELP*POW10(E);«, l3=0x15}
0x090c…0923 Line {l1=0x15, l2=» IF AKS=YAKSE THEN«, l3=0x15}
0x0923…0930 Line {l1=0x0b, l2=» BEGIN«, l3=0x0b}
0x0930…0952 Line {l1=0x20, l2=» F:=(D+1 -S*(YMAX+YMIN))/2;«, l3=0x20}
0x0952…096f Line {l1=0x1b, l2=» IF YMIN>=0 THEN F:=1;«, l3=0x1b}
0x096f…098d Line {l1=0x1c, l2=» IF YMAX<=0 THEN F:=21;«, l3=0x1c}
0x098d…09bb Line {l1=0x2c, l2=» IF ABS(S*(YMIN+YMAX))<=1.5 THEN F:=11;«, l3=0x2c}
0x09bb…09c6 Line {l1=0x09, l2=» END«, l3=0x09}
0x09c6…09d0 Line {l1=0x08, l2=» ELSE«, l3=0x08}
0x09d0…09ef Line {l1=0x1d, l2=» F:=(D+1-S*(YMAX+YMIN))/2;«, l3=0x1d}
0x09ef…0a09 Line {l1=0x18, l2=» END (* SKALERING *);«, l3=0x18}
0x0a09…0a0e Line {l1=0x03, l2=» «, l3=0x03}
0x0a0e…0a17 Line {l1=0x07, l2=» BEGIN«, l3=0x07}
0x0a17…0a42 Line {l1=0x29, l2=» SKALERING(X,XAKSE,80,1,N,ANTPKT,SX,FX);«, l3=0x29}
0x0a42…0a6f Line {l1=0x2b, l2=» IF TEST THEN WRITELN('SX= ',SX,'FX= ',FX);«, l3=0x2b}
0x0a6f…0a9a Line {l1=0x29, l2=» SKALERING(Y,YAKSE,23,1,N,ANTPKT,SY,FY);«, l3=0x29}
0x0a9a…0aa8 Line {l1=0x0c, l2=» FY:=23-FY;«, l3=0x0c}
0x0aa8…0ab6 Line {l1=0x0c, l2=»IF TEST THEN«, l3=0x0c}
0x0ab6…0abf Line {l1=0x07, l2=» BEGIN«, l3=0x07}
0x0abf…0add Line {l1=0x1c, l2=»WRITELN('SY=',SY,'FY= ',FY);«, l3=0x1c}
0x0add…0ae6 Line {l1=0x07, l2=»READLN;«, l3=0x07}
0x0ae6…0aec Line {l1=0x04, l2=»END;«, l3=0x04}
0x0aec…0af8 Line {l1=0x0a, l2=» SY:=-SY;«, l3=0x0a}
0x0af8…0b08 Line {l1=0x0e, l2=» CLEARSCREEN;«, l3=0x0e}
0x0b08…0b22 Line {l1=0x18, l2=» (* VANDRETTE LINIER *)«, l3=0x18}
0x0b22…0b2b Line {l1=0x07, l2=» R:=2;«, l3=0x07}
0x0b2b…0b35 Line {l1=0x08, l2=» REPEAT«, l3=0x08}
0x0b35…0b4c Line {l1=0x15, l2=» GOTOXY(10,R);«, l3=0x15}
0x0b4c…0b92 Line {l1=0x44, l2=» WRITE('--------------------------------------------------');«, l3=0x44}
0x0b92…0bba Line {l1=0x26, l2=» WRITE('--------------------');«, l3=0x26}
0x0bba…0bcb Line {l1=0x0f, l2=» R:=R+5;«, l3=0x0f}
0x0bcb…0bda Line {l1=0x0d, l2=» UNTIL R>23;«, l3=0x0d}
0x0bda…0bf9 Line {l1=0x1d, l2=» (* ENHEDER PAA X-AKSEN *)«, l3=0x1d}
0x0bf9…0c02 Line {l1=0x07, l2=» S:=6;«, l3=0x07}
0x0c02…0c0c Line {l1=0x08, l2=» REPEAT«, l3=0x08}
0x0c0c…0c23 Line {l1=0x15, l2=» GOTOXY(S,24);«, l3=0x15}
0x0c23…0c5d Line {l1=0x38, l2=» IF AFRUND THEN WRITE(ROUND((S-FX+4)/SX)*1.0:9:3)«, l3=0x38}
0x0c5d…0c84 Line {l1=0x25, l2=» ELSE WRITE((S-FX+4)/SX:9:3);«, l3=0x25}
0x0c84…0c96 Line {l1=0x10, l2=» S:=S+10;«, l3=0x10}
0x0c96…0ca5 Line {l1=0x0d, l2=» UNTIL S>70;«, l3=0x0d}
0x0ca5…0caf Line {l1=0x08, l2=» R:=10;«, l3=0x08}
0x0caf…0cc8 Line {l1=0x17, l2=» (* LODRETTE LINIER *)«, l3=0x17}
0x0cc8…0cd2 Line {l1=0x08, l2=» REPEAT«, l3=0x08}
0x0cd2…0ce1 Line {l1=0x0d, l2=» S:=1;«, l3=0x0d}
0x0ce1…0cf1 Line {l1=0x0e, l2=» REPEAT«, l3=0x0e}
0x0cf1…0d0d Line {l1=0x1a, l2=» GOTOXY(R,S);«, l3=0x1a}
0x0d0d…0d28 Line {l1=0x19, l2=» WRITE('ø');«, l3=0x19}
0x0d28…0d3f Line {l1=0x15, l2=» S:=S+1;«, l3=0x15}
0x0d3f…0d54 Line {l1=0x13, l2=» UNTIL S=24;«, l3=0x13}
0x0d54…0d66 Line {l1=0x10, l2=» R:=R+10;«, l3=0x10}
0x0d66…0d77 Line {l1=0x0f, l2=» UNTIL R = 80;«, l3=0x0f}
0x0d77…0d94 Line {l1=0x1b, l2=» (* ENHEDER PAA Y-AKSEN *)«, l3=0x1b}
0x0d94…0d9d Line {l1=0x07, l2=» R:=2;«, l3=0x07}
0x0d9d…0da7 Line {l1=0x08, l2=» REPEAT«, l3=0x08}
0x0da7…0dbd Line {l1=0x14, l2=» GOTOXY(1,R);«, l3=0x14}
0x0dbd…0ddd Line {l1=0x1e, l2=» WRITE( (R-FY)/SY:9:3);«, l3=0x1e}
0x0ddd…0dee Line {l1=0x0f, l2=» R:=R+5;«, l3=0x0f}
0x0dee…0dfd Line {l1=0x0d, l2=» UNTIL R>23;«, l3=0x0d}
0x0dfd…0e1d Line {l1=0x1e, l2=» (* UDTEGNING AF KURVERNE *)«, l3=0x1e}
0x0e1d…0e35 Line {l1=0x16, l2=» FOR KURVE:=1 TO N DO«, l3=0x16}
0x0e35…0e52 Line {l1=0x1b, l2=» FOR PKT:=1 TO ANTPKT DO«, l3=0x1b}
0x0e52…0e5d Line {l1=0x09, l2=» BEGIN«, l3=0x09}
0x0e5d…0e83 Line {l1=0x24, l2=» XP:=ROUND(SX*X(PKT,KURVE) + FX);«, l3=0x24}
0x0e83…0ea2 Line {l1=0x1d, l2=» IF XP>80 THEN XP:=80 ELSE«, l3=0x1d}
0x0ea2…0ebd Line {l1=0x19, l2=» IF XP<1 THEN XP:=1;«, l3=0x19}
0x0ebd…0ee3 Line {l1=0x24, l2=» YP:=ROUND(SY*Y(PKT,KURVE) + FY);«, l3=0x24}
0x0ee3…0f02 Line {l1=0x1d, l2=» IF YP>23 THEN YP:=23 ELSE«, l3=0x1d}
0x0f02…0f1d Line {l1=0x19, l2=» IF YP<1 THEN YP:=1;«, l3=0x19}
0x0f1d…0f31 Line {l1=0x12, l2=» GOTOXY(XP,YP);«, l3=0x12}
0x0f31…0f4a Line {l1=0x17, l2=» WRITE(TEGN(KURVE));«, l3=0x17}
0x0f4a…0f54 Line {l1=0x08, l2=» END;«, l3=0x08}
0x0f54…0f65 Line {l1=0x0f, l2=» GOTOXY(1,23);«, l3=0x0f}
0x0f65…0f6d Line {l1=0x06, l2=» END;«, l3=0x06}
0x0f6d…0f80 00 00 44 20 4b 4f 4f 52 44 49 4e 41 54 45 52 20 28 58 28 ┆ D KOORDINATER (X(┆
0x0f80…0fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ┆ ┆
[…0x1e…]
0x1360…1380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 45 ┆ E┆