Старшенство множественных операторов
Приоритетный уро-
Вень Операторы Операции
1. (высший)
2.
3. (низший)
*
+, –
=, <>, >=, <=, In
пересечение
объединение, разность
равенство, неравенство, подмно-
жество, принадлежность
Для изменения порядка выполнения используются круглые скобки.
Средства работы со множествами позволяют в некоторых случаях сокра- тить программы и сделать их более наглядными и эффективными за счет уменьшения числа различных проверок.
Пример 4.
Program Prim 5; Var Stroka: string; i: integer;
Prav: boolean; Begin i := 1; writeln('введите строку'); readln(Stroka);
L := Length(Stroka); {число введенных символов} Prav := L > 0; {True, если не нулевая стро-
ка}
while Prav and (i <= L) do
begin {проверка допустимости
символа}
Prav := Stroka[i] In ['0'..'9', 'A'..'Z', 'a'..'z', ' '];
i := Succ(i); {следующий номер}
end; if Prav then writeln('правильная строка') else writeln('неправильная строка');
End.
Для вывода элементов некоторого множества, сформированного в про- цессе выполнения программы, необходимо воспользоваться оператором цикла, внутри которого была бы проверка на принадлежность текущего значения па- раметра цикла выводимому множеству. Например, для множества ВВ, описан- ного как ВВ: Set of 'A'..'Z'; можно организовать вывод элементов следующим образом:
Пример 6.
For i := 'A' to 'Z' do
if i in BB then write(i:2);
Причем параметр цикла i должен быть описан либо как символьная пе- ременная, либо как i: 'A'..'Z'. Печать элементов множества производится в том порядке, в котором они встречаются в базовом множестве.
Приведенная ниже программа Lat формирует множество LB, в которое входят только латинские буквы, встретившиеся во входной строке, и множест- во знаков препинания PR из входной строки (пример 7).
Пример 7.
Program Lat; Var
c, i, j: char;
LB: Set of 'A'..'Z'; PR: Set of '!'..'?';
Begin
write('=>');
LB := [ ]; PR:= [ ];
repeat
read(c)
if c In ['A'..'Z']
then LB := LB + [C]
else
if c In [':', ';', '.', ',', '!', '?']
then PR := PR + [C]
until Eoln; writeln('Латинские буквы:'); for i := 'A' to 'Z' do
if i in LB then write(i:2);
writeln;
writeln('Знаки препинания:');
for j := ':' to '?' do
if j in PR then write(j:2); End.
КОНТРОЛЬНЫЕ ВОПРОССЫ
1. Какие типы данных используются в качестве базовых при построении
множественных типов?
2. Дано описание переменной множественного типа: Var Pm: Set of (Red, Grey, Blue, Black). Выписать все допустимые значения этой переменной.
3. Какие операции определены над переменными множественного типа и ка-
ков их приоритет?
4. Будут ли равны множества:
a. ['A'..'D'] и ['A','B','C','D'];
b. [White, Black] и [Black, White].
5. Вычислить следующие выражения:
a. [5] <= [1..5];
b. ['A'..'D', 'K'..'M'] + ['D'..'K'];
c. [Jan, Feb, Мar]*[Mar];
d. [2, 1, 3..6] = [1..7];
e. 15 In [1..10];
f. [',', '(', ')', '.'] – [',', '.'].
6. Вычислить выражение: [1..14]*[5, 12..60] + [4..7] – [2*16]*[6].
7. Упростить данные выражения множественного типа:
a. [11..17]*[2] + [7, 17..40]*[2..17] – [2..8];
b. (A – B)*A + (A – B)*B;
c. (A + B)*(A – B)*(B – A); d. A – B – (A – B) – (B – A); e. A – (A – B).
ВАРИАНТЫ ЗАДАНИЙ
1. Дана непустая последовательность символов. Требуется построить и напе- чатать множество, элементами которого являются встречающиеся в после- довательности:
1) цифры от '0' до '9';
2) буквы от 'A' до 'F' и от 'X' до 'Z';
3) буквы от 'G' до 'N' и цифры от '0' до '9';
4) знаки препинания;
5) буквы от 'A' до 'Z' и цифры от '0' до '5';
6) буквы от 'T' до 'X' и знаки препинания;
7) знаки арифметических операций и знаки препинания;
8) цифры и знаки арифметических операций;
9) знаки препинания и буквы от 'E' до 'N';
10) цифры от '5' до '9' и знаки препинания;
11) знаки операций отношения;
12) цифры от '3' до '9', буквы от 'A' до 'F' и знаки препинания;
13) знаки арифметических операций и операций отношения;
14) буквы от 'F' до 'M' и знаки арифметических операций;
15) знаки препинания и операций отношения;
16) цифры от '0' до '5' и буквы от 'K' до 'R'.
2. Операции над массивами. При выполнении задания следует учесть прие-
мы программирования, использованные в приведенной ниже программе:
Program Eratosphen; Const
n = 256; Var
Sieve, Primes: Set of 2..n; Next: byte;
j: word;
Begin
Sieve := [2..n]; Primes := [ ];
Next := 2;
repeat
while not (Next in Sieve) do Next := Next + 1;
Primes := Primes + [Next];
j := Next;
while j <= n do
begin
Sieve := Sieve-[j];
j := j + Next
end; until Sieve = [ ]; for j := 2 to n do
if j In Primes then Write(j:5)
End.
1) Из множества целых чисел [1..1000] методом решета Эратосфена
получить множество простых чисел и вывести их на экран.
2) Из множества целых чисел [1..1000] получить множество чисел, являющихся квадратами четных чисел и вывести их на экран.
3) Из множества целых чисел [1..1000] получить множество чисел, являющихся квадратами нечетных чисел и вывести их на экран.
4) Дано целое n от 2 до 1000. Используя метод решета Эратосфена, напечатать в убывающем порядке все простые числа из диапазона n..2n.
5) Из множества целых чисел [1..500] методом решета Эратосфена
получить множество простых чисел и вывести их на экран.
6) Из множества целых чисел [1..500] получить множество чисел, являющихся квадратами четных чисел и вывести их на экран.
7) Из множества целых чисел [1..500] получить множество чисел, являющихся квадратами нечетных чисел и вывести их на экран.
8) Дано целое n от 2 до 500. Используя метод решета Эратосфена, на- печатать в убывающем порядке все простые числа из диапазона n..2n.