Dziwny problem z pętlami

0

Witam
Mam przedziwny problem w wykonywaniem się programu, a przynajmniej mi się on taki wydaje.
Najpierw wywoływana jest funkcja median_filter, a z niej wywoływana jest procedura sort_array, która ma za zadanie posortować wartości w tablicy buffor. Kiedy program wchodzi do procedury sortowania zmienne "i" oraz "j" zamiast przyjąć wartości równe zero mają wartość równą 9 :-/ nie wiem dlaczego tak jest, przecież przy takim wywołaniu pętli dla zmiennej "i" powinna być podstawiona wartość 0 i tak samo powinno być dla "j", a w moim przypadku zawsze jest 9. Z góry dziękuje dla wszystkich którzy będą mieli ochotę zerknąć na ten kod i coś mi podpowiedzieć. Pozdrawiam

procedure sort_array(var buf_to_sort: TArrayMask);
var
  value, i, j: Byte;  // zmienne pomocnicze
begin
  for i:=0 to 8 do
    for j:=0 to 8 do
      if buf_to_sort[j]>buf_to_sort[j+1] then
      begin
        value:= buf_to_sort[j];
        buf_to_sort[j]:= buf_to_sort[j+1];
        buf_to_sort[j+1]:= value;
      end;
end;
function median_filter(im_gray: TMyImage): TMyImage;
var
  h,w: Integer; // zmienne pomocnicze w zakresie h- wysokosc, w- szerokość bitmapy
  buffor: TArrayMask;  // przechowuje wartości aktualnie analizowanego piksela oraz pikseli z jego otoczenia
  temp_array: TMyImage; // pomocnicza tablica
begin
  Result:= im_gray;
  temp_array:= fill_edges(im_gray);
  for h := 1 to temp_array.array_height - 2 do
    for w := 1 to temp_array.array_width - 2 do
    begin
      buffor[0]:= temp_array.array_image[w-1][h-1];
      buffor[1]:= temp_array.array_image[w][h-1];
      buffor[2]:=temp_array.array_image[w+1][h-1];
      buffor[3]:= temp_array.array_image[w-1][h];
      buffor[4]:= temp_array.array_image[w][h];
      buffor[5]:=temp_array.array_image[w+1][h];
      buffor[6]:= temp_array.array_image[w-1][h+1];
      buffor[7]:= temp_array.array_image[w][h+1];
      buffor[8]:=temp_array.array_image[w+1][h+1];
      sort_array(buffor);
      Result.array_image[w][h]:= buffor[4];
    end;
end;
0

Hallo wardach!

wardach napisał(a)
...
procedure sort_array(var buf_to_sort: TArrayMask);
var
  value, i, j: Byte;  // zmienne pomocnicze
begin
  for i:=0 to 8 do
    for j:=0 to 8 do
      if buf_to_sort[j]>buf_to_sort[j+1] then
      begin
        value:= buf_to_sort[j];
        buf_to_sort[j]:= buf_to_sort[j+1];
        buf_to_sort[j+1]:= value;
      end;
end;
...
  1. Do czego ma sluzyc petla po "i"?
  2. Jak zdefiniowany jest typ TArrayMask?

Pozdrawiam
Markus
[???]

0

Po pierwsze ten sort masz jakiś dziwny. Działa Ci to? Nie lepiej używać standardowego?

procedure Sort(var A: array of Integer);
var
  I, J, T: Integer;
begin
  for I := Low(A) to High(A) - 1 do
    for J := High(A) downto I + 1 do
      if A[I] > A[J] then
      begin
        T := A[I];
        A[I] := A[J];
        A[J] := T;
      end;
end;

Po drugie, zapewne masz prawdopodobnie gdzieś zdefiniowane globalnie "i, j" które przybierają wartość 9.
W trakcie debugowania przy włączonej optymalizacji, dane lokalne "i, j" procedury sort są ignorowane, dlatego watch pokazuje Ci zawsze wartość 9.

1 użytkowników online, w tym zalogowanych: 0, gości: 1