You are on page 1of 55

Міністерство освіти та науки України

Національний університет «Львівська політехніка»,


Інститут комп’ютерних наук та інформаційних технологій,
Кафедра «Системи автоматизованого проектування»

Звіт
до лабораторного практикума
з курсу «Основи програмування. Частина 2»

Виконано: ст. гр. ФЛ-21


Стебівка Валентина Адамівна
Перевірено:
викл. каф. САП, Маркелов
Олександр Едуардович

Львів-2020
 Це пункти для самоаналізу студентом своїх навчальних рейтингів до кожної лаб.
 Якщо студент виконав пункти загальної підготовки до кожної із лаб.робіт, то може сам
собі для самоусвідомлення результативності порахувати рейтинги продуктивності
самостійної роботи.
 Викладач буде оцінювати працю студента протягом кожного заняття (чи то аудиторія, чи
то відео-кімната) і виставляє бали на активну участь на занятті й демонстрації студентом
результатів продуктивності на занятті.
Електронно-ПАПЕРОВИЙ ЗВІТ: Всього Мої
рейтин
Крок 1 Оформлення титульного аркушу та теоретичних відомостей (розгорнуті
відповіді на контрольні питання) на основі теорії підручника 2 __із

Крок 2 Текст своєї програми (рукописний чи друкований) розв’язку свого


__із
індивідуального завдання +1
Написання результатів обчислення (числа, графіки, таблиці) після __із
виконання програми або рисунки з екрану (Screens). +1
7
Крок 3 Рисунки блок-схем алгоритмів розв’язку свого індивідуального завдання
 на 25-60% (є правильні блоки, частково правильно з’єднані) 1 із 3
 на 61-94% (переважно правильно всі блоки, але з багатьма 2 із 3 __із
неправильними лініями)
 на 95-100% (правильні всі блоки, пару пропущених ліній ) +3 із 3

ПРАЦЮЄ на комп’ютері - НА ПАРІ в аудиторії (відео-кімнаті):


Крок 4 Відлагодження програми : набір тексту програми, перевірка опечаток,
помилки, запуск програми на виконання, введення різних варіантів
вхідних даних. (викладач підписується у звіті при демонстрації
студентом програми, набраної на комп’ютері)
3 __ із
 на екрані програма, але з багатьма опечатками і не працює 1 із 3
 на екрані програма, без опечаток але не працює, не зчитує, 2 із 3
зависає, не завжди правильно працює
 на екрані програма і все обчислює правильно при різних вх. даних +3 із 3

ТРЕНІНГ-захист:
Крок 5 Викладач придумує на парі НОВЕ завдання, студент до КІНЦЯ ПАРИ
розв’язує його. Пише текст програми до нового завдання, здати на
перевірку:
 нема помилок або дрібні опечатки +5 із 5
 є 2 незначні помилки і кілька опечаток але концепція програми 4 із 5
правильна і повна відповідно до завдання
 є правильна концепція структури тексту програми але є неповний 3 із 5 5
__ із
розв’язок чи кілька помилок, які частково змінюють хід розв’язку
 є лише окремі правильні елементи структури програми, які не 2 із 5
створюють уявлення про зв’язність складових програми (часткове
розв’язання завдання). Є значна кількість опечаток і помилок у
написанні команд
 є лише кілька правильних рядків програми, які характерні для 1 із 5
такого класу завдань. Спостерігається значна кількість помилок
ВСЬОГО саморейтинг: 15 __із 1
Список індивідуальних завдань
(генератор онлайн ВНС)
Лаб.8 завдання:
У заданому тексті замінити слово “Державний” на слово “Національний”.
У програмі опрацювання тексту реалізувати підпрограмою-процедурою

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

Лаб.10 завдання:
Задано множини А та В цілих чисел від 2 до 15. Знайти С=А об'єднано В та D=A перетин B,
надрукувати елементи множин A, B, C, D.
У програмі застосувати множинний тип та множинні операції; введення й виведення множин
по-елементно.

Лаб.11 завдання:
Роздрукувати список студентів, впорядкований за роком вступу в університет. Для кожного
студента вказати дату народження, рік вступу у вищий навчальний заклад, курс, групу,
оцінки дисциплін за кожну сесію.
У програмі застосувати комбіновані типи даний й масиви; введення й виведення всіх полів
комбінованих типів з клавіатури чи текстово-структурованого файла. Комбінований тип має
містити від 7-10 полів для опису суті завдання.

Лаб.12 завдання:
Сформувати динамічний рядок із ланкою-заголовком, вивести його на друк. Якщо п’ятою
літерою рядка є символ “D”, то логічній змінній L присвоїти TRUE.
У програмі застосувати динамічні типи даних, вказівникові типи, динамічний ланцюжок
символів. Здійснити введення й виведення динамічних даних.

Лаб.13 завдання:
За допомогою стека переписати ланцюжок символів у зворотному порядку.
У програмі застосувати динамічні типи даних, вказівникові типи. Також застосувати
процедури для формування, видалення для динамічних списків, чи стеків, чи черг. Здійснити
введення й виведення динамічних даних.

Лаб.14 завдання:
Сформувати дерево, елементами якого є службові слова мови Паскаль, упорядковані за
алфавітом. Здійснити пошук слова CASE. Якщо слово відсутнє, то додати вузол з
відповідним ключем.
У програмі застосувати динамічні типи даних, вказівникові типи. Також застосувати
процедури для формування, видалення, пошуку для динамічних бінарних дерев. Здійснити
введення й виведення динамічних даних.
Лабораторна робота №8
Тема: Процедури алгоритмічної мови Паскаль
Мета: ознайомитися з особливостями застосуваня підпрограм в алгоритмічній мові Пакаль.
Вивчити особливості застосування різних видів параметрів процедур, глобальних та
локальних змінних. Набути практичних навичок програмування з використанням процедур.

Короткі теоретичні відповіді на контрольні запитання

1. Коли виникає необхідність застосування підпрограм?


Коли одна й та сама послідовність дій повинна виконуватись на різних етапах обробки
інформації.

2. Що таке процедура у мові Паскаль?


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

3. Які особливості використання процедур?


Виклик процедури здійснюється у потрібному місці основної програми за допомогою
оператора виклику процедури.
<ідентифікатор>(<список фактичних параметрів>);
У разі виклику процедури формальні параметри, які вказані в її заголовку, замінюються
аргументами (фактичними параметрами) у тій послідовності, у якій вони розміщені в
операторі виклику процедури. Кількість і тип формальних та фактичних параметрів повинні
збігатися.
Якщо процедура без параметрів, то виклик проводиться тільки за її ім’ям.

4. Як здійснюється звертання до підпрограм мовою Паскаль?


Мовою Паскаль підпрограми реалізуються у вигляді процедур і функцій, які вводяться в
основну програму за допомогою свого опису.

5. Як поділяються параметри процедур?


У разі опису процедури в її заголовку можуть бути вказані параметри
чотирьох видів:
1) параметри-значення;
2) параметри-змінні;
3) параметри-функції;
4) параметри-процедури.

