Jak zadeklarować dwuwymiarową tablicę?

Jak zadeklarować dwuwymiarową tablicę?
MR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 119
0

mam taką tablicę

Kopiuj
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

Kopiuj
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:

Kopiuj
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?

woolfik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1611
2

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

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
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):

Kopiuj
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

MR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 119
0

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

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
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).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.