You are on page 1of 10

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”

Кафедра САПР

Контрольна робота 1, 2
З премету «Основи алгоритмізації та програмування»

Виконала:
студентка групи КН-15
Пука А. М.
Прийняв:
доцент Марікуца У.Б.

ЛЬВІВ 2015

Динамічні об’єкти складної структури


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

Теоритичні відомості
Над динамічним рядком найчастіше виконуються такі операції:

1. Пошук заданого елемента у рядку.

2. Вставка заданого елемента у певне місце рядка.

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

Найчастіше ці операції подаються у вигляді функції або процедур. Застосування функцій та процедур простіше
в динамічних рядках з ланкою-заголовком, оскільки, як перша, так і наступні літери рядка формуються і
обробляються за однаковими правилами.

ВСТАВКА ЗАДАНОГО ЕЛЕМЕНТА У ПЕВНЕ МІСЦЕ ДИНАМІЧНОГО РЯДКА

Схематично вставку елемента “S” після літери “А” наведено на рис. 1:

Рис. 1. Алгоритм вставки заданого елемента в динамічний рядок

Алгоритм вставки елемента містить такі етапи:


1) породити новий динамічний об’єкт Q;
2) у поле ELEM нового об’єкта записати літеру “S”, яку треба вставити;
3) у поле NEXT нового об’єкта записати вказівник, взятий з поля NEXT попереднього
елемента “А”;
4) у поле NEXT попереднього елемента “А” внести вказівник на елемент, що вставляється.
Цей алгоритм відображається процедурою:
PROCEDURE VST(LANKA : ZV; BUK : CHAR);
VAR Q : ZV;
BEGIN
NEW (Q);
Q.ELEM := BUK;
Q.NEXT := LANKA.NEXT;
LANKA.NEXT := Q
END;

ВИДАЛЕННЯ ЗАДАНОГО ЕЛЕМЕНТА

Алгоритм видалення елемента проілюстровано на рис. 2:

а)

б)
Рис. 2. Алгоритм видалення елемента з динамічного рядка
Розглянутий раніше рядок, зображений у вигляді ланцюжка символів, є частковим випадком лінійного
однонаправленого списку. Для рядка елементами є символи. Для однонаправленого списка –
елементами можуть бути значення будь-якого типу: дійсні числа, масиви, записи тощо.
Принцип організації та роботи з лінійним однонаправленим списком такий самий, як із рядком.
Кожен елемент, що входить у однонаправлений список, має вказівник на наступний елемент.
На практиці часто виникає потреба провести обробку попереднього елемента у списку. У
однонаправленому списку необхідно вертатися на початок рядка, переглянути всі елементи, до того,
який потрібний. Це незручно і нераціонально.
Тому для подібних задач доцільно створити двонаправлений список, тобто список, у якому можна
рухатися у двох напрямках: як вперед, так і назад .

ІНДИВІДУАЛЬНЕ ЗАВДАННЯ
1. Сформувати двонаправлений список і вставити перед кожною
літерою “S” номер її входження. Вивести обидва списки.
Текст програми :
program dvonapr(input, output);
uses crt;
type zv2 = ^point2;
point2 = record
elem : char;
next : zv2;
priv : zv2
end;
var
vslov, vlan, vlan1 : zv2;
sym : char;
procedure vstav(lanka : zv2; buk : char);
var q : zv2;
begin
new (q);
q^.elem := buk;
q^.next := lanka^.next;
q^.priv := lanka^.next^.priv;
lanka^.next^.priv := q;
lanka^.next := q
end;
procedure vudal(lanka : zv2);
var q : zv2;
begin
q := lanka;
lanka^.next^.priv := lanka^.priv;
lanka^.priv^.next := lanka^.next;
dispose(q)
end;
begin
var l:integer;
l:=1;
new(vslov);
vslov^.elem := 's';
vslov^.next := vslov;
vslov^.priv := vslov;
vlan := vslov;

repeat
read(sym);
vstav(vlan^.priv, sym)
until sym = '.';

vlan := vslov^.next;
while vlan <> vslov do
begin
while (vlan^.elem <> 'l') and (vlan <> vslov) do
vlan := vlan^.next;
if vlan <> vslov then
begin
while vlan^.priv^.elem in ['0'.. '9']do
vudal(vlan^.priv);
vlan := vlan^.next;
end;
end;

