- •Передмова
- •Алфавіт, лексика, структура програми. Організація уведення/виводу. Програмування завдань лінійної структури.
- •Лабораторна робота №2 Алгоритмічна структура - розгалуження. Умовний оператор, оператор вибору.
- •Лабораторна робота №3 Організація циклів.
- •Лабораторна робота №4 Структурні типи даних. Одномірні масиви. Сортування масивів.
- •Лабораторна робота №5 Файлові типи й файлові змінні. Операції над файлами.
- •Додаток 1 Типи даних
- •Додаток 2
- •Додаток 3 Умовні позначки, які використовуються при складанні блок-схем
- •Додаток 4 Повідомлення й коди помилок
- •Список літератури
- •Методичні вказівки
- •270016, Одеса – 16, вул. Львівська, 15
Лабораторна робота №5 Файлові типи й файлові змінні. Операції над файлами.
Мета роботи: знайомство з файлами. Отримання навичок роботи з текстовими файлами.
Постановка задачі: розробити алгоритм рішення завдання за заданим варіантом, скласти програму мовою Pascal, відлагодити її, виконати розрахунки для кількох варіантів вхідних даних, відповісти на контрольні питання.
Теоретичні відомості:
Типи даних, з якими ми дотепер мали справу, призначені для маніпулювання інформацією, що втримується в оперативній пам'яті комп'ютера. Однак, як відомо, оперативна пам'ять здатна зберігати дані тільки тимчасово - поки комп'ютер включений. Представимо, що протягом дня проводився якийсь складний розрахунок, до результатів якого прийде звертатися згодом - іноді через багато днів. Як зберегти ці результати, щоб вони були в цілості й схоронності, постійно під рукою й при цьому можна було включати комп'ютер, коли необхідно? Очевидно, що для ефективної роботи потрібний якийсь спосіб тривалого зберігання інформації. Для довгострокового зберігання інформація з оперативної пам'яті переноситься у файли. Файл являє собою деяке пойменоване місце на зовнішньому носії. Як зовнішній носій можуть служити різного роду диски (тверді, гнучкі, компакт-диски й т.д.)
Крім «тривалості» у файлів є ще одна відмінна риса: їхній невизначений об'єм (або довжина). Якщо для кожного з інших структурних типів завжди точно визначено, скільки елементів містить то або інше значення, те, скільки елементів повинне бути у файлі, при оголошенні файлового типу не вказується. Максимальна довжина файлу обмежується тільки вільним місцем на диску, і це є основною відмінністю файлів від масивів.
Для збереження інформації в Turbo Pascal передбачена можливість визначати файлові типи й файлові змінні. Після цього інформацію, що може знадобитися згодом, можна перенести у файл на диску.
Файловий тип або змінну файлового типу можна задати одним із трьох способів:
<ім'я> = FILE OF <тип>;
<ім'я> = TEXT;
<ім'я> = FILE;
Тут <ім'я> - ім'я файлового типу (правильний ідентифікатор);
file, of - зарезервовані слова (Eng. - файл, з);
text - ім'я стандартного типу текстових файлів;
<тип> - будь-який тип Турбо Паскаля, крім файлів.
Наприклад:
var
fl : file of char;
f2 : text;
f3 : file;
Залежно від способу оголошення можна виділити три види файлів:
типізовані файли (задаються пропозицією FILE OF...);
текстові файли (визначаються типом TEXT);
не типізовані файли (визначаються типом FILE).
У наших прикладах F1 - типізований файл, F2 - текстовий файл, F3 - не типізований файл. Вид файлу, загалом кажучи, визначає спосіб зберігання інформації у файлі. Однак у Pascal немає засобів контролю виду раніше створених файлів. При оголошенні вже існуючих файлів програміст повинен сам стежити за відповідністю виду оголошення характеру файлу.
Турбо Паскаль уводить ряд процедур і функцій, застосовних для будь-яких типів файлів:
Assign, Reset, Rewrite, Close, Rename, Erase, Eof, IOResult.
Процедура Assign (var f; FileName: String) зв'язує логічний файл f з фізичним файлом, повне ім'я якого задане в рядку FileName.
Приклад:
var
fi, fo : text;
begin
assign(fi, 'AUX');
assign(fо, 'LPT2');
end.
Турбо Паскаль ніколи не зв'язує імена логічних пристроїв з дисковими файлами, у цьому змісті ці імена можна вважати зарезервованими. Іншими словами, не можна, наприклад, звернутися до дискового файлу з ім'ям PRN, тому що Турбо Паскаль завжди інтерпретує такий запит як звертання до принтера.
Процедура Reset (var f) відкриває логічний файл f для наступного читання даних або, як говорять, відкриває вхідний файл. Після успішного виконання процедури Reset файл готовий до читання з нього першого елемента.
Процедура ReWrite(var f) відкриває логічний файл f для наступного запису даних (відкриває вихідний файл). Після успішного виконання цієї процедури файл готовий до запису в нього першого елемента.
Процедура Close (var f) закриває відкритий до цього логічний файл. Виклик процедури Close необхідний при завершенні роботи з файлом. Якщо з якоїсь причини процедура Close не буде виконана, файл все-таки буде створений на зовнішньому пристрої, але вміст останнього буфера в нього не буде перенесено. Для вхідних файлів використання оператора закриття файлу необов'язково.
Логічна функція EOF (var f): boolean повертає значення TRUE, коли при читанні досягне кінця файлу. Це означає, що вже прочитано останній елемент у файлі або файл після відкриття виявився порожній.
Процедура Rename (var f; NewName: String) дозволяє перейменувати фізичний файл на диску, пов'язаний з логічним файлом f. Перейменування можливо після закриття файлу.
Процедура Erase( var f) знищує фізичний файл на диску, що був пов'язаний з файлової змінної f. Файл до моменту виклику процедури Erase повинен бути закритий.
Розглянемо використання файлів на попередньому прикладі.
Дано масив з 5 елементів. Необхідно впорядкувати всі елементи по зростанню. Введення й вивід елементів здійснювати за допомогою файлів.
program SortNew;
Var a: array[1..5] of integer;
i, j, temp: integer;
f1, f2: text;
name1, name2: string[20];
Begin
writeln('Введить імя вхідного файлу);
readln(name1);
assign(f1, name1);
reset(f1);
for i:=1 to 5 do { Читання масиву з файлу }
read(f1, a[i]);
close(f1);
writeln('Введить імя вихідного файлу’); { Створення вихідного файлу }
readln(name2);
assign(f2, name2);
rewrite(f2);
for i:=1 to 4 do
for j:=i+1 to 5 do
Begin
if a[i]>a[j] then
begin
temp:=a[i];
a[i]:=a[j];
a[j]:=temp;
end;
end;
writeln('Отриманий масив: ');
for i:=1 to 5 do
Write(f2, a[i]);
close(f2)
END.
Варіанти завдань для самостійної роботи:
Скласти програму на використання текстових файлів, враховуючи варіанти попередньої лабораторної роботи.
Контрольні питання:
Що таке файл?
Які дії і в якій послідовності необхідно виконувати при роботі з файлами?
Для чого потрібна процедура assign?
Як працює оператор вводу із файлами?
Як працює оператор виводу із файлами?
Як відкрити файл для читання?
Як відкрити файл для запису?
Як закрити файл?