📄 test2.pas
字号:
{以下程序模拟磁盘移臂调度的最短寻找时间优先调度算法,要访问的柱面号用链表表示,
请将程序填写完整}
program magnetic_disc_dispatch1(input,output);
type
link=^track; {指向柱面的指针}
track=record
next:link; {指向下一个柱面的指针}
n:integer; {柱面号}
end;
var
p,q,p1,p2:link; {p:第一个结点,p1:当前结点,p2:前一个结点}
run:0..1;
sign,min,number,current:integer;
{sign:柱面所处位置的方向,1:柱面号大于等于当前位置,-1:柱面号小于当前位置}
{min:要访问的柱面与当前位置的最短距离}
function getsign(x:integer):integer;
begin
if x>=0 then getsign:=1 else getsign:=-1
end;
begin
write('请输入移动臂当前位置:');
readln(current);
p:=nil;
run:=1;
while run=1 do
begin
repeat
repeat
write('请输入要访问的柱面号(-1表示结束):');
readln(number);
if number<>-1 then
begin
new(q);
q^.n:=number;
q^.next:=p;
p:=q;
end;
until number=-1;
if p<>nil then
begin
min:=abs(p^.n-current);
sign:=getsign(p^.n-current);
p1:=p;
{确定最短距离,并把处在最短距离上的柱面号从链表中删除(可能不止一个),
注意最短距离的方向,显示要访问的柱面号,改变移动臂的当前位置}
{填写程序段}
while(p1^.next<>nil) do
begin
p1:=p1^.next;
if(abs(p1^.n-current)<min) then
begin
min:=abs(p1^.n-current);
sign:=getsign(p1^.n-current);
end;
end;
if sign=1 then
current:=current+min
else
current:=current-min;
writeln('要访问的柱面号为:',current);
p1:=p;
while(p1<>nil) do
begin
if(p1^.n=current) then
begin
if p1=q then
begin
p:=p^.next;
p1:=p;
end
else
begin
p2^.next:=p1^.next;
p1:=p2
end;
end;
p2:=p1;
p1:=p1^.next;
end;
end;
until p=nil;
write('是否继续运行(0:结束,1:继续)?');
readln(run);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -