Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обработка строк текста.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

11.1. Определение и правила записи

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

Сначала объявляется тип записи.

type

ИмяТипа = record

ИмяПоля!: ТипПоля!;

ИмяПоля2: ТипПоля2;

ИмяПоляЫ: ТипПоляЫ; end;

Затем объявляются переменные соответствующего типа.

var

ИмяПеременной: ИмяТипа;

Например:

type avto=record

number: integer; { номер автомобиля }

marka: string[20]; { марка автомобиля }

fio: string[40]; { фамилия, инициалы владельца }

address: string[60]; { адрес владельца } end; var m,v: avto;

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

Значения полей записи могут использоваться в выражениях. Обращение к значению поля осуществляется с помощью имени переменной и имени по­ля, разделенных точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи avto, надо записать:

m.number, т.marka, т.fio, m.address

Составное имя можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваи­вания.

Например:

m.number:=1964; m,marka:='Audi — 100'; m.fio:= 'Федорова Н.В.'; m.address:='y^. Красина 53 к.1 — 73';

Составные имена можно использовать в операторах ввода/вывода:

readln(m.number,m.marka,m. fio,m.address) ;

write(m.number:4,m.marka:lO.ra.fio:13,m.address:23);

Обратите внимание — нельзя использовать в операторах ввода/вывода за­пись целиком (как и массив).

Например:

writeln(m) { ошибочная инструкция }

Однако допускается применение оператора присваивания к записям в це­лом, если они имеют один и тот же тип:

После выполнения этого оператора значения полей записи v станут равны значениям соответствующих полей записи т.

В ряде задач удобно пользоваться массивами из записей. Их можно описать, например, следующим образом:

type person = record

fio: string[20];

age: 1..99;

prof: string[30] ; end; var list :array [1 . . 50] of person;

Обращение к полям записи имеет несколько громоздкий вид. Для решения этой проблемы в языке Turbo Pascal имеется оператор with, в виде:

with ПеременнаяТипаЗапись do Оператор; { обычно составной оператор }

Один раз указав переменную типа запись в операторе with, можно работать с именами полей как с обычными переменными.

Например:

with m do

begin

number:=1964 ; marka:='Audi - 100';

address :='ул. Красина 53 к.1 — 73'; end;

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

type complex=record

re:real; { действительная часть } ira:real; { мнимая часть } end;

var a,b,c: complex; { a,b,c — переменные типа complex } begin

a.re:=6.8; a.im:=l.6;

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

Записи часто применяются для работы с датами (день, месяц, год) или от­резками времени (часы, минуты, секунды). В большинстве современных языков программирования есть специальные типы данных для работы с да­той и временем, однако в Turbo Pascal все действия с датой и временем приходится программировать вручную.

Рассмотрим пример использования массива записей. Составим программу, которая организует ввод данных об учащихся: имя, фамилия, возраст, шко­ла, класс и записывает их в массив записей, а затем выводит сведения об учащихся по номеру записи и по номеру класса.

Для решения задачи введем тип записи pupil (ученик) для описания сведе­ний об учащихся, а затем объявим массив а, состоящий из 10 записей типа pupil (листинг 11.1).

[Листинг 11.1. Пример использования массива записей

type pupil = record { описание типа записи } name: string[10]; { имя } surname: string[20]; { фамилия } school: integer; { школа } class: byte; { класс }

end;

v ar school:array[1.,10]of pupil; n: 1 .. 10; с:byte;

procedure input_data;

{ процедура ввода данных — используем составные имена } begin

writeln('Введите данные №', п, ' :');

write('Ваше имя ?'); readln(school[n].name);

write (' Фамилия ?'); readln(school[n].surname);

write (' и класс ?'); readlnfschool[n].class);

writeln; end;

procedure write_data;

{ вывод на экран содержимого текущей записи — используем оператор with } begin

with school[n] do begin

writeln('Имя :',name); writeln('Фамилия: ',surname); writeln('Школа: ',school); writeln('Класс: ',class);

end; end; begin { основная программа }

for n:=l to 10 do input_data;

writeln;

writeln(' Вьшод данных о 5 ученике :');

writeln; n:=5; write_data;

writeln(' Вьшод данных по номеру класса :')/writeln;

writeln{' Задайте номер класса :'); readln(c);

for n:=l to 10 do if school[n].classic then write_data;

readln;

. end.

"