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

⟦2e33e96b6⟧

    Length: 15328 (0x3be0)
    Notes: Mikados TextFile, Mikados_K
    Names: »LPBPLOT«

Derivation

└─⟦8e9939517⟧ Bits:30005293 LPBPLOT/SPANALYS/MONST80 - Gymnasieelevdiskette
    └─ ⟦this⟧ »LPBPLOT« 

Text

    PROGRAM LPBPLOT; (*BR-06.12.82*)
 
     TYPE PARMARRAY=PACKED ARRAY(1..39) OF CHAR;
 
      VAR PARAM:^PARMARRAY;
          TPFIL:FILE OF REAL;
          TMIN,TMAX,SMIN,SMAX,SKALAX,SKALAY,X1CM,Y1CM:REAL;
          AFSTAND,HØJDE,ACC,V0:REAL;
          XMIN,XMAX,XNUL,YMIN,YMAX,YNUL,I,X,Y:INTEGER;
          ANTAL,DATASTART,J,ØVNR:INTEGER;
          FILID,POINT,TEXTX,TEXTY,KODENAVN,DELTAGER:STRING;
          NAVN:STRING(5);
          FILNAVN:STRING(8);
          DISK,TEGN:STRING(1);
          RUNDATO:STRING(10);
          RUNTID:STRING(8);
 
    FUNCTION GETPR(PRINTER:INTEGER):BOOLEAN; EXTERNAL;
 
    PROCEDURE FREEPR; EXTERNAL;  (*$P*)
 
 
 
    PROCEDURE SCALE(DATAMIN,DATAMAX:REAL;VAR SKALAFORHOLD:REAL;
                    VAR AKSELÆNGDE,ORIGO:INTEGER);
 
      VAR DIFFERENS,FACT:REAL;
 
    BEGIN  (*SCALE*)
      IF (DATAMAX>=0) AND (DATAMIN<=0) THEN DIFFERENS:=DATAMAX-DATAMIN;
      IF (DATAMAX>0) AND (DATAMIN>=0) THEN
      BEGIN
        DIFFERENS:=DATAMAX; DATAMIN:=0;
      END;
      IF (DATAMAX<=0) AND (DATAMIN<0) THEN
      BEGIN
        DIFFERENS:=-DATAMIN; DATAMAX:=0;
      END;
      SKALAFORHOLD:=AKSELÆNGDE/DIFFERENS;
      FACT:=1;
      IF SKALAFORHOLD >= 10 THEN
        BEGIN
          REPEAT
            SKALAFORHOLD:=SKALAFORHOLD/10;
            FACT:=FACT*10;
          UNTIL SKALAFORHOLD <= 10
        END;
      IF SKALAFORHOLD < 1 THEN
        BEGIN
          REPEAT
            SKALAFORHOLD:=SKALAFORHOLD*10;
            FACT:=FACT/10;
          UNTIL SKALAFORHOLD >= 1
        END;
      IF (SKALAFORHOLD >= 1) AND (SKALAFORHOLD < 2) THEN             
        SKALAFORHOLD:=1;
      IF (SKALAFORHOLD >= 2) AND (SKALAFORHOLD < 5) THEN       
        SKALAFORHOLD:=2;
      IF (SKALAFORHOLD >= 5) AND (SKALAFORHOLD < 10) THEN        
        SKALAFORHOLD:=5;
      SKALAFORHOLD:=SKALAFORHOLD*FACT;
 
      IF DATAMIN=0 THEN ORIGO:=0 
      ELSE ORIGO:=100*(1+TRUNC(-SKALAFORHOLD*DATAMIN/100));
      AKSELÆNGDE:=100*(1+TRUNC(SKALAFORHOLD*DIFFERENS/100));
      IF (DATAMIN<0) AND (DATAMAX>0) THEN AKSELÆNGDE:=AKSELÆNGDE+100;
    END;  (*SCALE*)     (*$P*)
 
 
 
    PROCEDURE LÆSFILTOP;
 
    BEGIN  (*LÆSFILTOP*)
      NAVN:='DDMMA';
      WRITE('INDTAST FILNAVN  :  LPB'); EDIT(NAVN);
      FILNAVN:=CONCAT('LPB',NAVN);
      DISK:='3';    
