Файл: ОП Конспект лекций - Паскаль.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 28.06.2020

Просмотров: 1632

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Тема 13: Складні типи. Масиви

Тема 14: Багатомірні масиви

Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування

Тема 16: Динамічна пам'ять. Адреси і покажчики

Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті

Тема 18: Процедури та функції для роботи з динамічною пам’яттю

Тема 19: Символьний тип даних. Упаковані масиви

Тема 20: Процедури та функції для обробки рядків

Тема 21: Структурований тип даних - безліч

Тема 22: Структурований тип даних – записи

Тема 23: Опис файлових змінних. Обробка типізованих файлів

Тема 24: Послідовний та прямий доступ до файлів

Тема 25: Обробка не типізованих файлів

Тема 26: Робота з текстовими файлами

Тема 27: Типізовані константи

Тема 28: Поняття та робота з процедурами та функціями

Тема 29: Використання модуля CRT. Програмування клавіатури

Тема 30: Використання модуля CRT. Текстове виведення на екран. Програмування звукового генератора

Тема 31: Графічні можливості TP 7.0. Використання бібліотеки Graph

PointType = record

Тема 32: Бібліотечні модулі користувача

Тема 33: Основні принципи ООП. Створення об’єктів. Використання об’єктів

Список літератури

Додаток А

Основні алгоритми обробки масивів

Додаток Б

Питання перевірки знань з теорії

Додаток В

Поширені коди клавіш

Додаток Д

Коди сканування клавіатури

type

spisok = record

fam : string[20];

oc : array[1..4] of byte;

end;

var

uch : array[1..n] of spisok; i, j, k, sum : integer;

begin

writeln(Уведіть список ‘,n,’ учнів:’);

for i :=1 to n do

begin

writeln(‘прізвище ’,i,’-го учня:’);

readln(uch[i].fam);

for j := 1 to 4 do

begin

writeln(j,’-я оцінка:’);

readln(uch[i].oc[j]);

end;

end;

for i := 1 to n do

begin

with uch[i] do

begin

for j := 1 to 4 do sum := sum + oc [j];

if sum=20 then

begin

write(‘Відмінник: ‘);

writeln(fam); k := k+1;

end;

end;

end;

if k=0 then writeln(‘Відмінників немає’);

end.



Питання для контролю.

  1. Поняття запису в Pascal-і.

  2. Звертання до елементів запису.

  3. Оголошення запису.

  4. Яка роль службових слів Record і End?

  5. Що таке поле запису?

  6. Як використовується елемент запису в програмі?

  7. Які операції можна виконувати над елементами запису?

  8. Оператор приєднання, його опис і застосування.


Тема 23: Опис файлових змінних. Обробка типізованих файлів


Файл – це пойменована область пам'яті на зовнішньому носії, призначена для збереження даних.

Робота з файлом у мові Pascal складається з таких етапів: оголошення файлової змінної; зв'язування файлової змінної з іменем наявного файла або файла, що створюється; відкриття файла; обробка файла; закриття файла.

Файли класифікують за типом компонентів і за методом доступу до них. За типом компонентів розрізняють текстові та бінарні (двійкові) файли, а за методом доступу — файли послідовного і прямого доступу. Текстові файли призначені для збереження текстів (наприклад, текстів Pascal-програм), а бінарні файли використовуються для збереження даних різних типів.

Текстовий файл є сукупністю символьних рядків змінної довжини. Кожен рядок завершується маркером кінця рядка — спеціальною парою керуючих символів: #13 (повернення каретки) та #10 (переведення рядка). Наприкінці файла записується маркер кінця файла — керуючий символ #26 (рис. 23.1).


Рисунок 23.1. Текстовий файл, що є сукупністю рядків


Бінарні файли в мові Pascal поділяються на типізовані та нетитзовані. Типізований файл складається з компонентів одного типу. Кожний компонент має порядковий номер, номер першого компонента дорівнює нулю. Інформація в типізованих файлах зображується в тому самому вигляді, що і в пам'яті комп'ютера, і тому відпадає потреба у використанні керуючих символів типу кінця рядка або повернення каретки. Приклад зображення даних у файлі, що містить компоненти рядкового типу, наведено на рис. 23.2.


