Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
inf3.doc
Скачиваний:
15
Добавлен:
15.04.2015
Размер:
389.63 Кб
Скачать

Лабораторная работа 9 комбинированный тип данных (записи)

Цель работы

Изучение правил описания комбинированных типов данных и приобретение навыков работы с записями.

Методические указания

Тип-запись представляет собой логически связанную совокупность компонент разного типа. Каждая компонента называется полем записи. Количество полей определяется информационным объектом и может быть любым в пределах общего ограничения на размер структуры. Тип-запись описывается с помощью служебного слова record следующим образом:

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

<имя поля1> : <тип1>;

. . .

<имя поляj> : <типj> end;

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

complex = record re, im : real end; {тип ‘комплексное число’}

book = record {тип-книга}

avtor : string[30]; {поле ‘автор книги’}

titul : string; {поле ‘название книги’}

god_izd : 1990..2003 {поле ‘год издания’} end;

Теперь можно описать и соответствующие переменные:

var z1, z2, z3 : complex; b : book;

Поле записи задается составным именем, например так: z1.re - вещественная часть комплексного числа z1; b.avtor - автор книги b. Из приведенных примеров видно, что составные имена полей могут быть достаточно громоздкими и затруднять описание действий с ними. Для упрощения обращения к полям записи служит оператор присоединения with, имеющий следующую конструкцию: with <имя записи> do <оператор>;

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

Для примера рассмотрим вложенную конструкцию оператора присоединения для следующей структуры данных.

X

Запись 

C

Y

Поля записиX  Запись

A

B

Поля записи Y

program Vlogen_Zapisi;

var x : record

c : string;

y : record a, b : byte end {y}

end;

begin with x, y do begin

writeln(‘Введите через пробел поля a и b записи y - целое от 0 до 255’);

readln(a, b); {Вместо x.y.a и x.y.b}

writeln(‘Введите поле c записи x - строку символов’);

readln(с); end; {Вывод сделаем без оператора присоединения}

writeln(‘Поля записи x: ’, x.c, ‘ и поля записи y: ’, x.y.a:4, x.y.b:4) end.

Рассмотрим еще один, более сложный, пример на работу с комбинированным типом данных. Создадим массив записей о членах клуба с полями: Ф.И.О., рост, вес и весо-ростовой показатель - и выведем список в порядке нарастания последнего. Представим алгоритм в виде структурограммы.

Ввод (n)

i := 1 (1) n

Ввод полей записей

i := 1 (1) n

‘Подпрограмма’ сортировки массива по vrp

i := 1 (1) n

Вывод полей записей

Соответствующая алгоритму программа приведена ниже.

program klub;

const n = 13;

type persona = record fam : string[25];

ves, rost, vrp : real; end;

var mas : array[1..n] of persona;

buf : persona; i, k : byte; obmen : boolean;

begin

for i := 1 to n do with mas[i] do begin

writeln(‘Введите полное имя ‘, i, ‘-го члена клуба’);

readln(fam);

writeln(‘Введите через пробел вес и рост ‘, i, ‘-го члена клуба’);

readln(ves, rost) end;

for i := 1 to n do with mas[i] do

vrp := ves/rost; {Весо-ростовой показатель}

k := n; {Сортируются все элементы списка}

repeat {Сортировка методом стандартного обмена}

obmen := false;

for i := 1 to k-1 do

if mas[i].rvp > mas[i+1].rvp then begin buf := mas[i];

mas[i] := mas[i+i]; mas[i+1] := buf; obmen := true end;

k := k-1

until not obmen;

writeln(‘Фамилия, имя, отчество Весо-ростовой показатель’)

for i := 1 to n do with mas[i] do

writeln(fam, ‘ ‘ : 25-length(fam), vrp : 6: 3) end.

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

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

<поле1> : <тип1>; … Фиксированная

<полеj> : <типj>; часть записи

case <переменная> : <тип> of Вариантная

ci, ck : (<поле> : <тип>; … часть

<поле> : <тип>); … записи

cp, cq : (<поле> : <тип>; …

<поле> : <тип>) end;

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

type figura = (cvadrat, treug, krug);

param = record {параметры фигуры}

