Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

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






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





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

Опис записного типу складається з ключового слова Record, за яким іде список компонент із зазначенням їхніх типів. Завершує опис, ключове слово end. Компонента запису називається полем.

Загальний вигляд опису записного типу:

Type <ім'я типу> = Record

<ім'я поля>: <тип поля>;

......................

<ім'я поля>: <тип поля>

end;

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

Над даними записного типу, як над одним цілим, визначені дві операції: селекція (виділення) компоненти та оператор присвоєння. Для селекції компоненти деякого запису після імені змінної записного типу ставиться знак '. ' (крапка), за яким вказується ім'я поля. В операторі присвоєння можна вживати лише записи, ідентичні за структурою.

Наприклад, для задання інформації про студента можна ввести записний тип student із структурою

Type exam = (algebra, geometry, math_an);

mark = Array [exam] of 2..5;

date = Record

day: 1..31;

month: 1..12;

уеаr: 1950..1990

end;

student = Record

name: string [40];

group: string [6];

birthday: date;

sesion: mark

end;

Var s,s1: student;

d: date;

Величина s.name має тип string І40], величина s.sesion має тип mark, величина s.sesion[algebra] є діапазонного типу 2..5. Поле birthday має, в свою чергу, записний тип, тому доступ до його полів матиме вигляд: s.birthday.day - день, s.birthday.year – рік народження.

Оператор приєднання with. Присвоєння конкретного значення змінній s може мати такий вигляд:

s.name:= 'Суботiна Лілія Геннадіївна'; s.group:='ПЕ-991';

s.birthday.day:=29; s.birthday.month:=3; s.birthday.year:=1980;

s.sesion[algebra]:=5; s.sesion[geometry]:=5; s.sesion[math_an]:=4.

Використання полів є громіздким через те, що постійно зазначається ім'я змінної-запису. Для скорочення подібних записів використовують оператор приєднання with. Цей оператор задає область дії, в якій для запису, вказаному після with, ідентифікація поля відбувається за допомогою простого імені поля.

Загальний вигляд оператора приєднання:

with <ім'я змінної-запису > do <оператор>;

Таким чином, наведений вище фрагмент матиме вигляд:

with s do begin

name:= 'Суботiна Лілія Геннадіївна'; group:= ПЕ-991 ';

with birthday do begin

day:=29; month:=3; year:=1980;

end;

sesion[algebra]:=5; sesion[geometry]:=5; sesion[math_an]:=4;

end.

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

Запис

with a do

with b do

with c do <оператор>

еквівалентний запису

with a,b,c do <оператор>

Область дії імені поля запису - внутрішній запис, в якому описано це поле.

Наприклад,

Var x: Real;

y: Record x, y: Integer end;

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

with y do <оператор>

змінні х і у позначають відповідно змінні у.х і у.у, а дійсна змінна x недоступна.

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

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

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

Type <iм'я типу> = Record;

<ім'я поля>: <тип поля>;

....................

<ім'я поля>: <тип поля>;

Case <селектор>: <тип селектора> of

