Построить массив по правилу - PascalABC.NET
Формулировка задачи:
На входе даются два целочисленных массива x и y с размером n. Рассматривая массивы как конечные множества нужно построить третий массив z с размером не более 2n, где сам массив z это разность множеств x и y (y=x\y)
Решение задачи: «Построить массив по правилу»
textual
Листинг программы
const m = 16;
type set_arr = array [1..m] of integer;
procedure read_set(s:string; var x: set_arr; k: integer);
var i, j: integer;
b: boolean;
begin
writeln('Введите элементы множества ', s);
for i := 1 to k do
repeat
write(i:2, ': ');
readln(x[i]);
b := true;
for j := 1 to i - 1 do
if x[i] = x[j]
then begin
b := false;
writeln('Это значение уже есть в множестве, повторите ввод.');
break
end;
until b
end;
procedure prn_set(s:string; var x: set_arr; k: integer);
var i: integer;
begin
write('Элементы множества ', s, ': [');
if k > 1 then write(x[1]);
for i := 2 to k do write(', ', x[i]);
writeln(']')
end;
var x, y, z: set_arr;
i, j, n, q: integer;
f: boolean;
begin
repeat
write('n в диапазоне 1..', m, '; n = ');
readln(n)
until (n >= 1) and (n <= m);
read_set('X', x, n);
read_set('Y', y, n);
q := 0;
for i := 1 to n do
begin
f := true;
for j := 1 to n do
if x[i] = y[j]
then begin
f := false;
break
end;
if f
then begin
inc(q);
z[q] := x[i]
end
end;
prn_set('X', x, n);
prn_set('Y', y, n);
prn_set('Z=X\Y', z, q);
readln
end.
Объяснение кода листинга программы
- В коде определена константа
m, которая равна 16. - Задано описание типа массива
set_arr, который является одномерным массивом, содержащим целые числа, размером от 1 доm. - Определена процедура
read_set, которая считывает элементы множестваsиз стандартного ввода и сохраняет их в массивеx. При этом проверяется уникальность каждого введенного элемента. - Определена процедура
prn_set, которая выводит элементы множестваsна экран. - В основной части кода определены три массива
x,yиz, а также четыре переменныеi,j,nиq. Переменнаяfиспользуется в цикле и инициализируется значениемtrue. - В цикле пользователю предлагается ввести число
nв диапазоне от 1 доm. - После корректного ввода числа
nвызывается функцияread_set, чтобы считать элементы двух множествxиyпоnэлементов каждое. - Переменная
qинициализируется значением 0 и используется для подсчета количества общих элементов в двух множествах. - В цикле по всем элементам первого множества
xпроверяется, есть ли такой же элемент во втором множествеy. Если такой элемент найден, то переменнаяfстановитсяfalseи цикл прерывается. Если после цикла переменнаяfосталасьtrue, то это значит, что текущий элемент множестваxявляется общим для обоих множеств и его значение сохраняется в массивеzс индексомq. - После заполнения массива
zвызывается функцияprn_set, чтобы вывести на экран элементы всех трех множеств. - В конце программы предлагается ввести символ для завершения работы программы.