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];
Длину строки подставьте какую надо.
Удачи!

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

Как задать двумерный динамический массив в Паскале?
Двумерные массивы Паскаля – матрицы
Двумерный массив в Паскале трактуется как одномерный
подробнее...

Pascal ABC. Массив с неизвестным количеством элементов.
Это твоя программа, только чуть-чуть подправленная…подробнее...

как задать массив?
При таком описании границы указывать обязательно. Можно написать переменную n, но с условием, что
подробнее...

Pascal. Двумерный массив
Доброго времени суток.

>> var
>> n,i: integer;
>> mas: array
подробнее...

Паскаль. Подскажите по готовому коду программы.
program qq;
uses crt;
var i,j,summ:integer;
a:array[1..6,1..6] of integer;подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Object Pascal VRR
как задать длину массива с клавиатуры. pascal
Имеется в виду динамические массивы?

Для объявления массивов, для которым зарание известен
подробнее...

delphi - как написать функцию, которая возвращает массив?
Опиши свой ТИП динамического массива. Тогда проще:

type
RealArray = array of
подробнее...
спросили в Free Pascal
Как из массива удалить элемент?
Судя по твоим предыдущим вопросам, язык Паскаль. Ну так вот, для обычного массива это невозможно.
подробнее...
Динамический массив на Википедии
Посмотрите статью на википедии про Динамический массив
 

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

Имя*

E-mail:*

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