Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
53
Добавлен:
06.02.2018
Размер:
8.07 Кб
Скачать

1.Мета роботи

Мета роботи – ознайомитись із особливостями застосування динамічних об’єктів, методів формування і обробки динамічних рядків. Набути практичних навичок програмування з використанням динамічних об’єктів.

2.Теоретичні відомості

1. Що таке динамічний об’єкт?

Динамічними називаються такі програмні об’єкти, які виникають під час виконання програми, або розмір яких визначається чи змінюється під час виконання програми.

2. Як подаються динамічні об’єкти у мові Паскаль?

При описі змінної вказівникового типу вона не вказує на жодний програмний об’єкт, лише вводить у використання статичну змінну (наприклад: P, Q, AM, BM) вказівникового типу. Тобто по цьому опису транслятором лише виділяється місце у пам’яті машини, необхідне для розміщення вказівника. Для породження самого динамічного об’єкта є стандартна процедура NEW (“новий”). У операторі виклику процедури задається один фактичний параметр – вказівникова змінна породжуваного об’єкта. Наприклад: NEW(P); NEW(Q); У результаті виконання цієї процедури породжується новий об’єкт такоготипу, який вказаний при описі вказівникової змінної. Для змінної Р –динамічний об’єкт цілого типу; для змінної Q – динамічний об’єкт, елементами якого є символ. Змінним P та Q присвоюється вказівник на ці породжені об’єкти. Тобто у пам’яті машини резервується місце для породженого об’єкта, а адреса початку цього місця присвоюється змінним P та Q.

3. Що таке тип вказівника?

При породженні динамічного об’єкта, йому не присвоюється ще ніякого

значення. Для того, щоб динамічній змінній присвоїти якесь значення або вико-

ристати це значення, вводиться поняття “змінна з вказівником”. У найпростішому випадку – це ім’я змінної вказівникового типу після якого стоїть стрілка, тобто: Р↑ – це значення того програмного об’єкта, на який вказує вказівниковазмінна Р.

6. Які операції виконуються над значеннями вказівникового типу?

Основне правило: над значеннями вказівникового типу не можна виконувати ніяких операцій, які давали б результат цього самого типу. Значення вказівникового типу – це адреса тих чи інших програмних об’єктів і змінювати її на свій розсуд не можна, оскільки розміщенням усіх об’єктів у пам’яті машини займається транслятор.

До значень вказівникового типу можуть застосовуватись деякі операції порівняння, а також вони можуть бути операндами в операторі присвоювання.

7. Як знищується динамічний об’єкт?

На рис. 1 та 2 видно, що після того, як виконали оператор:

P := D

об’єкт 5 став недопустимим для програми, але в оперативній пам’яті залишився. Це так зване “сміття”, яке забиває оперативну пам’ять. Тому такі об’єкти необхідно знищувати. Для знищення динамічних об’єктів існує стандартна процедура DISPOSE. Параметром цієї процедури є вказівник на об’єкт, який необхідно знищити:

DISPOSE (P);

Після виконання цієї команди динамічний об’єкт, на який вказує вказівник Р, перестає існувати, місце, яке він займав у пам’яті, звільняється, а значення вказівникової змінної Р стає невизначеним. Процедура DISPOSE знищує тільки сам об’єкт, але не вказівник на нього.

8. Як можна подати рядок за допомогою динамічних об’єктів?

Під рядком (або словом) розуміють упорядковану послідовність символів конкретного алфавіту.

Рядок може бути поданий у вигляді масиву – тобто статичного об’єкта.

Наприклад, слово “АЛГОРИТМ” можна подати у вигляді вектора

ARRAY [1..10] OF CHAR.

Під час роботи з рядком найчастіше здійснюються такі три операції:

1) пошук входження заданого символу в рядок;

2) вставка заданого символу у вказане місце рядка;

3) видалення заданого символу із вказаного місця рядка.

Оскільки доступ до кожного елемента рядка, описаного як вектор, здійснюється через індекс цього елемента, то для процедури вставки необхідно спочатку розсунути рядок і лише після цього вставити потрібний елемент. Тобто усі елементи масиву, які розміщені після вставленої літери, необхідно пронумерувати індексом на одиницю більшим від попереднього.

9. Що таке рядок із ланкою-заголовком?

Іншими словами опис рядка (ланцюжка) містить два поля: в першому – записані символи ланцюжка (літери А, Л, Г, ...) а у другому – вказівник нанаступний елемент. Опис такого типу:

TYPE

ZV = ↑POINTER;

POINTER = RECORD

ELEM : CHAR;

NEXT : ZV

END;

Кожна ланка запису складається з двох полів: поле ELEM містить безпосередньо символьні елементи рядка, поле NEXT містить вказівник на наступний елемент.

При описі типу ZV ми порушили основне правило мови Паскаль: тип POINTER використовується до того, як описується. Це єдиний випадок, коли можна використовувати ім’я типу до його опису. Тільки у разі опису вказівникових типів допускається використання імені типу до його опису.

3.Індивідуальне завдання

27.Сформувати динамічний рядок із ланкою-заголовком, вивести його на друк. Перевірити, чи входить у цей рядок ідентифікатор “R0”.

4. Текст програми

program lab12(input, output);

uses crt;

type

zv=^pointer;

pointer=record

elem:char;

next:zv

end;

var

vlan, vslov:zv;

sym:char;

T:boolean;

i:integer;

begin

T:=False;

writeln('Введіть R0=');

read(sym);

new(vslov);

vslov^.next:=NIL;

vlan:=vslov;

repeat

read(sym);

new(vlan^.next);

vlan:=vlan^.next;

vlan^.elem:=sym;

vlan^.next:=nil

until sym = '.';

vlan:=vslov;

while vlan^.next<>nil do

begin

if (vlan^.elem='R') and

(vlan^.next^.elem='O') then

T:=TRUE;

vlan :=vlan^.next;

end;

writeln;

vlan:=vslov;

while vlan^.next<>nil do

begin

write(vlan^.elem);

vlan:=vlan^.next;

end;

writeln;

writeln(T);

end.

5.Висновки

На даній лабораторній роботі я ознайомилась із особливостями застосування динамічних об’єктів, методів формування і обробки динамічних рядків. Набула практичних навичок програмування з використанням динамічних об’єктів.

Соседние файлы в папке Програмування Pascal