Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000555.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
19.12 Mб
Скачать

2.9. Записи

2.9.1. Поля записи

Запись - это тип данных, объединяющий фиксированное число элементов различного типа.

Элементы, входящие в состав записи, называются полями записи.

Каждый элемент (поле) записи имеет свое собственное имя, которое используется для доступа к этому элементу. Поэтому можно выделить любой элемент записи и обращаться с ним, как с отдельной переменной.

Запись описывается в разделе описания типов следующим образом:

TYPE

имя = RECORD

имя_поля1: тип_поля1; имя_поля2: тип_поля2;

имя_поляМ: тип_поляМ; END

где RECORD - ключевое слово,

имя - имя типа,

имя_поля1, .., имя_поля1 - имена полей записи,

тип_поля2, .., тип_поля2 - имена типов полей записи,

Заканчивается запись словом END.

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

В свою очередь, запись может являться базовым типом массива.

Пример. Описание записи, содержащей сведения о книге.

туре

Book = record

Title: string [100]; {название}

Author: string [40]; {автор}

Year: integer; {год издания} end;

Над записями допустимы операции присваивания, проверки на равенство и неравенство, ввода и вывода.

С полем записи в программе можно поступать, как с переменной того же типа, что поле. Обращаются к полю по составному имени:

имя_записи.имя_поля

Пример. Работа с записями

var

Х,У: Book; {описание этого типа см.выше}

Z: array [1..1000] of Book;

Begin

X.Title:- 'ВОЙНА И МИР';

X.Author := ‘ТОЛСТОЙ Л.Н.’;

X.Year := 1980;

Y:=Х;

writeln (Y.Title, Y.Author);

Z[5]:=X;

end.

Пример использования в качестве поля другой записи, туре Full_Date = record

Name : string[40];

BirthYear: integer; end;

Book = record

Title: String;

Author: Full_Date;

Year: integer;

end;

Если поле является записью, обращение к его элементам (полям поля) происходит по имени, состоящему из трех частей, например,

X.Author.Sur_name.

Глубина вложения описаний не ограничена.

Пример. Сформировать массив записей с информацией о сданных экзаменах и вычислить средний балл,

program averagejmean;

const

number_subject = 3;

number_student = 20; (*число студентов в группе*)

type student = record

name:string; (*имя студента*) subject:array[l..number_subject] of (*предметы*) record

title:string; (*название предмета*)

markinteger; (*оценка*)

end;

end;

group = array[l..number_student] of student; (*группа*) course = record (*курс*)

ziigroup; (*названия групп*)

ib:group;

zt:group;

end;

var

first_course:course; i,j,summa:integer; mean:real;

begin

(*задание исходных значений*) first_course.zi[l].name:=='Baся';

first_course.zi[1].subject[l].title—'матанализ'; first_course.zi[l].subject[l].mark:=3;

first_course. zi[1]. subject[2] .title:='геометрия';

first_course.zi[l].subject[2].mark:=5; nrst_course.zi[l].subject[3].title:='информатика'; first_course.zi[l].subject[3] .mark:=4;

summa:=0;

(*вычисление среднего балла по матанализу в группе ЗИ *)

for i:=l to number_student do

begin

for j:=l to number_subject do

begin

if first_course.zi[i].subject[j].title=’мaтанализ’ then

summa:=summa+first_course.zi[i].subject[j].mark; end;

end;

mean:=summa/number_student;

writeln ('средний балл по матанализу в группе ЗИ ', mean);

end.