Ввод /вывод множеств
Переменная множественного типа не может быть использована в списках ввода/вывода.
Пример 13.1. Ввести строку символов, которая заканчивается символом ’.’. Определить есть ли во вводимой строке цифры.
Текст программы
Program mno1;
Uses Crt;
{Работа с множествами. Определить есть ли во вводимой строке цифры}
Type Digit =set of 0..9;
Var
z :Digit;
i,k :integer;
si :char;
Begin
ClrScr;
Write('Введите строку символов=>');
z:=[];
Repeat
Read(si);
k:=ord(si)-ord('0');
If k in [0..9] then z:=z+[k]
Until si='.';
Writeln;
If z=[] then writeln('Цифр нет')
else
Begin
Writeln('В строке имеются следующие цифры:');
For i:=0 to 9 do if i in z then write(i:2);
Writeln;
End;
Repeat Until KeyPressed;
End.
Результат работы программы:
Введите строку символов=>hgifq3p2uf32;bvp;927[293b7;9v/.
В строке имеются следующие цифры:
2 3 7 9
Пример 13.2. Задать три произвольных множества одного базового типа. Сформировать новое множество. X=(Y1-Y2)+(Y2*Y3). Проверить включено ли Y3 в X . Подсчитать сколько раз в множествах встречаются буквы от А до К.
Текст программы
Program mno3;
Uses Crt;
Type mn= set of 'A'..'Z';
Const Y1:mn=['D','Y','F','A','E'];
Y2:mn=['K','O','F','A','E'];
Y3:mn=['D','S','F','R','E'];
Var X :mn;
K :byte;
S :'A'..'Z';
P :Boolean;
Begin
ClrScr;
X:=(Y1-Y2)+(Y2*Y3); P:=Y3<=X;
Write('Y3 содержится в X? ',P); Writeln;
For S:='A' to 'K' do
Begin
K:=0;
If S in Y1 then K:=K+1;
If S in Y2 then K:=K+1;
If S in Y3 then K:=K+1;
Writeln (' ':10,S ,'=> ':5,K);
End;
Repeat Until KeyPressed;
End.
Результат работы программы:
Y3 содержится в X? FALSE
A => 2
B => 0
C => 0
D => 2
E => 3
F => 3
G => 0
H => 0
I => 0
J => 0
K => 1
Пример 13.3. С использованием подпрограммы задать три произвольных множества одного базового типа. Сформировать новое множество. X=(Y1-Y2)+(Y2*Y3). Проверить включено ли Y3 в X . Подсчитать сколько раз в множествах встречаются буквы от А до К.
Текст программы
Program mno4;
Uses Crt;
Type mn= set of 'A'..'Z';
Var X,Y1,Y2,Y3 :mn;
K :byte;
S :'A'..'Z';
P :Boolean;
Procedure Vv(n:byte;Var z:mn);
Var s :char;
Begin
Writeln ('Введите множество Y',n);
z:=[];
Repeat
Read(S);
If s in ['A'..'Z'] then z:=z+[s];
Until S=#13;
End;
Begin
ClrScr;
Writeln ('Ввод множествo');
Vv(1,Y1); Vv(2,Y2); Vv(3,Y3);
X:=(Y1-Y2)+(Y2*Y3);
P:=Y3<=X;
Write('Y3 содержится в X? ',P);
Writeln;
For S:='A' to 'K'do
Begin
K:=0;
If S in Y1 then K:=K+1;
If S in Y2 then K:=K+1;
If S in Y3 then K:=K+1;
Writeln (' ':10,S ,'=> ':5,K);
End;
Repeat Until KeyPressed;
End.
Результат работы программы:
Ввод множеств
Введите множество Y1
A D S F D R
Введите множество Y2
S E R T Y
Введите множество Y3
Q X C E R S A
Y3 содержится в X? FALSE
A => 2
B => 0
C => 1
D => 1
E => 2
F => 1
G => 0
H => 0
I => 0
J => 0
K => 0