
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Строковый тип данных
- •Описание констант
- •Операция присваивания
- •Приоритет операций
- •Оператор присваивания
- •Совместимость и преобразование типов
- •Элементарный ввод-вывод
- •Лекция 5 Выражения
- •Математические операции
- •Логические операции
- •Операции отношения
- •Приоритет операций
- •Основные математические функции
- •Уменьшает значение числа X на y. Если число y не указано, то уменьшение происходит на 1. Циклы
- •Арифметические циклы
- •Итерационные циклы с предусловием
- •Итерационные циклы с постусловием
- •Операторы завершения цикла
- •Операторы ветвления и цикла Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Операторы ветвления и цикла
- •Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Лекция 7. Подпрограммы: процедуры и функции
- •Пример 27
- •Обмен данными
- •4.2. Множества
- •4.2.1. Объявление типа множества
- •4.2.2. Операции над множествами
- •4.2.3. Пример использования множества
- •Пример 33
- •4.3. Строки
- •4.3.1. Объявление типа String
- •4.3.2. Операции над строковыми переменными
- •4.3.3. Встроенные процедуры и функции обработки строк
- •Пример 34
- •4.1. Матрица
- •4.1.1. Ввод-вывод элементов матрицы
- •4.1.2. Определение индексов элементов матрицы
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Определение и особенности файлов
- •Доступ к компонентам файла
- •Текстовый файл
- •Чтение из текстового файла
- •Запись в текстовый файл
- •Файлы в Тубо Паскаль
- •Файловые процедуры и функции
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Графика Турбо Паскаля
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Статические и динамические памяти переменные
- •Объявление указателей
- •Выделение и освобождение динамической памяти
- •Операции с указателем
- •Пример 41
- •Связанные списки
- •Понятие бинарные деревья. Операции над бинарными деревьями
- •Применение бинарных деревьев
- •Сравнение рекурсии и итерации
- •Пример 51
- •Реализация объектно-ориентированного подхода в турбо-паскале
- •Алгоритмическая и объектная декомпозиция
- •Объектный тип в Турбо-Паскале
- •Способы наследования и переопределения
- •Виртуальные методы
- •Модуль c r t
- •Модуль g r a p h
4.2. Множества
4.2.1. Объявление типа множества
Значениями типа множества, так же, как и массива, являются значения одного базового типа, однако, в отличие от массива множество может содержать любое количество различных элементов базового типа. Рассмотрим множество, состоящее из трех элементов [1, 2, 5]. В этом множестве можно выделить восемь подмножеств:
- с одним элементом: [1], [2], [5]; - с двумя элементами: [1, 2], [1, 5], [2, 5]; - с тремя элементами: [1, 2, 5]; - пустое: [].
В общем случае для множества, содержащего N элементов, можно выделить 2N подмножеств. Паскаль позволяет определить переменную типа множества, значением которой может быть одно из рассмотренных подмножеств базового типа [1, 2, 5], следующим образом:
var X : set of (1, 2, 5);
При объявлении типа множества всегда указывается тип базового множества, т.е. тот скалярный тип, из элементов которого составлено множество. Обычно используются перечисляемые и интервальные типы. Количество элементов базового множества может меняться в пределах от 0 до 255, например:
type Tbm1 = set of 0..63; Tbm2 = set of 'A'..'Z'; var X1, X2: Tbm1; Y1, Y2: Tbm2; . . . X1 := [0..3, 5, 20, 40]; {подмножество состоит из элементов 0, 1, 2, 3, 5, 20, 40} X2 := [5, 7]; Y1 := ['A', 'D', 'Z']; Y2 := []; {пустое множество} |
Как следует из примера, подмножество в программе задается перечислением входящих в него элементов базового множества, заключенных в квадратные скобки. В качестве элементов базового множества можно указывать переменные и выражения, значения которых имеют тип базового множества, например: пусть I = 3, J = 6, тогда [I..J-1, J+1..20] - подмножество [3..5, 7.. 20] базового множества типа Tbm1.
4.2.2. Операции над множествами
В Паскале определены следующие операции, позволяющие получить новое подмножество из двух данных:
+ |
- |
объединение; результат содержит все элементы объединяемых подмножеств, одинаковые элементы не повторяются, например: |
|
|
X1 + X2 содержит [0, 1, 2, 3, 5, 7, 20, 40]; |
* |
- |
пересечение; результат содержит элементы, принадлежащие одновременно обоим подмножествам, например: |
|
|
X1 * X2 содержит [5]; |
- |
- |
разность; результат содержит элементы первого подмножества, которые не входят во второе, например: |
|
|
X1 - X2 содержит [0, 1, 2, 3, 20, 40]. |
Существуют операции, позволяющие сравнивать подмножества. Результатом являются значения TRUE и FALSE.
= |
- |
проверка на равенство; два подмножества считаются равными, если они состоят из одних и тех же элементов, например: |
|
|
['A'..'C'] = ['B', 'C', 'A'] возвращает TRUE; |
|
|
['A'..'C'] = ['A'..'D'] возвращает FALSE; |
<> |
- |
проверка на неравенство, например: |
|
|
['A'..'C'] <> ['B', 'C', 'A'] возвращает FALSE; |
|
|
['A'..'C'] <> ['A'..'D'] возвращает TRUE; |
<= |
- |
проверка принадлежности, например: |
|
|
[1..4] <= [0..21] возвращает TRUE; |
|
|
[0..21] <= [1..4] возвращает FALSE; |
>= |
- |
проверка принадлежности, например: |
|
|
[1..4] >= [0..21] возвращает FALSE; |
|
|
[0..21] >= [1..4] возвращает TRUE; |
in |
- |
проверка принадлежности символа подмножеству, например: |
|
|
20 in X1 возвращает TRUE; |
|
|
'D' in ['A'..'C'] возвращает FALSE. |
Используя рассмотренные операции, можно записывать выражения. Установлен следующий порядок выполнения операций по убыванию приоритетов:
*, +, -, in, =, <>, <=, >=.
Рассмотрим пример выражения:
C1 in (['A'..'D']+['I'..'N']) * ['B', C2, 'M']
Значение этого выражения зависит от значений переменных C1, C2 типа Char:
для C1 = 'B' выражение всегда возвращает TRUE; для C1 = 'A' выражение возвращает FALSE, если C2 <> 'A' и TRUE , если C2 = 'A'.
Заметим, что выражение
C1 in ['A'..'Z'] эквивалентно выражению ( C1 >= 'A' ) and ( C1 <= 'Z' ).