Конспект лекций по информатике для специальностей 2102, 2103 Автор доц., к т. н. Каширская Е. Н
Вид материала | Конспект |
Содержание8.3. Записи с вариантами 9. Типизированная константа |
- Конспект лекций бурлачков в. К., д э. н., проф. Москва, 1213.67kb.
- Конспект лекций по курсу "Начертательная геометрия и инженерная графика" Кемерово 2002, 786.75kb.
- Конспект лекций по дисциплине «Маркетинг», 487.79kb.
- Конспект лекций для студентов всех специальностей дневной и заочной формы обучения, 1439.07kb.
- Конспект лекций для студентов, магистров и аспирантов всех специальностей, 373.35kb.
- Конспект лекций для студентов по специальности i-25 01 08 «Бухгалтерский учет, анализ, 2183.7kb.
- Конспект лекций организация производства и маркетинг для студентов 3 курса специальностей, 2989.73kb.
- Конспект лекций по дисциплине «психология и педагогика» омск 2005, 2020.42kb.
- Конспект лекций по курсу «Организация производства», 2034.84kb.
- Конспект лекций по курсу «Организация производства», 2032.47kb.
8.3. Записи с вариантами
При определении комбинированного типа в него можно включать вариантную часть. Это означает, что разные переменные, хотя они и относятся к одному типу, могут иметь различные структуры. Например, пусть необходимо задать информацию о некотором человеке, указав фамилию и год рождения, а также, если это мужчина, то сообщить, военнообязанный ли он и какую имеет специальность; если это женщина, то указать, замужем ли она и сколько имеет детей:
Type Pol = (Mug, Gen);
Chel = Record
Fam: Array [1..10] of Char;
God: 1900..2000;
MG: Pol; { заголовок вариантной части }
Case Pol of
Mug: (Voen: Boolean; Spec: Array [1..15] of Char);
Gen: (Zamugem: Boolean; Dety: Integer);
End; (* of record *)
Var Ch1, Ch2: Chel;
Вариантная часть записи начинается оператором Case и следует за общей частью; после её окончания в записи не появляться никакие другие поля, поэтому оператор Case не закрывается служебным словом End.
Обычно некоторое поле общей части указывает вариант. В примере это поле MG, называемое полем признака или дискриминации.
Все варианты описываются внутри оператора Case. Каждый вариант характеризуется задаваемым в скобках списком описаний присущих ему компонентов.
Перед списком стоит одна или несколько меток. Тип этих меток указывается в заголовке вариантной части (в отличие от оператора варианта, где селектором варианта является выражение, а не тип). Тип должен быть скалярным (не массивы и не записи), При этом он задаётся именем.
В явном виде указывать тип в заголовке не разрешается.
Часто для сокращения записи поле признака (дискриминант) включается в заголовок вариантной части:
Case MG: Pol of
Для переменной Ch1 типа Chel можно написать следующие операторы присваивания:
Ch1.Fam := ‘Solomatin’;
Ch1.God := 1977;
Ch1.MG := Mug;
Ch1.Voen := True;
Ch1.Spec := ‘Programmist’;
Задав значение поля признака MG (некоторую константу типа Pol), можно присваивать новые значения только полям вариантной части, помеченных такой же константой.
Хотя никакого контроля поля селектора при обращении к компоненту из вариантной части не производится, для надёжности работы программы следует придерживаться этого правила.
В любой записи может быть только одна вариантная часть, и, если она есть, она должна располагаться за всеми фиксированными полями.
Пример.
Type Alfa = Array [1..10] of Char;
Variety = (Book, Journal, Newspaper);
Name = Record
First, Last: Alfa;
End; (* of Name *)
Edition = Record
Name1: Name;
Title, Publishers: Alfa;
Case V: Variety of
Book: (Years: Integer);
Journal: (Number: 1..12;
Volume: Integer;
YearJ: 1900..2000);
Newspaper: (Day: 1..31;
Month:1..12;
YearN: Integer);
End; (* of Edition *)
………………………
Var E: Edition;
…………………….…
E.Name1.First := ‘Niklau’;
E.Name1.Last := ‘Wirth’;
E.Title := ‘Pascal’;
E.Publichers := ‘Springer’;
E.V := Journal;
E.Number := 5;
E.Volume := 12;
E.YearJ := 1972;
В описании записи разрешается использовать только одну вариантную часть, причём она должна быть записана после фиксированной части. Однако в вариантной части, в свою очередь, может появиться вариантная часть, следовательно, могут быть вложенные друг в друга вариантные части.
При записи варианта обязательно присутствие круглых скобок, даже если в них ничего не заключается. В этом случае записывается просто: ( ).
Пример. Определить площадь геометрической фигуры.
X и Y – координаты одного из углов прямоугольника или треугольника или центра окружности.
Area – площадь.
Skew – угол наклона одной из сторон прямоугольника.
Side1 и Side2 – длины двух смежных сторон прямоугольника.
Inclin – угол наклона одной из сторон треугольника.
Side – её длина.
Angle1 и Angle1 – углы, образованные с нею двумя другими сторонами.
Diameter – диаметр окружности.
Program Opr;
Const Pi = 3.141592;
Type Figure = (Triangle, Rectangle, Circle);
GeometricFigure = Record
X, Y: Real;
Area: Real;
Case Shape: Figure of
Triangle: (Inclin, Side, Angle1,Angle2: Real);
Rectangle: (Skew, Side1, Side2: Real);
Circle: (Diameter: Real);
End; (* of record *)
Var GFig: GeometricFigure;
Begin
……………
Case GFig.Shape of Triangle: GFig.Area := 0.5*SQR(GFig.Side)/(cos(GFig.Angle1)/
sin(GFig.Angle2)+cos(GFig.Angle2)/sin(GFig.Angle1));
Rectangle: GFig.Area := GFig.Side1 * GFig.Side2;
Circle: GFig.Area := Pi * SQR(GFig.Diameter) / 4;
End; (* of Case *)
…………………….
End.
9. ТИПИЗИРОВАННАЯ КОНСТАНТА
Типизированную константу можно использовать как переменную. Её следует рассматривать как инициализированную переменную, значение которой задано с самого начала. Применение типизированных констант экономит машинное время, т.к. начальное присвоение значений уже выполняется компилятором.
Типизированные константы задаются, как обычные, но дополнительно они получают и свой тип. Необходимо принять во внимание, что заданные значения имеются в распоряжении программы только при новом ее пуске, а затем могут изменять свое значение. Повторный пуск программы не с самого начала может дать уже другие значения.
Преимущество применения типизированных констант заключается в простоте присвоения начальных значений для переменных.
Синтаксис (вид описания):
Const имя: тип = значение;