проблема в условии if-else в scilab - PullRequest
1 голос
/ 26 апреля 2020

Я писал код алгоритма планирования диска SSTF в SCILAB, и во время работы после правильного отображения первых 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)

1 Ответ

1 голос
/ 27 апреля 2020

Ваша проблема в том, что после первых 3 итераций head = 11 ближе к -1, чем к 60. Замените -1 на %nan (не число), и в результате это значение никогда не будет принято как ближе всего к текущей голове. Более того, используя вектор вместо списка, вы можете удалить внутренний l oop my, используя 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

...