русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Поле варіант


Дата додавання: 2014-11-27; переглядів: 836.


ознаки

 

Описання типу запису в розглянутому прикладі може мати вид:

 

Приклад 11.4

 

Book = record

Author : FullName; {фіксована частина}

BookName: String;

BookCode: Code;

Station : (Readed, inFile, inArchive);

case Station of {поле ознаки}

Readed: Reader : FullName; {варіантна частина}

ReadCode : Integer;

ReadDate : Date;

inFile: FilAdress : Adress;

inArc : ArcName : Srting;

ArcAdress: Adress

end

end;

 

У нашому прикладі на варіанти вказує поле Station. У залежності від значення цього поля запис має ту чи іншу структуру. Це часта ситуація. Звичайно на варіант запису вказує одне з полів фіксованої частини цього запису. Тому синтаксисом допускається скорочення: опис компоненти, що визначає варіант, (яка називається полем ознаки – дискримінантом), включається в заголовок варіанта. У нашому прикладі 11.4 це виглядає так:

 

Type BookStation = (Readed, inFile, inArc);

Book = record

Author : FullName;

BookName : String;

BookCode : Code;

case Station : BookStation of

Readed : Reader : FullName;

ReadCode : Integer;

ReadDate : Date;

inFile : FilAdress: Adress;

inArc : ArcName : String;

ArcAdress: Adress

end

end;

 

Всі імена полів повинні бути різними, навіть якщо вони зустрічаються в різних варіантах. (Наприклад, Author, Reader – імена людей, а FilAdress і ArcAdress – адреси, що вказують на місцезнаходження книги на полках сховища). У випадку, коли один з варіантів не містить варіантної частини, він повинен бути оформлений наступним чином:

 

EmptyVariant :( ) {EmptyVariant - мітка порожнього варіанта}

11.4. Оператор приєднання

Якщо А – змінна типу Student із приклада 11.1, її значення можна змінити групою операторів:

A.F1 := ' Іванов '; A.F2 := ' Ілля '; A.F3 := 'Інокентійович ';

A.Day := 14; A.Month := 9; A.Year := 1976;

A.StudDoc := 123;

Приведені вище позначення можна скоротити за допомогою оператора приєднання. Заголовок цього оператора відкриває область дії “внутрішніх” імен полів запису, які можуть бути використані як імена змінних.

 

Оператор приєднання має вид:

With <змінна-запис > {,<змінна-запис >} do < оператор >

 

Приклад 11.5

 

with A do begin

F1 := ' Іванов ';

F2 := ' Ілля ';

F3 := ' Інокентійович ';

Day := 14;

Month := 9;

Year := 1986;

StudDoc := 123;

end { оператора with }

 

Більш того, в групі операторів обробки змінної StudGroup[i] (приклад 11.3) запис може бути сформований наступним чином:

 

With StudGroup[3], StudName do begin

Name1 := ' Івченко ';

Name2 := ' Інна ';

Name3 := ' Іванівна ';

BirthDay.Day := 14;

BirthDay.Month := 9;

BirthDay.Year := 1976;

StudDoc := 123

end;

 

Таким чином, оператор виду

With r1,...,rn do S

еквівалентний оператору

With r1 do with r2 ... with rn do S.

 

Зауваження: В операторі With R do S вираз R не повинен містити змінні, що змінюються в операторі S. Наприклад, оператор With S[j] do j := j+1 недопустимий!

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

Запис має вид:

Повне ім’я (Прізвище Ім’я по батькові)

День народження (День, Місяць, Рік)

Адреса (Індекс, Країна, Місто, Вулиця, № будинку, № квартири)

 

Program Adress;

Const

n = 100;

Type

{ описання типів Name, FullName, Date із приклада 3 }

Mail = Record

Index : LongInt; { довге (4 байта) ціле число }

Country,

Sity,

Street : Name;

House,

Flat : Integer

end;

Person = Record

Who : FullName;

When : Date;

Where : Mail

end;

Var

Today : Date;

Department : array [1..N] of Person;

i : Integer;

 

Function theSame(var X : Date, var Y : Person): Boolean;

Begin

With Y, When do

theSame := (X.Day = Day) and (X.Month = Month)

End;

{Procedure ReadDepartment - введення масиву записів}

 

 

Procedure ReadDate(var Z : Date);

Begin

With Z do Read(Day, Month)

End;

Procedure WriteMail(var X : Person);

Begin

With X, Who do Writeln(Name1, ' ', Name2, ' ', Name3);

With X, Where do begin

Writeln(Street, ' ',House, ' ', Flat);

Writeln(Index, ' ', Sity, ' ', Country);

end

End;

Begin

ReadDepartment; { введення масиву записів}

ReadDate(Today);

For i := 1 to N do

if theSame(Today, Department[i])

then WriteMail(Department[i])

End;

11.5. Рядки і засоби їх обробки

Значенням рядкового типу даних є рядки. Стандарт мови передбачає використання рядків тільки як констант, що використовуються в операторах виведення Write, Writeln. У розширенні мови Turbo-Pascal рядковий тип даних визначений більш повно.

Визначення рядкового типу слідує діаграмі:

 

 
 

 

 


Тут ціле належить діапазону 1..255 і означає максимальну кількість символів у рядку цього типу. Якщо описання типу String використовується без вказівки максимальної кількості символів, це (за замовченням) означає, що під цей тип резервується 255 символів.

 

Наприклад:

Type

Name = String[20]; { рядки з 20-ти символів }

Post = String; { рядки з 255-ти символів }


<== попередня лекція | наступна лекція ==>
Фіксована частина | Процедури і функції типу String.


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн