|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 5888 (0x1700)
Types: TextFile
Names: »XRAY.PAS«
└─⟦ba3b4f658⟧ Bits:30003088 Xray: elevopgave i Pascal, feb 92
└─⟦this⟧ »XRAY.PAS«
program RONT; (* jan 1992 *)
(*$I xybasis *)
(*$I xyfysik *)
(*$I xygraf *)
(* programmet kan kun compiles til en com-fil, det er for stort. *)
const d =201.38;
VAR datafil : file of real;
dobvink,antal,i,j,k,minv,maxv,hold : integer;
impuls,vinkel,deltavinkel,tid,l,xmax,ymax : real;
ch,slet : char;
z : intarray;
x,y : realarray;
filnavn : string(.8.);
svar : char;
filfejl : boolean;
BEGIN
write(chr(12));
gotoxy(10,5);write('Angiv et navn til datafilen : ');
repeat
gotoxy(45,5);write(' ');
gotoxy(45,5);readln(filnavn);
assign(datafil,filnavn+'.DAT');
(*$I-*) reset(datafil);(*$I+*)
filfejl:=iores>0;
if filfejl then begin
gotoxy(10,7);
write('Skal en ny fil oprettes (J/N) ? ');
repeat
read(kbd,svar);
until svar in (.'J','j','N','n'.);
if svar in (.'J','j'.) then begin
(*$I-*) rewrite(datafil);(*$I+*)
if iores>0 then
writeln('Ikke mere plads på disketten!!')
else
filfejl:=false;
end;
end;
until not filfejl;
write(chr(12));
REPEAT
WRITE(CHR(12));
WRITELN(' **** RØNTGENSPEKTRUM ****');WRITELN;
writeln(' 0) Slette gamle datafiler.');writeln;
WRITELN(' 1) Optage oversigtspektrum (0.50 grader)');
writeln;
writeln(' 2) Optage finspektrum (0.25 grader)');
writeln;
writeln(' 3) Udskrive data på SKÆRM.');
writeln;
writeln(' 4) Udskrive data på PRINTER.');
writeln;
writeln(' 5) Tegning af graf på plotter.');writeln;
writeln(' 6) Stop.');
writeln;
write(' Vælg et tal (0,1,2,3,4,5,6) --> ');
repeat read(KBD,ch) until ch in (.'0'..'6' .);writeln(ch);
CASE ch OF
'0' : begin
write(chr(12));
gotoxy(10,10);
write('Er det ok at slette gamle data? (J/N)');
repeat read(KBD,slet) until slet in (.'J','j','N','n'.);
if slet in (.'J','j'.) then begin
rewrite(datafil);
close(datafil);
end;
end;
'1','2' : BEGIN
if ch='1' then deltavinkel:=0.5 else deltavinkel:=0.25;
write(chr(12));
if length(datafil)>2 then begin
reset(datafil);
read(datafil,tid,deltavinkel);
writeln('Datafilen indeholder ',length(datafil)-2,' måletal');
writeln;
end else begin
write(' Angiv mindste vinkel for måling (helt tal) '); readln(minv);
write(' Angiv største vinkel for måling (helt tal) '); readln(maxv);
writeln;
write(' Angiv tælletiden i sekunder ( helt tal ) ');readln(tid);
writeln;
rewrite(datafil); write(datafil,tid,deltavinkel);
end;
tristate;
writeln;
writeln(' Tryk på en tast hver gang en ny måling skal laves.');
writeln;
vinkel:=minv;
repeat
write(' Vinkel :',vinkel:6:2);
read(KBD,ch);
impulsclk(z,round(tid));
impuls:=0;
for j:=0 to round(tid)-1 do impuls:=impuls+z(.j.);
writeln(' Antal impulser :',impuls:8:0);
reset(datafil); seek(datafil, length(datafil) );
write(datafil,vinkel,impuls);
close(datafil);
vinkel:=vinkel+deltavinkel;
until vinkel>maxv;
tristate;
end;
'3' : BEGIN
reset(datafil);read(datafil,tid,deltavinkel);
write( chr(12) ); writeln; writeln; writeln;
writeln(CON,' Tælletid :',tid:5,' sekunder.');
writeln(CON);
writeln(CON,' Vinkel Bølgelængde Impulser');
writeln(CON,' =================================');
writeln(CON);
WHILE NOT EOF(datafil) DO BEGIN
READ(datafil,vinkel,impuls);
l:=2*d*sin(vinkel*PI/180);
writeln(CON,vinkel:11:2,l:12:1,impuls:13:0);
END;
close(datafil);
writeln; writeln('Tast <RETUR> '); readln( ch );
END;
'4' : BEGIN
reset(datafil);read(datafil,tid,deltavinkel);
writeln(LST,' Tælletid ',tid:5:0,' sekunder ');
writeln(LST);
writeln(LST,' Vinkel Bølgelængde Impulser');
writeln(LST,' =================================');
writeln(LST);
WHILE NOT EOF(datafil) DO BEGIN
READ(datafil,vinkel,impuls);
l:=2*d*sin(vinkel*PI/180);
writeln(LST,vinkel:11:2,l:12:1,impuls:13:0);
END;
close(datafil);
END;
'6' : (* så stopper vi *) ;
'5' : begin
reset(datafil);read(datafil,tid,deltavinkel);antal:=0;
while not eof(datafil) do begin
read(datafil,vinkel,impuls);
l:=2*d*sin(vinkel*pi/180);
x(.antal.):=l;y(.antal.):=impuls;
antal:=antal+1;
end;
close(datafil);
ymax:=0;
for i:=0 to antal-1 do
if ymax<y(.i.) then ymax:=y(.i.);
xmax:=x(.antal-1.);
for i:=0 to antal-1 do
if xmax<x(.i.) then xmax:=x(.i.);
plotstart;
tegnkurve(x,y,antal,0,xmax,0,ymax);
plotslut;
end;
END;
UNTIL ch = '6';
END.
«eof»