Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
У_П_Инф1.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.88 Mб
Скачать

4.4. Комбинированный тип данных – записи

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

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

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

. . .

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

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

type

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.

Пример 16. Рассмотрим еще один, более сложный, пример работы с комбинированным типом данных. Создадим массив записей о членах клуба с

Ввод (n)

i := 1 (1) n

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

i := 1 (1) n

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

i := 1 (1) n

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

полями: Ф.И.О., рост, вес и весо-ростовой показатель - и выведем список в порядке нарастания последнего. Выше приведена структурограмма алгоритма, а ниже - соответствующая алгоритму программа. Часть программы, производящая сортировку, нам уже знакома и ее алгоритм условно назван ‘подпрограммой’.

program klub;

const k = 13;

type persona = record

fam : string[25];

ves, rost, vrp : real;

end;

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

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

begin

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

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

readln(fam);

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

readln(ves, rost) end;

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

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

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

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; n := n-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));

КОНТРОЛЬНЫЕ РАБОТЫ

Ниже приводятся задания и примеры их выполнения по 7 темам. Необходимо выполнить свой вариант задания и представить отчет об этом в сброшюрованном или электронном виде. Программирование производят на языке Turbo Pascal. Выполнение программ на компьютере обязательно.

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