КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
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 (типу complex). Значенням буферної змінної є той компонент файла, який у даний момент доступний. Таким чином, буферна змінна є тим «вікном», через яке можна прочитати чи записати один компонент файла. Основними видами дій над файлами можна вважати такі. 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 повинні бути одного типу:
|