6. Що таке параметри-значення?
Параметри-значення використовуються для передачі вхідних даних у підпрограму. У списку
формальних параметрів вони перераховуються через кому з обов’язковим вказуванням
їхнього типу, наприклад:
PROCEDURE FS1(A,B: REAL; I,Y: INTEGER);

7. Що таке параметри-змінні?
Параметри-змінні використовуються для повернення результатів виконання процедури в
головну програму.
У списку формальних параметрів вони перераховуються після службового слова VAR із
обов’язковим вказуванням типу:
PROCEDURE MINMAX (A, B, C: REAL; VAR MIN,MAX: REAL);
8. У чому відмінність між глобальними і локальними змінними в мові Паскаль?
Глобальні змінні зберігають своє значення протягом виконання всіх функцій і процедур, а
також головної програми. Значення локальних змінних зберігаються лише на час виконання
функції або процедури та діють лише у цих функціях та процедурах, а також у будь-якій
описаній в них процедурі чи функції (вкладені процедури чи функції). Локальні змінні
недоступні для операторів головної програми

9. Які особливості використання різних типів як формальних параметрів


процедури?
Формальними параметрами процедури можуть бути змінні будь-якого типу: масиви,
множини, файли, записи, змінні перелічуваного або обмеженого типів. Але слід пам’ятати,
що тип формальних параметрів необхідно визначити тільки ідентифікатором.

Загальне завдання:
1. Ознайомитись з особливостями використання підпрограм у мові Паскаль
2. Одержати індивідуальне завдання (Додаток 1, Додаток 2).
3. Скласти блок-схему алгоритму та програму мовою Паскаль, що дає змогу з
використанням підпрограм-процедур реалізувати розв'язання поставленої задачі.
4. Виконати обчислення за програмою.

Індивідуальне завдання (див. У додатках)

У заданому тексті замінити слово “Державний” на слово “Національний”.


У програмі опрацювання тексту реалізувати підпрограмою-процедурою

Програма

program replacer;

{
SSource: вхідний рядок
SOld: рядок, який треба замінити
SNew: рядок, на який треба замінити

SSource передається разом з var, щоб була можливість його зміни з


процедури
}
procedure ReplaceText(var SSource: string; SOld, SNew: string);
Var
p: integer; // змінна для тримання індексу входження підрядка в рядок
Begin
Repeat
P := Pos(UpperCase(SOld), UpperCase(SSource)); // доки існує входження
підрядка в рядок
If P > 0 Then
Begin
Delete(SSource, P, Length(SOld)); // видалити те, що потрібно замінити
Insert(SNew, SSource, P); // вставити новий рядок
End;
Until P = 0;
End;
Const
S_OLD = 'state';
S_NEW = 'replacer';

Var
e: text;
all, tstring: string;

Begin

assign(e, 'a.txt');
reset(e);
while not EOF(e) do begin
readln(e, tstring);
all += tstring + #13;
end;
close(e);

ReplaceText(all, S_OLD, S_NEW); // виконання процедури

rewrite(e);
writeln(e, all);
close(e);

End.

Блок-схеми
Скріни програми й результатів запуску програми
Висновки

Під час виконання цієї лабораторної роботи, я ознайомилася з особливостями застосування


підпрограм в алгоритмічній мові Паскаль. Вивчила особливості застосування різних видів
параметрів процедур, глобальних та локальних змінних. Набула практичних навичок
програмування з використанням процедур.
Лабораторна робота №9
Тема Функції в алгоритмічній мові Pascal. Поняття рекурсії.
Мета: Ознайомитися з особливостями застосування підпрограм-функцій в алгоритмічній
мові Pascal. Вивити рекурсивні функції та правила їх застосування. Набути практичних
нвичок програмування з використанням функцій.

Короткі теоретичні відповіді на контрольні запитання

1. Що таке функція у мові програмування Паскаль?


В алгоритмічних мовах розглядаються лише ті функції, для яких можна задати алгоритм
визначення їхніх значень. У мові програмування Паскаль допускаються лише ті функції, які
дають результат простого типу. Це пояснюється тим, що результат повертається з функції в
головну програму через ім’я функції, тому може бути єдиним і простим значенням.

2. Які особливості застосування функції у мові Паскаль?


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

3. Чим відрізняються функції від процедур у мові Паскаль?


Результат обчислення функції присвоюється імені, а процедурі входить в список параметрів.
Ім'я функції має тип. Звернення до функції представляє операнд, а процедури оператор.
Як здійснюється виклик функції?

4. Виклик функції здійснюється за аналогією з викликом стандартної функції, тобто:


1. Виклик функції здійснюється за її іменем. У дужках задаються фактичні параметри.
2. Виклик функції може стояти лише праворуч від оператора присвоювання.

5. Як повертається результат обчислення функції в головну програму?


Після виконання функції обчислене значення присвоюється імені функції та передається у
заданий вираз

6. Що таке рекурсія в мові Паскаль?


Рекурсія – це метод визначення чи вираження функції, процедури, мовної конструкції чи
рішення задачі за допомогою тієї ж функції чи процедури. Рекурсія – це не властивість самої
функції, а властивість її опису

7. Чим відрізняється рекурсивний опис функції від нерекурсивного? Який опис


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

8. Що таке побічні ефекти у функції чи процедурі? Коли вони виникають?


Побічним ефектом називається непередбачене спотворення даних у підпрограмах.
У Паскалі можливі такі побічні ефекти:
1) спотворення підпрограмою вхідних даних, які передаються в неї;
2) спотворення підпрограмою глобальних змінних;
3) використання параметра-змінної всередині функції і присвоювання йому певного
значення.

9. Чи є доцільним використання формальних параметрів-змінних у функціях?


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

Індивідуальне завдання (див. У додатках)

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

Програма

program test;
var
f:text;
maxslovo,maxslovostr:string;
str:string;
I:integer;
slovo:string;

function poshuk(str2:string):string;
var
maxslovost:string;
j:integer;
begin
for j:=1 to length(str2) do
begin
if (str2[j]<>' ') and (str2[j]<>'.') and (str2[j]<>';')and (str2[j]<>',')and
(str2[j]<>'!')
and (str2[j]<>'?')and (str2[j]<>':')then
slovo:=slovo+str2[j]
else
begin
if length(slovo)>length(maxslovost) then
maxslovost:=slovo;
slovo:='';
end;
end;
poshuk:=maxslovost;
end;

BEGIN
assign(f,'e:\f.txt');
reset(f);

while not eof(f) DO


begin
READLN(F,STR);
maxslovostr:=poshuk(str);
if maxslovostr>maxslovo then
maxslovo:=maxslovostr;
end;
close(f);
writeln('maxslovo=',maxslovo);

reset(f);
while not eof(f) do
begin
readln(f,str);
for i:=1 to length(str) do
begin
if (str[i]<>' ') and (str[i]<>'.') and (str[i]<>';')and (str[i]<>',')and
(str[i]<>'!')
and (str[i]<>'?')and (str[i]<>':') then
slovo:=slovo+str[i]
else
begin
if slovo=maxslovo then
writeln(str);
slovo:='';
end;
end;
end;
close(f);
end.

Блок-схеми
Скріни програми й результатів запуску програми

Висновки

Під час виконання цієї лабораторної роботи, я ознайомилася з особливостями застосування


