Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Приклади програм з використанням масиву вказівників

Приклад 1:

Використання масиву вказівників:

 

Для визначення розміру ділянки пам'яті, яка необхідна для розміщення динамічної змінної певного типу, зручно користуватися функцією SizeOf (тип). Ця функція повертає кількість байтів, необхідних для розміщення значень вказаного типу (стандартного чи визначеного користувачем).

У Паскалі при розміщенні масиву в статичній пам'яті кількість елементів масиву, їхню впорядкованість і тип треба задавати явно до початку виконання програми. Тому, якщо границі масиву заздалегідь точно невідомі, то їх вибирають "із запасом" (це стосується переважно верхньої межі діапазону індексу). Якщо кількість елементів масиву n набагато менша за nmax, то певна частина пам'яті "простоює". Для малих значень nmax і n це не страшно, але ситуація змінюється, якщо ці значення є достатньо великими, а елементи масиву теж мають великі розміри.

Program Mas_P;

Const

nmax = 30;

Type

vect=array [1..nmax] of ^геаl;

Var

a: vect;

x: real;

i, n, kmin, kmax: byte;

Begin

repeat: // Введення кількості чисел

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

read(n);

until (n<=nmax) and (n>=l);

for i:=l to n do New(a[i]); //Виділення пам'яті для масиву

Writeln(‘Chysla: ');

for i:=l to n do геаd(а[і]^); // Введення чисел

kmin:=l; kmax:=l;

 

for і: =2 to n do // Пошук мінімум та максимуму

begin

if a[kmin]^>а[і]^ then kmin:=i;

if a[kmax]^<=а[і]^ then kmax:=i

end;

x:= а[kmin]^;

а[kmin]^:= а[kmax]^;

а[kmax]^:=х;

 

for i:=l to n do write (а [і]: 6: 2, ' '); // Виведення

readln(n);

 

for i:=l to n do Dispose (a[i]); // Звільнення пам' яті

End.

Масив покажчиків a на дійсні числа розміщується статично та займає фіксоване число байтів (nmax *4=30*4=120). Масив дійсних чисел розміщується у динамічній пам'яті та займає n*8 байтів..

Більшого ефекту в економії пам'яті можна досягнути, якщо використати типізований покажчик на масив дійсних чисел, який розмістимо в динамічній пам'яті за допомогою процедури GetMem.

Приклад 2:

Використання типізованого вказівника на масив:

Program Mas_TP;

Const

nmax = 30;

Type

vect=array [1..nmax] of real;

Var

p: ^vect;

x: real;

i, n, kmin, kmax: byte;

Begin

// Введення n

GetMem(p,n*SizeOf(real)); // Виділення пам'яті

Writeln('Chysla: ');

for i:=l to n do read(p^[i]);

kmin:=l; kmax:=l;

for і:=2 to n do

begin

if p^[kmin]>p^[і] then kmin:=i;

if p^[kmax]<=p^[i] then kmax:=i

end;

x:= p^[kmin];

p^[kmin]:=p^[kmax];

p^[kmax]:=х;

 

for i:=1 to n do write(p^[і]:6:2,' ');

FreeMem(p,n*SizeOf(real));

readln(n)

End.

 

<== предыдущая лекция | следующая лекция ==>
Рекурсивні типи даних | Приклади програм з використанням вказівників
Поделиться с друзьями:


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


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



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




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