[pascal] Zbiór a..z jako integer!

0

Mam zaimplementować zbiór a..z jako....integer!
Mam napisać kilka funkcji np. dodawanie elementu, usuwanie, liczenie iloczynu, różnicy zbiorów itp

Mój problem polega na tym że nie mam pomysłu jak to przeprowadzić na integerze.
Poradziłem sobie na razie tylko z liczeniem mocy zbioru. Dziele mod 2 i jak jest reszta to znaczy że na końcu liczby jest jedynka czyli że dany element należy do zbioru.
Ale co zrobić z resztą ?? Jak policzyć iloczyn?? nie mam pojęcia.
Potrzebny mi jest tylko opis słowny, wskazówka jak postępować, sam programik jakoś sobie napisze gdy bede wiedział co pisać...
Bardzo proszę o wskazówki do kilku funkcji i dziękuję!!

0

liczba integer musi mieć 32 bity (w bp trzeba longint).
jeden bit to litera:
bit nr 0 - A
bit nr 1 - B
...
bit nr 25 - Z

var a, b, c : longint;

iloczyn zbiorów:
c := a and b;

suma zbiorów:
c := a or b;

negacja zbioru:
c := not a;

różnica symetryczna (exclusive or - po polsku: 'albo'):
c := a xor b;

różnica zbiorów:
c := a and not b;

sprawdzenie czy elemeny 'e' należy do zbioru
function nalezy(z : longint; e : char) : boolean; // e = 'A'..'Z'
begin
nalezy := (z and (longint(1) shl (ord(e) - 64))) <> 0; // 64 = ord('A')
end;

0

Czyli licząc np iloczyn nie musze się dobierać do każdego bitu z osobna tak? Bo myślałem że tak trzeba. Wystarczy operator? Jak tak to świetnie!! :)))

Tak tylko może się komuś kiedyś przyda liczenie mocy:

licznik:=0
for i:=0 to 25 do begin
  licznik:=licznik + (A mod 2);
  A:=A div 2;
end;
moc:=licznik;

Jeszcze wielgaśne dziękuję za tą funkcję należy!!!!! [browar]

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