Цель работы: познакомить с понятием "множество" в языке программирования Pascal; выработать навыки работы со структурой данных множество.
Краткие сведения:
Понятие множества в языке ПАСКАЛЬ основывается на математическом представлении о множествах: это ограниченная совокупность различных элементов. Для построения конкретного множественного типа используется перечисляемый или интервальный тип данных. Тип элементов, составляющих множество, называется базовым типом.
Множественный тип описывается с помощью служебных слов Set of, например:
type M= Set of B;
Здесь М - множественный тип, В - базовый тип.
Пример описания переменной множественного типа:
type M= Set of 'A'..'D'; var MS : M;
Принадлежность переменных к множественному типу может быть определена прямо в разделе описания переменных:
var C : Set of 0..7;
Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базового типа, разделенных запятыми, например:
['A', 'C'] [0, 2, 7] [3, 7, 11..14].
Константа вида [] означает пустое подмножество.
Множество включает в себя набор элементов базового типа, все подм- ножества данного множества, а также пустое подмножество. Если базовый тип, на котором строится множество, имеет К элементов, то число подм- ножеств, входящих в это множество, равно 2 в степени К. Пусть имеется переменная Р интервального типа:
var P : 1..3;
Эта переменная может принимать три различных значения - либо 1, либо 2, либо 3. Переменная Т множественного типа
var T : Set of 1..3;
может принимать восемь различных значений:
[ ] [1,2] [1] [1,3] [2] [2,3] [3] [1,2,3]
Порядок перечисления элементов базового типа в константах безразличен.
Значение переменной множественного типа может быть задано конструкцией вида [T], где T - переменная базового типа.
К переменным и константам множественного типа применимы операции присваивания(:=), объединения(+), пересечения(*) и вычитания(-):
Результат выполнения этих операций есть величина множественного типа.
К множественным величинам применимы операции: тождественность (=), нетождественность (<>), содержится в (<=), содержит (>=). Результат выполнения этих операций имеет логический тип, например:
Кроме этих операций для работы с величинами множественного типа в языке ПАСКАЛЬ используется операция inпроверяющая принадлежность элемента базового типа, стоящего слева от знака операции, множеству, стоящему справа от знака операции. Результат выполнения этой операции - булевский. Операция проверки принадлежности элемента множеству часто используется вместо операций отношения, например:
A in ['A', 'B'] даст TRUE, 2 in [1, 3, 6] даст FALSE.
При использовании в программах данных множественного типа выполнение операций происходит над битовыми строками данных. Каждому значению множественного типа в памяти ЭВМ соответствует один двоичный разряд. Например, множество
['A','B','C','D']
представлено в памяти ЭВМ битовой строкой
1 1 1 1.
Подмножества этого множества представлены строками:
Величины множественного типа не могут быть элементами списка вво- да - вывода.
В каждой конкретной реализации транслятора с языка ПАСКАЛЬ количество элементов базового типа, на котором строится множество, ограничено. В TURBO PASCAL количество базовых элементов не должно превышать 256.
Инициализация величин множественного типа производится с помощью типизированных констант:
const seLit: Set of 'A'..'D'= [];
Проиллюстрируем применение данных множественного типа на примерах.
Пример 1. Дан текст. Определить каких букв больше - гласных или согласных. program example1;
const glasn=['а','е','и','о','у','ы','э','ю','я']; soglas=['б','в','г','д','ж','з','й','л','м', 'н','р','к','п','с','т','ф','х','ц','ч','ш','щ']; var st: string; g,s,i:integer; begin write('Введите строку> '); readln(st); g:=0; s:=0; for i:= 1 to length(st) do if st[i] in glasn then inc(g) else if st[i] in soglas then inc(s); if g> s then writeln('Гласных больше') else if g< s then writeln('Согласных больше') else writeln('Согласных и гласных букв поровну'); readln; end.
Задания:
Вариант 1.
1.Дан текст, который состоит из слов. Слова в тексте отделяются одно от другого специальными символами, которые находятся во множестве [‘ : ‘, ‘ ; ‘, ‘ . ‘, ‘ ? ‘, ‘ ! ‘]. Подсчитать количество разделителей в тексте и вывести слова в столбик без разделителей.
Вариант 2.
Дан текст, который состоит из слов. Слова в тексте отделяются одно от другого пробелами и содержат гласные буквы, которые находятся во множестве [‘ а ‘, ‘ е ‘, ‘ у ‘, ‘ и ‘, ‘ о ‘]. Подсчитать количество слов тексте и вывести из текста те слова, которые содержат хотя бы одну гласную букву.
Вариант 3.
Дан текст, который состоит из слов. Слова в тексте отделяются одно от другого символом *. Подсчитать количество слов в тексте и вывести слова, которые содержат хотя бы один символ множества [‘ w ‘, ‘ x ‘, ‘z‘, ‘ s ‘].
Вариант 4.
Дан текст, который состоит из слов. Слова в тексте отделяются одно от другого символом ‘,’. Подсчитать количество слов в тексте и вывести слова, которые содержат хотя бы один символ множества [‘ r ‘, ‘ t ‘, ‘p‘, ‘ s ‘].
Вариант 5.
Дан текст, который состоит из слов. Слова в тексте отделяются одно от другого символом ‘#’. Подсчитать количество слов в тексте и вывести слова, которые содержат хотя бы один символ множества [‘ q ‘, ‘ w ‘, ‘e‘, ‘ r ‘, ‘ t ‘, ‘y’, ‘u’].
Вариант 6.
Дан текст, который состоит из слов. Слова в тексте отделяются одно от другого символом ‘.’. Подсчитать количество слов в тексте и вывести слова, которые содержат хотя бы один символ множества [‘ 1 ‘, ‘ 2 ‘, ‘3‘, ‘ 4 ‘].
Вариант 7.
Построить два множества: одно из 10 целых чисел из отрезка [0, 40] и второе из 5 целых чисел из отрезка [0, 20]. Вывести на экран те числа, которые встречаются в обоих множествах.
Вариант 8.
Построить два множества: одно из 10 целых чисел из отрезка [0, 40] и второе из 5 целых чисел из отрезка [0, 20]. Вывести на экран те числа, которые встречаются хотя бы в одном множестве.
Вариант 9.
Построить два множества: одно содержит все делители некоторого целого числа N и второе, которое содержит все простые делители того же числа. Вывести на экран делители, которые не являются простыми.
Вариант 10.
Построить два множества: одно из 10 целых чисел из отрезка [0, 40] и второе из 5 целых чисел из отрезка [0, 20]. Вывести на экран те числа, которые не встречаются ни в одном множестве.
Вариант 11.
Построить два множества: одно из букв данного слова Х и второе из букв данного слова У. Вывести на экран те буквы, которые не встречаются ни в одном слове.
Вариант 12.
Построить два множества: одно из букв данного слова Х и второе из букв данного слова У. Вывести на экран те буквы, которые встречаются в обоих словах.
Вариант 13.
Построить два множества: одно из букв данного слова Х и второе из букв данного слова У. Вывести на экран те буквы, которые встречаются хотя бы в одном множестве.
Вариант 14
Имеются три множества символьного типа, которые заданы своими конструкторами: Y1=['A','B','D','R','H'] Y2=['R','A','H','D'] Y3=['A','R']. Сформировать новое множество . Предусмотреть формирование исходных множеств с клавиатуры.
Вариант 15
Подсчитать общее количество цифр и знаков '+', '-', и '*', входящих в строку s.
Контрольные вопросы
1. Что такое множество, как оно описывается в языке Pascal?
2. Как описываются типизированные константы типа множество?
3. Как осуществляется ввод-вывод значений переменных типа множество?
4. Какие типы данных используются в качестве базовых при объявлении типа множество?
5. Какие операции определены над множествами?
6. Какие операции допустимы над переменными, заданными перечислением?
7. Какое значение у выражений: а) x in [x]; б) [ ] <= [x,y,z]; в) [x]<>[x,x,x]