⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test2.pas

📁 存储分区的可变管理
💻 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 + -