x, y : real; {Фиксированная часть - точка привязки фигуры}

case figura of

cvadrat : (storona : real);

treug : (storona1, storona2, ugol : real);

krug : (radius : real) end;

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

При отладке программ, работающих со структурированными данными, много времени тратится на ввод исходных данных. Turbo Pascal предоставляет программисту средство, упрощающее инициализацию данных, особенно сложных. Таким средством являются типизированные константы. Типизированная константа - это переменная, которой при ее описании задано исходное значение. Описание типизированных констант производят в разделе объявления констант следующим образом:

const <имя> : <тип> = <значение>;

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

const x : real = 2.72;

n : longint = 123456;

pp : (poned, sreda, pyatnica) = sreda;

v : array[1..5] of byte = (11, 32, 101, 17, 233);

st : string[10] = ‘Это Pascal’;

mat : array[1..3, 1..4] of word = ((0, 15, 1, 257), (1, 1, 45, 0), (719, 1, 4, 5));

mn : set of char = [‘у’, ‘и’, ‘ф’];

zap : record fam : string[25]; stag : byte end =

(fam : ‘Иванов И.И.’; stag : 20);

mas : array[1..3] of record re, im : real = ( (re : 1.2; im : 3.9),

(re : 5.6; im : 9.1), (re : 3.8; im : 7.5));

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

  1. Как описывают тип-запись?

  2. Сколько полей и какого типа допустимо использовать в записи?

  3. Что такое запись с вариантами?

  4. Зачем используют типизированные константы?

  5. Что такое типизированная константа?

  6. Может ли запись состоять лишь из одной вариантной части?

  7. Инициализируйте с помощью типизированной константы массив из трех множеств, состоящих из элементов символьного типа.

  8. Задайте типизированной константой массив из трех записей.

  9. Как заполнить и вывести массив записей с вариантными частями?

  10. Как использовать оператор присоединения для вложенных записей?

Варианты задания

  1. Вычислить z=z1+z2z3, если z1, z2, z3 - векторы из пяти комплексных чисел.

  2. Отсортировать по результатам список из 8 участников забега на 100 м.

  3. Отсортировать по фамилиям список группы студентов с 4 оценками.

  4. Вывести оглавление двух книг, содержащих по два раздела из 4 глав.

  5. Вывести ассортименты двух овощных магазинов с отделами: корнеплоды, консервы, приправы с указанием цены единицы продукта.

  6. Заполнить таблицу анкетных данных на 2 человек с полями: Ф.И.О., пол, год рождения, место рождения (с полями), национальность.

  7. Вывести состав аппаратных средств двух компьютеров: процессор: тип и тактовая частота; память: оперативная и внешняя, ее объем.

  8. Представить фильмотеку из 10 кассет с полями: жанр, режиссер, год выпуска, продолжительность просмотра.

  9. Составить список сотрудников отдела с указанием Ф.И.О., должности, стажа работы, оклада. Вывести список по убыванию стажа работы.

  10. Описать 7 студентов академии и вывести их список на экран по убыванию № группы.

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

  12. Вывести календарь декабря текущего года.

  13. Вывести список 5 абонентов в алфавитном порядке с полями: абонент - Ф.И.О. и № телефона.

  14. Вывести информацию о 3 учебниках по информатике с указанием авторов, названия, издательства, года издания и количества страниц.

  15. Вывести список 5 крупнейших озер планеты с их характеристиками.

  16. Вывести список 4 стран мира с информацией о народонаселении, столице, государственном устройстве и денежной единице.

  17. Вывести список всех групп факультета в порядке убывания среднего балла за текущую сессию. Группа описывается курсом, № и баллом.

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

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

  20. Вывести данные о 3 адресатах с двумя записями КОМУ и КУДА.

  21. Вывести содержимое двух складов стеклотары бутылок и банок.

  22. Подсчитать общее количество книг в 2 библиотеках с разделами: художественная, научная, учебная.

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

  24. Охарактеризуйте климат в двух местностях. Найдите разницу между температурой самого холодного и самого теплого месяца для них.

  25. Создайте массив записей о членах спортивной секции с полями:

Ф.И.О., возраст, адрес, личный рекорд.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]