<мітка 1>: (<ім'я поля>: <тип поля>);

...............................

<мітка n>: (<ім'я поля>: <тип поля>);

end;

Значенням селектора повинна бути одна з описаних міток. Ці мітки не мають нічого спільного ні з мітками для оператора переходу goto, ні з мітками оператора вибору Case. Значення селектора визначає, який з варіантів і відповідно які з імен полів доступні в даний момент виконання програми.

Усі імена полів повинні відрізнятись одне від одного, навіть якщо вони зустрічаються в різних варіантах.

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

мітка: ();

Наприклад, описаний вище тип student можна розширити за рахунок зміни його структури. Ввести поле-селектор sex (стать). Для студентів - чоловіків визначити поле логічного типу mil_serv (military service - військовий обов'язок). Для студенток створити вкладену варіантну частину з полем-селектором логічного типу married (одружена чи ні). Якщо одружена, то в поле naiden_name записати дівоче прізвище, в противному разі не вводити ніякої інформації. Новий тип student матиме вигляд;

Type exam = (algebra, geometry, math_an);

mark = Array [exam] of 2..5;

date = Record

day: 1..31;

month: 1..12;

уеаr: 1950..1980

end;

student = Record

name: string [40];

group: string [6];

birthday: date;

sesion: mark

Case sex: (male, female) of

male: (mil_serv: Boolean);

female: (Case married: Boolean of

True: (maiden_name: string [20]);

False: ())

end;

Констант - записи описуються як і звичайні записи. Значення полів задаються в круглих дужках і відокремлюються знаками '; '.

Наприклад, для описаного вище типу з варіантами student задання констант-запису s матиме вигляд:

Type student =

(name: 'Бура Оксана Михайлівна';

group: 'ПЕ-992';

birthday: (day: 22; month: 1;уеаr: 1983);

sesion: (5,5,5);

sex: female;

married: True;

maiden_name: 'Колега';)

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

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

Опис, файлового типу складається з ключового слова File, за яким ідуть ключове слово of та опис типу елементів файла. Елементами файла можуть бути об'єкти довільного типу, крім файлового. Змінна файлового типу є досить специфічною, її не можна використовувати у виразах та в операторі присвоєння. Файлова змінна ототожнюється з деяким фізичним файлом і потім у програмі лише визначає файл, над яким виконуються операції.

Наприклад,

Type complex = Record

re,im: Real

end;

comp_fil = File of complex;

Var f: comp_fil;

h: File of Integer;

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

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

Стандартні підпрограми для обробки файлів. Вони призначені для організації і ефективної обробки файлів. У подальшому filevar означає будь-який файловий тип, anystring - будь-який рядковий тип, filetype - тип, що збігається з типом елементів файла.

Процедури.

Assing(Var f:filevar; s:anystring)- файлова змінна f ототожнюється з фізичним файлом з іменем s. Ім'я s містить основне або розширене ім'я файла, а також може містити ім'я дисководу. Будь-яка робота з файлом повинна починатися з цієї процедури.

Наприклад, процедура Assign(h,'b:myfile.dta') ототожнює файлову зміну h фізичним файлом 'myfile.dta', що міститься в дисководі В.

Close(Var f:filevar) - закриття файла f. В цьому випадку у файл записується мітка кінця файла і вносяться необхідні зміни в директорій. Ця процедура необхідна для збереження результатів під час створення чи поновлення файлів.

Erase(Var f:filevar) - файл f витирається з диска.

Flush(Var f:filevar) - очищає буфер файла f. Коли відбувається запис у файл, то дані записуються в нього не відразу. Спочатку накопичуються у буфері, що міститься в оперативній пам'яті, а коли буфер заповниться, відбувається запис у файл. Процедура Flush записує вміст буфера в тому стані, в якому він є в момент виклику процедури у файл. Якщо перед закриттям файла буфер не був порожнім, то процедура Close автоматично переносить його вміст у файл.

Read(Var f:filevar; Var a1,…,an:filetype) - зчитування елементів з файла f і присвоєння їх значень змінним із списку. Список повинен складатися хоча б з однієї змінної, інакше не виконуватимуться ніякі дії. Зчитування починається з поточного місцезнаходження вказівника файла, а після закінчення процедури він встановлюється на першому непрочитаному елементі. Якщо тип деякої змінної зі списку не збігається з типом елементів файла, то фіксується помилка введення-виведення.

Rename(Var f:filevar; s:anystring) - ім'я файла f замінюється іменем, заданим рядком s. Нове ім'я не повинно збігатися з іменами вже існуючих файлів.

Reset(Var f:filevar) - відкриває вже існуючий файл f. Вказівник файла ставиться на перший елемент файла. Якщо такого файла не існує, то виникає помилка введення-виведення.

Rewrite(Var f:filevar) - утворює новий файл f. Якщо такий файл вже існував, то він очищається. Вказівник файла міститься на початку файла.

Seek(Var f:filevar; n:Integer) - встановлює вказівник файла f на n -й елемент. Перший елемент має номер 0, другий - 1 і т.д.

Write(Var f:filevar; a1,….,an:filetype) - запис у файл f, значень змінних із списку. Список повинен складатися хоча б з однієї змінної, в противному разі не виконуватимуться ніякі дії. Після виконання процедури вказівник файла міститься після останнього записаного елемента. Якщо тип деякої змінної зі списку не збігається з типом елементів файла, то фіксується помилка введення.

Процедури Flush, Read, Seek, Write застосовуються лише до відкритих файлів, а процедури Erase і Rename - до закритих файлів. Порушення цього правила призводить до виникнення помилки введення-виведення

Date: 2015-12-12; view: 411; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию