КАТЕГОРИИ: Архитектура-(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; Просмотров: 898; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |