- •Конспект лекций по информатике
- •Организация данных в эвм и основы программирования
- •1. Основные понятия языка программирования паскаль
- •1.1. Структурное программирование
- •1.2. Основные символы языка
- •1.3. Элементы языка
- •1.4. Интегрированная среда turbo pascal
- •1.5. Структура программы в turbo pascal
- •1.6. Определение типов
- •1.7. Операторы в программе
- •1.7.1. Операторные скобки
- •1.7.2. Операторы ввода
- •1.7.3. Оператор присваивания
- •1.7.4. Условный оператор
- •1.7.5. Пример простой программы
- •1.7.6. Оперетор безусловного перехода
- •1.8. Организация циклов
- •1.8.1. Использование операторов условного и безусловного перехода
- •1.8.2. Цикл с параметром
- •1.8.3. Цикл с предусловием - цикл while
- •1.8.4. Цикл с постусловием - цикл repeat
- •1.9. Оператор выбора варианта
- •1.10. Расположение операторов в программе
- •1.11. Концепция типов данных
- •2. Стандартные простые типы
- •2.1 Целый тип
- •2.1.1. Операции над данными целого типа:
- •2.2. Действительный тип
- •2.2.1. Операции над данными действительного типа:
- •2.3. Логический тип
- •Var p, q, r : Boolean;
- •2.3.1. Алгебра логики в Паскале
- •2.3.2. Законы алгебры логики в Паскале
- •2.4. Символьный тип
- •2.4.1. Символьные строковые константы
- •3. Нестандартные простые типы (определяемые пользователем)
- •3.1. Перечисляемый тип
- •3.2. Ограниченный тип (диапазон, интервал)
- •4. Процедуры и функции
- •4.1. Описание процедур
- •4.2. Стандартные процедуры
- •4.3. Описание функций
- •4.4. Стандартные функции
- •4.5. Итерация и рекурсия
- •4.6. Побочный эффект рекурсии
- •4.7. Предварительное описание (ссылки вперед)
- •5. Регулярные типы
- •5.1. Одномерный массив, или переменные с индексами
- •Алгоритмы сортировки массивов
- •1. Метод пузырька (метод обменной сортировки с выбором)
- •2. Сортировка выбором
- •3. Метод Шелла
- •4. Метод Хoopа
- •5.2. Многомерные массивы
- •5.3. Упакованные массивы
- •5.4. Строки
- •6. Множественные типы
- •6.1. Свойства множеств
- •6.2. Операции над множествами
- •7. Комбинированные типы
- •7.1. Описание записей и действия с ними
- •7.2. Оператор присоединения.
- •7.3. Записи с вариантами
- •8. Типизированная константа
- •8.1. Простая типизированная константа
- •8.2. Структурированная (сложная) типизированная константа
- •8.2.1. Типизированная константа массива
- •8.2.2. Типизированная константа записи
- •8.2.3. Типизированная константа множества.
- •9. Преобразование типов
- •9.1. Неявные преобразования типов
- •9.2. Использование стандартных функций для преобразования
- •9.3. Явные преобразования типов
- •9.5. Совместимость типов
- •10. Файловые типы
- •10.1. Определение файлового типа
- •10.2. Структура файла
- •10.3. Имя файла
- •10.4. Описание файлового типа
- •10.5. Файловая переменная
- •10.6. Операции над файлами
- •10.7. Типизированные файлы
- •10.8. Текстовые файлы
- •10.9. Нетипизированные файлы
- •10.10. Стандартные файлы inpuTиOutput
7.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. Каждый вариант характеризуется задаваемым в скобках списком описаний присущих ему компонентов.
Перед списком стоит одна или несколько меток. Тип этих меток указывается в заголовке вариантной части (в отличие от оператора варианта, где селектором варианта является выражение, а не тип). Тип должен быть скалярным (не массивы и не записи), При этом он задаётся именем.
В явном виде указывать тип в заголовке не разрешается.
Часто для сокращения записи поле признака (дискриминант) включается в заголовок вариантной части:
CaseMG:Polof
Для переменной 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.
