pascal динамический массив



Автор Gloria Gainer задал вопрос в разделе Другие языки и технологии

Паскаль - массив нужно сделать динамическим!! и получил лучший ответ

Ответ от Gennady[гуру]
Доброго времени суток.
Вот примеры организации динамических массивов. Остальное сами.
{Вектор}
{$R-}
{ Отключаем проверку компилятором границ массива. Необходимо для дин. массивов в Турбо Паскале }
Type
MyType={здесь описываешь тип элемента массива, скажем} Word;
Type
MyArray=Array[1..1] of MyType; {Описываем массив всего из 1 элемента}
MyArrayPtr=^MyArray;
Var
DynamicArray: MyArrayPtr; {Это указатель на наш динамически массив}
Count, {Это вводимый размер массива}
I,Size: Word;
Begin
{Вводим размер массива}
Write('Число элементов массива: ');
ReadLn(Count);
{ выделяем под него память: Count x РазмерТипа }
Size:=Count*SizeOf(MyType);
GetMem(DynamicArray,Size);
{заполняем наш массив значениями}
For I:=1 to Count do DynamicArray^[ I ]:=I;
For I:=1 to Count do
Write(DynamicArray^[ I ]:4);
{освобождаем зарезервированную память для массива}
FreeMem(DynamicArray,Size)
End.
{Матрица}
{$R-}
Type
MyType = Word;
Type
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.
Для массива строк придется изменить объявление типа MyType= Word; на MyType= String[30];
Длину строки подставьте какую надо.
Удачи!

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Паскаль - массив нужно сделать динамическим!!
Динамический массив на Википедии
Посмотрите статью на википедии про Динамический массив
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*