Estoy desertando de C# a Delphi 2009, me está gustando mucho hasta ahora.¿Por qué mi instrucción "if" parece no ejecutarse?
Escribí un procedimiento de búsqueda binaria, que funciona bien. ¡Agregué una instrucción if-else simple al final de mi proceso y simplemente no se dispara! No veo nada malo en ello y me da vergüenza tener que decir que estoy atascado. ¡Por favor ayuda!
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;
Es la if A[mid] = x then
uno que no se disparará. cuando la depuración de las ramas verdaderas o falsas no se dispara, el depurador se salta directamente sobre ellas. También el if 54 = 65 then
que es solo una prueba hace lo mismo.
Sin embargo, si dentro de mi bucle de repetición funciona bien.
Si copio el problema si la instrucción en un mini proc prueba, y luego llamo al proc funciona, entonces me hace pensar que es algo diferente en el proceso como ;
haciendo que algo extraño suceda pero no puedo verlo . ¡Por favor ayuda!
Dado que rslt nunca se usa en ningún otro lugar que no sea la declaración de asignación, el compilador Delphi elimina ese trozo de código como parte de las optimizaciones. No afecta el código fuente, simplemente no escribe ese código en el archivo objeto. Probablemente tenga un compilador advirtiendo que la variable rslt nunca se usa ... – Sparky
Bienvenido a StackOverflow, y a Delphi. –
Solo un consejo, no necesita un par de inicio y final en un ciclo de repetición hasta que se repita. – Todd