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

Как на паскале будет - создать масив, чтобы в дальнейшем можно было задать его размерность?

var i,j: integer;
var A: array [i,j] of integer;

begin
Write('Введите размерность: строк -');

readln(j);

Write('столбцов: ');
readln(i);

readkey;
exit;

end.

вот так не катит=(
Доброго времени суток.

Нет в ТР динамических массивов, это так, но можно решить эту проблему.

{$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,Size : 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 { Lines }
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 612
Лучший ответ
В turbo паскале нету динамических массивов. Т. е. так как описано - не сделать. В Delphi появились дин. массивы. Там для задания размера есть ф-ция SetLength
ПМ
Павел Мамцев
40 192
Надо работать с динамической памятью.
Type m=array[1..100,1..100] of integer;
var a:m;
i,j,n,m:integer;
begin
writeln('vvedite razmer matrici');
readln(n,m); {razmer matrici budet n*m; n - строк, m - столбцов}
writeln('vvedite elementi matrici');
for i:=1 to n do
for j:=1 to m do
readln(a[i,j]);
...

Похожие вопросы