підпрограм-функцій в алгоритмічній мові Паскаль. Вивчила рекурсивні функції та правила їх
застосування. Набула практичних навичок програмування з використанням функцій.
Лабораторна робота №10
Тема:Множинні типи в алгоритмічній мові Паскаль.
Мета роботи — ознайомитись із особливостями застосування множинних типів у мові
Паскаль. Вивчити особливості застосування множин під час розв’язування завдань. Набути
практичних навичок програмування з використанням множинного типу.

Короткі теоретичні відповіді на контрольні запитання


1.Що собою являють множинні типи у мові Паскаль?
Множина це неповторюваний, невпорядкований набір однотипних логічно зв’язаних між
собою об’єктів. Множина, що не містить елементів, називається порожньою. Порядок
елементів у множині не має значення. Дві множини вважаються еквівалентними, якщо вони
містять однакові елементи. Якщо всі елементи однієї множини входять також в іншу
множину, то говорять, що перша множина включена в другу. Приймається, що порожня
множина включена в будь-яку іншу. Значенням множинного типу в мові Паскаль є множина.
Конкретні значення множинного типу (постійні або змінні) задаються за допомогою
конструктора множини, який має вигляд:SET OF .
2.Як задається множинний тип?
Змінні множинного типу називаються також змінними-множинами та описуються вони, як
інші змінні, у розділі опису змінних. Як звичайно, при описі змінних, тип їхніх значень може
бути заданим або безпосередньо, або вказанням іменні типу, яке визначене у розділі типів.
Наприклад:
Type num=(one,two,three,four);
number= set of num;
VAR QU:number;
QP:set of num;
3.Яким може бути базовий тип?
SET OF T
де, Т— може бути скалярний, обмеженим(інтервальним)або символьним типом. Тип Т
називають базовим типом множин. Значеннями змінних множинного типу є множини
значень базового типу.
4.Як присвоюються значення змінним-множинам?
Для присвоювання значень змінним-множинам використовується оператор присвоювання
виду:
V:=S;
QU:=[one,two];
QP:=[tree,four];
Завдання значень множинам можливе за допомогою константних виразів у розділі опису
констант:
Const
Num=[‘0’..’9’];
A=[‘A’..’Z’,’a’..’z’];
P=A+Num;
5.Які операції можна виконувати над даними множинного типу в мові Паскаль?
Для одержання нових множинних значень у Паскалі введені операції об’єднання, перетинута
різниці множин. Операндами цих операцій можуть бути множинні константи, змінні-
множини або вирази, які набувають значення множинного типу.
6.Які правила побудови множинних виразів?
A=B Множини А і В збігаються

A <> B Множини А і В не збігаються

A >= B Множина В є підмножиною множини А


A <= B Множина А є підмножиною множини В

x in A Значення х належить множині А

A+B Об'єднання множин А і В

A*B Перетин множин А і В

A-B Різниця множин А і В

[1,2,3,4,5]+[2,5,6,7,8,]=[1,2,3,4,5,6,7,8]
[1,2,3,4,5]* [2,5,6,7,8,]=[2,5]
[1,2,3,4,5] - [2,5,6,7,8,]=[1,3,4].
7.Яка послідовність у виконанні операцій над множинами?
Під час обчислення значень множинних виразів використовується старшинство операцій,
аналогічно старшинству операцій під час обчислення арифметичних виразів, а саме: у першу
чергу обчислюються значення виразів, розміщених у дужках, потім виконуються операції
«*», після чого «+» та «-» у порядку їхньої черговості зліва направо.
8.Які операції відношення над множинами реалізовано у мові Паскаль?
Операндами цих операцій є множинні вирази. Основні операції відношення над множинами,
що реалізовані у мові Паскаль. Особливе місце тут займає операція входження IN. На
відміну від решти операцій, у яких значення двох операндів належать до одного і того
самого множинного типу, в операції IN перший операнд повинен належати базовому типу, а
другий множинному типу значень побудованому на основі цього базового типу.
Результатом операцій відношення є логічне значення.

Індивідуальне завдання (див. У додатках)

Задано множини А та В цілих чисел від 2 до 15. Знайти С=А∪ В та D=A∩ B, надрукувати
елементи множин A, B, C, D.

Програма

program lab10 (input, output);


var
i:byte;
A, B, C, D: set of byte;

begin
A:=[2..15];
B:=[2..15];
writeln('Множина А');
for i:=0 to 255 do
if i in A then
write(i,' ');
writeln;
writeln('Множина B');
for i:=0 to 255 do
if i in B then
write(i,' ');
writeln;
writeln('Множина C');
C:= A + B;
for i:=0 to 255 do
if i in C then
write(i,' ');
writeln;
writeln('Множина D');
D:= A * B;
for i:=0 to 255 do
if i in D then
write(i,' ');
end.

Блок-схеми
Скріни програми й результатів запуску програми
Висновки
Під час виконання цієї лабораторної роботи, я ознайомилася із особливостями застосування
множинних типів у мові Паскаль. Вивчила особливості застосування множин під час
розв’язування завдань. Набула практичних навичок програмування з використанням
множинного типу.
Лабораторна робота №11
Тема: Комбіновані типи в алгоритмічній мові паскаль
Мета роботи – ознайомитись із особливостями застосування комбінованих типів (записів) у
алгоритмічній мові Паскаль. Вивчити особливості застосування різних видів записів. Набути
практичних навичок програмування з використанням комбінованих типів.

2. Короткий опис особливостей застосування комбінованих типів у мові Паскаль.