(*    WRITE('INDTAST PLADE NO.:  LPB',NAVN,':P'); EDIT(DISK); *)
      FILID:=CONCAT(FILNAVN,':P',DISK);        
 
      RESET(TPFIL,FILID);
 
      GET(TPFIL); ANTAL:=ROUND(TPFIL^);
      GET(TPFIL); DATASTART:=ROUND(TPFIL^);
 
      SEEK(TPFIL,3);
      RUNDATO:=''; TEGN:=' ';                      (*LÆS DATO FOR KØRSEL*)
      FOR I:=1 TO 10 DO          
      BEGIN
        GET(TPFIL); TEGN(1):=CHR(ROUND(TPFIL^));    
        RUNDATO:=CONCAT(RUNDATO,TEGN);
      END;
 
      SEEK(TPFIL,13);
      RUNTID:=''; TEGN:=' ';                        (*LÆS TID FOR KØRSEL*)
      FOR I:=1 TO 8 DO          
      BEGIN
        GET(TPFIL); TEGN(1):=CHR(ROUND(TPFIL^));    
        RUNTID:=CONCAT(RUNTID,TEGN);
      END;
 
      SEEK(TPFIL,21);
      GET(TPFIL); ØVNR:=ROUND(TPFIL^);
      GET(TPFIL); AFSTAND:=TPFIL^;
      GET(TPFIL); HØJDE:=TPFIL^;
 
      SEEK(TPFIL,24);
      GET(TPFIL); TMIN:=TPFIL^;
      GET(TPFIL); TMAX:=TPFIL^;
      GET(TPFIL); SMIN:=TPFIL^;
      GET(TPFIL); SMAX:=TPFIL^;
 
      WRITELN('DATO FOR KØRSEL  : ',RUNDATO);
      WRITELN('TID FOR KØRSEL   : ',RUNTID);
(*    WRITELN('ANTAL SAMPLES    = ',ANTAL:5);           *)
(*    WRITELN('TID-MIN          = ',TMIN:9:3,' SEK.');  *)
(*    WRITELN('TID-MAX          = ',TMAX:9:3,' SEK.');  *)
(*    WRITELN('STED-MIN         = ',SMIN:9:3,' M');     *)
(*    WRITELN('STED-MAX         = ',SMAX:9:3,' M');     *)
 
      CLOSE(TPFIL);
 
    END;  (*LÆSFILTOP*)   (*$P*)
 
 
 
    PROCEDURE PLOTHEAD;
 
    BEGIN  (*PLOTHEAD*)
      WRITELN(LIST,';:HOA 205,112 O ');                  (*DEF. ORIGIN*)
      WRITELN(LIST,'250,1810 ');
      WRITELN(LIST,'S12,DATO ',RUNDATO,'   TID: ',RUNTID,'   FILNAVN: _ ');
      WRITELN(LIST,'S12,',FILNAVN:8,'   DELTAGERE: ',PARAM^:35,'_ ');       
      WRITELN(LIST,'2650,1500 ');
      WRITELN(LIST,'S22,FORS0G PAA SKRAA LUFTPUDEBANE    0V. NR. ',ØVNR,'_ ');
 
    END; (*PLOTHEAD*) (*$P*)
 
 
 
    PROCEDURE PLOTAKSE;
 
    BEGIN (*PLOTAKSE*)
      WRITELN(LIST,XNUL,',',YMIN,' D ',XNUL,',',YMAX,' U '); (*Y-AKSE*) 
      TEXTY:='STED /m';    
      WRITELN(LIST,XNUL-50,',',YMAX+50,' S12,',TEXTY,'_ ');
 
      WRITELN(LIST,XMIN,',',YNUL,' D ',XMAX,',',YNUL,' U '); (*X-AKSE*)
      TEXTX:='TID /s';                                         
      X:=XMAX-100*(1+TRUNC(LENGTH(TEXTX)/4)); 
      WRITELN(LIST,X,',',YNUL+30,' S12,',TEXTX,'_ ');
 
      WRITELN(LIST,XNUL,',',YNUL,' O ');                 (*NYT ORIGIN*)   
 
 DELAY(800);
      Y:=YMIN-100; J:=YMAX DIV 100;
      FOR I:=0 TO J DO
      BEGIN
        Y:=Y+100;
        WRITELN(LIST,XNUL-10,',',Y,' D ',XNUL+10,',',Y,' U ');
      END;
DELAY(800);
      WRITELN(LIST,XNUL-160,',',YNUL+85,' S12,',Y1CM:5:2,'_ ');
      IF (YMAX-YNUL)>=500 THEN
      BEGIN
        J:=(YMAX-YNUL) DIV 500;
        FOR I:=1 TO J DO
        BEGIN
          Y:=YNUL+500*I-15;
          WRITELN(LIST,XNUL-160,',',Y,' S12,',5*I*Y1CM:5:2,'_ ');
        END;
      END;
