|
Враховуючи, що запис є комбінацією різних типів, можна будувати записи із записів.
Наприклад
Дату народження можна оголосити не трьома цілими числами, а записом трьох чисел.
Type
Date = record
Yy: integer;
Mm, dd: byte;
Таким чином ми отримуємо запис в записі.
Для доступу до окремих полів дати народження, в цьому випадку теж використовуються складені ідентифікатори.
Враховуючи скомбінованість структури, ввід і вивід даних можливе лише по окремих полях.
Якщо запис містить невелику кількість полів, то використання складених ідентифікаторів не є обтяжливим, але коли полів багато і щоразу використовується звернення до більшості з них, то використання загального імені запису в кожному випадку вимагає конструктивної роботи по набору тексту. Тому в таких випадках використовуються спеціальні оператори приєднання або оператори надзапису.
WITH <ім’я запису>DO <оператор над полями>;
Наприклад
With a do
Begin
Readln(name);
With date born do
Readln(yy, mm, dd);
Readln(usp);
Операції над записами зводяться до операцій відношення до порівняння на рівність і не рівність.
Рівні – записи, в яких структура і значення всіх полів однакові.
Наприклад
Програма формування бази даних про студентів у вигляді масиву із п записів.
Type
Student = record
{}
End;
Var
a: array[1..n] of student;
i, j: byte;
Begin
for i:=1 to n do
with a[i] do
Begin
writeln(‘введіть ім’я’);
Readln(name);
With date born do
Begin
writeln(‘введіть дату народження’);
Readln(yy,mm,dd);
End;
writeln(‘введіть стать: 0-жін; 1-чол’);
Readln(j);
if j=1 then pol:=male else pol:=female;
writeln(‘введіть форму навчання: 0-держ; 1-плат’);
Readln(j);
if j=1 then educ:=pay else educ:=state;
writeln(‘введіть успішність’);
Readln(usp);
End;
Формування баз даних має свої переваги і недоліки. До переваг відносять те, що масив розміщується у швидкій оперативній пам’яті, а це значно зменшує час роботи.
Крім того, розміри масивів є фіксованими, а отже збільшити кількість записів не вдасться.
Набагато зручніше реалізовувати бази даних у вигляді файлів.
б) Записизваріантами
Часто бази даних повинні містити інформацію, структура якої залежить від значень окремих полів.
Наприклад
В базі даних про студентів для хлопців актуальним може бути відношення до військової служби (придатний, непридатний) і зріст (в танкові війська до 175 см), а для дівчат інтерес може мати колір волосся, очей, улюблена косметика.
Таким чином, якщо поле pol має значення male, то запис повинен мати два додаткових поля (армія, зріст). Якщо ж pol дорівнює female, то потрібно три додаткові поля. Решта ж полів мають бути однакові.
Для реалізації таких комбінованих типів використовуються записи із варіантними частинами. Вони будуються подібно до звичайних записів, але використовують оператор case.
Зауваження
1. Варіантна частина у записі може бути лише одна і лише в кінці. Службове слово end є спільним для конструкції record і варіантної частини.
2. ключ варіантної частини повинен бути визначеним певним типом. Для кожного значення ключа задається перелік полів запису, кожному полю вказується тип. Якщо кількість полів відповідно значення ключа більша ніж одне, то ці поля обмежуються парою дужок.
Величини типу записів з варіантами розміщується так само, як і звичайні записи, розмір відповідає максимуму сумарних розмірів всіх полів серед всіх варіантів. Таким чином запис студент матиме розмір 51+(2+1+1)+1+1+6+1+1.
Таким чином варіантна частина запису пишеться на одній ділянці, при цьому на цьому місці можуть бути різні дані в залежності від значення ключа, тому коректність даних залежить від самого програміста.
Ключ визначає ніби маску, яка накладається на ділянку пам’яті і інтерпретує певну кількість байтів, як значення певного типу
Окрім структури і збереження в пам’яті записи із варіантами всі решта дії аналогічні звичайним записам.
Наприклад
База даних про студентів
Var
a: array[1..n] of student;
i, j: byte;
Begin
for i:=1 to n do
with a[i] do begin
Дата добавления: 2015-09-11; просмотров: 75 | Поможем написать вашу работу | Нарушение авторских прав |