Название: Алгоритмы и программы (Афанасьева Т. В.) Жанр: Информационные системы и технологии Просмотров: 1389 |
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. Сформировать массив записей, описывающих следующую таблицу:
ФИО студента Число часов пропусков
Фамилия Адрес Номер телефона
Фамилия Номер телефона
3. Сформировать массив записей, описывающих следующую таблицу:
Фамилия Номер квартиры
4. Ввести из файла массив записей, описывающих следующую таблицу:
Фамилия Жилая площадь Площадь на одного человека
5. Сформировать массив записей, описывающих следующую таблицу:
ФИО Стаж работы
6. Сформировать массив записей, описывающих следующую таблицу:
Фамилия преподавателя Стаж работы
7. Сформировать массив записей, описывающих следующую таблицу:
Записать в текстовый файл информацию о поездах, отправляю-
Номер поезда Время отправления
Контрольные вопросы
1. Какова структура объявления типа записи? 2. Могут ли компоненты записи быть различных типов? 3. Могут ли компоненты одной записи иметь одинаковые имена? 4. Как обращаются к компонентам записи? 5. Какие операции можно выполнять над компонентами записи? 6. Отличие записей от массивов. |
|