У вигляді відповідей на контрольні запитання:
1. Коли виникає необхідність у застосуванні комбінованого типу в мові Паскаль?
Комбінований тип є гнучким механізмом побудови структур даних. Комбінований тип задає
образ об’єктів, кожна частина якого може мати різні характеристики.
Комбінований тип характеризує об’єкти, які називаються записами. Запис – це складна
змінна, що містить кілька компонентів. На відміну від масивів компоненти запису (поля)
можуть бути різних типів і доступ до них здійснюється не за індексом, а за іменем поля.
2. Як задається комбінований тип?
Запис – це об’єднання фіксованої кількості логічно з’єднаних компонентів, які називаються
полями. Компоненти запису можуть бути різного типу, кожне поле має своє ім’я.
У загальному, тип запису можна описати:
TYPE
P= RECORD
V1, V2 : T1;
V3, V4 : T2;
...
Vn : Tn
END;
де Р – ім’я типу; V1,V2,V3,…,
Vn – імена полів запису;
T1,T2,…, Tn – типи полів.
Опис комбінованого типу проводиться у розділі опису типів, починається службовим словом
RECORD та закінчується словом END.
3. Що таке записи і поля записів?
Комбіновані типи – це структурований тип, що складається з фіксованого числа компонент
(полів) різного типу. Комбінований тип має ще й іншу назву – Запис. Представляє собою
правило формування складових типів.
Об'єкти цього типу називаються записами. Запис складається з фіксованого числа
компонентів, що називаються полями запису. Поля іменуються, щоб можна було посилатися
на той чи інший компонент запису.
4. Як формуються секції запису?
Секція запису визначає один або кілька імен полів і тип відповідної компоненти. Якщо в
секції перераховується кілька імен полів, то всі вони однотипні.
Тип компонента в секції запису може бути будь-яким типом даних і бути ім'ям зумовленого
типу, ім'ям раніше визначеного типу.
Типи полів T1,T2,…,Tn можуть набувати:
1) будь-який стандартний тип: REAL, INTEGER, CHAR, BOOLEAN;
2) ім’я типу, описаного раніше;
3) сам тип (перелічуваний, інтервальний тощо)
Наприклад тип, що містить анкетні дані студента: прізвище, ім’я, число, місяць і рік його
народження:
TYPE
STUD = RECORD
PR, IM : ARRAY [1..10] OF CHAR;
DAT : 1..31;
MIS : 1..12;
RIK : 1970..1990
END;
Якщо описати змінну типу запис:
VAR
STUDENT : STUD;
GRUP : ARRAY [1..30] OF STUD;
то доступ до будь-якого поля буде здійснюватися через складене ім’я, яке містить ім’я
змінної та ім’я поля:
BEGIN
STUDENT.PR := ’ТКАЧУК’;
STUDENT.IM := ’СЕРГІЙ’;
STUDENT.RIK := 1981; ...
Перший оператор занесе у поле PR змінної STUDENT рядок завдовжки 10 символів
’ТКАЧУК _ _ _ _ ’
Другий оператор занесе у поле IM змінної STUDENT рядок завдовжки 10 символів ’СЕРГІЙ
_ _ _ _ ’. Де__ – символ пропуска (пробіл).
Третій оператор занесе у поле RIK змінної STUDENT ціле число 1981. Кожне поле запису
можна не тільки задавати в операторі присвоювання, але й вводити з клавіатури або з файла:
FOR I := 1 TO 30 DO
BEGIN
FOR J := 1 TO 10 DO
READ (GRUP [I].PR [J] );
FOR J := 1 TO 10 DO
READ (GRUP [I].IM [J] );
READLN (GRUP[I].DAT, GRUP[I].MIS, GRUP[I].RIK)
END;
За допомогою цього фрагмента програми з клавіатури буде введено анкетні дані 30-ти
студентів у такій формі:
ТКАЧУК _ _ _ _ СЕРГІЙ _ _ _ _ 30 _ 01 _ 1981
Тобто в одному рядку буде набрано інформацію про одного студента.
Слід пам’ятати:
1. Ім’я поля завжди вказується явно, а не обчислюється як індекс у масивах.
2. Поля як самостійні програмні об’єкти поза записом не існують, тому вказувати тільки ім’я
поля без імені змінної не можна.

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


Для повних змінних однакового комбінованого типу може використовуватися єдина операція
– операція присвоювання.
Наприклад:
GRUP [3] := STUDENT;
За допомогою цього оператора всі поля третього елемента масиву GRUP заповнюються
інформацією, що міститься у змінній STUDENT, тобто:
GRUP [3]. PR буде ‘ТКАЧУК ’
GRUP [3]. IM буде ‘СЕРГІЙ ’
GRUP [3]. RIK буде 1981 тощо.
Але над полями можна виконувати ті операції, які допустимі для цього типу.
Так, якщо тип окремого поля INTEGER або REAL, то й операції над цими полями будуть: +,
-, *, /, DIV, MOD та операції порівняння , <=, >=, =, < >.
6. Що таке ієрархічні записи?
Оскільки ніяких обмежень на тип поля запису не накладається, тому компонентою запису
може бути й запис. Таким чином комбінований тип може мати виразну ієрархічну структуру.
Ієрархічні записи підтримують деревоподібну організацію інформації.
7. Як формуються ієрархічні записи?
Опишемо запис, що містить анкетні дані студента, виділивши в окремий
запис дату народження:
TYPE
STUD = RECORD
PR, IM : ARRAY [1..10] OF CHAR;
DATAN : RECORD
DAT : 1..31;
MIS : 1..12;
RIK : 1970..1990
END
END;
При описі змінної:
VAR
STUDENT : STUD;
Оператор звертання до поля рік буде мати такий вигляд:
STUDENT.DATAN.RIK :=1981;

8. Для чого використовується оператор приєднання у мові Паскаль?


Під час роботи із записами утворюються досить довгі програми, оскільки весь час необхідно
записувати ім’я змінної GRUP[i].
Щоб спростити такі записи, у мові Паскаль введено оператор приєднання WITH.
Оператор приєднання WITH дає змогу використовувати замість складеного імені
безпосередньо ім’я поля. При цьому ім’я запису виноситься у заголовок оператора
приєднання. На етапі трансляції ім’я змінної підставляється автоматично до імені поля і
формується повне ім’я.
9. Як формується оператор приєднання?
Структура оператора приєднання WITH:
WITH <ім’я змінної> DO <оператор>;
Усередині оператора WITH змінні позначаються тільки іменем поля.

10. Як здійснюється робота із окремими полями записів?


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

Правила формування записів із варіантом:

1. Варіантна частина запису починається службовим словом CASE і стоїть після закінчення
спільної частини запису.
2. Після закінчення опису варіантної частини оператор END не ставиться. Тобто на відміну
від оператора CASE у розділі операторів програми у розділі опису типу запису END не
ставиться.
3. Після закінчення варіантної частини ніякі поля спільні для запису не ставляться.
4. Усі варіанти описуються всередині оператора CASE. Кожен варіант характеризується
заданим у круглих дужках списком описів, властивих йому компонентів.
5. Перед списком стоїть одна або декілька констант вибору. Тип констант вибору задано у
заголовку оператора CASE.
6. Тип не може бути виразом, повинен бути скалярним і задаватися іменем. “STAT” – ім’я
типу, описаного перед описом запису. У явному вигляді вказати тип у заголовку CASE не
можна.
7. Не можна використовувати одне й те саме ім’я для визначення спільної та варіантної
частини запису.
8. Звернення до полів записів із варіантом аналогічне зверненню до звичайних записів:

Якщо описати змінні:


VAR
STUDENT : ANK;
GRUP : ARRAY [1..30] OF ANK;

То оператори присвоювання значення полям запису будуть:


STUDENT.PR := ’ТКАЧУК’;
STUDENT.IM := ’СЕРГІЙ’;
STUDENT.MW := MEN;
STUDENT.VZ := 1;
STUDENT.SPEC := ’ПРОГРАМІСТ’;

Загальне завдання

Індивідуальне завдання (див. У додатках)

Роздрукувати список студентів, впорядкований за роком вступу в університет. Для кожного


студента вказати дату народження, рік вступу у вищий навчальний заклад, курс, групу,
оцінки дисциплін за кожну сесію.
У програмі застосувати комбіновані типи даний й масиви; введення й виведення всіх полів
комбінованих типів з клавіатури чи текстово-структурованого файла. Комбінований тип має
містити від 7-10 полів для опису суті завдання.

Програма

program laba(input,output);
type
student = record //користувацький комбінований тип з полями, які вказані в
умові
d:1..31;
m:1..12;
y:1980..2010 ;
aYear: 1997..2030;
course: 1..4;
group: array[1..6] of char;
marks: array[1..2, 1..5] of 0..100;
pr: array[1..15] of char; //прізвище
im: array[1..2] of char; //ім’я
pb: array[1..2] of char;
end;
var
students: array[1..3] of student; //масив студентів
x: student;
f: text;
i, j, k: integer;
begin
assign(f, 'E:f.txt');
reset(f);

