Delphi i array czyli zgłupłem

0

Właśnie zdurniałem do reszty widząc zachowanie mojej aplikacji.
Otóż mam takie coś:

function TForm1.FUNKCJA(x,y:integer):TTable;  //x,y wartosci poczatkowe ; TTable to tablica kwadratowa 1..34 Boolowska
var
//myarr:array [1..40,1..40] of Boolean;
a,b:integer;
k:currency;
begin
  for a:=x to x+40 do
    begin
    for b:=y to y+40 do
      begin
      //obliczanie wartosci k
      if k=0 then myarr[a,b]:=true else myarr[a,b]:=false;
      {label1.Caption:=inttostr(a);
      label2.Caption:=inttostr(b);
      application.ProcessMessages;}
      end;
    end;
  result:=myarr;
end;

otóż tak...
wywaliłem zmienną myarr do deklaracji ogólnych i zadziałało, natomiast w sytuacji gdy była ona zadeklarowana w funkcji, czyli teoretycznie tak jak być powinno wówczas...

UWAGA:
"a" było stale równe 0 !!
"b" zmieniało się od 1 do 26... (w kółko na okrągło)

czy ktoś jest mi w stanie wytłumaczyć takie działanie apikacji?

1

Spójrzmy na ten kod...

function TForm1.FUNKCJA(x,y:integer):TTable;  //x,y wartosci poczatkowe ; TTable to tablica kwadratowa 1..34 Boolowska
var
//myarr:array [1..40,1..40] of Boolean;
a,b:integer;
k:currency;
begin
  for a:=x to x+40 do
    begin
    for b:=y to y+40 do
      begin
      //obliczanie wartosci k
      if k=0 then myarr[a,b]:=true else myarr[a,b]:=false;
      {label1.Caption:=inttostr(a);
      label2.Caption:=inttostr(b);
      application.ProcessMessages;}
      end;
    end;
  result:=myarr;
end;

Hm...
A co będzie, jeżeli X = 5 oraz Y = 5 ?
Wtedy będzie odwołanie do pola [45, 45], a takowe nie istnieje.
Jak ci się wydaje, co powinieneś zrobić ?
MyArr[A-X, B-Y]

0

masz rację, ale to wtedy nie da się przypisać bo będzie nie istniejące pole w tabeli i wywali błąd

a opisana sytuacja występuje dla 0,0

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