Пересечения и объединения массивов - Pascal ABC
Формулировка задачи:
Есть три массива A={1,3,4,5,10}, B={3,5,7,8,9}, C={3,5,6,9,10}
Надо вычислить и вывести результат в виде 4 массива
Решение задачи: «Пересечения и объединения массивов»
textual
Листинг программы
const
UNIV: Set Of Byte = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
type
TSet = Set Of Byte;
TLine = Array[1..10] Of Byte;
TArray = record
a: TLine;
n: Byte;
end;
function SetToArray(const s: TSet): TArray;
var
i: Byte;
Result: TArray;
begin
with Result do
begin
n := 0;
for i := 1 to 10 do
if (i in s)
then
begin
Inc(n);
a[n] := i;
end;
end;
SetToArray := Result;
end;
function ArrayToSet(const a: TArray): TSet;
var
i: Byte;
Result: TSet;
begin
Result := [];
with a do
if (n > 0)
then
for i := 1 to n do
Include(Result, a[i]);
ArrayToSet := Result;
end;
procedure PrintArray(const a: TArray; const c: Char);
var
i: Byte;
begin
WriteLn; Write('Array ', c, ':');
with a do
if (n > 0)
then
for i := 1 to n do
Write(' ', a[i])
else
Write(' empty.');
WriteLn;
end;
var
a, b, c, d: TArray;
begin
a := SetToArray([1, 3, 4, 5, 10]); PrintArray(a, 'A');
b := SetToArray([3, 5, 7, 8, 9]); PrintArray(b, 'B');
c := SetToArray([3, 5, 6, 9, 10]); PrintArray(c, 'C');
d := SetToArray((UNIV - ArrayToSet(a))*(ArrayToSet(b) + ArrayToSet(c)));
PrintArray(d, 'D');
end.