Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


New(Q);




Dispose(Q);

Приклад

Type D1=^data1; D2=^data2;

Var

E1:D1;

E2:D2;

Описані нижче оператори присвоювання заборонені в Паскалі, оскількиE1 і E2 вказівники різних типів даних:

E1:= E2;

E2:=E1;

Після виконання першого оператора виявиться, що вказівка на об’єкт типу data1 буде вказівкою на об’єкт типу data2, і навпаки, що в Паскалі заборонено.

Приклад. Маємо файл цілих додатніх чисел, що складається з декількох послідовностей чисел, кожна з яких закінчується цілим від’ємним числом –1. Вивести в вихідний файл ці послідовності чисел, але всередині кожної послідовності числа повинні бути в зворотньому порядку.

1 3 7 –1 2 0 6 7 –1 вхідний файл

7 3 1 –1 7 6 0 2 –1 вихідний файл

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

Program Lists;

Type

Pointer=^DataSet;

DataSet=record

Data:integer;

Point:Pointer

End;

Var

R1,R2:pointer;

I:integer;

Inp,out:file of integer;

Begin

Reset(inp);Rewrite(out);

While not eof(inp) do

Begin

R1:=Nil;

Read(Inp,I);

While I<> -1 do

Begin

New(R2);

R2^.data:=I; R2^.point:=R1;

R1:=R2;

Read(Inp,I);

End;

R2:=R1;

While R2<> Nil do

Begin

Write(out, R2^.data);

R2:= R2^.point;

End;

Write(out,’-1’);

End

End.

2.13.Файли

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

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

Означення файлового типу має вигляд:

TYPE ім'я типу = FILE OF тип компонент;

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

TYPE numbers = FILE OF integer;

chfile = FILE OF char;

vector = ARRAY [l..10] OF real;

cornplex = RECORD

re, im: real

END;

s = SET OF 1..10;

vecfile = FILE OF vector;

comfile = FILE OF complex;

sfile = FILE OF s;

stfile = FILE OF string;

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

Наприклад, опис

VAR v : vecfile;

com : comfile;

задає змінні v і com файлового типу. Значеннями цих фай­лових змінних є відповідно файли типу vecfile і comfile. Значення файлової змінної можна описати без попередньо­го визначення типу в розділі TYPE.

Наприклад,

VAR v : FILE OF ARRAY [1.. 10] OF real;

com : FILE OF RECORD

re, im : real

END;

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

Буферна змінна має тип компонентів файла. Наприклад, для описаних вище файлових змінних v і com буферні змін­ні будуть відповідно v ­ (типу vector) і com ­ (типу comp­lex). Значенням буферної змінної є той компонент файла, який у даний момент доступний.

Таким чином, буферна змінна є тим «вікном», через яке можна прочитати чи записати один компонент файла.

Основними видами дій над файлами можна вважати

такі.

1. Перегляд файла. Ця дія виконується послідовним переглядом компонентів файла, починаючи з першого. У про­цесі перегляду змінювати значення компоненти не можна.

2. Створення файла. Дія виконується додаванням но­вих компонент у файл. Причому спочатку файл повинен бути порожнім (не містити жодного компонента). У про­цесі створення файла нові компоненти дозволяється запи­сувати лише в кінець файла.

Інші дії над послідовними файлами є композицією пере­гляду і створення файла.

Для роботи з файлами є стандартна функція eof (іф), де іф — символічно позначено ім'я файла (eof — скорочен­ня від end of file — кінець файла). Функція eof (іф) набуває значення true (якщо досягнуто кінець файла), у решті випадків набуває значення false. Зауважимо, що кожен файл має кінець, який називають ознакою кінця файла. Якщо файл порожній, то значення eof (іф) дорівнює true.

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

reset (іф) (reset — переустановка) — процедура здійс­нює пошук початку файла і готовить його до перегляду. Якщо функція eof (іф) має значення false, тобто файл не порожній, то після виконання reset буферна змінна іф ­ набуває значення першого компонента файла іф. Якщо значення eof (іф) дорівнює true, то файл порожній і після виконання процедури reset (іф) буферна змінна іф не ви­значена.

rewrite (іф) (rewrite — перезапис) — процедура передує створенню файла іф. В результаті виконання процедури значення іф змінюється на порожній файл. Функція eof (іф) набуває значення true і можна створювати новий файл.

get (іф) — процедура здійснює перехід до наступного компонента файла. Буферна змінна іф набуває значення цього компонента. Якщо наступного компонента немає, то значення eof (іф) дорівнює true, а значення іф ­ не визначено. Процедура get може бути виконана лише тоді, коли перед її виконанням значення eof (іф) дорівнює false.

put (іф) — процедура здійснює запис значення буфер­ної змінної іф ­ у файл іф. Запис можливий, якщо перед ви­конанням процедури значення eof (іф) дорівнює true. Після запису значення eof (іф) дорівнює true, а значення іф ­ не визначено.

Усі операції над файлами можна виконати за допомогою цих чотирьох процедур і функції eof.

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

reset (f);

x:= f ­

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

Вказівки

get(f); y:= f­

забезпечать зчитування наступного компонента файла f і присвоювання значення цього компонента змінній у.

Виконання вказівок

rewrite (f);

f­: = z;

Put(f)

забезпечить запис у файл f значення змінної z.

Крім перелічених вище процедур, у мові Паскаль іс­нують ще дві стандартні процедури read і write, які в де­яких випадках дають змогу спростити роботу з файлами.

read (іф, х) рівносильно х:= іф ­ ; get (іф);

write (іф, х) рівносильно іф ­ := х; put (іф);

Якщо в процедурах read і write імена файлів відсутні, то використовуються відповідно стандартні файли input і output.

Зауважимо, що при перегляді файла не можна до стан­дартного файла input застосовувати процедуру reset, а до стандартного файла output не можна застосовувати про­цедуру rewrite. Розглянемо кілька фрагментів програм для роботи з файлами.

Приклади

1. Перегляд файла f1 (зчитування всієї інформації з файла f1):

reset (f1)

WHILE NOT eof (f1) DO

BEGIN

READ(fl,x);

Oбробка чергового компонента файла

END;

Змінна x повинна мати тип компонентів файла f1.

2. Створення файла f2 (запис інформації у файл). Змінна у повинна мати тип компонент файла f2.

rewrite (f2);

WHILE умова DO

BEGIN

Здобуття значення у чергового компонента файла

write (f2, у)

END

3. Копіювання файла f1 у файл f2. Компоненти обох файлів, а та­кож змінна x повинні бути одного типу:


Поделиться:

Дата добавления: 2015-08-05; просмотров: 123; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты