Zbiory
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:
Jeżeli chcesz zadeklarować zbiór robisz w ten sposób:
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!
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:
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:
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:
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.
Oczywiście istnieje możliwość dodawania elementów do zbioru. Robi się to za pomocą poleceń Include ( dodawanie ) oraz Exclude ( odejmowanie ):
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:
Normalnie deklarując jakiś typ robisz tak:
Jeżeli chcesz zadeklarować zbiór robisz w ten sposób:
type
TCars = (tcFord, tcSkoda, tcFerrari, tcPorshe, tcOpel, tcPeugeot, tcRenault);
TCarSet = set of TCars;
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 ];
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;
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;
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;
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;
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;
{ 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;


