Jak zadeklarować dwuwymiarową tablicę?

0

mam taką tablicę

12 |  18  |  22   |   26   |   28  |  32   | 34  | 36   |  50 
16           23                       33           37 

jak widać składa się z dwóch wierszy, z tym że niektóre mają jeden element a niektóre dwa

i próbuję napisać funkcję która jako parametr dostaje tablicę tablic

zadeklarowałem sobie typ

type array_of_array_of_Byte = array of array of Byte;
function moja_funkcja(lista_wartosci:array_of_array_of_Byte)

a wywołuję funkcję tak:

moja_funkcja([[12,16],[18],[22,23],[26],[28],[32,33],[34],[36,37],[50]])

ale dostaję błąd: Ordinal type required
Co robię źle?

2

w tych pustych polach musisz mieć null'a lub 0 lub cokolwiek

2
My Razem napisał(a):

i próbuję napisać funkcję która jako parametr dostaje tablicę tablic

No to najpierw się zdecyduj — chcesz mieć tablicę dwuwymiarową, czy tablicę tablic?

Tak, to dwie różne rzeczy, do dwóch różnych zastosowań. Tablica dwuwymiarowa zawsze jest spójnym blokiem pamięci i każdy wiersz w niej istniejący ma tyle samo kolumn (tak po ludzku pisząc). Można je stosować zarówno do deklaracji tablic o rozmiarze statycznym, jak i dynamicznym.

Natomiast tablica tablic, to — jak sama nazwa wskazuje — tablica jednowymiarowa, której każda komórka zawiera tablicę jednowymiarową. Taki cudak nie jest jednym wielkim i spójnym blokiem pamięci, każda komórka głównej tablicy może posiadać tablicę o różnej wielkości. Głównie stosuje się to w przypadku tablic o większej liczbie wymiarów, w której każda osadzona tablica może zmieniać rozmiar w runtime.

ale dostaję błąd: Ordinal type required

Jeśli dostajesz błąd kompilacji, to bądź łaskaw nie tylko podać jego treść, ale też podać treść linijki, której on dotyczy, a także numeru znaku (albo inaczej miejsca, do którego IDE przenosi ci kursor tekstowy).

Co robię źle?

Nie wiem, we Free Pascalu kompiluje się i działa poprawnie (zawartość tablicy dla wywołania przekleiłem z twojego posta):

type
  T2DArrayOfByte = array of array of Byte;

  procedure Foo(const AArray: T2DArrayOfByte);
  begin
    // do something
  end;

begin
  Foo([[12,16],[18],[22,23],[26],[28],[32,33],[34],[36,37],[50]]);
end.

Może ten błąd dotyczy zupełnie innej linijki, niezwiązanej z tymi tablicami. :D

0

W Delphi XE się nie kompiluje. Kompilator zaznacza linię gdzie jest wywołanie procedury, a konkretnie tę tablicę parametrów.

0

Stwórz pusty projekt programu kontrolowego, wklej do niego kod z mojego posta i skompiluj. Również pownien pojawić się błąd kompilacji, więc w następnym poście wklej pełny kod tego programiku oraz pełną treść błędu (razem z nazwą pliku, numerem linii i znaku).

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