for i := 1 to 3 do
with students[i] do //оператор приєднання
begin

for j := 1 to 15 do read(f, pr[j]);


for j := 1 to 2 do read(f, im[j]);
for j := 1 to 2 do read(f, pb[j]);
read(f, d, m, aYear, y, course);
for j := 1 to 5 do read(f, group[j]);
readln(f);
for j := 1 to 2 do
begin
for k := 1 to 5 do
read(f, marks[j, k]);
readln(f);
end;
end;

//алгоритм сортування бульбашкою для студентів за роком вступу в університет

for i := 2 to 3 do
begin
for j := 3 downto i do
if students[j - 1].aYear > students[j].aYear then
begin
x := students[j - 1];
students[j - 1] := students[j];
students[j] := x;
end;
end;
writeln;
writeln('Оцінки студента:');

for i := 1 to 3 do
with students[i] do //оператор приєднання
begin

for j := 1 to 15 do write(pr[j]);
for j := 1 to 2 do write(im[j]);
for j := 1 to 2 do write(pb[j]);
write(' ', d:2, '.', m:2, '.', y:4, ' ', aYear:5, ' ', course:2, ' ');
for j := 1 to 5 do write(group[j]);
writeln;
writeln('Оцінки студента:');

for j := 1 to 2 do
begin
for k := 1 to 5 do write(marks[j, k]:4); // виводимо двомірний масив;
дві строки по 5 елементів
writeln;
end;
writeln;
end;
close(f);
end.

Блок-схеми
Скріни програми й результатів запуску програми
Висновки: в ході лабораторної роботи №11 я ознайомилася із особливостями застосування
комбінованих типів (записів) у алгоритмічній мові Паскаль. Вивчила особливості
застосування різних видів записів. Набула практичних навичок програмування з
використанням комбінованих типів.
Лабораторна робота №12
Тема: Динамічні об’єкти алгоритмічної мови Паскаль. Вказівникові типи
Мета роботи – ознайомитись із особливостями застосування динамічних об’єктів, методів
формування і обробки динамічних рядків. Набути практичних навичок програмування з
використанням динамічних об’єктів.

Короткі теоретичні відповіді на контрольні запитання


Контрольні запитання
1. Що таке динамічний об’єкт?
Динамічними називаються такі програмні об’єкти, які виникають під час виконання
програми, або розмір яких визначається чи змінюється під час виконання програми.
2. Як подаються динамічні об’єкти у мові Паскаль?
При описі змінної вказівникового типу вона не вказує на жодний програмний об’єкт, лише
вводить у використання статичну змінну (наприклад: P, Q, AM, BM) вказівникового типу.
Тобто по цьому опису транслятором лише виділяється місце у пам’яті машини, необхідне
для розміщення вказівника. Для породження самого динамічного об’єкта є стандартна
процедура NEW (“новий”). У операторі виклику процедури задається один фактичний
параметр – вказівникова змінна породжуваного об’єкта.
3. Що таке тип вказівника?
Для роботи з динамічними об’єктами у мові Паскаль передбачено спеціальний тип – тип
вказівника. Значення цього типу є вказівник на конкретний програмний об’єкт, за яким
здійснюється доступ до цього об’єкта. Іншими словами вказується адреса комірки пам’яті, де
зберігається відповідний об’єкт.
4. Яка процедура використовується для породження динамічного об’єкта?
Для породження самого динамічного об’єкта є стандартна процедура NEW (“новий”).
У операторі виклику процедури задається один фактичний параметр – вказівникова змінна
породжуваного об’єкта. Наприклад:
NEW(P); NEW(Q);
5. Що таке змінна із вказівником; чим вона відрізняється від вказівникової змінної?
Для того, щоб динамічній змінній присвоїти якесь значення або використати це значення,
вводиться поняття “змінна з вказівником”. У найпростішому випадку – це ім’я змінної
вказівникового типу після якого стоїть стрілка.
Змінна з вказівником може використовуватися у будь-яких конструкціях мови. Але тут треба
звертати увагу на тип вказівникової змінної.
6. Які операції виконуються над значеннями вказівникового типу?

Основне правило: над значеннями вказівникового типу не можна виконувати ніяких


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

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


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

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

DISPOSE (P);

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

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


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

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

ARRAY [1..10] OF CHAR.


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

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

TYPE

ZV = ↑POINTER;

POINTER = RECORD

ELEM : CHAR;

NEXT : ZV

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

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

Загальне завдання

Індивідуальне завдання (див. У додатках)

Сформувати динамічний рядок із ланкою-заголовком, вивести його на друк. Якщо п’ятою


літерою рядка є символ “D”, то логічній змінній L присвоїти TRUE.
У програмі застосувати динамічні типи даних, вказівникові типи, динамічний ланцюжок
символів. Здійснити введення й виведення динамічних даних.

Програма

Type
LinkedList = ^Node;
Node = Record
Value: Char;
Prev: ^Node;
Next: ^Node;
End;
Var
Head, it: LinkedList;
ch: Char;
L: Boolean;
i: Integer;
Procedure Insert(after: LinkedList; letter: Char);
Var newNode: LinkedList;
Begin
New (newNode);
newNode^.Value := letter;
newNode^.Next := after^.Next;
newNode^.Prev := after^.Next^.Prev;
after^.Next^.Prev := newNode;
after^.Next := newNode
End;
Begin
New(Head);
Head^.Value := 'A';
Head^.Next := Head;
Head^.Prev := Head;
Read(ch);
While (ch <> '.') Do
Begin
Insert(Head^.Prev, ch);
Read(ch);
End;
it := Head;
for i := 1 to 4 Do
it := it^.Next;
if it^.Value = 'D' then L := True else L := False;
WriteLn(L);

End.

Блок-схеми

Скріни програми й результатів запуску програми


Висновки
Під час виконання даної лабораторної роботи, я ознайомилась із особливостями
застосування динамічних об’єктів, методів формування і обробки динамічних рядків. Набула
практичних навичок програмування з використанням динамічних об’єктів.
Лабораторна робота №13
Тема: Динамічні об’єкти складної структури. Одно- та двонаправлені списки, стеки, черги
Мета: Ознайомитись із особливостями застосування динамічних об’єктів складної
структури: списками, стеками та чергами; з операціями, які виконуються над елементами цих
об’єктів. Набути практичних навичок програмування з використанням динамічних об’єктів
складної структури.

• Які операції виконуються над рядками?


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

• Що таке однонаправлений список, чим він відрізняється від рядка?


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

• Чи можна в однонаправленому списку рухатись від кінця до початку?


Для подібних задач доцільно створити двонаправлений список, тобто список, у якому можна
рухатися у двох напрямках: як вперед, так і назад.

• Який оператор відображає перехід на наступну ланку?


