Цель работы: выработать практические навыки в написании и отладке программ при работе с комбинированными типами данных.
Записи
Запись - это структурированный тип данных, состоящий из фиксированного числа компонентов, называемых полями. В одном поле данные имеют один и тот же тип, а в различных полях могут иметь различные типы. Поэтому записи называют комбинированными типами данных.
Общий вид описания типа –
type T = record
i1:T1;
i2:T2;
.......
iN:TN
end;
var a,b:T;
Здесь Т - идентификатор типа; и - имена полей; ТN - типы полей.
Например, запись имеет четырех поля: город, улица, номер дома и номер квартиры, то есть запись является адресом. Тогда адрес можно описать следующим образом:
type adres = record
G,U:array [1..10] of char;
D:1..100;
K:1..500
end;
var A: adres;
Здесь перменная А описанная как запись, которая состоит из четырех полей с именами: G,U,D,K. Поле D переменной A записывается как A.D.
Например, чтобы записать в А адрес: «г. Краматорск, ул. Шкадинова, д.8, кв.12» надо выполнить следующие операторы присваивания:
A.G:='Краматорск';
A.U:='Шкадинова';
A.D:=8;
A.K:=12;
Можно обращаться не только к полю записи, но и к записи в целом, используя оператор присваивания.
Оператор with разрешает упростить обращения к полям записей.
Общий вид - with A do P;
Здесь A - имя переменной типа record; Р - оператор. В операторе Р при ссылках на компоненты записи имя А можно опускать. Например, для занесения адреса в предыдущем примере достаточно выполнить операторы
With A do begin
G:=’Краматорск’;
U:=’Шкадинова’;
D:=8;
K:=12
end;
Примеры выполнения задания лабораторной работы
Пример 35. Запись имеет пять полей, содержащих фамилию, имя студента, наименование, год создания и номер группы. Написать программу, которая вводит информацию о студентах и выводит на печать фамилии и имена студентов группы ИТ98-2.
Программа имеет вид:
PROGRAM PR35;
USES CRT;
CONST GRU=’ИТ’; GOD=98; NOM=2; M=5;
type student=record
fa,im,gr:string;
g:85..95; n:1..4; end;
mas=array[1..m] of student;
VAR S:MAS; I:INTEGER; C:CHAR;
BEGIN
CLRSCR;
{ВВЕДЕНИЕ ИСХОДНЫХ ДАННЫХ}
FOR I:=1 TO M DO
WITH S[I] DO BEGIN
WRITELN(' ДАННЫЕ ПРО ',I,'-ОГО СТУДЕНТА:');
WRITELN(' ФАМИЛИЯ?:'); READLN(FA);
WRITELN(' ИМЯ?:'); READLN(IM);
WRITELN('НАИМЕНОВАНИЕ ГРУППЫ?:'); READLN(GR);
WRITELN('ГОД СОЗДАНИЯ ГРУППЫ?:'); READLN(G);
WRITELN(' НОМЕР ГРУППЫ?:'); READLN(N);
END;
WRITELN('===КОНЕЦ ВВОДА====');
C:=READKEY; CLRSCR;
WRITELN(' ':5,'СПИСОК ВСЕХ СТУДЕНТОВ:');
for i:=1 to m do
with s[i] do
writeln(' ', fa:10,im:10,gr:5,g:3,'-',n);
WRITELN(' ':5,'СПИСОК СТУДЕНТОВ ГР.ИТ98-2');
for i:=1 to m do
with s[i] do
if (gr=gru) and (g=god) and (n=nom) then
writeln(' ',fa:10,im:10);
c:=readkey
end.
Пример 36. Составить программу перевода полярных координат точки (R,j) в декартовые (Х,Y), приняв способ изображения точки в виде записи с двумя полями.