Тема: МНОЖЕСТВА
Цель работы: освоение приемов объявления и использование при решении задач структуры данных – множество.
Образец решения задачи.
Задача. Пусть задано множество А целых чисел. Создать множество В из элементов множества А, кратных 5. Вывести на печать множество В.
Постановка задачи.
Входные данные.
<Исходное> множество – А (множество целых чисел).
Выходные данные.
<Конечное> множество – В (множество целых чисел, кратных 5).
Алгоритм.
1. Задать <Исходное> множество целых чисел.
2. Сформировать <Конечное> множество целых чисел, кратных 5.
3. Вывести на печать <Конечное> множество.
Текст программы.
Модуль 1.
unit op;
Interface
Type
tSetByte= set of byte;
Implementation
End.
Модуль 2.
unit obrabotka;
Interface
uses op;
procedure sozdanie(var BB: tSetByte; AA: tSetByte; krat: byte);
procedure print(var BB: tSetByte);
Implementation
procedure sozdanie;
Var
i: byte;
AA: mn;
Begin
BB:=[]; // создали пустое множество
for i:=0 to 255 do // для каждого значения из допустимого диапазона (тип byte)
if (i in AA) and (i mod krat =0) then // число i входит в множество AA и кратно числу krat
|
|
BB:=BB+[i]; // добавили к множеству BB множество состоящее из одного значения (число i)
end;
procedure print;
Var
i: byte;
Begin
for i:=0 to 255 do // для каждого значения из допустимого диапазона (тип byte)
if (i in BB) then // значение i входит в множество
Write(i, ’ ’) // выводим его и пробел после
end;
End.
Основная программа.
Uses
op, obrabotka;
Var
A, B: tSetByte;
Begin
A:=[2, 4, 6, 12, 25..30, 32, 40..45, 90, 125]; // сконструировали множество из 17 элементов
sozdanie(B, A, 5); // создали множество B из элементов множества A кратных 5
print(B) // вывели элементы множества
End.
Примечание: Тип множество часто используют при решении задач на строки. Например, создают множество символов—разделителей слов для поиска начала и конца слова. Конструктор множества можно использовать в разделе констант при создании типизированных констант:
Type
tSetChar= set of char;
Const
Razdelit: tSetChar=[’ ’, ’,’, ’.’, ’!’, ’?’, ’:’, ’;’]; // символы—разделители
Задания для самостоятельного решения.
Вариант 1.
1. Пусть заданы множество А и множество В целых чисел, вывести напечатать общие элементы этих множеств.
2. Пусть задано множество А, напечатать в алфавитном порядке все элементы этого множества, входящих в множество letters=[’a’.. ’z’].
3. Дана непустая последовательность слов из строчных русских букв; между соседними словами - запятая, за последним словом - точка. Напечатать в алфавитном порядке все глухие согласные буквы, которые входят хотя бы в одно слово.
Вариант 2.
1. Пусть заданы множество А и множество В целых чисел, вывести на печать все элементы этих множеств.
2. Пусть задано множество А, напечатать в алфавитном порядке все элементы этого множества, входящих в множество letters=[’a’.. ’я’].
|
|
3. Пусть задано описание type natur=1..maxint. Написать программу, подсчитывающую количество различных (значащих) цифр в десятичной записи натурального числа n.
Вариант 3.
1. Пусть заданы множество А и множество В целых чисел, вывести на печать все элементы множества А, которые не входят в множество В.
2. Пусть задано множество А, напечатать в порядке возрастания все элементы этого множества, входящих в множество letters=[’0’.. ’9’].
3. Дана непустая последовательность слов из строчных русских букв; между соседними словами - запятая, за последним словом - точка. Напечатать в алфавитном порядке все гласные буквы, которые входят в каждое слово.
Вариант 4.
1. Пусть заданы множество А и множество В латинских букв, вывести на печать общие элементы этих множеств.
2. Пусть задано множество А, напечатать в порядке убывания все четные элементы этого множества, входящих в множество letters=[0..100].
3. Дана непустая последовательность слов из строчных русских букв; между соседними словами - запятая, за последним словом - точка. Напечатать в алфавитном порядке все глухие согласные буквы, которые входят хотя бы в одно четное слово.
Вариант 5.
1. Пусть заданы множество А и множество В целых чисел, вывести на печать все элементы множества В, которые не входят в множество А.
2. Пусть задано множество А, напечатать в алфавитном порядке все согласные буквы этого множества, входящих в множество letters=[’a’.. ’я’].
3. Дан текст из строчных латинских букв, за которым следует точка. Напечатать все буквы, входящие в текст по одному разу.
Вариант 6.
1. Пусть заданы множества А, В, С, вывести на печать общие элементы всех множеств.
2. Пусть задано множество А, напечатать в порядке убывания все элементы кратные 3 этого множества, входящих в множество letters=[10..200].
3. Дана непустая последовательность слов из строчных русских букв; между соседними словами - запятая, за последним словом - точка. Напечатать в алфавитном порядке все звонкие согласные буквы, которые входят более чем в одно слово.
Вариант 7.
1. Пусть заданы множества А, В, С, вывести на печать все элементы этих множеств.
2. Написать программу, печатающую в возрастающем порядке все цифры, не входящие в десятичную запись натурального числа n.
3. Дан текст из строчных латинских букв, за которым следует точка. Напечатать все буквы, входящие в текст не менее двух раз.
Вариант 8.
1. Пусть заданы множества А, В, С, вывести на печать все элементы, входящие во множество А, но не входящие во множества В и С.
2. Пусть задано множество letters=[2..100]. Необходимо сформировать новое множество из элементов заданного, кратных 3 или 5.
3. Дана непустая последовательность слов из строчных русских букв; между соседними словами - запятая, за последним словом - точка. Напечатать в алфавитном порядке все звонкие согласные буквы, которые входят в каждое слово.
Вариант 9.
1. Пусть заданы множества А, В, С, вывести на печать все общие элементы множеств С и А, но не входящие во множество В.
2. Пусть заданы множества А, В, С, вывести на печать все элементы, входящие во множества А и В, но не входящие во множество С.
3. Пусть задано множество А, напечатать в порядке возрастания все элементы кратные 5 этого множества, входящих в множество letters=[5..200].
Вариант 10.
1. Пусть заданы множества А, В, С, вывести на печать все общие элементы множеств С и В, но не входящие во множество А.
2. Пусть задано множество А, напечатать в порядке убывания все элементы кратные 7 этого множества, входящих в множество letters=[15..100].
3. Дан текст из строчных русских букв, за которым следует точка. Напечатать все гласные буквы, входящие в текст более двух раз.
Примечание: гласные буквы – а, е, и, о, у, ы, э, ю, я (ė обычно не входит в литерный тип); согласные – все остальные буквы, кроме й, ь, ъ; звонкие согласные – б, в, г, д, ж, з, л, м, н, р; глухие согласные – к, п, с, т, ф, х, ц, ч, ш, щ.
|
|
Контрольные вопросы:
1. Может быть базовым типом, тип integer?
2. Может ли быть базовым типом, тип char?
3. Как определить базовый тип?
4. Если задано описание set of 1...3; какие значения может принимать переменная такого множественного типа?
5. Пусть chars1:=[ ’a’, ’x’, ’e’]; chars2:=[’x’]; chars3:=[ ’a’..’z’];
Определите истинность высказываний: а). chars1 < > chars2; б). chars1 >= chars2; в). chars1 <= chars3; г). ’a’ in chars1; д). not (‘q’ in chars2).
6. Какие из следующих конструкций являются множествами (в смысле языка Паскаль), а какие нет и почему?
(1) [9,6,3,0];
(2) [2..3,5,7];
(3) [1..15,4..18];
(4) [’*’, ’*’];
(5) [0..0];
(6) [true..false];
(7) [2,sgrt(9)];
(8) [’=’, ’>=’, ’>’];
(9) [[ ],[5]];
7. Вычислите значения выражений:
(1) [1, 3, 5]*[2, 4];
(2) [1, 3, 5]+[2, 4];
(3) [1, 3, 5]-[2, 4];