|
|
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 - metrics - download
Length: 15328 (0x3be0)
Notes: Mikados TextFile, Mikados_K
Names: »LPBPLOT«
└─⟦8e9939517⟧ Bits:30005293 LPBPLOT/SPANALYS/MONST80 - Gymnasieelevdiskette
└─⟦this⟧ »LPBPLOT«
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*)