Другие языки программирования и технологии

Pascal. Двумерный массив

Как создать двумерный массив [1..n, 1..n]. С произвольным вводом переменной n?
Доброго времени суток.

>> var
>> n,i: integer;
>> mas: array [1..n,1..n] of integer;

Компилятор не пропустит такого безобразия, Grand...

А если по сути дела, то Krab Bark совершенно правильно предложил. Позволю себе продемонстрировать пример с динамическим выделением памяти.

{отключаем проверку компилятором границ массива. Необходимо для дин. массивов в Турбо Паскале}
{$R-}
type
MyType = Word; {для примера тип данных матрицы - беззнаковое целое}

PMyVector = ^MyVector;

{"строка" динамической матрицы}
MyVector = Array[1..1] of MyType;

MyArrayPtr = ^MyArray;

{сама матрица - представляется как массив указателей на "строки"}
MyArray = Array[1..1] of PMyVector;

var
DynamicArray : MyArrayPtr; {указатель на матрицу}
Count, i, j : Word;

begin
Write('Число элементов массива: ');
ReadLn(Count); {это ваша размерность матрицы}

{выделяем память под указатели на "строки"}
GetMem(DynamicArray, Count * SizeOf(PMyVector));

{и для каждой "строки" - выделяем память для хранения данных}
for i := 1 to Count do
GetMem(DynamicArray^[ i ], Count * SizeOf(MyType));

for i:=1 to Count do {Rows}
for j:=1 to Count do {Columns}
{немного изменяется способ обращения к элементу матрицы}
DynamicArray^[ i ]^[j] := i * j; {присвоение значений элементам}

{вывод на экран для проверки}
for i:=1 to Count do begin
WriteLn;
for j:=1 to Count do Write(DynamicArray^[ i ]^[ j ]:4);
end;

{освобождаем память в обратном порядке: }
{сначала - удаляем все "строки"}
for i := 1 to Count do
FreeMem(DynamicArray^[ i ], Count * SizeOf(MyType));

{а теперь и указатели на них ...}
FreeMem(DynamicArray, Count * SizeOf(PMyVector));
end.

Удачи!
Денис Гуща
Денис Гуща
59 613
Лучший ответ
Галымжан Калданов Сложновато. Но все равно спасибо. Хотя мне почему-то кажется что решение другое, попроще. Т.к. "вспоминаю" самое начало паскаля. Попробую разобраться некуда деваться )
Создать массив с запасом по емкости или использовать динамическое выделение памяти.
Галымжан Калданов Нужно чтобы n с клавы вводилась... ее значение будет использоваться в дальнейшем
program asdf;
var
n,i: integer;
mas: array [1..n,1..n] of integer;
begin
writeln( 'введите размер массива');
readln(n);
for i:=1 to n do
begin

тут массив вводим.. .

end;
end.

я точно не помню как, уже пол года паскаль не изучал.
Галымжан Калданов Как раз так я и пробовал ((

n,i: integer;
mas: array [1..n,1..n] of integer; // тут ошибка n не задано
Ну если было просто и в начале курса, то
const
n = 10;
var
a:array[0..n, 0..n] of ...;

Но динамические массивы явно лучше