Задание:
Напишите программу, которая выводит все подмножества множества {a, b, c, d}
Решение:
Был выбран язык Delphi/Object Pascal из-за наличия встроенной работы с множествами.
1) Код "в лоб":
Вывод:
Плохое форматирование.
2) Код использующий операции над множествами для улучшенного вывода:
Вывод:
Напишите программу, которая выводит все подмножества множества {a, b, c, d}
Решение:
Был выбран язык Delphi/Object Pascal из-за наличия встроенной работы с множествами.
1) Код "в лоб":
program Sets; {$APPTYPE CONSOLE} {$R *.res} uses System.Classes; type TSet = set of (a, b, c, d); var I: Byte; SetX: TSet; begin for I := 0 to 15 do begin SetX := TSet(I); write('{'); if a in SetX then write('A'); if b in SetX then write('B'); if c in SetX then write('C'); if d in SetX then write('D'); writeln('}'); end; readln; end.
{}Недостаток:
{A}
{B}
{AB}
{C}
{AC}
{BC}
{ABC}
{D}
{AD}
{BD}
{ABD}
{CD}
{ACD}
{BCD}
{ABCD}
Плохое форматирование.
2) Код использующий операции над множествами для улучшенного вывода:
program Sets; {$APPTYPE CONSOLE} {$R *.res} uses System.Classes; type TSet = set of (a, b, c, d); var I: Byte; SetX: TSet; begin for I := 0 to 15 do begin SetX := TSet(I); write('{'); if a in SetX then if SetX - [a] = [] then write('A') else write('A, '); if b in SetX then if SetX - [a, b] = [] then write('B') else write('B, '); if c in SetX then if SetX - [a, b, c] = [] then write('C') else write('C, '); if d in SetX then write('D'); writeln('}'); end; readln; end.
Вывод:

интересно! а что можно/нужно сделать, чтобы выводить сначала все одноэлементные, потом все двухэлементные и т.п.? и наверное допилить ввод самого множества а не хардкодом его задавать?
ОтветитьУдалить"а что можно/нужно сделать, чтобы выводить сначала все одноэлементные, потом все двухэлементные и т.п.?" - первое что приходит в голову - отсортировать по количеству элементов, либо можно сделать двойной цикл, где наружный цикл - перебирает количество элементов 0..4, а внутренний производя перебор 0..15, выводит только те подмножества, которые имеют количество элементов равные итератору внешнего цикла.
Удалить"и наверное допилить ввод самого множества а не хардкодом его задавать?" - не совсем понятно, в каком виде множество не хардкодить? Не хардкорить количество элементов или буковки?