Лекция 9
Комбинированный тип = record {фиксированная часть записи} {; вариантная часть записи} end. |
Фиксированная часть записи =
Идентификатор {, Идентификатор}: Тип
{; Идентификатор {, Идентификатор}: Тип}.
Вариантная часть записи =
сase Селектор варианта of
Вариант записи {; вариант записи }
end.
Вариант записи = Константа {, Константа}: ( Список полей ).
Селектор варианта = Идентификатор переменной порядкового типа.
1. Комбинированный тип данных языка Паскаль позволяет в программе задавать структуру данных, которая называется записью.
2. Запись – поименованная последовательность разнотипных элементов. Элемент записи называется полем. Доступ к элементу записи (полю) осуществляется по имени записи и поля, которые разделены точкой.
3. Записи особенно удобны для описания таблиц, содержащих разнотипные графы (строковые, числовые), причем степень сложности шапки таблицы не имеет значения.
Пример 1: Склад
Наименование товара | Количество (кг) | Цена | Итого |
Абрикосы | 2.5 | ||
Сливы | |||
Персики |
![]() ![]() | type TTovar: record Nazv: String(30); Kol, Cena, Itogo: Real; end; var Tovar: array [1..3] of TTovar; i:Byte; begin for i:=1 to 3 do begin Write(“Введие название товара =>”); Readln(Tovar[i].Nazv); Write(“Цену товара => ”); Readln(Tovar[i].Cena); Write(“Вес товара=>”); Readln(Tovar[i].Kol); Tovar[i].Itogo:= Tovar[i].Kol * Tovar[i].Cena; end; end. |
![]() | procedure Out; {эта процедура читает файл данных с диска } begin reset(f); while not(eof(f)) do begin Write(Tovar.Nazv); Write(Tovar.Cena); Write(Tovar.Kol); Writeln(Tovar.Itogo); end; end. begin Assign(f, “d:\Info\Sklad.ttt”); In; Out; end. |
4. Запись может быть элементом другой записи или массива
Пример 2: Деканат
Фамилия И.О. студента | Год рожд -я | Группа | Отметки | |||
математика | физика | информатика | история | |||
Иванов И.И. | ||||||
Петров П.П. | ||||||
Сидоров С.С. |
type TMarks = record Matem,Fizika,Inf,Istor:1..5; end; TStudent = record Name: String[30]; God, Gruppa: Integer; Otmet: TMark; end; var Stud: TStudent; begin Stud.Name:= ”Иванов И.И.”; Stud.God:= 1980; Stud.Gruppa:= 312; Stud.Otmet.Matem:=4; Stud.Otmet.Inf:=4; end; |
Записи с вариантами
При формировании комбинированного типа данных можно создавать записи постоянной структуры, задавая только фиксированную часть записи, и записи переменной структуры, задавая фиксированную и вариантную часть записи. Вариантная часть всегда находится в конце записи, её структура зависит от содержимого так называемого поля признака. Поле признака – это поле общей части записи, все возможные значения этого поля должны быть заранее точно определены. Поле признака называют также селектором варианта.
type Sex = (Men, Women); M = record Name: String[30]; Date: 1900..2050; M_W: Sex; case Sex of Men: (Work: String[25]); Women: (Child: Byte;); end; var X: M; begin X.Name:=”Яблочкина А.И.”; X.Date:=1970; X.M_W:=Women; X.Child:=2; end. | type Figure = (Square, Triangle, Circle); Param = record X,Y: Real; Fig: Figure; case Fig of Square: (Side: Real); Triangle: (Side1,Side2,Angle:Real); Circle: (Radius: Real); end; var MySquare, MyCircle: Param; begin MySquare.X:=3; MySquare.Y:=5; MySquare.Side:=5; MySquare.Fig:= Square; MyCircle.X:=2; MyCircle.Y:=7; MyCircle.Radius:=6; end. |
Оператор присоединения
Оператор присоединения = with список имен записей (полей) do оператор. |
Оператор присоединения распространяет действие имен записей и полей, указанных в нем, на оператор, стоящий за do. Поэтому при обращении к полям записей в области действия оператора присоединения можно опускать имена полей и записей, указанных после with. Транслятор формирует полное имя поля автоматически. Пример 2 можно было бы записать так:
… var Stud: TStudent; begin with Stud do begin Name:= ”Иванов И.И.”; God:= 1980; Gruppa:= 312; with Otmet do begin Matem:=4; Fizika:=5; Inf:=4; Istor:=4; end; end; end. |