Здавалка
Главная | Обратная связь

КОМБИНИРОВАННЫЙ ТИП – ЗАПИСИ



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

Записи состоят из фиксированного числа компонентов, называемых полями записи. В отличие от массива компоненты (поля) записи могут быть различного типа.

Структура данных типа записи

Структура объявления типа "запись" имеет следующий вид:

TYPE <ИмяТипа> = RECORD

<поле1>: <тип поля1>;

<поле2>: <тип поля2>;

. . .

<полеN>: <тип поляN>

end;

Если тип нескольких полей совпадает, то имена полей можно перечислить через запятую. <ИмяТипа> и поля являются правильными идентификаторами.

Например:

TYPE

DENROGD = RECORD

name: string; {фамилия или имя }

den, mes: byte; {день, месяц}

god: word {год}

end;

Определение константы – записи будет иметь вид

<идентификатоp>: <тип_записи > = (<список_значений_полей>);

Список значений полей представляет собой список из последователь­ностей вида: имя поля, двоеточие и константа. Поля должны указываться в той же последовательности, в какой они перечислены в объявлении типа. Например:

TYPE POINT = record

x, y: real;

end;

CONST

p: POINT = (x:1; y:1);

 

Объявление переменных производится в разделе VAR:

VAR a, b: DENROGD;

Доступ к каждой компоненте записи производится указанием состав­ного имени: имени переменной и затем через точку имени поля. Например:

a.name := ' MARINA';

a.god := 1991;

a.den := 23;

a.mes := 3;

Таким образом, в типе "запись" определена операция присваивания. Кроме того, как и в массиве, все значения переменных типа "запись" можно присваивать другим переменным того же типа: B := A; .

Над полями можно выполнять действия, разрешенные для базового типа:

b.god := а.god + 1; {на год старше}.

В качестве переменной может быть объявлен массив записей:

VAR s: array[1..20] of STUDENT;

Пример. Разработать программу формирования списка студентов с указанием дат рождения. Распечатать список в алфавитном порядке.

Program zapis;

Type {определение нового типа}

student = record {запись}

name: string[15];

den, mes: byte;

god: word

end;

Var

Z: ARRAY [1..20] OF student;

k, m, i, n: byte;

r: string[15]; {вспомогательная строка для перестановки}

BEGIN

writeln('ВВЕДИТЕ КОЛИЧЕСТВО СТУДЕНТОВ');

READln(n);

for i:=1 to n do

begin

writeLN('ВВЕДИТЕ имя ',i,' студента с прописной буквы');

readLN (z[i].name);

WRITELN('ВВЕДИТЕ день рождения');

readLN(z[i].den);

WRITELN('ВВЕДИТЕ месяц рождения');

readLN(z[i].mes);

WRITELN('ВВЕДИТЕ год рождения');

readLN(z[i].god);

end;

for I := n downto 2 do {********* Упорядочение списка *********]

begin {поиск "наибольшего" значения поля NAME}

m:=1;

for k:=2 to i do if z[k].name > z[m].name then m := k;

r := z[i].name; {перестановка записей}

z[i].name := z[m].name;

z[m].name := r

end; {**************************************}

writeln(' Упорядоченный список ');

for i:=1 to n do

begin

WRITE(z[i].name);

WRITELN(' Дата рождения:', z[i].den, '.' ,z[i].mes, '.', z[i].god);

end

END.







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