DELAY(800);
      X:=XMIN-100; J:=XMAX DIV 100;
      FOR I:=0 TO J DO        
      BEGIN
        X:=X+100;
        WRITELN(LIST,X,',',YNUL+10,' D ',X,',',YNUL-10,' U ');
      END;
DELAY(800);
      WRITELN(LIST,XNUL+40,',',YNUL-60,' S12,',X1CM:5:2,'_ ');
      IF (XMAX-XNUL)>=500 THEN
      BEGIN
        J:=(XMAX-XNUL) DIV 500;
        FOR I:=1 TO J DO
        BEGIN
          X:=XNUL+500*I-60;
          WRITELN(LIST,X,',',YNUL-60,' S12,',5*I*X1CM:5:2,'_ ');
        END;
      END;
DELAY(800);
    END; (*PLOTAKSE*) (*$P*)
 
 
 
    PROCEDURE PLOTDATA;
 
    BEGIN (*PLOTDATA*)
      RESET(TPFIL,FILID);
      SEEK(TPFIL,DATASTART);
      FOR I:=1 TO ANTAL DO
      BEGIN
        GET(TPFIL); X:=ROUND(SKALAX*TPFIL^);
        GET(TPFIL); Y:=ROUND(SKALAY*TPFIL^);
        WRITELN(LIST,' ',X,',',Y,' M21');
      END;
      CLOSE(TPFIL);
    END; (*PLOTDATA*) (*$P*)
 
 
 
PROCEDURE REGRESSION(VAR A,B:REAL);
 
      VAR T,S,SX2,SX3,SX4,SXY,SX2Y,NÆVNER,TÆLLERA,TÆLLERB:REAL;
 
BEGIN
  SX2:=0; SX3:=0; SX4:=0; SXY:=0; SX2Y:=0;
 
  RESET(TPFIL,FILID);
  SEEK(TPFIL,DATASTART);
  FOR I:=1 TO ANTAL DO
  BEGIN
    GET(TPFIL); T:=TPFIL^;
    GET(TPFIL); S:=TPFIL^;
    SX2:=SX2+T*T;
    SX3:=SX3+T*T*T;
    SX4:=SX4+T*T*T*T;
    SXY:=SXY+T*S;
    SX2Y:=SX2Y+T*T*S;
  END;
  CLOSE(TPFIL);
 
  NÆVNER:=SX2*SX4-SX3*SX3;
  TÆLLERA:=SX2*SX2Y-SX3*SXY;
  TÆLLERB:=-SX3*SX2Y+SX4*SXY;
  A:=2*TÆLLERA/NÆVNER;
  B:=TÆLLERB/NÆVNER;
END; (*REGRESSION*)  (*$P*)
 
 
 
PROCEDURE PLOTREGR;
 
      VAR T,S,DELTAT:REAL;                                 
          YMIN1,YMAX1:INTEGER;
 
BEGIN   (*PLOTREGR*)
  YMIN1:=-50; YMAX1:=1800;
  T:=TMIN;
  S:=0.5*ACC*T*T+V0*T;
  X:=ROUND(SKALAX*T);
  Y:=ROUND(SKALAY*S);
  IF Y<YMIN1 THEN WRITELN(LIST,'U ',X,',',YMIN1,' ');
  IF Y>YMAX1 THEN WRITELN(LIST,'U ',X,',',YMAX1,' ');
  IF (Y>=YMIN1) AND (Y<=YMAX1) THEN WRITELN(LIST,'U ',X,',',Y,' ');
  DELTAT:=(TMAX-TMIN)/100;
  T:=TMIN-DELTAT;
DELAY(800);
  FOR I:=0 TO 100 DO
  BEGIN
    T:=T+DELTAT;
    S:=0.5*ACC*T*T+V0*T;
    X:=ROUND(SKALAX*T);
    Y:=ROUND(SKALAY*S);
    IF Y<YMIN1 THEN WRITELN(LIST,'U ',X,',',YMIN1,' ');
    IF Y>YMAX1 THEN WRITELN(LIST,'U ',X,',',YMAX1,' ');
    IF (Y>=YMIN1) AND (Y<=YMAX1) THEN WRITELN(LIST,'D ',X,',',Y,' ');
  END;
 
  WRITELN(LIST,'U 250,1650 S12,BEDSTE FIT:_ ');                      
  WRITELN(LIST,'U 250,1550 S12, S = 0.5_ ');
  WRITELN(LIST,'R 5,12 S12,._ -5,-12 S12,A_ 5,12 S12,._ -5,-12 ');
  WRITELN(LIST,'S12,T_ 0,30 S11,2_ 0,-30 ');
  WRITELN(LIST,'S12,+Vo_ 5,12 S12,._ -5,-12 S12,T_ A ');
  WRITELN(LIST,'U 250,1450 S12, A = ',ACC:6:3,' m/s_ ');   
  WRITELN(LIST,'R 0,20 S11,2_ 0,-20 A ');
  WRITELN(LIST,'U 250,1350 S12,Vo = ',V0:6:3,' m/s_ ');
 