vlan := vslov^.next;
writeln;
while vlan <> vslov do
begin
write(vlan^.elem);
vlan := vlan^.next
end;
writeln
Динамічні об’єкти складної структури. Таблиці, бінарні
дерева

1. МЕТА РОБОТИ
Мета роботи – ознайомитись із особливостями побудови та застосування динамічних об’єктів
складної структури: таблиць і бінарних дерев; з операціями, які виконуються над елементами цих
об’єктів. Набути практичних навичок програмування з використанням динамічних об’єктів
складної структури зокрема бінарних дерева.

Теоретичні відомості:
Використання комп’ютерної техніки набуло широкого розповсюдження в Автоматизованих
інформаційно-пошукових системах (АІПС).
Основне завдання у разі створення таких систем полягає у тому, щоб організувати зберігання
великої кількості різних записів та видавати будь-який запис при запиті. Черги та стеки для такого
виду робіт не повною мірою задовольняють потреби.
При роботі з Автоматизованою інформаційно-пошуковою системою найчастіше
використовуються операції пошуку та видачі потрібного запису.
Для користувача складно вказувати адресу кожного запису, тому необхідно, щоб доступ до
кожного запису здійснювався за його іменем. Такі умови задовольняє структура даних, що
називається таблицею.
Таблиця – це набір іменованих записів. Ім’я запису в таблиці називається ключем.
Як ключ найчастіше використовуються або цілі додатні числа, або рядки символів однакової
довжини (оскільки над рядками визначені операції порівняння “більше”, “менше”).
Над таблицею виконуються такі операції:

1) пошук запису із заданим ключем;


2) вставка у таблицю запису із заданим ключем. Якщо запис з таким ключем вже існує, то
заміна запису на новий;
3) видалення запису із заданим ключем.
Найпростіший спосіб представлення таблиці – це однонаправлений список, кожна ланка
якого містить (рис. 1):

1) ключ;
2) текст запису;
3) вказівник на наступну ланку.

2. ЛАБОРАТОРНЕ ЗАВДАННЯ
Програма №1

Сформувати бінарне дерево з ключами вузлів: 70, 40, 54, 97, 36, 19, 84. Якщо це дерево є
збалансованим (тобто кількість гілок справа та зліва від кореня однакова), то логічній змінній L
присвоїти значення TRUE, якщо незбалансоване – FALSE.
Блок-схема:
Код програми:
program derevo;

label 1;
type
Der = ^pointer3;
Pointer3 = record
Kl: integer;
Pr, lv: der
End;

var
Vs, vl: der;
L: boolean;
k, j: integer;
kluth: integer;

begin
L := true;
k := 0;
j := 0;
writeln('Введіть на вибір корінь дерева (70, 40, 54, 97, 36, 19, 84)');
New(vs);
read(kluth);
Vs^.kl := kluth;
Vs^.pr := nil;
Vs^.lv := nil;
writeln('Введіть решту чисел крім кореня');
repeat
Readln(kluth);
if kluth > vs^.Kl then k := k + 1;
if kluth < vs^.Kl then j := j + 1;
Vl := vs;
1: while kluth > vl^.kl do
begin
if vl^.pr = nil then
begin
New(vl^.pr);
Vl := vl^.pr;
Vl^.kl := kluth;
vl^.pr := nil;
vl^.lv := nil;

end
else
vl := vl^.pr;

end;
while kluth < vl^.kl do
begin
if vl^.lv = nil then
begin
new(vl^.lv);
vl := vl^.lv;
vl^.kl := kluth;
vl^.pr := nil;
vl^.lv := nil;

end
else
vl := vl^.lv;

end;
if kluth > vl^.kl then goto 1
until eoln;
vl := vs;
if k = j then L := true
else
L := false;
writeln(L);
end.

Результати обчислень:

3. ВИСНОВОК

В ході виконання цієї лабораторної роботи я ознайомилася із особливостями побудови та


застосування динамічних об’єктів складної структури: таблиць і бінарних дерев; з операціями, які
виконуються над елементами цих об’єктів, набув практичних навичок програмування з
використанням динамічних об’єктів складної структури зокрема бінарних дерева.

You might also like