Автор 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];
Длину строки подставьте какую надо.
Удачи!
Как задать двумерный динамический массив в Паскале?
Двумерные массивы Паскаля – матрицы
Двумерный массив в Паскале трактуется как одномерный
подробнее...
Pascal ABC. Массив с неизвестным количеством элементов.
Это твоя программа, только чуть-чуть подправленная…
подробнее...
как задать массив?
При таком описании границы указывать обязательно. Можно написать переменную n, но с условием, что
подробнее...
Паскаль. Подскажите по готовому коду программы.
program qq;
uses crt;
var i,j,summ:integer;
a:array[1..6,1..6] of integer;
подробнее...
как задать длину массива с клавиатуры. pascal
Имеется в виду динамические массивы?
Для объявления массивов, для которым зарание известен
подробнее...
delphi - как написать функцию, которая возвращает массив?
Опиши свой ТИП динамического массива. Тогда проще:
type
RealArray = array of
подробнее...
Как из массива удалить элемент?
Судя по твоим предыдущим вопросам, язык Паскаль. Ну так вот, для обычного массива это невозможно.
подробнее...