Наявність у кожній ланці вказівника на попередній та наступний елементи дає можливість
рухатися у двох напрямках.
У списку є ланка-заголовок VSTR .
У поле NEXT цієї ланки записано вказівник на перший елемент списку, а у полі PRIV –
записано NIL. Тобто у ланці-заголовку нема попереднього елемента. Аналогічно у поле
NEXT останнього елемента записано NIL, тобто в останнього нема наступного.

• Які поля містить двонаправлений список?


TYPE
ZV2 = POINT2;
POINT2 = RECORD
ELEM : CHAR;
NEXT : ZV2;
PRIV : ZV2
END;
Наявність у кожній ланці вказівника на попередній та наступний елементи дає можливість
рухатися у двох напрямках.
У списку є ланка-заголовок VSTR.
У поле NEXT цієї ланки записано вказівник на перший елемент списку, а у полі PRIV –
записано NIL. Тобто у ланці-заголовку нема попереднього елемента. Аналогічно у поле
NEXT останнього елемента записано NIL, тобто в останнього нема наступного.
Поряд з такими списками у програмуванні часто використовуються двонаправлені списки, де
у поле NEXT останнього елемента записано вказівник на ланку-заголовок, а у поле PRIV
ланки-заголовку – вказівник на останню ланку.
• Що таке двонаправлений кільцевий список?
Поряд з такими списками у програмуванні часто використовуються двонаправлені списки, де
у поле NEXT останнього елемента записано вказівник на ланку-заголовок, а у поле PRIV
ланки-заголовку – вказівник на останню ланку .
Такі списки називаються кільцевими списками. У них рухатися по полю NEXT до кінця
списку і через оператор присвоєння: VLAN := VSTR; з останньої ланки переходять на першу.

• Який оператор необхідно передбачити у програмі, щоб перейти на


початок однонаправленого та двонаправленого списку?
VLAN := VSTR;

• Що таке черга, який режим обслуговування черги?


У програмуванні існує структура даних, яка називається чергою. Вона використовується для
моделювання реальної черги. За своїм змістом черга є суто динамічним об’єктом. Довжина
черги (набір її елементів) у часі постійно змінюється.
За дисципліною обслуговування розрізняють два види черг:
FIFO (First In First Out) – “перший прийшов – перший пішов”.
LIFO (Last In First Out) – “останній прийшов – перший пішов”.
При першому виді черги замовлення, яке першим прийшло – першим і вибирається на
обслуговування. Черги такого типу можна формувати по-різному: зображувати чергу у
вигляді вектора, де запам’ятовуються перший та останній індекси;
2) зображувати чергу у вигляді однонаправленого списку, в якому за- пам’ятовуються перша
та остання ланка. Але черги такої дисципліни обслуговування у програмуванні
використовуються досить рідко. При другому виді обслуговування – першим обслуговується
елемент, який прийшов останнім.

• Що таке стек, чи має стек вказівник на початок і вказівник на ланку?


Першим обслуговується елемент, який прийшов останнім. Черга такого типу називається
стеком. Вона найчастіше використовується у програмуванні.
У стека доступна єдина позиція – вершина стека – тобто позиція, в якій перебуває останній
елемент. Вибрати елемент можна лише з вершини стека, при цьому вибраний елемент
видаляється зі стека. Стек найчастіше зображується у вигляді динамічної структури,
однонаправленого списку (ланцюжка). Ланка-заголовок для стека не потрібна.
Вказівник на стек є вказівником вершини стека. Вказівник на ланку
містить вказівник на наступну ланку стека. “Дно” стека, тобто елемент, занесений
найпершим, містить вказівник NIL.

• Що необхідно зробити зі стеком перш ніж його заповнювати?


Якщо стек порожній, то вказівник на нього є пустий вказівник NIL:
STEK := NIL;
Перед початком роботи зі стеком його необхідно робити пустим.

• Які операції виконуються над стеком?


Основні операції над стеками:
• додавання елемента в стек;
• вилучення елемента із стека;
• перевірка, чи порожній стек;
• перегляд елемента у вершині стека без видалення;
• очистка стека.

• Що таке “вершина стека”?


Вершиною стека є перша ланка.

Індивідуальне завдання (див. У додатках)


За допомогою стека переписати ланцюжок символів у зворотному порядку.
У програмі застосувати динамічні типи даних, вказівникові типи. Також застосувати
процедури для формування, видалення для динамічних списків, чи стеків, чи черг. Здійснити
введення й виведення динамічних даних.

Програма

type
zv = ^point;
point = record
elem: char;
next: zv
end;

var
f: text;
sym: char;
st: zv;

procedure vstek(var st: zv; buk: char);


var
q: zv;
begin
new(q);
q^.elem := buk;
q^.next := st;
st := q
end;

procedure vdstek(var st: zv; var a: char);


var
q: zv;
begin
if st = nil then
writeln('стек пустий')
else begin
a := st^.elem;
q := st;
st := st^.next;
dispose(q)
end
end;

begin

assign(f, 'input.txt');
reset(f);

st := nil;
read(f, sym);
while (sym <> '.') do
begin
vstek(st, sym);
read(f, sym);
end;

while st <> nil do


begin
vdstek(st, sym);
write(sym);
end;
close(f);
end.

Блок-схеми
Скріни програми й результатів запуску програми
Висновки: ознайомилась із особливостями застосування динамічних об’єктів складної
структури: списками, стеками та чергами; з операціями, які виконуються над елементами
цих об’єктів. Набула практичних навичок програмування з використанням динамічних
об’єктів складної структури.
Лабораторна робота №14
Тема: Динамічні об’єкти складної структури. Таблиці, бінарні дерева.

Мета роботи – ознайомитись із особливостями побудови та застосування динамічних


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

Відповіді на контрольні запитання

1. Що таке таблиця, які поля містить цей динамічний об’єкт?

Використання комп’ютерної техніки набуло широкого розповсюдження в Автоматизованих


інформаційно-пошукових системах (АІПС).

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

При роботі з Автоматизованою інформаційно-пошуковою системою найчастіше


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

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

Таблиця – це набір іменованих записів. Ім’я запису в таблиці називається ключем.

 Як ключ найчастіше використовуються або цілі додатні числа, або рядки символів
однакової

2. Що таке бінарне дерево?

Метод представлення таблиці у вигляді однонаправленого списку або вектора забезпечує


швидкий пошук запису, але він малоефективний під час включення та видалення записів.

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

Представлення таблиці у вигляді бінарного дерева дає можливість однаково ефективно


реалізовувати всі три операції: пошук, включення та видалення запису.

Бінарне дерево можна зобразити так (рис. 2): маємо набір вершин, з кожної вершини
виходить не більше як дві стрілки (гілки), спрямовані вліво-вниз та вправо-вниз. Існує одна-
єдина вершина, в яку не входить жодна стрілка, ця вершина називається коренем дерева. У
всі інші вершини входить лише одна стрілка.

4. Які поля містить динамічний об’єкт, що описує бінарне дерево?

Пошук конкретного запису в дереві – це пошук вершини із заданим ключем.

Запишемо логічну функцію, яка буде ще й визначати вказівник на


шукану вершину. Формальними параметрами функції будуть К – ключ, D –

дерево, у якому ведеться пошук, REZ – параметр-змінна вказівникового типу,

