Je passe de C# à Delphi 2009, je l'aime beaucoup jusqu'à présent. J'ai écrit une procédure de recherche binaire, qui fonctionne très bien. J'ai ajouté une simple instruction if-else à la fin de mon proc et elle ne tire tout simplement pas! Je ne vois rien de mal à cela et je suis gêné de devoir dire que je suis coincé. S'il vous plaît aider!Pourquoi mon instruction "if" semble-t-elle ne pas fonctionner?
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;
Il est celui if A[mid] = x then
qui ne se déclenche pas. Lorsque le débogage ne déclenche ni branches vraies ni fausses, le débogueur saute juste au-dessus d'elles. Aussi le if 54 = 65 then
qui est juste un test fait la même chose.
Le si à l'intérieur de ma boucle de répétition fonctionne bien cependant.
Si je copie le problème if instruction dans un mini proc de test, puis appelez le proc cela fonctionne, donc ça me fait penser qu'il est quelque chose d'autre dans le proc comme un ;
manquant causant quelque chose d'étrange, mais je ne le vois pas . S'il vous plaît aider!
Comme rslt n'est jamais utilisé ailleurs que dans l'instruction d'affectation, le compilateur Delphi supprime ce fragment de code dans le cadre des optimisations. Il n'a pas d'impact sur le code source, n'écrit simplement pas ce code dans le fichier objet. Vous avez probablement un compilateur avertissant que la variable rslt n'est jamais utilisée ... – Sparky
Bienvenue dans StackOverflow, et à Delphi. –
Juste un conseil, vous n'avez pas besoin d'une paire begin-end dans une boucle repeat-until. – Todd