Professional Documents
Culture Documents
звіт лаба 14
звіт лаба 14
Кафедра САПР
Контрольна робота 1, 2
З премету «Основи алгоритмізації та програмування»
Виконала:
студентка групи КН-15
Пука А. М.
Прийняв:
доцент Марікуца У.Б.
ЛЬВІВ 2015
Теоритичні відомості
Над динамічним рядком найчастіше виконуються такі операції:
Найчастіше ці операції подаються у вигляді функції або процедур. Застосування функцій та процедур простіше
в динамічних рядках з ланкою-заголовком, оскільки, як перша, так і наступні літери рядка формуються і
обробляються за однаковими правилами.
а)
б)
Рис. 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) вказівник на наступну ланку.
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. ВИСНОВОК