Dynamiczna tablica Delphi (Delphi 7 vs Seattle)

0

Na wstępie dodam, że jestem kompletnym newbie jeśli chodzi o język Delphi. Zderzyłem się z nim niedawno i jako kompilatora do pracy używałem najnowszej (jeśli się nie mylę) wersji wypuszczonej przez Embarcadero (10 Seattle). Z pewnych przyczyn musiałem dziś przesiąść się na komputer z zainstalowanym Delphi7. Okazało się, że w gruncie rzeczy wszystko śmiga, poza drobnym szczegółem. Z marszu tworzyłem wcześniej tablice jak na przykładzie poniżej:

table: array of double;
...
for z:=0 to 100 do
begin
  k:=z;
  l:=funkcja(z+1);
  table:=[k,l];
end;

podczas kompilacji w 7ce od razu wyskakuje error: [Error] xxx.pas(40): Ordinal type required, w linii wstawiania wartości do elementów tablicy (table:=[k,l];). Z czym to się wiąże i jak najlepiej, najprościej to obejść (najchętniej na przykładzie jaki podałem)?

1

Dla tablicy jednowymiarowej:

var
table: array of double;
z: Integer;
begin
  setlength(table,100);
  for z:=0 to length(table) -1 do
    table[z] := funkcja_zwwracajaca_double(z+1);
end;

dla dwówymiarowej musisz zdeklarować array of array of double i odpowiedniego setlengtha ustawić oraz podwójną pętlę.

1
table:=[k,l];

@Golden - masz potworny błąd składniowy, dlatego kompilator pokazuje w tej linii błąd; Table to macierz, więc aby wpisać liczbę do danej komórki, musisz podać jej indeks w nawiasach kwadratowych:

table[{index}] := {value};

W miejscu {index} wstaw numer komórki, a w miejscu {value} podaj liczbę - wtedy kod będzie składniowo prawidłowy;

Edit: I tak jak @woolfik pokazał, zanim użyjesz macierzy dynamicznej, najpierw musisz określić jej rozmiar za pomocą procedury SetLength; W przeciwnym razie operować będziesz na zerowej macierzy, co spowoduje pojawienie się błędów podczas działania programu, o dostępie do niezarezerwowanej pamięci.

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