- •Данные о дисциплине
- •Выписка из учебного плана Дневное отделение
- •Введение
- •Примерный перечень практических занятий
- •Дополнительная литература
- •Раздел 2. Рабочая программа дисциплины:
- •2.1 Краткое описание дисциплины
- •Перечень заданий
- •Лекция 1. Введение в теорию Алгоритмов. Алгоритмы и алгоритмические языки. Свойства алгоритмов. Исполнители. Машина Тьюринга. Тезис Тьюринга
- •Алфавит языка Турбо Паскаль и специфика использования символов
- •Внешний вид исходного текста программы
- •Операции и выражения
- •Операторы Ввода-вывода Оператор вывода writeln
- •Лекция 5. Операторы условий, выбора и безусловного перехода. Циклы
- •Операторы циклов
- •Инкрементный цикл с параметром
- •Декрементный цикл с параметром
- •Лекция 6. Массивы
- •6.1. Одномерные массивы
- •6.2. Двумерные массивы (матрицы)
- •Обращение к компонентам массива
- •Лекция 7. Символы и строки. Множества
- •Строки. Строковые процедуры.
- •Неименованные константы
- •Действия с символами
- •Лекция 8. Множества (Set)
- •Лекция 9. Процедуры и функции Подпрограммы
- •Объявление и описание
- •Возвращаемые значения
- •Вызов подпрограмм
- •Параметр-константа
- •Функции
- •Параметр-значение
- •Лекция 10. Файлы. Файловые переменные.
- •Разновидности файлов
- •Работа с текстовыми файлами
- •Лекция 11. Записи. Бинарные файлы
- •Описание записей
- •Задание записей константой
- •Доступ к полям
- •Оперирование несколькими полями
- •Вложенные операторы with
- •Запись с вариантной частью
- •Описание записи с вариантной частью
- •Бинарные файлы. Использование таблиц с разнотипными полями. Работа с бинарными файлами
- •Типизированные файлы
- •Нетипизированные файлы
- •Подпрограммы обработки директорий
- •Дополнительная литература
- •Билеты для писменных экзаменов
Вложенные операторы with
Если возникает необходимость расположить один оператор with внутри другого, то любую переменную (если перед ней явно не указано имя записи), находящуюся под внутренним оператором with, компилятор пытается интерпретировать в такой последовательности:
если во внутренней записи есть поле с искомым именем, то поиск заканчивается;
если во внутренней записи поля с таким именем нет, то поиск производится среди полей внешней записи (если вложенных операторов with больше, чем два, то поиск ведется последовательно во всех задействованных записях в направлении "изнутри наружу");
если среди полей всех вложенных записей нет искомого идентификатора, компилятор считает его глобальной переменной.
Например:
|
|
Запись с вариантной частью
Если заранее известно, что в массиве записей (таблице) некоторые поля могут оставаться пустыми (наборы пустых полей могут быть разными для разных записей), то вполне понятно желание как-то сократить неиспользуемый, но занимаемый объем памяти.
Специально для таких случаев существуют записи с вариантной частью.
Описание записи с вариантной частью
В разделе var запись с вариантной частью описывают так:
Невариантная часть записи (до ключевого слова case) подчиняется тем же правилам, что и обычная запись. Вообще говоря, невариантная часть может и вовсе отсутствовать.
Вариантная часть начинается зарезервированным словом case, после которого указывается то поле записи, которое в дальнейшем будет служить переключателем. Как и в случае обычного оператора case, переключатель обязан принадлежать к одному из перечислимых типов данных. Список вариантов может быть константой, диапазоном или объединением нескольких констант или диапазонов. Набор полей, которые должны быть включены в структуру записи, если выполнился соответствующий вариант, заключается в круглые скобки.
Пример. Для того чтобы описать содержимое библиотеки, необходима следующая информация:
Для книг |
Для газет |
Для журналов |
Автор Название Год издания Издательство |
Название Дата выхода (день, месяц, год) Издательство |
Название Год и месяц издания Номер Издательство |
Графы "Название" и "Издательство" являются общими для всех трех вариантов, а остальные поля зависят от типа печатного издания. Для реализации этой структуры воспользуемся записью с вариантной частью:
В зависимости от значения поля item, в записи будет содержаться либо 4, либо 5, либо 6 полей.
Механизм использования записи с вариантной частью
Количество байтов, выделяемых компилятором под запись с вариантной частью, определяется самым "длинным" ее вариантом. Более "короткие" наборы полей из других вариантов занимают лишь некоторую часть выделяемой памяти.
В приведенном выше примере самым "длинным" является вариант ‘b’: для него требуется 23 байта (21 байт для строки и 2 байта для целого числа). Для вариантов ‘n’ и ‘m’ требуется 4 и 5 байт соответственно (см. таблицу).
name, publisher |
item |
Вариантная часть |
|||
... |
‘b’ |
author |
year |
||
... |
‘n’ |
data |
|
||
... |
‘m’ |
year |
month |
number |
|
... |
‘b’ |
author |
year |
||