Рисунок 23.2. Текстовий файл, що містить компоненти рядкового типу


Нетипізований файл у мові Pascal розглядається як сукупність байтів. Компонентом нетипізованого файла вважається запис, довжина якого за замовчуванням становить 128 байт.

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

Синтаксис оголошення файлової змінної залежить від типу файла. Далі наведено синтаксис оголошення змінної текстового, типізованого та нетипізованого файла.


var <ім'я файлової змінної>: text;

var <ім'я файлової змінної>: file of <тип компонентів>;

var <ім'я файлової змінної>: file;

Для опису файлу використовуються службові слова File та Of, за яких випливає базовий тип елементів. Базовий тип може бути будь-як типом.

Файли повинні бути описані в програмі або явно в розділі Var, або з використанням розділу Type.

Оголошення файлів у розділі Var має вигляд:


Var ім'я файлової змінної : file of базовий тип;


наприклад,


Var

F1 : file of char; {файл символьних даних}

F2 : file of integer; {файл цілих даних}


F3 : file of real; {файл дійсних даних}


Оголошення в розділі Type має вигляд:


type ім'я типу = file of базовий тип;

var ім'я файлової змінної : ім'я типу;


Операції обробки файлів можна розділити на настановні та завершальні, і операції введення-виведення.


Настановні та завершальні операції реалізовані у вигляді процедур:


Assign; Reset; Rewrite; Close.


Процедура Assing установлює зв'язок між конкретним зовнішнім файлом на магнітному носії і змінною файлового типу, що буде представником цього файлу в програмі. Загальний вигляд процедури:


