DataMuseum.dk

Presents historical artifacts from the history of:

MIKADOS

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about MIKADOS

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦3197bcb00⟧

    Length: 4992 (0x1380)
    Notes: Mikados TextFile, Mikados_K
    Names: »FFTPLOT«

Derivation

└─⟦d110b5765⟧ Bits:30005308 Eksamensopgave i dynamiske systemer med FFT
    └─ ⟦this⟧ »FFTPLOT« 

Text

    
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;