или
Type Имя типа =Set of базовый тип ;
Var Имя множества:Имя типа;
Например:
Type
TM=Set of 1..100;
TS=Set of 'a'..'z';
Var Mch:TM; {Множество целых чисел от 1 до 100}
MSym:TS; {Множество строчных латинских букв}
M: Set of 1..10; {Множество целых чисел от 1 до 10}
Значения переменных множества задаются в разделе операторов с помощью конструктора множества, который представляет собой список элементов базового типа, заключенный в квадратные скобки.
Например:
Var M1,M2,M3:set of 1..99;
Begin . . .
M1:=[]; { Множество пустое}
M2:=[1,3,5,7,9]; { Множество нечетных чисел в первом десятке}
M3:=[2,4,6,8]; { Множество четных чисел в первом десятке}
End.
В качестве элементов в изображении множеств допускается использовать константы и выражения, тип которых совместим с базовым типом.
Типизированная константа - множество задается в виде правильного конструктора множества, например:
Type
Type_month=(Jn,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
TDays=Set of 1..31;
Tmonth=Set of 1..12;
Tsym=Set of 'A'..'Z';
Tmno=Set of Type_month;
Const
SymMno:Tsym=['A','E','I','O','U']; {подмножество гласных букв}
DaysMno:TDays=[1,8,15,22,29]; {подмножество выходных дней месяца}
Spring_Mes:Tmonth=[3,4,5]; {подмножество весенних месяцев года}
Spring_Month:Tmno=[Mar,Apr,May]; {то же, что и предыдущее}
Над множествами определены следующие операции:
1) * - пересечение множеств: результат содержит элементы, общие для обоих множеств. Например: пусть имеется описание:
Var S1,S2,S3,S4,S5:Set of 1..10;
Begin
S1:=[1,3,4,6];
S2:=[2,4,5,1];
S3:=S1*S2; - в S3 будет содержаться [1,4].
2) + - объединение множеств : результат содержит элементы первого множества, дополненные недостающими элементами из второго множества:
S4:=S1+S2; - в S4 будет содержаться [1,3,4,6,2,5].
3) - - разность множеств: результат содержит элементы из первого множества, которые не принадлежат второму:
S5:=S1-S2; - в S5 будет содержаться [3,6].
4) = - проверка эквивалентности (или равенства): возвращает TRUE, если оба множества эквивалентны, т.е. содержат все одинаковые элементы.
5) <> - проверка неэквивалентности (или неравенства): возвращает TRUE, если оба множества неэквивалентны, т.е. содержат неодинаковые элементы.
6) <= - проверка вхождения: возвращает TRUE, если первое множество включено во второе (т.е. все элементы первого множества присутствуют также и во втором).
7) >= - проверка вхождения: возвращает TRUE, если второе множество включено в первое.
8) IN - проверка принадлежности элемента множеству. Эта операция возвращает результат TRUE, если элемент (или выражение), стоящий слева принадлежит множеству, указанному справа.
Дополнительно к этим операциям можно использовать две процедуры:
Include - включает новый элемент во множество: Include(M,elem);
где М - множество элементов некоторого базового типа, а elem - элемент того же типа, который необходимо включить в множество М.
Exclude - исключает элемент из множества: Exclude(M,elem).
В отличие от операций "+" и "-", реализующих аналогичные действия над двумя множествами, эти процедуры оптимизированы для работыс одиночными элементами множества и поэтому отличаются высокой скоростью выполнения.
Основным достоинством использования множеств является экономия памяти: внутренне устройство множества таково, что каждому его элементу ставится в соответствие один двоичный разряд (один бит). Если элемент включен в множество, то соотвествующий разряд имеет значение 1, в противном случае - 0. Минимальной единицей памяти является 1 байт, содержащий 8 бит, поэтому для хранения множества мощностью 256 элементов выделяется память 32 смежных байта.
Типовые примеры:
Из слова «компьютеризация» получить слово «Генерация»
Program primer_1_1;
Var
S1: string[79];
S2: string[20];
Begin
S1:=’компьютеризация’;
Writeln(s1); {компьютеризация}
Delete(s1,1,7);
Writeln(s1); {еризация}
Delete(s1,3,2);
Writeln(s1); {ерация}
S2:=’Г’;
Insert (s2, s1,1);
Writeln(s1); {Герация}
S2:=’не’;
Insert (s2, s1,3);
Writeln(s1); {Генерация}
End.
Из множества целых чисел от 1 до 20 выделить:
1) множество чисел, делящихся на 2 и 3 одновременно;
2) множество чисел, делящихся на 2 или на 3.
Первая задача соответствует нахождению пересечения множеств чисел, одно из которых содержит числа, делящиеся на 2, а другое на 3. Вторая - объединению этих двух множеств.
Обозначим множество чисел, делящихся на 2 через М2; множество чисел, делящихся на 3 через М3; множество чисел, делящихся на 2 и 3 через М2and3; множество чисел, делящихся на 2 или 3 через М2or3.
Type TM=Set of 1..20; {Описание типа множества целых чисел от 1 до 20}
Var M2,M3,M2and3,M2or3:TM; {Описание множеств}
k:1..20; {Описание переменной}
Begin
M2:=[]; M3:=[]; {Пустые множества}
for k:=1 to 20 do
begin
if k mod 2 = 0 then Include(M2,k); {Включение элемента делящегося на 2 в
множество М2}
if k mod 3 = 0 then Include(M3,k); { Включение элемента делящегося на 3 в
множество М3}
end;
M2and3:=M2*M3; {Пересечение двух множеств}
M2or3:=M2+M3; {Объединение двух множеств}
write(' На 2 и 3 делятся числа: ');
for k:=1 to 20 do { Цикл для опеределения элементов в множестве}
if k in M2and3 then write(k:3); { вывод элементов делящихся на 6}
writeln; {Переход на новую строку экрана}
write(' На 2 или 3 делятся числа: ');
for k:=1 to 20 do
if k in M2or3 then write(k:3); readln; {Остановка для просмотра}
End.
Варианты самостоятельных заданий
Задание №1
1. Дан символ C. Вывести его код (то есть номер в кодовой таблице).
2. Дано целое число N (32 ≤ N ≤ 126). Вывести символ с кодом, равным N.
3. Дан символ C. Вывести два символа, первый из которых предшествует символу C в кодовой таблице, а второй следует за символом C.
4. Дано целое число N (1 ≤ N ≤ 26). Вывести N первых прописных (то есть заглавных) букв латинского алфавита.
5. Дано целое число N (1 ≤ N ≤ 26). Вывести N последних строчных (то есть маленьких) букв латинского алфавита в обратном порядке (начиная с буквы «z»).
6. Дан символ C, изображающий цифру или букву (латинскую или русскую). Если C изображает цифру, то вывести строку «digit», если латинскую букву — вывести строку «lat», если русскую — вывести строку «rus».
7. Дана непустая строка. Вывести коды ее первого и последнего символа.
8. Дано целое число N (> 0) и символ C. Вывести строку длины N, которая состоит из символов C.
9. Дано четное число N (> 0) и символы C1 и C2. Вывести строку длины N, которая состоит из чередующихся символов C1 и C2, начиная с C1.
10. Дана строка. Вывести строку, содержащую те же символы, но расположенные в обратном порядке.
11. Дана непустая строка S. Вывести строку, содержащую символы строки S, между которыми вставлено по одному пробелу.
12. Дана непустая строка S и целое число N (> 0). Вывести строку, содержащую символы строки S, между которыми вставлено по N символов «*» (звездочка).
13. Дана строка. Подсчитать количество содержащихся в ней цифр.
14. Дана строка. Подсчитать количество содержащихся в ней прописных латинских букв.
15. Дана строка. Подсчитать общее количество содержащихся в ней строчных латинских и русских букв.
16. Дана строка. Преобразовать в ней все прописные латинские буквы в строчные.
17. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные.
18. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные, а прописные — в строчные.
19. Дана строка. Если она представляет собой запись целого числа, то вывести 1, если вещественного (с дробной частью) — вывести 2; если строку нельзя преобразовать в число, то вывести 0. Считать, что дробная часть вещественного числа отделяется от его целой части десятичной точкой «.».
20. Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке слева направо).
Задание №2
1. Дано целое число N (> 0) и строка S. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить первые символы, если длина строки S меньше N, то в ее начало добавить символы «.» (точка).
2. Даны целые положительные числа N1 и N2 и строки S1 и S2. По- лучить из этих строк новую строку, содержащую первые N1 символов строки S1 и последние N2 символов строки S2 (в указанном порядке).
3. Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S.
4. Дан символ C и строки S, S0. Перед каждым вхождением символа C в строку S вставить строку S0.
5. Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0.
6. Даны строки S и S0. Проверить, содержится ли строка S0 в строке S. Если содержится, то вывести TRUE, если не содержится, то вывести FALSE.
7. Даны строки S и S0. Найти количество вхождений строки S0 в стро- ку S.
8. Даны строки S и S0. Удалить из строки S первую подстроку, совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений.
9. Даны строки S и S0. Удалить из строки S последнюю подстроку, совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений.
10. Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0. Если совпадающих подстрок нет, то вывести строку S без изменений.
11. Даны строки S, S1 и S2. Заменить в строке S первое вхождение строки S1 на строку S2.
12. Даны строки S, S1 и S2. Заменить в строке S последнее вхождение строки S1 на строку S2.
13. Даны строки S, S1 и S2. Заменить в строке S все вхождения строки S1 на строку S2.
14. Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и вторым пробелом исходной строки. Если строка содержит только один пробел, то вывести пустую строку.
15. Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и последним пробелом.
16. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Найти количество слов в строке.
17. Дана строка, состоящая из русских слов, набранных заглавными бук- вами и разделенных пробелами (одним или несколькими). Найти количество слов, которые начинаются и заканчиваются одной и той же буквой.
18. Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Найти количество слов, которые содержат хотя бы одну букву «А».
19. Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Найти количество слов, которые содержат ровно три буквы «А».
20. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Найти длину самого короткого слова.
Задание №3
1. Найти сумму четных элементов множества, которое является пересечением 2-х других множеств.
2. Найти сумму нечетных элементов множества, которое является объединением 2-х других множеств.
3. Найти сумму кратных трем элементов множества, которое является разностью 2-х других множеств.
4. Найти среднее арифметическое нечетных элементов множества, которое является пересечением 2-х других множеств.
5. Найти среднее арифметическое четных элементов множества, которое является объединением 2-х других множеств.
6. Найти среднее арифметическое кратных пяти элементов множества, которое является разностью 2-х других множеств.
7. Найти максимальный кратный трем элемент в числовом множестве.
8. Найти минимальный кратный пяти элемент в числовом множестве.
9. Найти максимальный четный элемент в числовом множестве, которое является пересечением двух других множеств.
10. Найти минимальный нечетный элемент в числовом множестве, которое является объединением двух других множеств.
11. Найти минимальный четный элемент в числовом множестве, которое является разностью двух других множеств.
12. Уменьшить значение всех элементов множества на значение его минимального четного элемента.
13. Уменьшить значение всех элементов множества на значение его максимального нечетного элемента.
14. Вывести на экран те элементы множества, которые меньше среднего арифметического значений его минимального и максимального элементов.
15. Определить, сколько элементов множества больше, чем среднее арифметическое значений его максимального и минимального элементов.
16. Вывести на экран кратные трем элементы числового множества, которое является разностью двух других множеств.
17. Вы-вести на экран нечетные элементы числового множества, которое является пересечением двух других множеств.
18. Вывести на экран кратные пяти элементы числового множества, которое является объединением двух других множеств.
19. Вывести на экран нечетные элементы числового множества, которое является разностью двух других множеств.
20. Подсчитать количество нечетных элементов во множестве, которое является пересечением двух других множеств.
Контрольные вопросы:
1. Что такое строка?
2. Что такое множество?
3. Как объявляются переменные для хранения строк?
4. Объясните механизм хранения строк?
5. Опишите процедуры для работы со строками
6. Опишите процедуры работы с множествами
7. Как обратится к отдельному элементу строки?
Дата: 2019-11-01, просмотров: 292.