якій присвоюється вказівник на знайдену ланку.

5. Що може бути ключем у бінарному дереві?

Як ключ найчастіше використовуються або цілі додатні числа, або рядки символів однакової

6. Як формується бінарне дерево?

Алгоритм формування дерева такий:

 Надходить черговий запис з ключем К.


 Починаючи з кореня дерева, порівнюємо ключ К з ключем черговоївершини, якщо К
> Квер , то переходимо праворуч; якщо К < Квер , то переходимо ліворуч від цієї
вершини.

 Якщо стрілки від вершини немає, то приєднюється до цієї вершини нова вершина з
ключем К.

8. Яка структура бінарного дерева, що таке вершина або корінь дерева,

що таке гілки дерева?

Видалення запису із заданим ключем здійснюється дуже просто, якщо:

1. Ця вершина є кінцевою (рис. 5, а).

2. Із вершини виходить лише одна гілка (рис. 5, б).

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

Сформувати дерево, елементами якого є службові слова мови Паскаль, упорядковані за


алфавітом. Здійснити пошук слова CASE. Якщо слово відсутнє, то додати вузол з
відповідним ключем.

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

program test;
uses crt;
type
dano=string;
dat=^dano;
zv3=^pointer3;
pointer3=record
klyth:char;
lv,pr:zv3;
zap:dat;
end;
var
kl:char;
sym:char;
p,vtree:zv3;

function pder2(k:char; var d,rez:zv3):boolean;


var
p,q:zv3;
b:boolean;
begin
b:=false;
p:=d;
if d<>nil then repeat
q:=p;
if p^.klyth=k then
b:=true
else
begin
q:=p;
if k<p^.klyth then
p:=p^.lv
else
p:=p^.pr;
end
until b or (p=nil);
pder2:=b;
rez:=q;
end;

procedure vtabl(k:char; var d:zv3; rec:dano);


var
r,s:zv3;
t:dat;
begin
if not pder2(k,d,r) then
begin
new(t);
t^:=rec;
new(s);
s^.klyth:=k;
s^.zap:=t;
s^.lv:=nil;
s^.pr:=nil;
if d=nil then
d:=s
else
if k<r^.klyth then
r^.lv:=s
else
r^.pr:=s;
end;
end;
procedure udalder(VAR D:ZV3; k:char);
var q:zv3;
procedure ud(var r:zv3);
begin
if r^.pr=nil then
begin
q^.klyth:=p^.klyth;
q^.zap:=r^.zap;
q:=r;
r:=r^.lv;
end
else
ud(r^.pr);
end;
begin
if d=nil then
writeln('there is no element with such key')
else
if k<d^.klyth then
udalder(d^.lv,k)
else
if k>d^.klyth then
udalder(d^.pr,k)
else
begin
q:=d;
if q^.pr=nil then
d:=q^.lv
else
if q^.lv=nil then
d:=q^.pr
else
ud(q^.lv)
end;
end;

begin
clrscr;
vtree:=nil;
vtabl('r',vtree,'repeat');
vtabl('i',vtree,'if');
vtabl('t',vtree,'true');
vtabl('e',vtree,'end');
vtabl('o',vtree,'odd');
vtabl('s',vtree,'sin');
vtabl('w',vtree,'while');
vtabl('b',vtree,'begin');
vtabl('f',vtree,'for');
vtabl('l',vtree,'label');

