WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

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

ГоловнаІнформатика, Компютерні науки → ІКІТ: Задача восьми королів (Pascal) - Курсова робота

ІКІТ: Задача восьми королів (Pascal) - Курсова робота

Тема. Програмування файлів

1. Поняття файлового типу.

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

 дисковий файл – це файл, який зберігається на диску, і в цьому випадку дані зчитуються або записуються на який-небудь магнітний носій;

 логічний пристрій, такий, наприклад, як попередньо визначені в системі файли INPUT або OUTPUT, що звертаються до стандартних каналів вводу/виводу в ЕОМ. У ролі логічних пристроїв можуть виступати також клавіатура або екран термінала: друкуючий пристрій;

 структуру даних.

Далі файли будуть розглядатись саме як структура даних.

Для роботи з файлами вводяться так звані файлові змінні, які являють собою послідовність компонентів певного типу. Кількість компонентів у файлі (розмір файла) при цьому не визначається. Замість цього система мови ПАСКАЛЬ зберігає слід файла, доступ до якого можна одержати через покажчик файла .

За формою доступу до компонентів розрізняють файли прямого доступу і файли послідовного доступу. Для файлів послідовного доступу характерним є те, що його компоненти можуть опрацьовуватись лише в природному порядку (тобто порядку їх слідування). Щораз, коли якийсь компонент записується у файл або зчитується на нього, покажчик файла по закінченні цієї операції переміщується до наступного компонента.

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

За специфікою файли поділяються на типізовані, нетипізовані та текстові.

Типізований файл являє собою послідовність елементів певного типу. Цими елементами можуть виступати рядки певної довжини, числа, записи.

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

Текстовий файл являє собою послідовність рядкових величин змінної довжини.

Далі буде розглянуто опрацювання типізованого файлу.

2. Опрацювання типізованих файлів.

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

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

Визначення типу запису починається зарезервованим словом record (запис), за ним іде список полів запису. Наприкінці списку полів запису ставиться зарезервоване слово end (кінець).

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

ПРИКЛАД

Type

Student = record

Name:string[30];

Course:1..4;

Group:string[7];

End;

Month = (jan,feb,mar,apr,may,jun,july,aug,sep,oct,nov,dec);

Data = record

Day, Year:integer;

Mon:month;

End;

Album=record

Name:string[15];

Year:integer;

end;

Перший тип запису – Student – містить три поля. Всі поля різнотипові. Два з них являють рядкову величину, одне – цілочисельний діапазон. Другий тип ( Data) має два однотипових поля, які описані через кому. Третє поле має тип, визначений користувачем . Помітимо, що порядок опису полів ніякої ролі не відіграє, він визначається користувачем. Третій тип (Album) має поля, які використовуються у двох попередніх типах. Це дозволяється синтаксисом, оскільки повні імена об'єктів будуть різними. При цьому типи полів можуть бути як однаковими (поле Year), так і різними (поле Name).

Змінні типу запис вводяться аналогічно стандартним типам:

Var

stud1, stud2 : student;

new_date : data;

comp_disk : album;

Відзначимо, що так само, як і для даних типу масив, дозволяється виконувати операції присвоювання між цілими записами однакових типів. У всіх інших випадках опрацювання записів можна здійснювати покомпонентно, причому в межах тих операцій, які дозволяються типом відповідних полів. Виключення складають лише операції вводу-виводу для файлів. Для опрацювання компонента запису (тобто конкретного поля) ім'я поля вказується через крапку після імені запису: stud1.name –поле name запису stud1 .

ПРИКЛАДИ:

stud1:=stud2; {допустима операція}

stud1:=new_date; {недопустима операція різні типи}

read(stud1); {недопустима операція}

readln(stud1.name, stud1.course, stud1.year);

{допустима операція для вказаних типів полів}

comp_disk.year:=new_date;

{допустима операція – однакові типи полів}

readln(new_date.mon);

{недопустима операція – для типу даних

користувача не визначена така операція}

При використанні типів записів так, як це показано вище, одержується досить довгі оператори. Було б зручніше, якби ми могли звернутися до певних полів запису так, якби вони були простими змінними. Цю функцію виконує оператор приєднання with. Він "відкриває" запис таким чином, що ідентифікатори полів можуть використовуватися як ідентифікатори змінних. Оператор має такий формат:

with імена записів do

оператори;

end;

Слідом за зарезервованим словом with в операторі іде список змінних величин запису, відділених один від одного комами. За списком змінних іде зарезервоване слово do. Завершує оператор with зарезервоване слово end. В тілі оператора приєднання тепер можна вказувати неповні імена компонентів записів, а лише імена полів. Оператор автоматично визначить, до якого саме запису виконати вказані оператори. У заголовкові оператора приєднання можна вказувати декілька імен змінних типу запис. При цьому пріоритет при наявності однакових полів буде мати той запис, ім'я якого записане раніше.

ПРИКЛАД:

with stud1 do

readln(name);

read(course);

group:='gr-00-1';

end;

Визначення типізованого файлу починається зарезервованими словами file of, після яких задається тип компонентів файла, описаний як звичайно, а за ним іде ідентифікатор попередньо визначеного типу файлів.

ПРИКЛАД:

type

Student = record

Name:string[30];

Course:1..4;

Group:string[7];

End;

data = file of student;

var

p: data; {типізований файл}

s: student;

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

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

Опрацювання будь-якого файлу складається з трьох етапів:

 зв'язування файлової змінної з дисковим файлом та відкриття файлу:

 власне обробка файлу( тобто, обробка його компонент);

 закриття файлу.

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

Loading...

 
 

Цікаве