Nie możesz użyć macierzy o znanym rozmiarze, jeśli jej rozmiar nie jest znany. Co więcej, w Pascalu nie ma czegoś takiego jak Variable Length Aarray, więc albo musisz określić stały rozmiar (znany już podczas kompilacji), albo skorzystać z macierzy dynamicznych.
W Twoim przypadku będzie to dynamiczna tablica tablic:
var
DynamicArray = array of array of Integer;
Po odczytaniu rozmiarów – przyjmijmy że do zmiennych Cols
oraz Rows
– używasz SetLength
:
SetLength(DynamicArray, Cols, Rows);
Napisz jeszcze o jakie Delphi chodzi, bo powyższy (trójargumentowy) zapis pseudoprocedury SetLength
może nie być dostępny. W takim przypadku trzeba będzie najpierw nadać rozmiar jednego wymiaru, a następnie w pętli ustawić rozmiar drugiego wymiaru, dla każdego wiersza z osobna.
@woolfik niżej potwierdził, że Delphi też wspiera ten zapis.
Zwróć też uwagę na kolejność Cols
i Rows
, jaką podałem wyżej. Pierwszy wymiar dotyczy kolumn, nie wierszy, bo zwykło się używać współrzędnych w kolejności [X,Y]
, gdzie X
określa położenie na osi poziomej (czyli numer kolumny), a Y
na pionowej (czyli numer wiersza).
Oczywiście można sobi przyjąć, że pierwszy wymiar dotyczy wierszy – byle stosować go wszędzie w kodzie i byle każdy pracujący przy tym kodzie wiedział, że takie są założenia.