профільний курс

ТЕМА: "ФАЙЛОВИЙ ТИП ДАНИХ"

Безлічі значень або змінних з одним загальним ім'ям називаються структурованими (складовими) типами. Є кілька способів побудови складних типів, кожен з яких відрізняється способом звернення до окремих компонентів і, отже, способом позначення компонент, що входять в дані структурованих типів.

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

  1. регулярний тип (масиви);
  2. комбінований тип (записи);
  3. файловий тип (файли);
  4. множинний тип (безлічі).

У завданнях, які ми розглядали, дані надходили з клавіатури, а результати виводилися на екран дисплея. Тому ні вихідні дані, ні результати не зберігались. Всякий раз при виконанні однієї і тієї ж програми, особливо під час її налагодження, доводилося заново вводити вихідні дані. А якщо їх дуже багато? Тоді зручно оформити вихідні дані і результати у вигляді файлів, які можна зберігати на диску точно так же, як і програми.

Файл - це область пам'яті на зовнішньому носії, в якій зберігається деяка інформація.

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

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

Навіщо потрібні файли? Обсяг інформації, яку можна зберегти в файлі, дуже великий. Він значно більше, ніж обсяг, який можна зберігати в оперативній пам'яті, наприклад, при використанні масивів.

Наприклад, VAR FT: FILE OF INTEGER;
VAR M: FILE OF CHAR;
TYPE F = FILE OF REAL АБО VAR F1: FILE OF REAL
VAR F1: F

Так як в описі вказується тип елементів, такі файли називаються типізований. Всі елементи файлу пронумеровані, починаючи з нуля.

Для встановлення зв'язку між файлової змінної в програмі і фізичним файлом на зовнішньому пристрої використовується процедура. ASSIGN (призначити)
Формат процедури:
ASSIGN (ім'я файлової змінної, 'ім'я файлу на диску')
assign (f1, 'prog1.dat');

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

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

Файл відкривається за допомогою процедури RESET (ім'я файлу) - для читання. Для запису файл відкривається за допомогою процедури REWRITE (ім'я файлу). Процедура REWRITE знищує раніше записану інформацію в файлі. При цьому головка зчитувача встановлюється на початок файлу після чого буде записуватися нова інформація.

Процедура RESET так само встановлює на початок і відбувається зчитування. Запис і читання можна здійснити за допомогою операторів READ, READLN, WRITE, WRITELN.

У цьому випадку використовується така форма запису: READ (ім'я файлу, ім'я змінної)

Процедура CLOSE (закрити) використовується для закриття файлу, коли всі дії в ньому закінчені CLOSE (ім'я файлу)

Стандартна функція EOF (назва файлу) використовується для визначення, чи досягнуто кінець файлу (приймає значення брехня або істина). Елементи у файлі зберігаються по рядках. Для визначення кінця рядка файлу використовується оператор циклу WHILE NOT EOLN (ім'я файлу) DO, а для переходу на новий рядок файлу - оператор readln (ім'я файлу).

Приклад 1. Нехай на диску є файл з ім'ям d1.dat, в якому записані дані:
0.54 1.7 4.56 0.2
1.32 1.524 18 0.98
5.6 7.7

Необхідно зробити ці дані доступними програмі і вичистити їх суму.

Рішення. Програма знаходиться на диску c: \ tp7 \ f1.pas

program fff1;
var f1: text; l1: integer;
x, sum: real;
begin
sum: = 0; l1: = 1;
assign (f1, 'c: d1.dat');
reset (f1);
while not eof (f1) do
begin
while not eoln (f1) do
begin read (f1, x);
sum: = sum + x;
end;
readln (f1);
end;
write ( 'сума =', sum: 8: 3);
close (f1);
end.
Відповідь: 42.124

Приклад 2. Нехай змінна a і b отримують наступні значення: a = 510, b = 16.2. Потрібно записати в файл з ім'ям d2.dan рядок у вигляді: a = 510 b = 16.2

Рішення. Програма знаходиться на диску c: \ tp7 \ f2.pas

Приклад 3. Є відомість за результатами іспиту в группе.Будем вважати його вхідним файлом з ім'ям dan.pas:
-------------------------
предмет "фізика"
група т-12
-------------------------
Алексєєв С.А. 5
Вертишев А.Ю. 4
Колдаев В.Д. 5
Петрова Н.Д. 4
Федоренко Р.Ф. 3
Шаронін А.В. 4
Cоставить програму створення вихідного файлу з ім'ям rez.pas, в якому слід записати вихідну відомість і обчислений середній бал:
***************************
середній бал в групі 4.17
кількість учнів 6

Рішення. Програма знаходиться на диску c: \ tp7 \ f3.pas

program fff3;
var finp, fout: text; l1, l2, n, c: integer;
sr, sum: real; smb: char;
begin
l1: = 1; assign (finp, 'c: dan.pas');
l2: = 1;
assign (fout, 'c: rez.pas');
reset (finp);
rewrite (fout);
n: = 0; sum: = 0;
while not eof (finp) do
begin
while not eoln (finp) do
begin
read (finp, smb);
write (fout, smb);
if smb = ':' then begin
read (finp, c); write (fout, c: 3);
sum: = sum + c;
n: = n + 1;
end;
end;
readln (finp);
writeln (fout);
end;
sr: = sum / n;
writeln (fout, '***************************');
writeln (fout, 'середній бал в групі', sr: 5: 2);
writeln (fout, 'кількість учнів', n: 4);
writeln ( 'обчислення закінчені,', 'результати дивіться в файлі rez.pas');
close (fout);
close (finp);
end.
ВІДПОВІДЬ:
-------------------------
предмет "фізика"
група т-12
-------------------------
Алексєєв С.А. 5
Вертишев А.Ю. 4
Колдаев В.Д. 5
Петрова Н.Д. 4
Федоренко Р.Ф. 3
Шаронін А.В. 4
***************************
середній бал в групі 4.17
кількість учнів 6

Приклад 4. У файлі dan1.dat записані цілі числа в декількох рядках.
3 5 2
4 9 1
1 7 1
6 2 8

Обчислити суму елементів кожного рядка і результати разом з вихідними даними помістити в файл з ім'ям dan2.dat

Рішення. Програма знаходиться на диску c: \ tp7 \ f4.pas

program fff4;
var f1, f2: text; lin1, lin2, x, sum: integer;
begin
sum: = 0;
assign (f1, 'c: dan1.dat');
assign (f2, 'c: dan2.dat');
reset (f1);
rewrite (f2);
sum: = 0;
while not eof (f1) do
begin
sum: = 0;
while not eoln (f1) do
begin
read (f1, x);
write (f2, x: 3);
sum: = sum + x;
end;
writeln (f2, '': 3, 'сума', sum: 4);
readln (f1);
end;
writeln ( 'Результат знаходиться в файлі dan2.dat');
close (f1);
close (f2);
end.
відповідь:
3 5 2 сума 10
4 9 1 Сума 14
1 7 1 Сума 9
6 2 8 сума 16

II. Практична робота на ЕОМ.

Викликати з диска програми прикладів 1, 2, 3, 4, запустити на виконання, отримати результати. Розібратися, як працює програма. Результати помісити в зошит.

III. Домашнє завдання.

Завдання. Створіть файл кom1.dat, в якому зберігається наступна інформація:

КОРВЕТ. 48
УКНЦ. 96
ЯМАХА MSX-1. 16
ЯМАХА MSX-2. 128
БК-0010. 16
IBM PC / XT. 256
IBM PC / AT. 512