Название: Алгоритмы и программы (Афанасьева Т. В.)

Жанр: Информационные системы и технологии

Просмотров: 1339


11. использование записей

 

Запись – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. С помощью записи (record) представляется некоторая структура статических данных. Тип данных record предоставляет программисту возможность объединить в одну связную структуру различные по типу  и смыслу элементы (поля). Причем элементами записи могут быть и структурированные типы данных, например, массивы и другие (подчиненные) записи.

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

Под структурой данных обычно понимают данные, объединенные в упорядоченное множество. Особо удобны записи при обработке взаимо- связанных разнородных данных.

 

В качестве примера приведем запись, представляющую информацию из адресного справочника:

var reference_book = record surname, name, address,

city       : string[20]; post_index : string[4]; telerhone      : string[12];

end;

При обращении к отдельным полям указывается имя всей  записи и имя отдельного поля, причем они разделяются точкой. Так, с помощью операции

 

reference_book. surname :='Иванов';

         

имя записи     поле

вы присваиваете полю surname записи reference_book значение 'Иванов'. Таким способом можно обратиться к любому полю, любой записи, как для занесения туда некоторого значения, так и для извлечения необхо-димой информации. Следует только применять эти операции с учетом типа данных обрабатываемой записи.

 

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

Пример 11.1. Ввод/вывод записей. program ky1;

uses crt; type books=record

name:string; after:string; izd:string; tom:integer;

end;

var

lib:array [1..3] of books;

i,j:integer;

begin

{Ввод записей}

writeln('Ввести 3 раза название книги, фамилию автора, '); writeln('издательство, число томов'); writeln('|––––––––––––|––––––––––|–––––––––––|–––––––––|'); writeln('| Название книги  | ФИО автора  | Издательство           | Кол. томов  |'); writeln('|––––––––––––|––––––––––|–––––––––––|–––––––––|');

j:=0;

for i:=1 to 3 do begin

gotoxy(1,6+j);

write('|'); READLN(lib[i].name);

gotoxy(16,6+j);

write('|'); READLN(lib[i].after);

gotoxy(31,6+j);

write('|'); READLN(lib[i].izd);

gotoxy(45,6+j);

write('|'); READLN(lib[i].tom);

gotoxy(58,6+j);

write('|');

j:=j+2;

if i<=3 then writeln;

writeln('|––––––––––––|–––––––––––|–––––––––––|–––––––––––|'); if i=3 then writeln('|––––––––––––|–––––––––––|–––––––––––|–––––––––––|');

end;

write;

{Вывод записей на экран}

writeln('            информация о книгах ');

writeln('|––––––––––––|––––––––––|–––––––––––|–––––––––|'); writeln('| Название книги  | ФИО автора  | Издательство   | Кол. томов  |'); writeln('|––––––––––––|––––––––––|–––––––––––|–––––––––|'); j:=11;

for i:=1 to 3 do begin

gotoxy(1,6+j);

write('|');

writeln(lib[i].name); gotoxy(16,6+j); write('|');

writeln(lib[i].after); gotoxy(31,6+j); write('|');

writeln(lib[i].izd); gotoxy(45,6+j); write('|');

writeln(lib[i].tom); gotoxy(58,6+j); write('|');

j:=j+2;

if i<=3 then writeln;

writeln('|–––––––––|–––––––––|–––––––––|––––––––|');

if i=3 then writeln('|–––––––––|–––––––––|–––––––––|––––––––|');

end;

 

 

READLN;

end.

 

Пример  11.2.  Удаление  из  массива  записей     записи  о  студентке

Николаевой.

program nat8;

uses crt;

type typzap=record fam:string; gr:integer; sb:byte;

end;

var

gruppa:array [1..4] of typzap;

i,j:byte;

procedure vud(zap:typzap);

{параметр zap типа запись передается по значению}

begin

window(43,j,52,j); write(zap.fam); window(56,j,63,j); write(zap.gr); window(69,j,76,j); write(zap.sb); j:=j+1;

end;{vud}

begin window(1,1,80,25); textbackground(0); textcolor(15);

clrscr;

