kai.nbt,
Если создавать массив динамически разница есть.
Принцип такой. Объявляется указатель на "большой массив":
Код: Выделить всё
type tHugeArray : array [1..32767] of integer;
pDynamicArray : ^tHugeArray;
Затем, когда пользователь укзал размерность N, выделяешь сколько нужно памяти динамически:
pDynamicArray := GetMem (N * SizeOf (pDynamicArray^[1]));
(При этом еще надо помнить, что в Pascale ограничение: одним оператором GetMem нельзя выделить памяти больше 64 Kb)
Для двумерного массива ты не сможешь объявить такой "обстрактрный тип" и затем выделить ДВУМЕРНЫЙ массив. Хотя это можно смоделировать логически. Ведь что такое двумерный массив MxN ? Это те же (M * N) ячеек памяти, просто ты адресуешься к ним не "подряд" (одним инндексом), а двумя.
То есть, если пользоваель задал M и N, то можно выделить динамически одномерный массив:
pDynamicArray := GetMem (M * N * SizeOf (pDynamicArray^[1]));
А затем адресоваться к "логическому" элементу A
[j] как:
pDynamicArray [(i - 1) * M + j]
Invalid qualifier потому, что переменная B - параметр без типа, а в той строке попытка обратиться к ней как к массиву.