Помощничек
Главная | Обратная связь


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

Л а б о р а т о р н а р о б о т а № 7



Тип даних − запис

 

1 Мета роботи

Вивчити правила описування записiв та оволодiти засобами надання значень змiнним типу “запис” та доступу до них, набути практичних навичок використання записiв для опрацювання даних складної структури.

 

2 Основнi теоретичнi вiдомостi

2.1 Основні поняття

 

У багатьох економiчних та iнформацiйних задачах потрiбно опрацьо-вувати документи, вiдомостi, списки. При цьому необхiдно об’єднувати данi рiзних типiв у одну групу. Для роботи з такими групами даних у мовi Pascal введено поняття запису.

Запис – це структура даних, котра складається з фiксованої кiлькостi еле-ментів. Окремий елемент запису називають полем запису. На відмiну вiд маси-вів, у яких усі елементи повинні мати однаковий тип даних, поля одного запису можуть бути різних типів. Доступ до полів можна здійснювати лише за їхні-ми іменами. Поняття запису розглянемо на прикладі відомостей про студентiв: прізвище, оцінки з фізики, інформатики, історії та дата народження (табл.7.1).

Таблиця 7.1 − Відомості про студентів

№ п/п Прізвище, I.Б. Оцінки Дата народження
фізика інформатика історія день місяць рік
Іваненко I.К.
Попов П.П.
Штепсель В.С.
Грицюк К.С.

 

Кожен рядок цiєї вiдомостi складається з окремих елементiв – даних рiзного типу:

а) порядковий номер – цiле десяткове число;

б) прiзвище, I.Б. – рядок символiв;

в) оцiнки – масив з трьох цiлих чисел;

г) дата народження – три числа (можливо різних типів):

день – цiле число вiд 1 до 31;

мiсяць – цiле число вiд 1 до 12;

рiк – цiле число.

Отже, данi про кожного студента можна по’єднати як одну змінну типу “запис”.

 

2.2 Описання даних типу ”запис”

Описання типу “запис” в програмі розпочинається службовим словом record і закінчується словом end у розділі типів Type:

 

Type NameR = record

NameP1 : TypeP1;

NameP2 : TypeP2;

. . .

NamePn : TypePn;

end;

 

де NameR – iм’я типу;

NameP1, NameP2, . . . , NamePn – iмена кожного поля запису;

TypeP1, TypeP2, . . . ,TypePn – типи кожного поля запису (Real, Integer, Boolean, Char або iм’я довільного типу, визначеного ранiше в роздiлi Type).

У розділі описання змінних (Var) за загальними правилами описують ім’я змінної та її тип, вказуючи ім’я типу “запис”.

Порядок послiдовностi полiв запису може бути довiльним. Iмена полiв одного запису повиннi бути рiзними. Наприклад, запишемо оголошення типу “запис” з відомостями про товари – назву, ціну та кількість на складі:

 

type tovar = record

nazva : string [15];

cena : real;

kilk : integer;

end;

var t : tovar; mt : array[1.. 50] of tovar;

 

У цьому прикладі подано опис змінної t та масиву mt (з 50 елементів) типу “запис” (tovar).

Поля запису, в свою чергу, можуть також мати тип “запис”. Наприклад, вiдомості про студентiв, наведені у табл.10.1, можна описати у такій спосіб:

 

type student = record

nom : integer;

pib : string[20] ;

ocink : array [1..3] of integer;

datar = record

day : 1..31;

month : 1..12;

year : integer;

end;

end;

var st: student; gr : array [1..4] of student;

 

Тут змiнна st − окремий запис (рядок таблицi), змiнна gr − масив записiв (всі чотири рядки таблицi).

 

2.3 Робота з даними типу “запис”

 

До кожного з полів запису можна звернутись, використовуючи iм’я змiн-ної типу запис та iм’я поля, раздiлене крапкою (складене iм’я). Такi iмена в програмах можна використовувати за тими самими правилами, що i для змiн-них iнших типiв. Наприклад, оператор

st . pib = ’Шевченко Т.Г.’;

записує у поле pib змiнної st текст ’Шевченко Т.Г.’; оператор

gr[4] .ocink[2]:=5;

надає значення 5 другому елементу поля ocink в четвертoму рядку масива записiв gr ; а оператор

st.datar.month:= 4 ;

записує у поле month поля datar змiнної st значення 4.

Над елементами запису можна виконувати дiї, дозволені для даних вiд-повiдного типу.

За допомогою типу “запис” можна визначити новий тип величин, наприклад комплекснi числа:

 

Type complex = record

re,im : real

end;

Var x,y,z : complex;

 

У цьому прикладi сomplex − iдентифiкатор типу “запис”; re та im − iдентифiкатори полiв (вiдповiдно дiйсна та уявна частини числа); x, y, z − змiннi типу сomplex .

Оператори

x.re:=5.3;

x.im:= −8.29e −2;

 

надають значення дiйснiй та уявнiй частинам комплексного числа

( x = 5,3 − 0,0879 i ); оператори

 

z.re: = x.re + у.re;

z.im:= x.im + y.im;

 

обчислюють суму z комплексних чисел x та y.

 

2.4 Оператор приєднання. Записи з варiантами

 

Для спрощення запису складених iмен можна використовувати оператор приєднання, який має вигляд

 

with nv do

Begin

<оператори з iменами полiв запису>

end;

 

де nv - iм’я змiнної типу “запис” або поля запису.

Оператор приєднання дозволяє використати замiсть складених iмен безпосередньо iмена полiв. При використаннi цього оператора програма стає компактнiшою, а транслятор при використаннi оператора приєднання обчислює адресу запису одноразово. Приклади використання оператора приєднання для описаних ранiш записiв:

а) withx do

Begin

re:=5.3;

im:= −8.29e −2

end;

 

б) with st do

st . pib = ’Шевченко Т.Г.’;

 

в) with st .datar do

Begin

month := 4;

if year < 1972 then k:= k+1

end;

Мова Object Pascal припускає використання записiв з варiантами, тобто записів, у яких певні поля можуть мати “змінюваний” тип. У цьому разі в ого-лошенні запису перелічуються всi можливi варiанти даної структури. Наприк-лад, за допомогою записів з варiантами можна описати таку iнформацiю про людину: прізвище, рiк народження, а також, якщо це чоловiк, повiдомити, чи є вiн вiйськовозобов’язаний та яку має спецiальнiсть; якщо ж це жiнка, вказати, чи вона заміжня та скiльки має дітей:

// розділ описання типів

type pol = (mug, gen);

people = record

{описання типу незмiнюваної частини запису }

fam : string[15] ;

gr : 1800. .2000;

mg : pol;

{описання варіантної частини запису ( наприкінці !)}

case pol of

mug : ( voen : boolean; spec : string[9] );

gen : (zamug : boolean; child : integer);

end;{закінчення оголошення типу people}

{розділ описання змінних }

var chel1, chel2: people;

ved : array[1. .1000] of people;

Bарiантна частина запису розпочинається оператором сase й розміщу-ється після загальної частини. Пiсля варіантної частини у запису не можуть з’являтися iншi поля (і тому оператор сase не закривається службовим словом end, єдиний end відповідає закінченню оголошення всього запису).

Описання запису може мати лише одну варiантну частину. Але варiантна частина може мiстити iншi записи (укладенi ), у тому числі з варiантами.

 




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.