END; (*PLOTREGR*)  (*$P*)
 
 
 
PROCEDURE SLUT;
 
BEGIN
  CLEARSCREEN;
  FREEPR;
  WRITELN('                            *** SLUT ***');
  EXIT(PROGRAM);
END; (*SLUT*)  (*$P*)
 
 
 
PROCEDURE PRINTRESERV(N:INTEGER);
 
      VAR READY:BOOLEAN;
 
BEGIN
  REPEAT
    READY:=GETPR(N);
    IF NOT READY THEN    
    BEGIN
      WRITELN(CHR(7),'PRINTER ',N,' ER IKKE PARAT !');
      DELAY(500); WRITE(CHR(11));
    END;
  UNTIL READY OR EOF(OUTPUT);
  IF EOF(OUTPUT) THEN SLUT;
  WRITELN;
  WRITELN('PRINTER ',N,' ER RESERVERET DENNE KØRSEL');
END;  (*PRINTRESERV*)  (*$P*)
 
 
 
PROCEDURE PRINTHEAD;
 
  VAR BLANK:STRING;
 
BEGIN (*PRINTFILTOP*)
 
  RESET(TPFIL,FILID);
 
  GET(TPFIL); ANTAL:=ROUND(TPFIL^);         (*LÆS ANTAL SÆT DATA REC.*)
  GET(TPFIL); DATASTART:=ROUND(TPFIL^);(*REC. NO. FOR FØRSTE DATA REC.*)
 
  SEEK(TPFIL,3);
  RUNDATO:=''; TEGN:=' ';                      (*LÆS DATO FOR KØRSEL*)
  FOR I:=1 TO 10 DO          
  BEGIN
    GET(TPFIL); TEGN(1):=CHR(ROUND(TPFIL^));    
    RUNDATO:=CONCAT(RUNDATO,TEGN);
  END;
 
  SEEK(TPFIL,13);
  RUNTID:=''; TEGN:=' ';                        (*LÆS TID FOR KØRSEL*)
  FOR I:=1 TO 8 DO          
  BEGIN
    GET(TPFIL); TEGN(1):=CHR(ROUND(TPFIL^));    
    RUNTID:=CONCAT(RUNTID,TEGN);
  END;
 
  SEEK(TPFIL,21);
  GET(TPFIL); ØVNR:=ROUND(TPFIL^);
  GET(TPFIL); AFSTAND:=TPFIL^;
  GET(TPFIL); HØJDE:=TPFIL^;
 
  BLANK:=''; TEGN:=' ';
  FOR I:=1 TO 20 DO BLANK:=CONCAT(BLANK,TEGN);
  WRITELN(LIST,BLANK,'FORSØG PÅ SKRÅ LUFTPUDEBANE         ØV.NR.: ',ØVNR);
  WRITELN(LIST,BLANK,'***************************');
  WRITELN(LIST); WRITELN(LIST);
  FOR I:=21 TO 32 DO BLANK:=CONCAT(BLANK,TEGN);
  WRITELN(LIST,'        DELTAGERE:',BLANK,'FORSØGET UDFØRT');
  WRITELN(LIST,'        ',PARAM^,'   ','DATO   : ',RUNDATO);
  FOR I:=33 TO 50 DO BLANK:=CONCAT(BLANK,TEGN);
  WRITELN(LIST,BLANK,'TID    : ',RUNTID); WRITELN(LIST);
  WRITELN(LIST,BLANK,'DATA LAGRET PÅ');
  WRITELN(LIST,BLANK,'FILNAVN: ',FILNAVN);
  WRITELN(LIST); WRITELN(LIST);
  WRITE(LIST,'        KLODSENS HØJDE:          h = ');                  
  WRITELN(LIST,HØJDE*100:7:2,' cm');
  WRITELN(LIST);
  WRITE(LIST,'        AFST. MELLEM LPB"s BEN:  L = ');                    
  WRITELN(LIST,AFSTAND*100:6:1,'  cm');
  CLOSE(TPFIL);
END; (*PRINTHEAD*)  (*$P*)
 
 
 
