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

Как задать массив с неизвестным окончанием типа а[1..n,1..k] в паскале?

Доброго времени суток

Вот пример программы, реализующей динамический массив. Правда, эжто не совсем динамический массив в полном смысле этого термина, т. к. он не позволяет изменять свой размер. Для примера приведена процедура поиска минимумов в статическом и динамическом массивах.

Согласен с EVG OWS в том, что для работы таким образом требуются специальные знания. Кроме того, необходим навык работы с указателями. И, скорее всего, избыточность при отсутствии таких знаний лучший выход. Но, поскольку вопрос прозвучал, привожу решение.

program MinIntDyn;
uses Crt;

{$R-} {отключаем проверку компилятором границ массива}

type
arrInt = array[1..1] of Integer; {массив из 1 элемента}
arrIntPtr=^arrInt;

var
a : arrIntPtr; {указатель на динамический массив}
c : array[1..10] of Integer; {статический массив}
n,j,L : Integer; {вводимый размер массива}

{находит минимальное значение в динамическом массиве}
function MinDynArray(arr: arrIntPtr; Size: Integer): Integer;
var
k, MinN : Integer;
begin
MinN := MaxInt;
for k:=1 to Size do if MinN > arr^[k] then MinN := arr^[k];
MinDynArray := MinN;
end;

begin
ClrScr;

{вводим размер массива}
Write('Введите размер массива : ');
ReadLn(n);

{выделяем под него память}
GetMem(a, n * SizeOf(Integer));

{заполняем массивы значениями}
for j:=1 to n do a^[j] := j; {в целях контроля элемент равен индексу}
for j:=1 to 10 do c[j] := j;

{проверяем массивы}
for j:=1 to n do Write(a^[j] :4); WriteLn;
for j:=1 to 10 do Write(c[j] :4); WriteLn;

{ищем минимум в массиве с}
L := MaxInt;
for j:=1 to 10 do if L > c[j] then L := c[j];

{добавляем минимумы динамических массивов}
L := L + MinDynArray(a,n) + MinDynArray(b,m);

WriteLn('Результат вычислений : ', L);

{освобождаем память, занятую массивами}
FreeMem(a, n * SizeOf(Integer));

ReadLn; {задержка}
end.

Двухмерный массив строится аналогично.

Это один путь. Вторым является построение массива на основе динамических связанных списков.

Удачи!
Риан Мензуллов
Риан Мензуллов
59 612
Лучший ответ
Динамический массив, вы имеете в виду?
Это не лучший вариант, если вы не знаете механизмов распределения памяти.
Лучше создайте избыточный массив
Серый Ха-Ха-Ха Спасибо за ответ а можете прокомментировать что такое избыточный массив? Или если можно ссылку на умную книгу?

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