在scilab的if-else条件中出现的问题

问题描述 投票:0回答:1

我在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)
scilab
1个回答
1
投票

你的问题是前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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.