- •Билет №2. Структурный тип множество.
- •1. Понятие о типе Множество в Турбо Паскале.
- •2. Описание типа Множество и константы-множества.
- •Var pr1, pr2: primes; { переменные типа primes}
- •3. Обработка множеств.
- •Два множества считаются эквивалентными, если они имеют одинаковые элементы (порядок перечисления элементов безразличен).
- •Билет №24. Алфавит языка, основные конструкции языка.
3. Обработка множеств.
Над множествами Паскаля определены теоретико-множественные операции и отношения.
Операции над множествами:
+ операция объединения множеств, результатом её является множество, содержащее элементы множеств-операндов и только их.
Например:[2] + [2..5] даёт множество [2..5];
* операция пересечения множеств, результатом её является множество, содержащее только элементы, общие для множеств-операндов (т.е. входящие во все множества-операнды);
Например: [1..200] *[0,2..5] даёт множество [2..5];
- операция разности множеств, результатом её является множество, содержащее элементы множества-первого операнда и не содержащее элементы множества-второго операнда;
Например: [1..200] - [0,2..5] даёт множество [1, 6..200];
Отношения над множествами - бинарные отношения, имеющие применительно к множествам смысл эквивалентности (неэквивалентности) и включения одного множества в другое.
Два множества считаются эквивалентными, если они имеют одинаковые элементы (порядок перечисления элементов безразличен).
Множество А включено в множество В, если все элементы из А являются также элементами множества В.
= проверка эквивалентности, даёт true , если оба множества эквиваленты и false - в противном случае. Например: [1..3] =[3,1,2] - даёт true.
<> проверка неэквивалентности, является отрицанием эквивалентности.Например: [1..3] <> [3,2,1] - даёт false.
<= проверка включения левого операнда в правый, даёт true, если такое включение имеет место и false - в противном случае.
Например: [5] <= [1..5] - даёт true, а [0] <=[1..5] - даёт false.>= проверка включения правого операнда в левый, даёт true, если такое включение имеет место и false - в противном случае.
Кроме отношений эквивалентности и включения имеется ещё отношение принадлежности элемента множеству. Это отношение имеет структуру:
< выражение базового типа> in < множество над этим базовым типом >
Данное отношение дает значение true, если первый операнд является элементом множества - второго-операнда и false - в противном случае.
Например: 3 in [1..5] - даёт true, а 0 in [1..5] - дает false.
Рассмотренные операции и отношения составляют основной набор средств для обработки множеств в программах. Они могут использоваться либо для построения условий, либо - непосредственно в операторах программы. Используя переменные, конструкторы, операции и отношения можно строить выражения типа множества. Для таких выражений допустимы операторы присваивания вида:
< переменная типа-множество> := < выражение типа-множество>;
Например: pr1:= pr2; {копирование множества pr2 в pr1}
pr1:= []; {присваивание pr1 пустого множества}
pr1:= [1..200];{присваивание pr1 множества элементов от 1 до 200}.
Оператор присваивания совместно с операцией объединения или вычитания позволяет включать или исключать элементы из множества:
set1:=set1 + [a]; {включение элемента а в множество set1}
set2:= set2 - [d]; {исключение элемента d из множества set2}
Эти же действия выполняют стандартные процедуры include(set1,a) и exclude(set2,d) соответственно
4. Примеры использования множеств.
Рассмотрим примеры программ на Турбо Паскале с использованием множеств, иллюстрирующие технику обработки множеств.
program lat_letters;{Определение множества латинских букв в строке}
uses CRT;
var s:string; {исходная строка}
lat:set of 'A'..'Z'; {множество лат.букв}
k:char; j:byte;
begin TextBackground(cyan);TextColor(white);ClrScr;
repeat writeln('Введите строку');readln(s);
if s='' then writeln('Ошибка: пустая строка');
until s<>'';lat:=[];for j:=1 to length(s) do if upcase(s[j]) in ['A'..'Z'] then
lat:=lat+[upcase(s[j])];if lat=[] then writeln('В строке нет латинских букв') else
begin writeln('Латинские буквы:'); for k:='A' to 'Z'do if k in lat then write(k,' ') end;
end { lat_letters}.
end {sieve}.
Использование множеств в ряде случаев позволяет получать более простые тексты программ, "маскирующие" дополнительные циклы обработки. Например, в программе lat_letters таким "замаскированным циклом" является условие upcase(s[j]) in ['A'..'Z'], которое при отсутствии множеств, потребовало бы для реализации функцию с циклом по типу-диапазону 'A'..'Z'.
24
неправильные имена: тест1, 2_vol.
Некоторые имена являются стандартными именами Паскаля. К их числу относятся имена стандартных функций, процедур, типов и др. Следует особо отметить, что стандартные имена не являются ключевыми словами (т.е. они могут быть использованы в ином смысле, хотя это не следует делать без особой надобности !). Примеры таких стандартных имён: write, odd, integer, boolean. Заметьте, что русские буквы нельзя использовать в именах Паскаля!
Существуют только три конструкции Паскаля, в которых разрешено использовать любые символы (в том числе и русские буквы):- это символьные константы, строковые константы (литералы) и комментарии.
Символьные и строковые константы - это, соответственно, один символ или любые последовательности символов кодовой таблицы, заключенные в апострофы. Пример: ' Это - строка символов'. Литералы - важные конструкции языка, с которыми мы будем еще неоднократно иметь дело. Они используются в операторах ввода-вывода и при обработке строк.
Комментарии - любые последовательности символов кодовой таблицы (не содержащие фигурных скобок), заключенные в фигурные скобки. Пример комментария: { Программа на TURBO PASCAL}. Заметим, что фигурные скобки есть ограничитель для комментариев, и использовать их ни в каком другом смысле нельзя.
Замечание: Некоторые комментарии зарезервированы и представляют директивы компилятора. Эти комментарии начинаются символом $. Например: {$R+} -включить контроль границ диапазона.
Незарезервированные комментарии вы вправе использовать в любом месте программы. Такие комментарии следует использовать для пояснений текста программы, делая этот текст более понятным. Никаких других функций эти комментарии в программе на Паскале не несут.