writeln('DEREVO');
writeln(' ',vtree^.klyth);
writeln(' ',vtree^.zap^);
writeln(' / \');
writeln(' ',vtree^.lv^.klyth,' ',vtree^.pr^.klyth);
writeln(' ',vtree^.lv^.zap^,' ',vtree^.pr^.zap^);
writeln(' / \ / \');
writeln(' ',vtree^.lv^.lv^.klyth,' ',vtree^.lv^.pr^.klyth,' ',vtree^.pr^.lv^.klyth,'
',vtree^.pr^.pr^.klyth);
writeln(' ',vtree^.lv^.lv^.zap^,' ',vtree^.lv^.pr^.zap^,' ',vtree^.pr^.lv^.zap^,'
',vtree^.pr^.pr^.zap^);
writeln(' / \ / ');
writeln(' ',vtree^.lv^.lv^.lv^.klyth,' ',vtree^.lv^.lv^.pr^.klyth,' ', vtree^.lv^.pr^.lv^.klyth);
writeln(' ',vtree^.lv^.lv^.lv^.zap^,' ',vtree^.lv^.lv^.pr^.zap^,' ', vtree^.lv^.pr^.lv^.zap^);

if pder2('c',vtree,p) then
udalder(vtree,'c')
else
vtabl('c',vtree,'case');

writeln('REZULT DEREVO');
writeln(' ',vtree^.klyth);
writeln(' ',vtree^.zap^);
writeln(' / \');
writeln(' ',vtree^.lv^.klyth,' ',vtree^.pr^.klyth);
writeln(' ',vtree^.lv^.zap^,' ',vtree^.pr^.zap^);
writeln(' / \ / \');
writeln(' ',vtree^.lv^.lv^.klyth,' ',vtree^.lv^.pr^.klyth,' ',vtree^.pr^.lv^.klyth,'
',vtree^.pr^.pr^.klyth);
writeln(' ',vtree^.lv^.lv^.zap^,' ',vtree^.lv^.pr^.zap^,' ',vtree^.pr^.lv^.zap^,'
',vtree^.pr^.pr^.zap^);
writeln(' / \ / ');
writeln(' ',vtree^.lv^.lv^.lv^.klyth,' ',vtree^.lv^.lv^.pr^.klyth,' ', vtree^.lv^.pr^.lv^.klyth);
writeln(' ',vtree^.lv^.lv^.lv^.zap^,' ',vtree^.lv^.lv^.pr^.zap^,' ', vtree^.lv^.pr^.lv^.zap^);
writeln(' \');
writeln(' ',vtree^.lv^.lv^.lv^.pr^.klyth);
writeln(' ',vtree^.lv^.lv^.lv^.pr^.zap^);
end.

Блок-схема
Результат програми
Висновки: Під час виконання даної лабораторної роботи я знайомилась із особливостями побудови та
застосування динамічних об’єктів складної структури: таблиць і бінарних дерев; з операціями, які
виконуються над елементами цих об’єктів. Набула практичних навичок програмування з
використанням динамічних об’єктів складної структури зокрема бінарних дерев.
Опрацювання відео-лекцій й засвоєння матеріалу
• Відео № 1
Назва: [360 VR 4K] План осінь 2019. Філологія та програмування.
Зсилка на відео:
https://www.youtube.com/watch?v=GaxTUfqAKso&list=PL-
73XAfhfNvx_fAk1DCJGUHw18HR_qHMK
Скрін свого коментаря, що саме навчилися:

• Відео № 2
Назва: [360 VR 4K] Підпрограма-процедура. Філологія та програмування.
Зсилка на відео:
https://www.youtube.com/watch?v=-9ergi3g3Lg&list=PL-
73XAfhfNvx_fAk1DCJGUHw18HR_qHMK&index=2
Скрін свого коментаря, що саме навчилися:

• Відео № 3
Назва: [360 VR 4K] Філологія та програмування. Процедури
Зсилка на відео:
https://www.youtube.com/watch?v=WRXe4KXOW5k&list=PL-
73XAfhfNvx_fAk1DCJGUHw18HR_qHMK&index=3
Скрін свого коментаря, що саме навчилися:

• Відео № 4
Назва: [360 VR 4K] Від без процедури до із процедурою. Філологія та програмування.
Зсилка на відео:
https://www.youtube.com/watch?v=tLLMCWywQu4&list=PL-
73XAfhfNvx_fAk1DCJGUHw18HR_qHMK&index=4
Скрін свого коментаря, що саме навчилися:
• Відео № 5
Назва: [360 VR 4K] Філологія та програмування. Функції
Зсилка на відео:
https://www.youtube.com/watch?v=8BxvNnvmVbE&list=PL-
73XAfhfNvx_fAk1DCJGUHw18HR_qHMK&index=5
Скрін свого коментаря, що саме навчилися:

•Відео №6
Назва: [360 VR 4K] Переробляємо із процедури у функцію. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=gixBkVLnX9M&list=PL-
73XAfhfNvxR6x8yed9uquhHhUakPtlW&index=1
Скрін свого коментаря, що саме навчилися:

• Відео №7
Назва: [360 VR 4K] Приклади підпрограм Procedure Function. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=8tu8NcUCLpI&list=PL-
73XAfhfNvxR6x8yed9uquhHhUakPtlW&index=2
Скрін свого коментаря, що саме навчилися:

• Відео №8
Назва: [360 VR 4K] Функції у складі операторів. Приклади. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=o3vf8RRjafE&list=PL-
73XAfhfNvwNHDz45WMlJbLWABP-D-h8&index=1
Скрін свого коментаря, що саме навчилися:
• Відео №9
Назва: [360 VR 4K] set of... Множини у програмі. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=3J58DZs6Kn4&list=PL-
73XAfhfNvzAW7tyoXV2Z3QLCVYnN533&index=1
Скрін свого коментаря, що саме навчилися:

• Відео №10
Назва: [360 VR 4K] Комбінований тип RECORD. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=rjN7TFtQKxo&list=PL-
73XAfhfNvx8qGaA35yIAHUfo7-tdWJZ&index=1
Скрін свого коментаря, що саме навчилися:

• Відео №11
Назва: [360 VR 4K] Філологія та програмування. Комбінований тип. Записи
Зсилка на відео: https://www.youtube.com/watch?v=oqGqbL8GXIc&list=PL-
73XAfhfNvx8qGaA35yIAHUfo7-tdWJZ&index=2
Скрін свого коментаря, що саме навчилися:

Відео №12
Назва: [360 VR 4K] Приклади описів RECORD типів. Філологія та програмування
Зсилка на відео: https://www.youtube.com/watch?v=798f97Ar_p4&list=PL-
73XAfhfNvx8qGaA35yIAHUfo7-tdWJZ&index=3
Скрін свого коментаря, що саме навчилися:

• Відео №13
Назва: [360 VR 4K] type-record. Розширені приклади. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=w3P3zG6LReg&list=PL-
73XAfhfNvx8qGaA35yIAHUfo7-tdWJZ&index=4
Скрін свого коментаря, що саме навчилися:

• Відео №14
Назва: [360 VR 4K] Pointer, [360 VR 4K] Вказівниковий тип. Динамічні структури. Філологія
та програмування.
https://www.youtube.com/watch?v=m44rIh9Ctmc&list=PL-
73XAfhfNvzqvKt8H_ri0YAGJpeMMzHz

• Відео №15
Назва: [360 VR 4K] Вказівниковий тип. Динамічний рядок символів. Філологія та
програмування.
Зсилка на відео: https://www.youtube.com/watch?v=9hSx49O3bsE&list=PL-
73XAfhfNvyZSN9cIHoON3X_NugGkgeS&index=2
Скрін свого коментаря, що саме навчилися:

• Відео №16
Назва: [360 VR 4K] Pointer, Формування динамічного рядка символів. Філологія та
програмування.
Зсилка на відео: https://www.youtube.com/watch?v=ue6W2oaIsO8&list=PL-
73XAfhfNvyZSN9cIHoON3X_NugGkgeS&index=3&ab_channel=ProgramEnd
Скрін свого коментаря, що саме навчилися:

• Відео №17
Назва: [360 VR 4K] Багато динамічних рядків. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=xGNX1rUS2WM&list=PL-
73XAfhfNvyZSN9cIHoON3X_NugGkgeS&index=4
Скрін свого коментаря, що саме навчилися:

• Відео №18
Назва: [360 VR 4K] Черги та стеки. Динамічні структури. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=4MHdixI4GRc&list=PL-
73XAfhfNvwqbJXRM7-DPevoiBwviYfO&index=1
Скрін свого коментаря, що саме навчилися:

• Відео №19
Назва: [360 VR 4K] Динамічні списки, стеки, черги. Вказівниковий тип. Філологія та
програмування.
Зсилка на відео: https://www.youtube.com/watch?v=vXgqd293vgg&list=PL-
73XAfhfNvwqbJXRM7-DPevoiBwviYfO&index=2
Скрін свого коментаря, що саме навчилися:

• Відео №20
Назва: Одно- двонаправлені динамічні списки. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=y0Dxz-mk3F0&list=PL-
73XAfhfNvwqbJXRM7-DPevoiBwviYfO&index=3
Скрін свого коментаря, що саме навчилися:

• Відео №21
Назва: [360 VR 4K] Ще приклади складних кількох списків. Стек. Філологія та
програмування.
Зсилка на відео: https://www.youtube.com/watch?v=ULIR3XpPVSw&list=PL-
73XAfhfNvwqbJXRM7-DPevoiBwviYfO&index=4
Скрін свого коментаря, що саме навчилися:
• Відео №22
Назва: Філологія та програмування. Динамічні структури. Бінарні дерева. Binary tree. General
schema
Зсилка на відео: https://www.youtube.com/watch?v=YE9UdM5fxE4&list=PL-
73XAfhfNvxGtf4VSM9VPKXpRIPFULxO
Скрін свого коментаря, що саме навчилися:

• Відео №23
Назва: [360 VR 4K] Бінарні дерева. Динамічні структури. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=Ugpg2Fk_zLM&list=PL-
73XAfhfNvxGtf4VSM9VPKXpRIPFULxO&index=2
Скрін свого коментаря, що саме навчилися:
• Відео №24
Назва: [360 VR 4K] Шаблони бінарного динамічного дерева. Філологія та програмування.
Зсилка на відео: https://www.youtube.com/watch?v=wrpNL7nZtrQ&list=PL-
73XAfhfNvyp3quCS6WjfQ2fH3zDHJ6g&index=3
Скрін свого коментаря, що саме навчилися:

• Відео №25
Назва: [360 VR 4K] Бінарні дерева. Складні динамічні вказівникові структури. Філологія та
програмування.
Зсилка на відео: https://www.youtube.com/watch?v=73q2z9AUg4k&list=PL-
73XAfhfNvyp3quCS6WjfQ2fH3zDHJ6g&index=4
Скрін свого коментаря, що саме навчилися:

You might also like