Стандартний файл введення Input і виведення Output пов'язувати з файловою змінною, відкривати і закривати не потрібно.
З кожною змінною файлового типу зв'язується поточний вказівник файла, який вказує на конкретний елемент файла. Процедурами відкриття файла Reset і Rewrite значення поточного вказівника файла встановлюється рівним нулю. Це означає, що він вказує на перший елемент файла, оскільки перший елемент файла має номер нуль. Процедури читання і процедури запису у файл завжди читають або записують той елемент, на який вказує поточний вказівник файла.
Для контролю правильності операцій введення-виведення в Turbo Pascal запроваджена функція IOResult (Input/Output Result – результат введення-внведення), яка доступна тільки тоді, коли встановлена директива компілятора {$I-}. Функція не має аргументів. Вона повертає значення 0 у тому випадку, якщо остання операція введення-виведення завершилася успішно, і ненульовий код помилки в протилежному випадку.
Процедура Assign. Опис процедури: Assign(f; Name : string) .
Параметр f є файловою зміною будь-якого типу файла, a Name – вираз рядкового типу. Всі подальші файлові операції, де фігурує змінна f, будуть виконуватися з зовнішнім файлом з ім’ям, яке задається параметром Name. Після звертання до процедури Assign зв'язок, встановлений між змінної f і зовнішнім файлом, буде існувати доти, поки не буде виконана інша процедура Assign для змінної f. Ім'я складається зі шляху доступу і імені файла: Диск:\ім'я каталога\ім'я каталога\ ...\ім'я каталога\ім'я файла. Коли параметр Name є порожнім рядком, то параметр f зв'язується зі стандартним файлом введення (Input) чи виведення (Output). Процедура Assign не повинна використовуватися для відкритого файла.
Процедура Close. Ця процедура закриває відкритий файл.
Опис процедури : Close(f) . Параметр f – файлова змінна будь-якого файла, що був попередньо відкритий за допомогою процедур Reset, Rewrite чи Append. Ця процедура забезпечує збереження у файлі всіх записів і реєстрацію файла в каталозі. Зв'язок між змінною файлового типу і файлом розривається і файлова зміна може використовуватись для роботи з іншим файлом такого ж типу.
Процедура Reset. Ця процедура відкриває існуючий файл. Опис процедури має вигляд: Reset(f; [Size : word] ). Параметр f – файлова змінна, що відповідає будь-якому типу файла. Файлова змінна повинна бути зв’язана із зовнішнім файлом процедурою Assign. Параметр Size – це необов’язковий вираз довжиною в слово, який може вказуватися тільки в тому випадку, якщо f є нетипізованим файлом. Процедура Reset відкриває існуючий зовнішній файл, ім'я якого було пов’язане з файловою змінною f. Якщо файл уже відкритий, то він спочатку закривається, а потім відкривається знову. Поточний вказівник встановлюється на початок файла і стає рівним нулю. Якщо файл текстовий, то він стає доступним тільки для читання. Якщо файл нетипізований, то параметр Size визначає розмір запису, що повинен використовуватися при передачі даних. Якщо цей параметр відсутній, то він за замовчуванням дорівнює 128 байтам.
Процедура Rewrite. Ця процедура створює і відкриває новий файл або очищує старий файл. Опис процедури має вигляд: Rewrite(f: file; [Size : word] ). Параметр f – файлова змінна, що пов'язана за допомогою процедури Assign з файлом будь-якого типу. Параметр Size – необов'язковий вираз довжиною в слово, який може вказуватися тільки в тому випадку, якщо f є нетипізованим файлом. Процедура Rewrite створює новий файл, ім’я якого вказано в процедурі Assign. Якщо зовнішній файл із таким ім’ям вже існує, то він витирається і на його місці створюється новий порожній файл. Якщо файл уже відкритий, то він спочатку закривається, а потім відкривається знову. Поточний вказівник встановлюється на початок файла і стає рівним нулю. Якщо файл – текстовий, то він стає доступним тільки для запису. Якщо файл – нетипізований, то параметр Size визначає розмір запису файла. Якщо цей параметр відсутній, то він дорівнює по замовчуванню 128 байтам.
Функції Eof, Eoln. Функція Eof відслідковує кінець файла, пов’язаного з файловою змінною f. Опис процедури має вигляд: Eof(f):boolean . Параметр f є файловою змінною для файла будь-якого типу. Якщо поточний вказівник файла знаходиться за останнім елементом файла чи якщо файл не містить жодного елемента, то функція Eof(f) повертає значення True. У протилежному випадку вона повертає значення False.
Функція Еоln відслідковує кінець рядка у файлі.
Опис процедури: Еoln(f):boolean. Якщо у файлі вказівник знаходиться на позначці кінця рядка, то функція приймає значення True. У протилежному випадку вона повертає значення False. Якщо функція Eoln записана без аргументу, то перевіряється стандартний файл Input.
Текстові файли. Вміст текстового файла – це послідовність символьних рядків змінної довжини, розділених спеціальною комбінацією символів, котра називається кінець рядка. Кінець рядка – це два символи: керуючий код „переведення каретки” (символ з кодом 13) і керуючий код „переведення рядка” (символ з кодом 10). Текстовий файл завершується спеціальним кодом „кінець файла” (символ з кодом 26). У розділі оголошення змінних файлова змінна для текстових файлів оголошується наступним чином: < Ідентифікатор файлової змінної > : text .
Текстовий файл можна відкрити за допомогою процедур Reset, Rewrite або Append. Процедура Reset відкриває текстовий файл тільки для читання. Процедура Rewrite створює новий тестовий файл, доступний тільки для запису. Крім цих двох, для текстових файлів застосовується ще процедура Append. Процедура Append відкриває існуючий текстовий файл, ставить вказівник після останнього елемента файла і дозволяє дописувати інформацію в кінець цього файла. Опис процедури має вигляд: Append(var f : text). Параметр f – файлова змінна текстового типу, що повинна бути пов’язана з зовнішнім файлом за допомогою процедури Assign. Процедура Append відкриває існуючий зовнішній файл з ім’ям, пов’язаним зі змінною f. Якщо зовнішнього файла з зазначеним ім’ям не існує, то таке звертання є помилковим. Якщо файл f уже відкритий, то він спочатку закривається, а потім відкривається заново. Поточний вказівник встановлюється в кінець файла. Після звертання до процедури Append файл стає доступним тільки для запису.
Текстові файли є файлами послідовного доступу. Це означає, що кожний елемент цього файла може бути прочитаний тільки після прочитання попереднього. Читання з текстового файла відбувається процедурами Read і Readln. Поточний вказівник при роботі з текстовими файлами вказує на поточний символ. Процедури Write та Writeln записують одне або декілька значень у текстовий файл.
При зчитуванні числових значень з текстового файла корисно використовувати функції SeekEoln і SeekEof. Функція SeekEoln шукає кінець поточного рядка (end-of-line) або перший значущий символ.
Опис процедури має вигляд: SeekEoln(var f: text): boolean. Переміщує поточний вказівник файла до символу кінець рядка, пропускаючи символи пропусків та знаків табуляції. Зупиняється на символі кінець рядка (end-of-line), і тоді повертає значення True, або на першому значущому символі (символі, що не є символом пропуску чи знаком табуляції), і тоді повертає значення False.
Функція SeekEof шукає кінець файла (end-of-file) або перший значущий символ. Опис процедури має вигляд: SeekEof(var f: text):boolean. Переміщує поточний вказівник файла до символу кінець файла (end-of-file), пропускаючи символи пропусків, знаків табуляції та символи кінець рядка (end-of-line). Зупиняється на символі кінець файла (end-оf-file), і тоді повертає значення True, або на першому значущому символі (символі, що не є символом пропуску, символами кінця рядка чи знаком табуляції), і тоді повертає значення False. Функцію можна використовувати тільки для текстових файлів.
Типізовані файли. Вміст типізованого файла – це послідовність елементів однакового типу, котрий для цього файла вважається базовим. У розділі оголошення змінних файлова змінна для типізованих файлів оголошується наступним чином: < Ідентифікатор файлової змінної > : file of <базовий тип>;
Базовий тип може бути довільним типом, крім файлового чи складового, що містить файлову компоненту. Типізований файл можна відкрити за допомогою процедур Reset і Rewrite. Процедури Reset і Rewrite відкривають файл для читання і для запису. Процедура Rewrite створює новий файл. Читання з типізованих файлів відбувається процедурою Read, запис – процедурою Write.
Функція FilePos. Повертає позицію поточного вказівника у файлі. Опис процедури має вигляд: FilePos(f):longint. f – файлова змінна. Результатом виконання функції є номер елемента, на який вказує поточний вказівник файла.
Функція FileSize. Обчислює поточний розмір файла. Опис процедури має вигляд: FileSize(var f):longint. f – файлова змінна. Функція обчислює кількість елементів у файлі. Якщо файл порожній, функція прийме значення 0. Функція не може використовуватися для текстового файла.
Процедура Seek. Переміщує поточний вказівник файла па заданий елемент.
Опис процедури має вигляд: Seek(var F; N: Longint). F – файлова змінна будь-якого типу, за винятком текстового файла, а N – номер елемента файла. Поточний вказівник файла F переміщується на елемент із номером N. Номер першого елемента файла дорівнює 0. Seek(F, FileSize(F)) переміщує поточний вказівник файла на кінець файла. Процедуру не можна використовувати до текстових файлів.
Нетипізовані файли. Нетипізовані файли використовуються для організації доступу до будь-яких файлів на диску, незалежно від їх структури. Файл трактується як послідовність елементів (записів) довільного типу. Розмір елементів вказується при відкриванні файла процедурами Reset або Rewrite. Тобто, нетипізовані файли можна трактувати, як типізовані, для яких відомий тільки розмір запису в байтах, але невідомий тип цього запису.
У розділі оголошення змінних файлова змінна для нетипізованих файлів оголошується наступним чином: < Ідентифікатор файлової змінної > : file.
Процедури Reset і Rewrite мають додатковий параметр, який задає довжину елемента (запису) нетипізованого файла в байтах. Якщо цей параметр відсутній, то довжина запису за замовчуванням встановлюється 128 байтів. Процедури Reset і Rewrite відкривають файл і для читання і для запису. Читання з нетипізованих файлів відбувається процедурою BlockRead, запис – процедурою BlockWrite. Процедури Assign, Reset, Rewrite. Close, Seek і Eof виконують ті ж функції, що і для типізованих файлів.
Порядок виконання роботи:
1. Занотуйте номер свого варіанту для звіту.
2. Виберіть згідно номеру свого варіанту дані для завдання
та перепишіть у звіт формулювання цього завдання.
3. Складіть та занотуйте для звіту тексти програм
на мові Pascal для виконання завдання.
4. Запустіть середовище програмування Turbo Pascal.
5. Виконайте налаштування на робочий каталог –
зробіть поточним каталог групи.
6. Створіть новий файл у середовищі програмування Turbo Pascal.
7. Введіть текст першої програми.
8. Дайте назву створеному файлу програми – PR151
та збережіть його у папці групи на робочому диску D.
9. Виконайте компіляцію програми та запустіть її на виконання.
10. Створіть новий файл у середовищі програмування Turbo Pascal.
11. Введіть текст другої програми.
12. Дайте назву створеному файлу програми – PR152
та збережіть його у папці групи на робочому диску D.
13. Виконайте компіляцію створеної програми.
14. Запустіть програму на виконання у середовищі Turbo Pascal.
15. Перегляньте та занотуйте для звіту одержані результати.
16. Вийдіть із середовища програмування Turbo Pascal.
Контрольні запитання:
1. Які типи даних використовують у мові програмування Pascal?
2. Яким чином можна реалізувати розгалуження у мові Pascal?
3. Які типи циклів використовують у мові програмування Pascal?
4. Що представляють собою файлові типи даних мови Pascal?
5. Що представляє собою об’єкт, який називають файлом у Pascal?
6. Яким чином можна задати дані файлового типу у мові Pascal?
7. Які типи файлів використовують у мові програмування Pascal?
8. Які основні етапи можна виділити під час роботи з файлами?
9. Що представляють собою текстові файли у мові Pascal?
10. Що представляють собою типізовані файли у мові Pascal?
11. Що представляють собою нетипізовані файли у мові Pascal?
12. Що представляє собою функція Eoln мови програмування Pascal?
13. Що представляє собою процедура Rewrite мови програмування Pascal?
14. Що представляє собою процедура Close мови програмування Pascal?
15. Що представляє собою процедура Reset мови програмування Pascal?
16. Для чого призначена процедура Append мови програмування Pascal?
17. Для чого призначена функція SeekEof мови програмування Pascal?
18. Для чого призначена функція FileSize мови програмування Pascal?
19. Для чого призначена процедура Seek мови програмування Pascal?
20. Що представляє собою процедура BlockRead мови програмування Pascal?
Студенти повинні знати:
1. загальну характеристику середовища програмування
Turbo Pascal та основні принципи роботи у ньому;
2. оператори та стандартні процедури і функції мови Pascal;
3. пріоритет операцій та правила запису складних виразів;
4. загальну характеристику файлових типів даних мови Pascal;
5. основні принципи побудови програм для роботи з файлами.
Студенти повинні вміти:
1. працювати у середовищі програмування Turbo Pascal;
2. використовувати текстовий редактор середовища
Turbo Pascal для введення та редагування текстів програм;
3. виконувати тестування та налагодження
програми у середовищі програмування Turbo Pascal;
4. складати програми для роботи з файловими типами
даних у середовищі програмування Turbo Pascal.
Порядок оформлення звіту:
Звіт повинен складатися з наступних частин:
1. Тема роботи.
2. Мета роботи.
3. Хід роботи.
4. Висновки до роботи.
Зразок виконання практичної роботи №15
Завдання
Скласти наступну програму:
сформувати файл, який містить відомості про працівників фірми (прізвище, посаду та рік прийому на роботу). Використовуючи
цей файл вивести прізвища співробітників, що пропрацювали
не менше 15 років. Кількість співробітників: 24.
Текст програми:
program filtp;
const k=24; r=2010;
type tzap=record
pr:string[25];
ps:string[15];
rp:word; end;
var z:tzap; i:integer;
f: file of tzap;
begin
assign(f, ’d:\spivrob.zap’);
rewrite(f);
for i:=1 to k do with z do
begin
write(’prizv: ’); readln(pr);
write(’posada: ’); readln(ps);
write(’rik pr na roboty: ’); readln(rp);
write(f,z); end;
close(f); reset(f);
writeln(’ ’ :15, ’prizv’);
repeat
read(f,z);
with z do if (r-rp)>=15 then writeln(pr:30);
until eof(f); writeln; end.
Завдання
Скласти наступні програми:
перша з них має сформувати файл, який містить відомості про книги бібліотеки (прізвище автора, назва, рік видання, кількість примірників та ціна), а друга (використовуючи вже створений файл) – вивести
назви книжок, що відповідають заданій умові.
№
| умова
| кількість книжок
|
| коштують більше 95 гривень
|
|
| видані до 2007 року
|
|
| є в одному екземплярі
|
|
| коштують менше 50 гривень
|
|
| видані після 1998 року
|
|
Практична робота №16
Робота з динамічними змінними
у середовищі Turbo Pascal.
Мета: Навчитися створювати програми для роботи з динамічними змінними на мові Pascal та користуватися основними елементами інтерфейсу середовища програмування для редагування і виконання програм у Turbo Pascal.
Прилади, обладнання та інструменти:
Для виконання практичної роботи використовується ПК з наступним програмним забезпеченням: операційна система Windows XP; середовище Turbo Pascal.
Теоретичні відомості:
Змінні, оголошені в розділах описів основної програми і підпрограм, називають статичними. Для глобальних змінних, тобто змінних, оголошених в розділах опису змінних основної програми, пам’ять відводиться на початку виконання програми і зберігається за ними до завершення виконання програми. Глобальні змінні зберігаються в спеціальній області пам’яті, яка називається сегментом даних. Сегмент даних має максимальний розмір 64 К. Для локальних змінних пам’ять виділяється в момент виклику підпрограми, а по завершенні її виконання ця пам’ять звільняється. Іноді під час виконання програми доводиться працювати з невідомим наперед обсягом даних. Pascal дозволяє створювати нові змінні і знищувати їх безпосередньо під час виконання програми. Змінні, створенням і знищенням яких можна явно керувати під час виконання програми, називаються динамічними змінними. Створення таких змінних відбувається шляхом відведення для них пам'яті в спеціальній області пам’яті, яка називається областю динамічнорозподілюваної пам’яті.Область динамічно розподілюваної пам'яті – це вся пам’ять, яку операційна система робить доступною для програми і яка не використовується її кодом, сегментом даних і стеком.
Доступ до статичних змінних відбувається за допомогою їх ідентифікаторів. Динамічні змінні, кількість і місце розташування яких наперед невідомі, неможливо позначити ідентифікаторами. Єдиним способом доступу до динамічних змінних є адреса, яка вказує на їх місце знаходження в пам'яті. Такі адреси містять змінні, що мають тип вказівник. Вказівник – це змінна, значенням якої є адреса пам'яті, де розташований сам динамічний об'єкт. Сам вказівник займає 4 байти. Вказівники доцільно використовувати в наступних випадках:
• якщо програма працює з великими обсягами даних,
загальний обсяг яких перевищує 64К;
• якщо програма під час виконання опрацьовує сукупність
даних, загальний обсяг яких наперед невідомий;
• якщо програма використовує тимчасові буфери для зберігання даних;
• якщо програма повинна трактувати ті самі дані, як дані різних типів;
• якщо програма використовує зв'язані списки даних.
Опис типу вказівник. Опис типу вказівник складається символу ^, після якого стоїть ідентифікатор базового типу або зарезервоване слово pointer:
^ <базовий тип> або ^ pointer, де <базовий тип> – це ідентифікатор типу. Якщо базовий тип є ще не описаним ідентифікатором, то він повинен бути описаний в тому самому розділі опису типів, що і тип вказівник.
Вбудований тип pointer означає нетипований вказівник, тобто вказівник, який не вказує ні на який конкретний тип даних. З його допомогою зручно динамічно розташовувати дані, структура і тип яких змінюються в ході роботи програми. Значення типу pointer сумісні з усіма іншими типами вказівників.
Розіменування вказівників. Змінні типу вказівник можуть містити адреси даних певного типу або значення, яке позначається словом nil. Зарезервоване слово nil означає константу зі значенням вказівника, який ні на що не вказує (порожній вказівник). Одержання доступу до даних, на які вказують змінні вказівного типу, називають розіменуванням вказівників. Щоб розіменувати вказівник, потрібно розташувати символ " ^ " після змінної вказівного типу. З розiменованим вказівником можна працювати так само, як і зі змінною того типу, на який він вказує. Змінні типу pointer а також вказівники, що вказують на певний тип даних, але приймають значення nil, не можуть бути розіменовані: символ " ^ " після такої змінної призводить до помилки.
Присвоєння вказівникам адреси статичних змінних. Змінним вказівного типу може присвоюватися адреса оголошених в програмі змінних, які розташовані в сегменті даних. Найчастіше так чинять тоді, коли одні і ті самі дані в програмі потрібно інтерпретувати, як дані різного типу. У програмі оголошують змінну певного типу, у якій зберігатимуться ці дані і вказівник на змінну іншого типу. Адресу змінної присвоюють вказівнику, що забезпечує подвійний доступ до одних і тих самих даних і дозволяє різну їх інтерпретацію. Адреса присвоюється змінній-вказівнику операцією @:
< Ідентифікатор вказівника > : = @< Ідентифікатор змінної > .
Операція @ присвоює змінній-вказівнику адресу області пам'яті, що містить статичну змінну.
Створення та знищення динамічних змінних. Динамічні змінні i значення вказівників створюються за допомогою стандартних процедур New і GetMem.
Процедура New має тільки один параметр – змінну, що має тип вказівник. Процедура New в області динамічно розподілюваної пам'яті відводить нову область пам'яті для динамічних змінних і зберігає адресу цієї області в змінній-вказівнику. Синтаксис процедури: New(var Р: <змінна-вказівник>).
Змінна-вказівник може бути вказівником будь-якого типу. Розмір виділеного блоку пам'яті відповідає розміру того типу, на який вказує змінна-вказівник. Якщо для виділення пам'яті під нову динамічну змінну недостатньо вільної пам'яті, то під час виконання програми відбувається помилка.
Крім процедури New існує ще й функція New. Опис функції має вигляд:
New(<тип вказівника>):<значення адреси>.
Особливістю цієї функції є те, що її аргументом є не константа чи змінна певного типу, а власне тип динамічної змінної, яку вона повинна створити. Результатом виконання функції є вказівник конкретного типу.
Динамічні змінні, створені процедурою чи функцією New, знищуються процедурою Dispose. Опис процедури: Dispose(var P: pointer).
Параметр Р є змінною-вказівником і може мати тип, що відповідає будь-якому типу вказівника. Змінна Р повинна бути попередньо створена за допомогою процедури New, або їй було присвоєне значення такої змінної за допомогою оператора присвоювання. Процедура знищує змінну, на яку вказує Р і повертає зайняту нею пам'ять в область динамічно розподілюваної пам'яті. Значення Р стає нeвизначеним.
Іншу можливість створювати динамічні змінні надає процедура GetMem. Процедура GetMem створює нову динамічну змінну вказаного розміру і розташовує адресу блоку в змінній-вказівнику.
Опис процедури: GetMem(var P: pointer; Size: word). Параметр Р є змінною-вказівником і може відноситися до будь-якого типу вказівників. Параметр Size має тип word і задає розмір у байтах області пам’яті, яку слід виділити для динамічної змінної. Найбільший блок, що може бути виділений в області динамічно розподілюваної пам'яті складає 65521 байт (64К). Динамічні змінні, створені процедурою чи функцією GetMem, знищуються процедурою FreeMem. Процедура FreeMem знищує динамічну змінну вказаного розміру. Опис процедури: Freemem(var Р: pointer; Size: word). Параметр Р є вказівником на змінну, для якого було попередньо виконане присвоювання за допомогою процедури GetMem, чи якому було присвоєно значення за допомогою оператора присвоювання.
Процедура Mark присвоює динамічній змінній, на яку посилається вказівник (покажчик), поточну адресу початку вільної ділянки динамічної пам’яті. Синтаксис процедури: Mark (P, Size); де P – нетипований вказівник, Size – розмір динамічної змінної в байтах. Функція MaxAvail повертає розмір найбільшої вільної ділянки в динамічній області пам’яті. Функція MaxAvail не має параметрів. Результат функції належить до типу LongInt. Функція MemAvail повертає кількість всієї вільної пам’яті в області пам’яті, що динамічно розподіляється. Результат функції належить до типу LongInt. Процедура Release звільнює частину динамічної пам’яті. Синтаксис процедури: Release (P); де P – вказівник будь-якого типу, раніше визначений Mark.
Стандартні функції для роботи з адресами:
- функція Addr використовується для отримання адреси змінної або підпрограми і може застосовуватися замість операції визначення адреси @;
- функція Cseg повертає значення типу word, що зберігається в регістрі CS процесора (базис сегмента коду програми);
- функція Dseg повертає значення типу word, що зберігається в регістрі DS процесора (базис сегмента даних програми);
- функція Ofs повертає значення типу word, що дорівнює зміщенню адреси змінної, яка зберігається в сегменті даних, або зміщенню адреси підпрограми, що записана у сегменті коду;
- функція Ptr перетворює пару цілих чисел – значення базису сегмента та значення зсунення – на адресу, тобто на значення типу pointer.
Найчастіше динамічні змінні використовуються у списках.
Списки. Списки використовують для опрацювання і тимчасового зберігання даних у випадках, коли застосування традиційних структур даних, наприклад масивів, недоцільне або неможливе. Список – це ланцюжок пов’язаних один з одним елементів списку, розташованих в області динамічно розподілюваної пам’яті. Елемент списку має тип запис (базовий тип). Одне з полів елемента списку обов’язково євказівником на базовий тип. Адреса першого елемента списку обов’язково зберігається у змінній, що є вказівником на базовий тип. У полях цього запису зберігається необхідна інформація, а в полі, що є вказівником на базовий тип, зберігається адреса наступного запису або значення nil, якщо цей елемент списку є останнім. Такий список називають однонаправленим. У записі базового типу можна запровадити ще одне поле, що є вказівником на базовий тип, і записувати в ньому адресу попереднього елемента списку або значення nil, якщо цей елемент списку є першим. Такий список називають двонаправленим.
Списки мають ряд переваг перед масивами. Списки можна створювати в той момент виконання програми, коли це необхідно, і знищувати, коли в них немає потреби. Кількість елементів списку не потрібно оголошувати наперед. У будь-який момент можна створити нові або знищити кілька існуючих елементів списку. У списки легко вставляти нові елементи і переставляти місцями існуючі. Для цього достатньо поміняти декілька адрес.
Динамічні структури даних.
Розміри динамічних структур даних визначаються і можуть змінюватися під час виконання програми. Основними різновидами динамічних структур є лінійні списки, дерева (нелінійні списки) і динамічні масиви.
Зв’язний лінійний список – це сукупність однотипних компонентів, які послідовно зв’язані між собою за допомогою вказівників. Кожен компонент списку, крім останнього, містить вказівник на наступний (або на наступний і попередній) компонент. Перший компонент списку називається його вершиною, або головою. Над зв’язними лінійними списками можна виконувати такі дії: створення списків, додавання нового компонента; видалення компонента та перегляд списків. Зв’язні лінійні списки поділяються на такі різновиди: однозв’язний (однонаправлений) лінійний список, двозв’язний (двонаправлений) лінійний список; однозв’язний циклічний список, двозв’язний циклічний список, стек, черга.
Однозв’язний лінійний список – це список, в якому попередній компонент посилається на наступний. Двозв’язний лінійний список – це список, в якому попередній компонент посилається на наступний, а наступний – на попередній. Однозв’язний циклічний список – це однозв’язний лінійний список, в якому останній компонент посилається на перший. Двозв’язний циклічний список – це двозв’язний лінійний список, в якому останній компонент посилається на перший, а перший компонент – на останній.
Стек – це однозв’язний лінійний список, в якому компоненти додаються та видаляються лише з його вершини, тобто з початку списку. Стек реалізує принцип обслуговування LIFO: останнім прийшов – першим пішов.
Черга – це однозв’язний лінійний список, в якому компоненти додаються в кінець списку, а видаляються з вершини, тобто з початку списку. Черга реалізує принцип обслуговування FIFO: першим прийшов – першим пішов.
Порядок виконання роботи:
1. Занотуйте номер свого варіанту для звіту.
2. Виберіть згідно номеру свого варіанту дані для завдання
та перепишіть у звіт формулювання цього завдання.
3. Складіть та занотуйте для звіту текст програми
на мові Pascal для виконання завдання.
4. Запустіть середовище програмування Turbo Pascal.
5. Виконайте налаштування на робочий каталог –
зробіть поточним каталог групи.
6. Створіть новий файл у середовищі програмування Turbo Pascal.
7. Введіть текст створеної програми.
8. Дайте назву створеному файлу програми – PR16
та збережіть його у папці групи на робочому диску D.