Co to s▒ te zbiory? Mhhh... s▒ to typy reprezentuj▒ce
mechanizm kolekcji... mo┐e to nie zabrzmi zbyt dobrze, ale zaczekaj
chwilkΩ i poczytaj dalej...
Normalnie deklaruj▒c jaki╢ typ robisz tak:
type
TCars = (tcFord, tcSkoda, tcFerrari, tcPorshe, tcOpel, tcPeugeot, tcRenault);
Je┐eli chcesz zadeklarowaµ zbi≤r robisz w ten spos≤b:
type
TCars = (tcFord, tcSkoda, tcFerrari, tcPorshe, tcOpel, tcPeugeot, tcRenault);
TCarSet = set of TCars;
Tak wiΩc zbiory deklaruje siΩ za pomoc▒ s│≤w set of...
Zastanawiasz siΩ po co? Ot≤┐ zbiory mo┐na
"wybieraµ" z typu i przypisywaµ do konkretnej zmiennej -
zobacz!
var
Tanie,
Srednie,
Drogie : TCarSet;
begin
Tanie := [];
Srednie := [ tcSkoda, tcOpel, tcFord, tcPeugeot, tcRenault ];
Drogie := [ tcFerrari, tcPorshe ];
W ten spos≤b do r≤┐nych zmiennych dopisali╢my
poszczeg≤lne elementy ze zbioru. Zbiory przypisuje siΩ za pomoc▒
nawias≤w klamrowych, a nawias pousty [] oznacza zbi≤r pusty.
UWAGA! Max. ilo╢µ jaka mo┐e siΩ znale╝µ w zbiorze nie mo┐e
przekraczaµ 255.
Oczywi╢cie elementy zbioru mo┐na ze sob▒ por≤wnywaµ
za pomoc▒ operatora in:
procedure TForm1.Button1Click(Sender: TObject);
begin
{ porownanie, czy dany element dotyczy danego zbioru }
if not (tcFord in Drogie) then
{ ... }
end;
NastΩpuje sprawdzenie: je┐eli element tcFord nie nale┐y
do zmiennej Drogie, ( kt≤ra wskazuje na zbi≤r ) to wykonaj jakie╢
operacje...
Mo┐liwe jest tak┐e por≤wnywanie typ≤w w trochΩ inny
spos≤b:
procedure TForm1.Button2Click(Sender: TObject);
var
I : Integer;
begin
I := 99;
if I in [1..100, 101..120, 200] then
ShowMessage('Tak, liczba: ' + IntToStr(i) + ' nale┐y do zbioru...');
end;
W tym wypadku do zmienej I zostaje przypisana liczba 99,
a nastΩpnie nastΩpuje por≤wnanie, czy: zmienna i jest z zakresu od 1
do 100 lub czy jest z zakresu od 101 do 120 lub czy jest to liczba
200.
R≤wnie┐ jest mo┐liwe tworzenie zbior≤w w postaci
tekstowej:
procedure TForm1.Button2Click(Sender: TObject);
type
SetLitery = set of 'A'..'E';
var
Litery : SetLitery;
begin
if ('B' in Litery) then { ... }
end;
Nowy typ StLitery bΩd▒ z zakresu od litery A do E.
Zauwa┐ skr≤con▒ deklaracje typu, kt≤ra tak┐e jest mo┐liwa. NastΩpnie
nastΩpuje sprawdzenie, czy dana litera nale┐y do zbioru.
Dodawanie i odejmowanie element≤w
Oczywi╢cie istnieje mo┐liwo╢µ dodawania element≤w
do zbioru. Robi siΩ to za pomoc▒ polece± Include ( dodawanie ) oraz
Exclude ( odejmowanie ):
procedure TForm1.Button1Click(Sender: TObject);
begin
{ porownanie, czy dany element dotyczy danego zbioru }
if not (tcFord in Drogie) then
begin
Include(Drogie, tcFord); // dodanie elementu do zbioru...
Exclude(Srednie, tcFord); // odjecie elementu ze zbioru...
end;
end;
Dodawanie lub odejmowanie element≤w jest tak┐e mo┐liwe
za pomoc▒ operator≤w + i -
Drogie := Drogie + [tcFord];
Srednie := Srednie - [tcFord];
Jednak u┐ycie polece± Include/Exclude jest bardziej
efektowne gdy┐ szybsze. Oto kawa│ek tego programu:
type
{ deklaracja zbiorow i typow }
TCars = (tcFord, tcSkoda, tcFerrari, tcPorshe, tcOpel, tcPeugeot, tcRenault);
TCarSet = set of TCars;
var
Tanie,
Srednie,
Drogie : TCarSet;
procedure TForm1.Button1Click(Sender: TObject);
begin
{ porownanie, czy dany element dotyczy danego zbioru }
if not (tcFord in Drogie) then
begin
Include(Drogie, tcFord); // dodanie elementu do zbioru...
Exclude(Srednie, tcFord); // odjecie elementu ze zbioru...
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{ przypisanie elementow do poszczegolnyh zmiennych }
Tanie := [];
Srednie := [ tcSkoda, tcOpel, tcFord, tcPeugeot, tcRenault ];
Drogie := [ tcFerrari, tcPorshe ];
end;
Jak zwykle czekam na pytania/sugestie/info o b│edach
itp. pod adresem: boduch@poland.com
Adam Boduch