- •Структура програми
- •Ідентифікатори.
- •Запис чисел на Pascal.
- •Додаткова інформація про оператор write (writeln)
- •3. Дано 3-й дійсні числа а,ь,с. Визначити, скільки серед них від'ємних.
- •Складений оператор.
- •Результати операцій над логічними даними:
- •Var ім 'я_масиву:аrrау[t1 ] of t2;
- •Var ім’я_мас:ім 'я_типу;
- •Var ім’я_масиву: ім'я_типу;
- •Процедури.
- •Структура процедури.
- •Параметри-значення та параметри-змінні.
- •Функції.
- •Відмінні особливості функції в порівнянні з процедурами:
- •Рекурсивні структури.
- •If умова then a;
- •If умова then a;
- •If умова then a;
- •Множини.
- •Var ім'я_запису: record
- •Var ім'я_запису:ім'я_типу;
- •Оператор приєднання.
- •With ім’я_запису do
- •Записи з варіантами.
- •Var ім'я_файлу: iм)я_типу; читання файлів.
- •Запис файлу.
- •Write(ім’я, параметри);
- •Читання та запис файлів.
- •Файлова система.
- •Фізичні файли.
- •Файлові типи.
- •Текстові файли.
- •Текст - орієнтовані процедури та функції.
- •Створення текстових файлів.
- •Операції введення-виведення текстових файлів.
- •Переваги типізованих файлів :
- •Безтипові файли.
- •Послідовний та прямий доступ до файлів.
- •Вказівники.
- •Зсилочнии тип.
- •Var p:pointer; (змінна — вказівник);
- •Операції розіменування.
- •Списки.
- •1. Зв'язне представлення з одним зв'язком.
- •2. Зв'язані представлення з двома зв'язками.
- •3В’язані списки.
- •Перегляд зв'язаного списку.
- •Списки властивостей.
- •Pascal – об’єктно-орієнтована мова.
- •Опис об’єкта: рядок
- •Розробка програм на мові тр з використанням мов Асемблера та с.
- •Підпрограма сортування методом обміну
- •Застосування механізму переривань
- •Лівий, правый: зв ’язок; дані: тип_даних;
Файлова система.
Любий обмін даними припускає наявність джерела інформації, каналу передачі та її приймача. В випадку обміну даними між програмою та периферійними пристроями одним кінцем обміну даними завжди являється оперативна пам'ять машини, а другим кінцем в Паскалі завжди являється файл. Файлова система, що реалізується в Паскалі складається як би з двох рівнів: логічних файлів та фізичних. Логічний файл описується як змінна одного із файлових типів, визначених в ТР. Після того, як в програмі в розділі опису змінних об'явлена файлова змінна, вона може бути використана як засіб звернення до любого фізичного файлу. Саме ім'я фізичного файлу може з'явитися в програмі тільки один раз, коли спеціальною процедурою встановлюється, що об’явлений логічний файл буде служити засобом доступу тільки до цього фізичного файлу.
Наприклад, якщо ми хочемо працювати з текстовим файлом Text.doc, то в програмі повинні бути наступні рядки:
{об'являємо файлову змінну f, вводимо логічний файл типу text}
Var f:text;
Begin
Assign(f, 'c:\text.doc');
{ця процедура зв'язує фізичний файл text.doc на диску С: з логічним файлом f}
end;
Після цього всі звернення до файлу на диску будуть виконуватися через файлову змінну f. Логічні файли уніфіцирують роботу з файлами, дозволяючи працювати не безпосередньо з пристроями машини, а з їх логічними позначеннями.
Фізичні файли.
Все що являється файлом в MS-DOS являється фізичним файлом в ТР. Визначається фізичний файл рядком з його ім'ям. Імена можуть бути рядковими константами або зберігатися у рядкових змінних. Ім'я файлу на диску може мати адресну частину. ‘С: \PAS\Test.PAS’
Інший різновид фізичних файлів - це пристрої MS-DOS. MS-DOS не робить особливих відмінностей між традиційними файлами та пристроями. Пристрої мають свої фіксовані імена і багато в чому схожі з файлами. Ім'я пристрою, наприклад, може стати на місце імені файлу на диску при копіюванні.
Фізичні файли - це пристрої організовані як текстові файли. Для нормальної роботи їх треба зв'язати з текстовими логічними файлами. Не визначена така структура даних, як файл файлів в пам’яті. Будь-який об’явлений
логічний файл має зміст тільки після встановлення зв'язку з зовнішнім фізичним файлом. З файловою системою зв'язано поняття буферу введення-виведення. Буфер - це область пам'яті, що відводиться при відкритті файлу. При запису у файл вся інформація спочатку направляється в буфер і там накопичується до тих пір, поки весь об'єм буферу не буде заповнено. Тільки після цього або після спеціальної команди скидання буферу здійснюється передача даних по призначенню на диск або у порт. Аналогічно при читанні із файлу зчитується не стільки, скільки запитується, а скільки поміститься в буфері. Механізм буферізації дозволяє більш швидко та ефективно обмінюватися інформацією з різними пристроями. Для текстових і безтипових файлів можна встановлювати розмір буферу на свій розсуд.
Файлові типи.
Турбо Паскаль підтримує три файлових типи:
1. Текстовий; (тип text)
2. Компонентний (типу file of):
3. Безтиповий (типу file)
Текстові файли — це файли, що складаються з кодів ASCII, виключаючи розширені та керуючі коди. Ці файли організуються рядками і обов'язково містять кінець файлу.
Компонентні файли на відміну від текстових складаються з машинних представлень чисел, символів та структур, з них побудованих. Вони зберігають дані в тому самому вигляді, що і пам'ять ЕОМ. Тому засобами компонентних файлів можна здійснювати обмін даними тільки між дисками і робочою пам’яттю програми, але не можна, наприклад, напряму вивести дані на екран.
Безтипові файли також складаються з машинних представлень даних. Відрізняються від компонентних файлів тим, що компонентні мають справу тільки з даними раніше об'явленого типу, а безтипові - з довільними наборами байтів незалежно від їх структури та природи. Опис мови визначає безтиповий файл як низькорівневий канал введення-виведення для доступу до любих файлів з любим типом.
Принцип роботи з файлами один, хоч і є різниця у наборах команд для роботи з різними файловими типами. Для всіх без виключення файлів необхідне попереднє зв'язування їх файлових змінних з фізичними файлами.
Файлові змінні, описані у програмі, не можуть брати участь в операторі присвоєння. При використанні файлових змінних любого типу в якості формальних параметрів заголовків процедури та функції вони завжди повинні бути описані як Var-параметри.
В ТР є ряд стандартних процедур для роботи з файлами любих типів. Також в ТР не визначено звернення до буферної змінної. Розглянемо процедури та функції, які відносяться до всіх типів файлів.
1. Assign (Var f; FileName:String);- ця процедура встановлює зв'язок між логічним файлом, який описується файловою змінною f любого файлового типу і конкретним файлом MS-DOS, назва якого міститься у рядковому параметрі FileName. Рядок FileName може містити ім'я файлу на диску (в тому числі і повне ім'я файлу), ім'я стандартного пристрою MS-DOS (CON, PRN) або пустий рядок. Ім'я фізичного файлу повинно бути коректним і унікальним, не можна вставляти символи шаблонів (‘*’ ‘?’) в ім'я файлу. Сама процедура Assign не займається аналізом коректності імені файлу і безперечно зв'язує дане ім'я з логічним файлом f. Логічний файл при цьому вважається закритим, а розмір буферу не визначеним (якщо файл f зв'язаний з некоректним ім'ям, то це викличе помилку введення-виведення тільки при спробі виконати любу дію : відкрити файл або вилучити його). Будучи колись встановленим, зв'язок між файловою змінною f та фізичним файлом зберігається до наступного виклику Assign. Після того, як логічний файл зв'язаний з фізичним, його можна відкривати для читання та запису:
Reset(var f);- для читання
Rewrite(var f); - для запису.
Повторний виклик Reset повторить послідовність читання знову на самий перший елемент файлу, при цьому втрата даних виключена. А повторне звернення до Rewrite зітре поточний зміст файлу, та налагодить файл до заповнення з першого елементу.
2. Close (Var f); - закриває відкритий до цього логічний файл f. Спроба закрити вже закритий файл або невідкритий файл викликає збій програми (якщо ж програма перервалася через помилку і до закриття файлу, то він все ж таки буде створений на носії, але вміст останнього буферу не буде перенесено у файл).
3. Rename (Var f; NewName: string); - перейменування файлів. Перейменування файлів дозволяє перейменовувати фізичні файли на диску, зв'язані з логічним файлом f. Перейменування виконується тільки з закритим файлом, в протилежному випадку виникає збій. Після даної процедури можна знову відкривати файл, але f буде зв'язана вже з новим ім'ям. Неможна змінювати ім'я, змінюючи ім'я диску та шлях до файлу.
Наприклад:
Assign(Var f; 'A: \file. ааа ');
Rename(Var f; 'C:\file.bbb');
В другому операторі помилка, так як крім імені файлу змінюється і диск
на якому він знаходиться (перенесення не визначено в мові, це треба
конструювати засобами ТР).
4. Erase (Vаr f); - вилучення файлів. Ця процедура знищує фізичний файл на диску. Файлова змінна повинна бути попередньо зв'язана з існуючим фізичним файлом. Сам файл до моменту виклику Erase повинен бути закритим.
Приклад:
Assign(Var f; FileName);
Erase(Var f);
Якщо файла з ім'ям FileName не існує, то виникає збій при спробі знищити його. До процедур, які відносяться до файлів любих типів, входить логічна функція:
EOF(Var f):Boolean;
Вона повертає значення True, коли при читанні досягнутий кінець файлу. У всіх останніх випадках вона повертає значення False. Стан EOF відновлюється автоматично при кожному зверненні до процедури. Файл f при цьому повинен бути відкритим.
