Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Динамічні масиви




Одновимірний динамічний масив описують так:

Var <назва_масиву>: array of <тип>;

<Назва_масиву> – це спеціальний покажчик, який містить адресу байта, починаючи з якого розміщуються елементи масиву. Якщо місце під масив ще невиділене, то він має значення nil. До цього покажчика не можна застосовувати операцію рознайменування і процедури виділення/звільнення пам'яті.

Наприклад:

Var A: array of integer;

оголошує змінну А як динамічний масив цілих чисел.

При описі динамічного масиву місце у пам'яті для нього ще не виділяється. Розміщення динамічного масиву в пам'яті реалізо­вується процедурою SetLength, якій передаються два аргументи назва масиву та кількість елементів, наприклад:

SetLength(А, 15);

виділяє для А місце у динамічній пам'яті під 15 цілих чисел і задає нульові значення усім його елементам.

Індекси динамічного масиву - це завжди цілі числа, що починаються з нуля. Отже, у наведеному прикладі масив містить елементи А[0], А[1],...,А[14 ].

 

Повторне застосування SetLength до розміщеного у пам'яті динамічного масиву змінює його розміри. Якщо нове значення розміру є більшим за попереднє, то всі значення елементів зберігаються і до кінця масиву додаються нові нульові елементи. Якщо нове значення розміру є меншим за попереднє, то масив зберігає значення тільки перших елементів згідно з новим розміром, а решта видаляються.

 

Якщо динамічний масив уже розміщений у пам'яті, то до нього можна застосовувати стандартні функції Length - довжина масиву, High - найбільше значення індексу (Length=High-l) і Low - найменше значення індексу (завжди 0).

 

Видалити з пам'яті динамічний масив можна одним з цих засобів: присвоїти йому значення nil, використати функцію finalize, або встановити нульову довжину.

Тому ці оператори є еквівалентними:

A:=nil;

Finalize (а);

SetLength (А, 0);

Приклад 6:

Використання динамічного масиву при розв’язуванні задачі знаходження максимального та мінімального елементів масиву.

Program Max_Min;

Const

nmax = 30;

Type

vect=array of real;

Var

a: vect;

min, max: real;

i, n, kmin, kmax: byte;

Begin

repeat

write('Kilkist chysel<=30:');

read(n);

until n<=nmax;

 

SetLength(a, n);

Writeln(‘Chysla: ');

for i:=0 to n-1 do read(a[i]);

 

kmin:=0; kmax:=0;

for i:=l to n-1 do begin

if a[kmin]>a[i] then kmin:=i;

if a[kmax]<=a[i] then kmax:=i

end;

min:= a[kmin]; max:= a[kmax];

 

write(max,min);

for i:=0 to n-1 do write(a[i]:6:2,' ');

 

SetLength(a, 0);

readln(n)

end.

 

 

Багатовимірний динамічний масив визначають як динамічний масив динамічних масивів від динамічних масивів і т.д., як-от:

Var A2: array of array of integer;

описано двовимірний динамічний масив.

Розмістити багатовимірний динамічний масив у пам'яті можна за допомогою процедури SetLength, якій передаються аргументи: назва масиву та декілька розмірів. Наприклад, оператор SetLength(А, 3, 4) задає матрицю з трьох рядків та чотирьох стовпців.

Приклад.

Використання динамічної матриці (Знаходження суми елементів матриці).

Program Sum_dyn_matr;

Const

nmax = 10;

Type

matr=array of array of real;

Var

a: matr; i, j, n: 0..nmax-l;

s: real;

Begin

repeat

write(‘Rozmir n<=10:');

read(n);

until n<=nmax;

 

SetLength(a,n,n);

for i:=0 to n-1 do

for j:=0 to n-1 do a[i,j]:=random*10; s:=0;

for i:=0 to n-1 do

for j:=0 to n-1 do s:=s+a[i,j];

Write('s= ', s:8:3); readln(n);

End.

 

Можна створювати і непрямокутні масиви, у яких другий розмір змінюється залежно від номера рядка.

Приклад.

Створення і заповнення нижньої трикутної матриці:

Program Low_matr;

Uses SysUtils;

Var

A:array of array of string;

i,j:integer;

Begin

setlength(a,10);

for i:=low(a) to high(a) do

begin

setlength(a[i],i);

for j:=low(a[i]) to high(a[i]) do begin

a[i,j]:=inttostr(i)+’,’+inttostr(j)+’ ‘;

write(a[i,j]),’ ‘)

end;

writeln;

end;

readln

End.

 




Поделиться с друзьями:


Дата добавления: 2013-12-12; Просмотров: 874; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.