我在SCILAB中写了一个SSTF磁盘调度算法的代码,在运行过程中,在正确显示前3个值(41,34,11)后,它总是显示头部在-1。谁能告诉我代码中的问题是什么?我也试着给出不同的if条件,但也没有给出正确的输出。
clear
clf;
seek = 0
x = 8
l = list(176,60,79,92,114,11,34,41)
head = 50
mi = 1
for j = 1:x
for i=1:x
if (l(i)~=(-1))then
if( abs(head - l(i)) < abs(head -l(mi))) then
mi = i
end
end
end
seek = seek + abs(head - l(mi))
head = l(mi)
h(j) = head
se(j) = seek
mprintf('Head is at %i and seek is %i\n',head,seek)
l(mi) = -1
end
plot(h,se)
scatter(h,se)
你的问题是前3次迭代后,head=11比60更接近-1。将-1替换为%nan
(不是一个数字),因此这个值不会被当作最接近当前头的值。此外,通过使用一个向量而不是列表,你可以删除内循环,我使用的是 max
clear
l = [176,60,79,92,114,11,34,41];
head = 50;
seek = 0;
for j = 1:8
[step,im] = min(abs(head - l));
seek = seek + step;
head = l(im);
mprintf('Head is at %i and seek is %i\n',head,seek);
l(im) = %nan;
h(j) = head
se(j) = seek
end
clf
handle = plot(h,se)
scatter(h,se)
你会得到以下输出。
Head is at 41 and seek is 9
Head is at 34 and seek is 16
Head is at 11 and seek is 39
Head is at 60 and seek is 88
Head is at 79 and seek is 107
Head is at 92 and seek is 120
Head is at 114 and seek is 142
Head is at 176 and seek is 204