СРЕДА ПРОГРАММИРОВАНИЯ DELPHI
Лабораторная работа №5
Тема: «Множества»
В работе предлагается задание по теме "Множества. В конце текста лабораторной работы есть приложение с теорией по указанной теме.
Задание. Применение множеств при работе с данными
Для выполнения задания создайте новое приложение.
1. Сконструируйте форму, на которой расположите компоненты в соответствии с условием задачи. Заметим, что во всех задачах требуется использовать множество, но можно обойтись без массивов.
2. Вывод элементов множества в Memo оформите в виде процедуры OutSetMemo.
3. Решение задачи своего варианта также оформите в виде подпрограммы (процедуры или функции - на ваше усмотрение), которую нужно вызвать в обработчике события OnClick кнопки Button1.
ЗАМЕЧАНИЕ: ЗАДАНИЯ МОЖЕТ СФОРМУЛИРОВАТЬ ВАШ ПРЕПОДАВАТЕЛЬ.
Задачи по вариантам:
№ 1. Множество A = {2, 15, 12, 3, 8, 13, 29}. Сгенерируйте 8 элементов (целые числа в пределах от 1 до 30) множества B. Найдите множество C = (AÈB)\(AÇB). Элементы множества B поместите в Memo1, множества C - в Memo2.
№ 2. Задайте множество A, содержащее все простые числа от 1 до 50. Сгенерируйте 10 случайных целых чисел в пределах от 100 до 500 и удалите из множества A все простые делители сгенерированных чисел. Элементы исходного множества A поместите в Memo1, после преобразования - в Memo2, список сгенерированных чисел - в Label1 (разделите пробелом).
№ 3. Пользователь вводит текст в Memo1. Создайте множество A, состоящее из специальных символов: + - * / = < > [ ],.:; ' () { } @ # $ ^
Переместите из множества A во множество B все элементы A, которые встречаются во введенном в Memo1 тексте. Элементы полученного множества A поместите в Memo2, множества B - в Memo3.
№ 4. Задайте множество A, содержащее все простые числа от 1 до 50. Сгенерируйте 100 случайных целых чисел в пределах от 1 до 50 и посчитайте, сколько раз среди них встречаются простые числа, а сколько - составные (кстати, число 1 не является ни простым, ни составным). Элементы множества A поместите в Memo1, результаты - в Label1, Label2.
№ 5. Пользователь вводит текст в Memo1. Создайте множество B, элементами которого являются гласные буквы английского алфавита (a, A, e, E, i, I, o, O, u, U), которых нет во введенном тексте. Элементы полученного множества B поместите в Memo2.
№ 6. Создайте множество A, состоящее из цифр и специальных символов:
+ - * / = < > [ ],.:; ' () { } @ # $ ^
Поместите во множество B коды всех символов, принадлежащих множеству A. Элементы множества A поместите в Memo1, множества B - в Memo2.
№ 7. Задайте константу-множество A, содержащее все простые числа от 1 до 50. Сгенерируйте случайное целое число N в пределах от 1000 до 10000, найдите все его различные простые делители из множества A и поместите в множество B. Элементы множества A поместите в Memo1, число N - в Label1, элементы множества B - в Memo2.
№ 8. Пользователь вводит текст в Memo1. Поместите в Memo2 введенный текст, но без гласных русских букв (строчные и прописные гласные русские буквы поместите в множество A). Для решения задачи не обязательно заводить массив.
№ 9. Задайте константу-множество A, содержащее все простые числа от 1 до 50. Создайте его подмножество B из 5 различных случайных чисел. Элементы множества A поместите в Memo1, множества B - в Memo2.
№ 10. Задайте множество A, содержащее все простые числа от 1 до 50. Сгенерируйте 20 случайных целых чисел в пределах от 1 до 50, поместите их в множество B (во множестве B может оказаться меньше чем 20 чисел), а из множества A удалите те элементы, которые встречаются в B. Элементы множества A поместите в Memo1, множества B - в Memo2.
Контрольные вопросы.
1. Что такое множество?
2. Как описать и инициализировать множество? Приведите примеры.
3. Как выяснить, принадлежит ли данный элемент данному множеству?
4. Как сравнить два множества?
5. Какие операции можно производить над множествами?
6. Какие основные процедуры можно использовать для работы с множествами?
Основные сведения о множествах в Delphi (Pascal)
Множество - составной тип данных для представления набора некоторых элементов как единого целого. Все элементы множества принадлежат к некоторому порядковому типу, который называется базовым типом множества. Базовые типы: AnsiChar, Byte, ShortInt, Boolean, WordBool (либо их подмножество).
Описание множественного типа: set of baseType
Примеры: type TLetters = set of 'A'..'Z';
var Letters: TLetters;
var Symbols: set of Char;
var Numb: set of 0..9;
В выражениях значения элементов множества указываются в квадратных скобках:
[2, 3, 5, 7], [1..9], ['A', 'B', 'C'], [ ].
Пример инициализации множеств:
const Vowels: TLetters = ['A', 'E', 'I', 'O', 'U'];
begin
Letters:= ['A', 'B', 'C'];
Symbols:= [ ]; { пустое множество }
Numb:=[1,2,5..8];
end;
Операции над множествами
1. Операции сравнения: = < >
Два множества считаются равными, если они состоят из одних и тех же элементов. Порядок следования элементов в сравниваемых множествах значения не имеет.
Два множества A и B считаются неравными, если они отличаются по мощности или по значению хотя бы одного элемента.
Выражение | Результат |
[1, 2] < > [1, 2, 3] | True |
[1, 2] = [1, 2, 2] | True |
[1, 2, 3] = [3, 2, 1] | True |
[1, 2, 3] = [1..3] | True |
2. Операции принадлежности: >= <=
Выражение A>=B равно True, если все элементы множества B содержатся во множестве A. Выражение A<=B равно True, если выполняется обратное условие, т.е. все элементы множества A содержатся во множестве B.
Выражение | Результат |
[1, 2] <= [1, 2, 3] | True |
[1, 2, 3] >= [1, 2] | True |
[1, 2] <= [1, 3] | False |
3. Операция in. Используется для проверки принадлежности элемента указанному множеству. Обычно применяется в условных операторах.
Выражение | Результат |
5 in [1..9] | True |
5 in [1..4, 6..9] | False |
Операция in позволяет эффективно и наглядно выполнять сложные проверки условий, заменяя иногда десятки других операций.
Например, оператор
if (X = 1) or (X = 2) or (X = 3) or (X = 5) or (X = 7) thenможно заменить более коротким:
if X in [1..3, 5, 7] then
Замечание: Операцию in иногда пытаются записать с отрицанием: X not in S. Такая запись является ошибочной, так как две операции следуют подряд. Правильная запись имеет вид: not (X in S).
4. Объединение множеств (+). Объединением двух множеств является третье множество, содержащее элементы обоих множеств.
Выражение | Результат |
[ ] + [1, 2] | [1, 2] |
[1, 2] + [2, 3, 4] | [1, 2, 3, 4] |
5. Пересечение множеств (*). Пересечение двух множеств - это третье множество, которое содержит элементы, входящие одновременно в оба множества.
Выражение | Результат |
[3, 5] * [1, 2] | [ ] |
[1, 2] * [2, 3, 4] | [2] |
6. Разность множеств (–). Разностью двух множеств является третье множество, которое содержит элементы первого множества, не входящие во второе множество.
Выражение | Результат |
[1, 2, 3] – [2, 3, 4] | [1] |
[1, 2, 3] – [ ] | [1, 2, 3] |
Стандартные процедуры для работы с множествами
1. Процедура Include(S, I) включает во множество S элемент I. Она дублирует операцию + (плюс) с той лишь разницей, что при каждом обращении включает только один элемент и делает это более эффективно.
2. Процедура Exclude(S, I) исключает из множества S элемент I. Она дублирует операцию – (минус) с той лишь разницей, что при каждом обращении исключает только один элемент и делает это более эффективно.
Выражение | Результат |
S:= [1, 3]; | [1, 3] |
Include(S, 2); | [1, 2, 3] |
Exclude(S, 3) | [1, 2] |
Использование в программе множеств дает ряд преимуществ: значительно упрощаются сложные операторы if, улучшается наглядность программы и понимание алгоритма решения задачи, экономится время разработки программы.