PROCEDURE PRINTDATA;
 
  VAR T,S,V,G:REAL;
      LINIE:STRING;                      
 
BEGIN
  RESET(TPFIL,FILID);
  WRITELN(LIST); WRITELN(LIST);
  LINIE:=      '            I-------------I-------------I-------------I';
  WRITELN(LIST,LINIE);
  WRITELN(LIST,'            I    TID T    I   STED S    I   HAST. V   I');
  WRITELN(LIST,'            I     (s)     I     (m)     I    (m/s)    I');
  WRITELN(LIST,LINIE);
 
  I:=23;                             (*LINIE NUMMER PÅ SKRIVER UDSKRIFT*)
 
  SEEK(TPFIL,DATASTART);
  FOR J:=1 TO ANTAL DO
  BEGIN
    GET(TPFIL); T:=TPFIL^;
    GET(TPFIL); S:=TPFIL^;
    V:=ACC*T+V0;
    WRITELN(LIST,'            I',T:9:3,'    I',S:9:3,'    I',V:9:3,'    I');
    WRITELN(LIST,LINIE);
    I:=I+2;          
    IF I>=65 THEN
    BEGIN                         (*DER SKIFTES SIDE FOR HVER 65 LINIER*)
      PAGE(LIST);
      I:=0;
    END;
  END;               
 
  WRITELN(LIST); WRITELN(LIST);
  WRITELN(LIST,'        BEDSTE FIT:  V = A*T+Vo;    S = 0.5*A*T^2+Vo*T');
  WRITELN(LIST);
  WRITELN(LIST,'                     A =         ',ACC:7:3,' m/s^2');
  WRITELN(LIST);
  WRITELN(LIST,'                    Vo =         ',V0:7:3,' m/s');
  WRITELN(LIST);
  IF HØJDE>0.001 THEN
  BEGIN
    G:=ACC*AFSTAND/HØJDE;
    WRITELN(LIST,'        TYNGDEACC.:  g = A*L/h = ',G:6:2,'  m/s^2');
  END;
 
  CLOSE(TPFIL);
  PAGE(LIST);
 
END; (*PRINTDATA*)     (*$P*)
 
 
 
    BEGIN  (*LPBPLOT*)
      CLEARSCREEN;
      GOTOXY(30,5); WRITELN('*** LPBPLOT ***');
      WRITELN;
 
      LÆSFILTOP;
 
      XMAX:=2700; XMIN:=0;
      YMAX:=1800; YMIN:=0;
      SCALE(TMIN,TMAX,SKALAX,XMAX,XNUL);
      SCALE(SMIN,SMAX,SKALAY,YMAX,YNUL);
 
      X1CM:=100/SKALAX;                                       
      Y1CM:=100/SKALAY;                                     
      WRITELN('1CM-X            = ',X1CM:9:3,' SEK.');
      WRITELN('1CM-Y            = ',Y1CM:9:3,' M');
      WRITELN('LÆNGDE AF X-AKSE = ',XMAX DIV 100:9,' CM');
      WRITELN('LÆNGDE AF Y-AKSE = ',YMAX DIV 100:9,' CM');
      WRITELN('ORIGOS PLACERING :');
      WRITELN('X-ORIGO          = ',XNUL DIV 100:9,' CM');
      WRITELN('Y-ORIGO          = ',YNUL DIV 100:9,' CM');
 
      PRINTRESERV(2);
      WRITELN; WRITELN('PLOTTEREN STARTER, NÅR DU TRYKKER PÅ "RETURN"');
      READLN;
 
      PLOTHEAD;
 
      PLOTAKSE;
 
      PLOTDATA;
 
      KODENAVN:='BJØRN';
 
      DELTAGER:='';
      FOR I:=1 TO LENGTH(KODENAVN) DO DELTAGER:=CONCAT(DELTAGER,'X');
      MOVELEFT(PARAM^,DELTAGER(1),LENGTH(KODENAVN));
 
      IF DELTAGER=KODENAVN THEN            
      BEGIN
        REGRESSION(ACC,V0);
        PLOTREGR;
        WRITELN(LIST,' H @');
        FREEPR; WRITELN('PRINTER 2 ER FRIGJORT');
        PRINTRESERV(1);
        PRINTHEAD;
        PRINTDATA;
        FREEPR; WRITELN('PRINTER 1 ER FRIGJORT');
      END 
      ELSE
      BEGIN
        WRITELN(LIST,' H @');
        FREEPR; WRITELN('PRINTER 2 ER FRIGJORT');
      END;
      WRITELN;
      WRITELN('                         *** END LPBPLOT ***');
    END. (*LPBPLOT*)