Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции информатика.doc
Скачиваний:
60
Добавлен:
11.04.2015
Размер:
2.47 Mб
Скачать

8. Записи

8.1 Определение записи

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

Описание записи обычно осуществляют с использованием оператора TYPE, т.е. сначала определяют тип-запись, а затем в разделе var описывают конкретную запись. Тип-запись описывается следующим образом:

type <имя типа> = record

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

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

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

end;

Пример1:

type date = record

day: 1..31;

month: 1..12;

year: integer;

end;

type person = record

name: string[20];

age: integer;

adres: string[50];

end;

day month year

10

5

1980

var birthday: date;

student: person; name age adres


Доступ к полям записи осуществляется указанием имени записи и имени поля через точку:

birthday.day:=10;

birthday.month:=5;

birthday.year:=1980;

Пример 2:

type detal = record

name: string[20];

kod: integer;

weight: real;

end;

var d: detal;

Begin

d.name:=’гайка’;

d.kod:=155;

d.weight:=0.057;

write(‘Деталь: ’,d.name,’ Код: ’, d.kod,’ Вес: ‘,d.weight);

End.

8.2 Оператор над записями

Для того, чтобы не писать каждый раз имя записи при обращении к ее полям можно использовать оператор над записями WITH.

Структура оператора:

with <имя записи> do <оператор>;

обычно требуется begin…end;

В этом случае можно указывать только поле записи:

with birthday do

begin

day:=10;

month:=5;

year:=1980;

end;

8.3 Вложенные записи

Поля записи могут быть любого типа, в том числе поле записи может быть тоже записью. В этом случае образуются вложенные записи.

Пример:

type data = record

day: byte;

month: byte;

year: word;

end;

type stud = record

name: string[15];

fam: string[30];

pol: char;

adres: string[80];

birthday: data;

end;

stud

var stud: person;

begin begin

stud.name:=’Денис’; with stud do begin

stud.fam:=’Иванов’; name:=’Денис’;

stud.pol:=’м’; fam:=’Иванов’;

stud.adres:=’ ’; pol:=’м’;

stud.birthday.day:=21; with birthday do begin

stud.birthday.month:=3; day:=21;

stud.birthday.year:=1980; month:=3;

end. year:=1980;

end;

end;

end.

8.4 Массив записей

На практике часто используются не отдельные записи, а массивы записей. Рассмотрим использование массива записей на примере.

Пример 1: Программа, заполняющая экран точками различного цвета и стирающая их.

uses crt, graph;

type point = record

x,y: integer;

color: byte;

end;

var gd,gm,i: integer;

p: array [1..5000] of point;

begin

gd:=detect;

initgraph (gd, gm, ‘c:\tp6\bgi’);

if graphresult <> 0 then

begin

write (‘ошибка графики:’, grapherrormsg (graphresult));

halt;

end;

randomize;

for i:=1 to 5000 do

with p[i] do begin

x:=random(640);

y:= random(350);

color:= random(15)+1;

putpixel (x,y,color);

delay(50);

end;

for i:=1 to 5000 do

begin

putpixel(p[i].x, p[i].y,0);

delay(50);

end;

end.

Пример 2: Программа создания библиотечного каталога и вывод на экран списка всех книг, изданных в указанном году.

uses crt;

type book = record

name: string;

autor: string;

year: string;

str: string;

end;

var i, n, god: integer;

ch: char;

b: array [1..1000] of book;

begin

i:=0;

repeat

inc(i);

with b[i] do begin

write(‘название:’); readln(name);

write(‘автор:’); readln(autor);

write(‘год:’); readln(year);

write(‘количество страниц:’); readln(str);

end;

write(‘Еще вводить? Y/N’); readln(ch);

writeln; n:=i;

until (upcase(ch)=’N’);

repeat {поиск в каталоге}

write(‘Введите год’); readln(god);

for i:=1 to n do

if b[i].year=god then writeln(b[i].name, b[i].autor, b[i].year, b[i].str);

writeln(‘Продолжить поиск? Y/N’); readln(ch);

until (upcase(ch)=’N’);

end.