Assign (файлова змінна, 'повне ім'я зовнішнього файлу');


Наприклад, після виконання

begin

assign (f1,’c: \ tp \ pasfiles \ d1.pas’);

файлова змінна F1 буде зв'язана з дисковим файлом D1.pas, розташованим на диску С: у підкаталозі PASFILES каталогу ТР.

Після установки зв'язку між файловою змінною і зовнішнім файлом процедурою Assign у програмі повинна іти процедури Reset чи Rewrite, які мають один параметр – файлову змінну:


Reset (файлова змінна);

чи

Rewrite (файлова змінна);


Ці процедури призначені для відкриття зовнішніх файлів. Наприклад, після виконання

begin

assign (f1,’c:\tp\pasfiles\d1.pas’);

reset(f1);


процедура Reset(f1) відкриє зовнішній файл d1.pas, тобто знайде його на магнітному носії, створить буфери для обміну з ним і установить поточний покажчик на початок файлу (на його нульовий елемент). Процедура Rewrite виконає ту ж операцію, що і процедура Reset. Різниця між ними наступна. При використанні процедури Reset зовнішній файл, що відкривається, повинен існувати на магнітному носії, інакше виникне помилка. Процедура Reset при відкритті зовнішнього файлу не стирає його дані.

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

Процедура


Close (файлова змінна);


закриває зовнішній файл і ліквідує створені буфери для обміну з ним. Після цього файлову змінну можна зв'язати процедурою Assign з іншим зовнішнім файлом. Варто помітити, що при закінченні роботи програми автоматично закриваються всі відкриті в ній файли. Але явне закриття файлів процедурою Close є гарним стилем програмування.


Операції введення-виведення. Читання даних з файлу виконується за допомогою процедури Read. Загальний вид процедури:


Read(файлова змінна, змінні);

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

begin

assign (f1,’c: \ tp \ pasfil es \ d1.pas’)

reset(f1);

read(f1,s);

після виконання процедури Read (f1,s), починаючи з поточної позиції покажчика файлу буде послідовно зчитуватися значення, що містяться в зовнішньому файлі d1.pas. Кожне прочитане значення буде привласнюватися перемінній S, а покажчик файлу буде зміщатися на наступну позицію.


Запис даних у файл виконується за допомогою процедури Write. Загальний вигляд процедури:


Write(файловий змінна, список виражень);


тут за файловою змінною випливає список виражень, тип яких повинен збігатися з базовим типом файлу, з яким зв'язана файлова змінна.


Крім процедур і функцій, розглянутих раніше, у мові Pascal визначено процедури, за допомогою яких можна видалити файл або перейменувати його, тобто виконати операції, властиві операційній системі. Для видалення файла використовують процедуру Erase, а для перейменування — процедуру Rename. Синтаксис зазначених процедур є таким:


Еrаsе(<файлова змінна>);

Rеnаmе(<файлова змінна>,<нове ім'я>);


Тут <нове ім' я> — рядок, який має задовольняти вимоги операційної системи щодо специфікації імен файлів. Під час виклику процедур Erase та Rename файл має бути закритим.


Нагадаємо, що в мові Pascal визначено два різновиди бінарних файлів: типізовані і нетипізовані файли. Типізований файл є послідовністю однотипних компонентів. Нетипізований файл можна відкрити лише як файл компонентів однакового розміру, тобто як файл однотипних компонентів. Компоненти бінарного файла нумеруються, але їх кількість не є наперед відомою, як у масивах. Між компонентами не записуються жодні роздільники. Такого поняття, як рядок, а отже, і маркер кінця рядка, для бінарних файлів не означено.

Зчитування з бінарних файлів здійснюється лише процедурою Read, а запис -лише процедурою Write. Застосування до бінарних файлів процедур Readln або Writeln є неприпустимим, оскільки для таких файлів не означено поняття рядка.


Питання для контролю.

  1. Поняття файлу в Pascal-і.

  2. З яких етапів складається робота з файлом у мові Pascal?

  3. Типи файлів за методом доступу.

  4. Класифікація файлів за типом компонентів.

  5. Настановні та завершальні операції.

  6. Операції введення-виведення.

  7. Процедури видалення та перейменування файлів.



Тема 24: Послідовний та прямий доступ до файлів


На відміну від масиву довжина файлу не задається, а місце елемента не визначається індексом. Файл, структурно організований як послідовність елементів, де кожен елемент стає доступним після перебору всіх попередніх елементів, називається послідовним. Файл, збережений на диску, називається зовнішнім чи вхідним файлом. У Pascal-програмі представником файлу є змінна файлового типу, що інтерпретує файл як нескінченний список значень того самого базового типу. Зі змінною файлового типу пов’язане поняття поточного покажчика файлу. Поточний покажчик – це схована змінна, тобто вона неявно описана разом з файловою змінною, і вказує на деякий конкретний елемент файлу. Графічна інтерпретація файлу, пов'язаного з файловою перемінною має вигляд зображений на рис.24.1:




Поточний покажчик

Рисунок 24.1. Графічна інтерпретація файлу


Читання з файлу чи запису у файл виконується поелементно, причому записується чи зчитується той елемент файлу, що позначений поточним покажчиком. При цьому покажчик переміщується, указуючи той чи інший елемент. Всі елементи файлу пронумеровані; перший елемент має нульовий номер.

Компоненти бінарного файлу мають однаковий розмір. Цим зумовлені певні переваги бінарного файлу над текстовим. По-перше, стає можливим прямий доступ до компонентів файлу за їхніми номерами. Під прямим доступом розуміється можливість встановлювати файловий покажчик на заданий компонент без послідовного перебирання попередніх компонентів. По-друге, відкриття бінарного файлу процедурою Reset робить можливим як читання, так і запис довільних компонентів файлу без руйнації його вмісту. Це пояснюється тим, що модифікація кількох компонентів усередині бінарного файлу не призведе до зміни їх розміру, а отже, не потребуватиме зсуву інших компонентів. Нагадаємо, що процедура Rewrite також відкриває бінарний файл у режимі читання і запису, але при цьому вона знищує його вміст (якщо файл уже існував).

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


Таблиця 24.1. Процедури та функції прямого доступу до компонентів файлів

Ім'я функції або процедури

Призначення

Seek(var f; n: Longint);

Переміщує файловий покажчик на компонент з номером n. Файл f має бути відкритий

Truncate(var f);

Видаляє всі компоненти файла f від поточного компонента до кінця файла

FilePos(var f): Longint;

Повертає номер запису, на який посилається файловий покажчик

FileSize(var f): Longint;

Повертає кількість компонентів файла f

Треба взяти до уваги, що процедури Seek, Truncate і функція FilePos не працюють з текстовими файлами.

Приклад 1

Обчислити кількість компонентів в файлі дійсних чисел, вивести вміст файлу на екран.