writeln(' Пример :удаление записи о выбывшей      '); writeln('                    студентке Николаевой '); writeln('            (переменным присваиваются          '); writeln('                    значения в программе).'); gruppa[1].fam:=' Атурова ';

gruppa[1].gr:=1977; gruppa[1].sb:=4; gruppa[2].fam:='Вострецов'; gruppa[2].gr:=1978; gruppa[2].sb:=4; gruppa[3].fam:='Николаева'; gruppa[3].gr:=1978; gruppa[3].sb:=4; gruppa[4].fam:='Тутурина'; gruppa[4].gr:=1978; gruppa[4].sb:=4; window(4,5,37,6);

writeln('––––––––––––– ––––––––––––– ––––––––––––––––––');

window(4,7,37,8);

writeln(' фамилия год рожд. средний балл');

window(4,9,37,10);

writeln('––––––––––––– ––––––––––––– ––––––––––––––––––');

j:=10;

for i:=1 to 4 do with gruppa[i] do begin

window(4,j,13,j);

write(fam);

window(17,j,24,j); write(gr); window(30,j,37,j); write(sb);

j:=j+1; end; window(43,5,76,6);

writeln('––––––––––––– ––––––––––––– ––––––––––––––––––');

window(43,7,76,8);

writeln(' фамилия год рожд. средний балл');

window(43,9,76,10);

writeln('––––––––––––– ––––––––––––– ––––––––––––––––––');

j:=10;

for i:=1 to 3 do begin

if gruppa[i].fam = 'Николаева' then gruppa[i]:=gruppa[i+1];{удаление}

vud(gruppa[i]);{вывод на экран результата}

end; READkey;

end.

 

Задания для самостоятельного выполнения

1. Сформировать массив записей, описывающих следующую таблицу:

 

 

ФИО

студента

Группа

Число пропусков занятий за год

по болезни

по другим причинам

итого

 

Вывести фамилии студентов, имеющих более ста часов сумарных пропусков, по форме:

 

ФИО студента           Число часов пропусков

 

2. Сформировать массив записей, описывающих следующую таблицу:

 

Фамилия        Адрес  Номер телефона

Вывести информацию о телефонных абонентах, проживающих по улице Гончарова, в виде:

 

Фамилия        Номер телефона

 

3. Сформировать массив записей, описывающих следующую таблицу:

 

 

Фамлия

Адрес

Улица

Дом

Квартира

 

Удалить фамилии жильцов дома №1 по улице Минаева по форме:

 

Фамилия        Номер квартиры

 

4. Ввести из файла массив записей, описывающих следующую таблицу:

 

 

Фамилия

Адрес

Число членов семьи

Занимаемая жилая площадь

 

Вывести фамилии жильцов, в  семьях которых жилая площадь на одного человека не превышает 9 кв.м. Результат вывести в виде:

 

Фамилия        Жилая площадь         Площадь на одного человека

 

5. Сформировать массив записей, описывающих следующую таблицу:

 

 

ФИО

Место работы

Домашний адрес

Стаж работы

 

Вывести         фамилии         работников,  имеющих  стаж  более  10      лет  и работающих на УАЗе, по форме:

 

ФИО   Стаж работы

 

6. Сформировать массив записей, описывающих следующую таблицу:

 

 

Наименование кафедры

Фамилия преподавателя

Ученое звание

Стаж работы

Вывести список преподавателей-доцентов с кафедры «Прикладная математика» по форме:

 

Фамилия преподавателя      Стаж работы

 

7. Сформировать массив записей, описывающих следующую таблицу:

 

 

Номер поезда

Маршрут

Время отправления

Время прибытия

 

Записать  в  текстовый         файл  информацию о  поездах,  отправляю-

щихся из Москвы, по форме:

 

Номер поезда Время отправления

 

Контрольные вопросы

 

1. Какова структура объявления типа записи?

2. Могут ли компоненты записи быть различных типов?

3. Могут ли компоненты одной записи иметь одинаковые имена?

4. Как обращаются к компонентам записи?

5. Какие операции можно выполнять над компонентами записи?

6. Отличие записей от массивов.