Я схожу с C# до Delphi 2009, мне это очень нравится.Почему мой оператор «if» не запускается?
Я написал двоичную процедуру поиска, которая отлично работает. Я добавил простую инструкцию if-else в конце моей программы, и она просто не срабатывает! Я не вижу ничего плохого в этом, и мне стыдно говорить, что я застрял. Пожалуйста помоги!
procedure BinSearch;
var
min,max,mid, x: integer;
A : array[0..4] of integer;
rslt : integer;
begin
writeln('binary search');
A[0] := 34; A[1] := 65; A[2] := 98; A[3] := 123; A[4] := 176;
listarray(a);
x := 62;
min := 0;
max := 4;
repeat
begin
mid := (min + max) div 2;
if x > A[mid] then
min := mid + 1
else
max := mid - 1;
end;
until (A[mid] = x) or (min > max);
writeln(mid);
writeln(a[mid]);
if A[mid] = x then
rslt := mid
else
rslt := not mid;
if 54 = 65 then
rslt := mid
else
rslt := not mid;
end;
Это if A[mid] = x then
тот, который не срабатывает. при отладке ни истинных, ни ложных ветвей огонь, отладчик просто проскакивает прямо над ними. Также if 54 = 65 then
, который является просто тестом, делает то же самое.
Если внутри цикла повтора работает нормально.
Если я копирую проблему с выражением в мини-тест proc, а затем вызываю proc, это заставляет меня думать, что это что-то еще в proc, как отсутствует ;
, вызывающее что-то странное, но я не вижу его , Пожалуйста помоги!
Поскольку rslt никогда не используется нигде, кроме оператора присваивания, компилятор Delphi удаляет этот фрагмент кода как часть оптимизации. Это не влияет на исходный код, просто не записывает этот код в объектный файл. Вероятно, вы получили предупреждение компилятора о том, что переменная rslt никогда не используется ... – Sparky
Добро пожаловать в StackOverflow и в Delphi. –
Просто подсказка, вам не нужна пара начального конца в цикле повторения. – Todd