wszystkie podzbiory zbioru n-elementowego

0

Witam

mam problem z napisaniem takiego programu ktory wypisze wszystkie podzbiory n-elementowego zbioru.

na razie mam takie coś

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
tablica:array of char;
i,j,n,k,m:integer;
begin
  writeln('podaj ilosc elemento w zbiorze');
  readln(n);
  setlength(tablica,n);
  writeln('Podawaj kolejne elementy zbioru');
    for i:=0 to n-1 do    readln(tablica[i]);
  writeln('oto wszystkie podzbiory:');
for i:=0 to n-1 do
   begin
   for j:=i to n-1 do
     begin
     write('{');
     for k:=i to j do
        begin
        write(tablica[k]);
        if not (k>=j) then write(',');
        end;
       write('}');
     end;//j
   end;//i
  readln;
end.

jesli ktos z Was wie jak dokonczyc ten program tak aby wypisywal wszystkie podzbiory a nie tylko czesc to bede wdzieczny za pomoc.

pozdrawiam

0

Kod pisany z ręki, więc nie wiem, czy działa (troszkę poszedłem na chama, ale liczy się pomysł :D). Użyłem do tego typu zbiorowego:

var st : set of byte;
    stb : byte absolute st;

(...)

st :=[];
for i :=1 to 2 shl n do
 begin
  write ('{');
  for k:=0 to n-1 do
  if k in st then
   begin
    write(tablica[k]);
    write(', ');
   end;
  write(#8#8'} ');
  Inc (stb);
 end;

(...)

Taki kod mógłby służyć do zbioru o maks. liczbie elementów =8 (1 bajt = 8 bitów), żeby zwiększyć "pojemność" musiałbyś użyć innej reprezentacji zmiennej (zamiast byte, może jakąś tablicę), albo w ogóle zrezygnować z użycia typu zbiorowego na rzecz ręcznych operacji na bitach. Ja tylko pokazałem ideę, dzięki której nie pominiesz żadnego podzbioru.

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0