|
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: 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*)