- •1. Понятие и состав языка программирования. Машинные и символьные языки.
- •2. Особенности процедурных языков программирования. Примеры языков.
- •3. Общая характеристика непроцедурных языков программирования.
- •4. Понятие и состав системы программирования.
- •5. Компилятор. Назначение и состав.
- •7. Описание алгоритмических языков. Формулы бнф.
- •8. Описание алгоритмических языков. Синтаксические диаграммы.
- •9. Типы ошибок в программах. Понятие отладки и отладчиков.
- •10. Операторы ввода из стандартного файла.
- •11. Операторы вывода в стандартный файл.
- •12. Целый тип данных.
- •13. Вещественный тип данных.
- •14. Булевский тип.
- •15. Символьный тип.
- •16. Структура программы на Паскаль. Комментарии.
- •17. Понятие метки. Раздел описания меток.
- •18. Раздел описания констант.
- •19. Раздел описания типов.
- •20. Раздел описания переменных.
- •21. Правила записи выражений. Порядок старшинства операций.
- •22. Понятие оператора. Раздел оператор. Простые и сложные операторы.
- •23. Оператор присваивания. Пустой оператор. Составной оператор.
- •24. Условный оператор if.
- •25. Оператор вариантов.
- •26. Операторы цикла while и repeat.
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием.
- •Оператор цикла с параметром.
- •27. Скалярный тип.
- •28. Ограниченный тип.
- •29. Регулярный тип. Массивы.
- •30. Понятие комбинированного типа.
- •31. Множественный тип.
- •32. Файловый тип. Понятие последовательного файла и файла с прямым доступом.
- •33. Текстовые файлы. Внешние и внутренние файлы.
- •34. Понятие подпрограммы. Процедуры. И 35. Функции. Раздел описания процедур и функций.
- •36. Рекурсия. Основные понятия. Прямая и косвенная рекурсия.
- •37. Динамические переменные. Ссылочный тип.
- •38. Понятие списка. Типы списков: однонаправленные и двунаправленные.
- •39. Иерархические и ассоциативные списки.
- •40. Стеки.
- •41. Очереди.
- •42. Деревья - как структуры данных. Двоичные деревья. Методы их просмотра.
- •43. Упорядоченные двоичные деревья. Операции поиска.
- •44. Включения и удаления элементов из двоичного упорядоченного дерева.
30. Понятие комбинированного типа.
Комбинированный тип является наиболее гибким механизмом построения данных.
Этот тип задает некий образ структуры каждая часть, которой может иметь совершенно разные характеристики. Переменные комбинированного типа называются записями. Запись, как и массив, состоит из компонентов, но эти компоненты могут иметь разные типы и для доступа к ним используются не индексы, а имена этих компонентов.
Описание комбинированного типа имеет следующий синтаксис:
<комбинированный тип>::=record
<список полей>
end.
<список полей>::=<фиксированная часть> | <фиксированная часть>;<вариантная часть> | <вариантная часть>
<фиксированная часть>::=<секция записей>{<секция записей>}
<секция записей>::=<имя>{<имя>}:<тип> | <пусто>
Определение комбинаторного типа имеет вид:
type <имя типа>::=record
<имя>{, <имя>}:<тип>
………
<имя>{, <имя>}:<тип>
[<вариантная часть>]
end.
Комбинаторный тип, у которого отсутствует вариантная часть, называется упрощенным, а в противном случае типом с вариантами.
После определения таких типов в программе можно использовать переменные этих типов.
Для обозначения компонента таких записей используется последовательность из имени переменной, точки и имени полей.
Компонентом записей можно присваивать значение и они могут участвовать в выражениях точно также как обычные переменные соответствующего типа.
Между переменными одного и того же типа можно применять операции присваивания.
Эта операция сводится к последовательности операции присваивания между одноименными компонентами записи.
Компоненты комбинированного типа также могут иметь комбинированный тип.
Вариантная часть всегда идет после фиксированной части имеет след. синтаксис:
case <имя поля признака> : <тип> of <вариант> … <вариант>;
Вариант:
<список меток варианта> : (:<список полей>)
Имя признака задается идентификатором и предполагается, что он может иметь любой скалярный тип кроме вещественного. Этот признак является компонентом комбинированного типа и с ним можно работать точно так же как и с другими компонентами этого типа.
Каждый вариант состоит из списка меток варианта затем «:», а затем в круглых скобках список полей.
Список меток варианта представляет собой последовательность констант, разделенных запятыми.
Тип этих констант может совпадать с типом поля признака. Список меток может содержать только одну метку или любое другое количество.
В зависимости от значения в поле признака соответствующая запись будет содержать список полей только одного варианта, в списке меток которой содержится значение поля признака.
Список меток разных вариантов содержит парные константы и значения поля признака всегда должно содержаться в одном из указанных списков.
31. Множественный тип.
Понятие множества в языке Паскаль основывается на математическом представлении о множествах: это ограниченная совокупность различных элементов. Для построения конкретного множественного типа используется перечисляемый или интервальный тип данных. Тип элементов, составляющих множество, называется базовым типом.
Множественный тип описывается с помощью служебных слов Set of, например:
type M= Set of B;
Здесь М - множественный тип, В - базовый тип.
Пример описания переменной множественного типа:
type
M= Set of 'A'..'D';
var
MS: M;
Принадлежность переменных к множественному типу может быть определена прямо в разделе описания переменных:
var
C: Set of 0..7;
Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базового типа, разделенных запятыми, например:
['A', 'C'] [0, 2, 7] [3, 7, 11..14].
Константа вида: [ ] означает пустое подмножество.
Множество включает в себя набор элементов базового типа, все подмножества данного множества, а также пустое подмножество. Если базовый тип, на котором строится множество, имеет К элементов, то число подмножеств, входящих в это множество, равно 2 в степени К. Пусть имеется переменная Р интервального типа:
var P: 1..3;
Эта переменная может принимать три различных значения - либо 1, либо 2, либо 3. Переменная Т множественного типа
var T: Set of 1..3;
может принимать восемь различных значений:
[ ] [1,2]
[1] [1,3]
[2] [2,3]
[3] [1,2,3]
Порядок перечисления элементов базового типа в константах безразличен.
Значение переменной множественного типа может быть задано конструкцией вида [T], где T - переменная базового типа.
К переменным и константам множественного типа применимы операции присваивания(:=), объединения(+), пересечения(*) и вычитания(-):
['A','B'] + ['A','D'] даст ['A','B','D']
['A'] * ['A','B','C'] даст ['A']
['A','B','C'] - ['A','B'] даст ['C'].
Результат выполнения этих операций есть величина множественного типа.
К множественным величинам применимы операции: тождественность (=), нетождественность (<>), содержится в (<=), содержит (>=). Результат выполнения этих операций имеет логический тип, например:
['A','B'] = ['A','C'] даст FALSE
['A','B'] <> ['A','C'] даст TRUE
['B'] <= ['B','C'] даст TRUE
['C','D'] >= ['A'] даст FALSE.
Кроме этих операций для работы с величинами множественного типа в языке Паскаль используется операция in проверяющая принадлежность элемента базового типа, стоящего слева от знака операции, множеству, стоящему справа от знака операции. Результат выполнения этой операции - булевский. Операция проверки принадлежности элемента множеству часто используется вместо операций отношения, например:
A in ['A', 'B'] даст TRUE,
2 in [1, 3, 6] даст FALSE.
При использовании в программах данных множественного типа выполнение операций происходит над битовыми строками данных. Каждому значению множественного типа в памяти ЭВМ соответствует один двоичный разряд. Например, множество
['A','B','C','D']
представлено в памяти ЭВМ битовой строкой
1 1 1 1.
Подмножества этого множества представлены строками:
['A','B','D'] 1 1 0 1
['B','C'] 0 1 1 0
['D'] 0 0 0 1
Величины множественного типа не могут быть элементами списка ввода - вывода.
В каждой конкретной реализации транслятора с языка Паскаль количество элементов базового типа, на котором строится множество, ограничено. В Turbo Pascal количество базовых элементов не должно превышать 256.
Инициализация величин множественного типа производится с помощью типизированных констант:
const seLit: Set of 'A'..'D'= [];