Примеры программирования задач с использованием множества

Задача 21.Организовать ввод элементов множества и определить, существуют ли общие элементы у введенного множества с множеством, заданным константой.

 

Данная программа продемонстрирует, как можно задать множество. Переменные типа “множество” могут быть типизированными константами.

Переменную v зададим начальными значениями при описании констант. Переменная s является подмножеством множества символов кода ASCII.

 

Программа:

 

program vvod;

const v : set of char = [‘a’, ‘d’, ‘f’, ‘n’, ‘r’];

var

s : set of char;

c : char;

begin

s := []; c := #0;

while c <> ‘.’ do

begin

readln(c);

s := s + [c]

end;

s := s – [‘.’];

if v * s <> [] then writeln(‘ Имеются общие элементы!’)

end.

В цикле множество s пополняется вводимым с клавиатуры значением переменной с. Сигналом к окончанию ввода служит точка. Цикл продолжается до тех пор, пока с <> ‘.’. По окончании цикла точку вычитаем из множества. Если в двух множествах нет общих элементов, то результатом их пересечения будет пустое множество.

 

Задача 22. Заданы два множества. Вывести на экран результат объединения, разности и пересечения этих множеств.

 

В задаче 21 показано, как ввести множество. Теперь продемонстрируем, как записываются операции над множествами и как организовать вывод элементов множества. При выводе элементов множества приходится проверять наличие каждого возможного элемента на предмет вхождения данного элемента в выводимое множество. Если множество определено как с: set of 1..10, то это означает, что элементами множества могут быть числа 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. В цикле для всех i от 1 до 10 необходимо провести проверку вхождения числа i в выводимое множество с.

for i := 1 to 10 do if i in c then write(i:3);

Программа:

 

program operation;

type

menge = set of 1..10; {Задан новый тип - множество}

var

a,b,c : menge; {Описаны переменные множественного типа menge}

i, n : integer;

begin

writeln (‘Введите элементы множества a. Конец ввода – 0’);

a := [];

repeat {Цикл для ввода множества а}

readln(i);

if i in [1..10] then a := a + [i];

until i = 0;

writeln (‘Введите элементы множества b. Конец ввода – 0’);

b := [];

repeat {Цикл для ввода множества b}

readln(i);

if i in [1..10] then b := b + [i];

until i = 0;

c := a * b; {Операция – пересечение множеств}

writeln (‘Пересечение множеств’);

for i := 1 to 10 do if i in c then write(i:3);

writeln;

c := a + b; {Операция – объединение множеств}

writeln (‘Объединение множеств’);

for i := 1 to 10 do if i in c then write(i:3);

writeln;

c := a – b; {Операция – разность множеств}

writeln (‘Разность множеств’);

for i := 1 to 10 do if i in c then write(i:3);

writeln;

{Проверка на подмножество}

if a <= b then writeln(‘ а содержится в b’)

else writeln(‘ а не содержится в b’)

end.

Задача 23. Написать программу генерирования чисел спортлото “6 из 49”.

 

Задача 2 имела ту же формулировку, но решение ее с использованием диапазонного типа имело тот недостаток, что не все шесть выпавших чисел были различными. Используя тип данных “множество” устраним этот недостаток.

 

Программа:

 

program lotto1;

uses crt;

const

n = 6;

type

lotto = set of 1..49;

var

L : lotto;

k : integer;

i: 1..n;

z : 1..49;

ok : boolean;

begin

randomize;

L := []; {Инициализация множества}

for i := 1 to n do

{Цикл выполняется 6 раз – количество цифр в результате}

begin

repeat

z := random(49) + 1; {Генерация случайных чисел}

if z in L then ok := false {Определение вхождения}

{сгенерированного числа в множество}

else

begin {Присоединение нового числа}

L := L + [z];

ok := true

end;

until ok; {Цикл repeat повторяется до тех пор, пока ok имеет}

end; {значение false}

clrscr;

{Вывод шести различных случайных чисел из 49}

for k := 1 to 49 do if k in L then write(k:4);

end.

 

В программе производится проверка генерируемого числа на предмет вхождения в формируемое множество. Если новое число z уже существует в множестве L, то оно игнорируется и происходит генерирование следующего случайного числа.



КРИТЕРИИ КАЧЕСТВА ПРОГРАММ. ДИАЛОГОВЫЕ ПРОГРАММЫ. ДРУЖЕСТВЕННОСТЬ