
- •1 Языки программирования. Язык Pascal. Описание синтаксиса языка программирования.
- •2 Лексическая структура языка Pascal. Структура Pascal-программы. Составной оператор. Константы. Переменные
- •3 Концепция переменной языка Pascal
- •4 Концепция типа данных языка Pascal
- •5 Простые типы языка Pascal
- •6 Стандартные типы языка Pascal
- •7 Операторы языка Pascal
- •8 Составные типы языка Pascal
- •9 Множества (определение, примеры, операции). Представление множеств, примеры использования
- •10 Файловый тип. Операции с файлами.
- •11 Процедуры и функции. Описание процедуры. Оператор процедуры
- •12 Параметры процедур и функций.
- •13 Процедурный тип. Передача процедур и функций в качестве параметра.
- •14 Директивы, используемые при описании процедур и функций.
- •15 Необходимость и преимущества модульного программирования. Структура модуля в языке Pascal.
- •16 Рекурсия. Рекурсия и итерация.
- •17 Линейный поиск. Поиск делением пополам (двоичный поиск).
- •18 Простые алгоритмы сортировки.
- •19 Усовершенствованные алгоритмы сортировки. Сортировка Шелла. Сортировка Шелла
- •20 Ссылочные типы. Динамические структуры данных
- •21 Связанные списки, операции над списками.
- •22 Двусвязные кольца.
- •23 Двоичные деревья поиска
9 Множества (определение, примеры, операции). Представление множеств, примеры использования
Множества – сравнительно редко используемое средство языка, но в ряде случаев их применение позволяет заметно повысить наглядность, компактность и даже эффективность программ. Значения множественного типа, так же как и массивы, строятся из нескольких значений одного (базового) типа. Однако в отличие от массивов значение множественного типа может содержать любое количество различных элементов базового типа: от 0 элементов (пустое множество) до всех возможных значений базового типа. Т.е. возможным значением множественного типа являются все подмножества значений базового типа.
Тип
множество
Type Digits=Set of 1..5;
Var S:Digits
Практически все реализации языка Pascal накладывают ограничения на базовый тип множества. Turbo Pascal допускает в качестве базового упорядоченные типы не более чем с 256 различными значениями. Причем для целых типов эти значения должны лежать в диапазоне от 0 до 255. Таким ограничения удовлетворяют только стандартные типы, а также перечисляемые типы и образованные от них.
Type
Color=(red, color, blue);
Colors = set of Color;
Var MyColors:Colors;
В Pascal программе допускается явное изображение значений множества.
Type Achar = set of char;
Var A:Achar;
A:=[‘A’..’Z’, ‘a’..’z’, chr(Digit+48)];
Тип выражения должен совпадать с базовым типом множества.
Допустимые операции для значений множественного типа
1)Объединение, пересечение, вычитание множеств
2)Проверка принадлежности элемента множеству
3)Проверка на равенство и неравенство множеств
4)Проверка на вхождение, принадлежность одного множества другому
1)A+B – объединение множеств – множество, состоящее из элементов принадлежащих множествам A и B
A*B – пересечение – множество, состоящее из элементов, принадлежащих обоим множествам
A-B – вычитание – множество, состоящее из тех элементов множества A, которые не принадлежат множеству B.
2)Оператор In. Правый операнд – множество, левый операнд – значение базового типа множества. Возвращает TRUE, если элемент входит во множество и FALSE в противном случае.
If ch in [‘a’,’b’,’c’,’d’] then S;
3) A=B, A<>B - проверка на равенство и неравенство множеств, соответственно.
4) A<=B – проверка на вхождение множества из левого операнда во множество из правого операнда. A>=B – проверка на вхождение множества из правого операнда в левое.
Множества представляются в памяти массивом логических значений, i-ая компонента которого означает наличие или отсутствие i-го значения базового типа в множестве.
Максимальное число элементов – 256, значит, множество не может занимать больше, чем 32 байта.
Пример использования
Поиск простых чисел в диапазоне от 2 до N.
поместим все числа между 2 и п в решето
выберем и вынем из решета наименьшее из чисел, оставшихся в решете
поместим это число среди простых
переберем и вынем из решета все числа кратные данному
если решето непустое, повторим шаги со 2-го по 5.
Const N=255;
Var Sieve, Primes: Set Of 2..N;
Next:Byte;
J:Word;
Begin
Sieve := [2..N];
Primes := [];
Next := 2;
REPEAT
WHILE not (next in sieve) DO Inc(next);
Primes := Primes + [Next];
J:=Next;
WHILE J<=N DO
Begin
Sieve := Sieve – [J];
J := J + Next;
End;
UNTIL Sieve = [];
End.