Комбинированный тип данных




Лекция 9

 

Комбинированный тип = record {фиксированная часть записи} {; вариантная часть записи} end.

 

Фиксированная часть записи =

Идентификатор {, Идентификатор}: Тип

{; Идентификатор {, Идентификатор}: Тип}.

Вариантная часть записи =

сase Селектор варианта of

Вариант записи {; вариант записи }

end.

Вариант записи = Константа {, Константа}: ( Список полей ).

Селектор варианта = Идентификатор переменной порядкового типа.

 

1. Комбинированный тип данных языка Паскаль позволяет в программе задавать структуру данных, которая называется записью.

2. Запись – поименованная последовательность разнотипных элементов. Элемент записи называется полем. Доступ к элементу записи (полю) осуществляется по имени записи и поля, которые разделены точкой.

3. Записи особенно удобны для описания таблиц, содержащих разнотипные графы (строковые, числовые), причем степень сложности шапки таблицы не имеет значения.

Пример 1: Склад

Наименование товара Количество (кг) Цена Итого
Абрикосы   2.5  
Сливы      
Персики      

 

var Tovar: record Nazv: String[30]; Kol: Real; Cena: Real; Itogo: Real; end; begin Tovar.Nazv:= “Абрикoсы”; Tovar.Kol:= 200; Tovar.Cena:= 2.5; Tovar.Itogo:= Tovar.Kol * Tovar.Cena; End.     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.
type TTovar: record Nazv: String[30]; Kol, Cena, Itogo: Real; end; var Tovar: TTovar; F: file of TTovar;   procedure In; {эта процедура создаёт файл данных на диске} begin Rewrite(f); for i:=1 to 10 do begin Write(“Введие название товара ”); Readln(Tovar.Nazv); Write(“Введите цену ”); Readln(Tovar.Cena); Write(“Введите вес товара ”); Readln(Tovar.Kol); Tovar.Itogo:=Tovar.Kol*Tovar.Cena; Write(f, Tovar); 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.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: