Pascal - zestawy
Zestaw to zbiór elementów tego samego typu. Pascal umożliwia zdefiniowanie ustawionego typu danych. Elementy zestawu nazywane są jego członkami. W matematyce zbiory są reprezentowane przez ujęcie elementów w nawiasy klamrowe {} . Jednak w Pascalu elementy zestawu są zawarte w nawiasach kwadratowych [], które są określane jako konstruktor zestawów.
Definiowanie typów zestawów i zmiennych
Typy zestawów Pascal są zdefiniowane jako
type
set-identifier = set of base type;
Zmienne typu zestawu są zdefiniowane jako
var
s1, s2, ...: set-identifier;
lub,
s1, s2...: set of base type;
Przykłady niektórych prawidłowych deklaracji typu zestawu to -
type
Days = (mon, tue, wed, thu, fri, sat, sun);
Letters = set of char;
DaySet = set of days;
Alphabets = set of 'A' .. 'Z';
studentAge = set of 13..20;
Operatory zbioru
Na zestawach Pascal można wykonywać następujące operacje na zestawach.
Sr.No | Operacje i opisy |
---|---|
1 | Union To łączy dwa zestawy i daje nowy zestaw z elementami z obu zestawów. |
2 | Difference Pobiera różnicę dwóch zestawów i podaje nowy zestaw z elementami, które nie są wspólne dla żadnego z zestawów. |
3 | Intersection Pobiera część wspólną dwóch zestawów i podaje nowy zestaw z elementami wspólnymi dla obu zestawów. |
4 | Inclusion Zbiór P jest zawarty w zestawie Q, jeśli wszystkie przedmioty w P są również w Q, ale nie odwrotnie. |
5 | Symmetric difference Pobiera symetryczną różnicę dwóch zestawów i podaje zestaw elementów, które znajdują się w jednym z zestawów, a nie w ich przecięciu. |
6 | In Sprawdza członkostwo. |
Poniższa tabela przedstawia wszystkie operatory zestawów obsługiwane przez Free Pascal. Zakładać, żeS1 i S2 są dwoma zestawami znaków, takimi, że -
S1: = ['a', 'b', 'c'];
S2: = ['c', 'd', 'e'];
Operator | Opis | Przykład |
---|---|---|
+ | Połączenie dwóch zbiorów | S1 + S2 da zestaw [„a”, „b”, „c”, „d”, „e”] |
- | Różnica dwóch zestawów | S1 - S2 da set [„a”, „b”] |
* | Przecięcie dwóch zbiorów | S1 * S2 da zestaw ['do'] |
> < | Różnica symetryczna dwóch zbiorów | S1> <S2 da zestaw ['a', 'b', 'd', 'e'] |
= | Sprawdza równość dwóch zbiorów | S1 = S2 da wartość logiczną Fałsz |
<> | Sprawdza nierówność dwóch zbiorów | S1 <> S2 poda wartość logiczną True |
<= | Zawiera (sprawdza, czy jeden zestaw jest podzbiorem drugiego) | S1 <= S2 da wartość logiczną Fałsz |
Zawierać | Zawiera element w zestawie; w zasadzie jest to suma zbioru i element tego samego typu podstawowego | Uwzględnij (S1, ['d']) da zestaw [„a”, „b”, „c”, „d”] |
Wykluczać | Wyklucza element z zestawu; w zasadzie jest to Różnica zestawu i elementu tego samego typu podstawowego | Wyklucz (S2, ['d']) da zbiór ['c', 'e'] |
W | Sprawdza przynależność do zestawu elementu w zestawie | ['e'] w S2 daje wartość logiczną True |
Przykład
Poniższy przykład ilustruje użycie niektórych z tych operatorów -
program setColors;
type
color = (red, blue, yellow, green, white, black, orange);
colors = set of color;
procedure displayColors(c : colors);
const
names : array [color] of String[7]
= ('red', 'blue', 'yellow', 'green', 'white', 'black', 'orange');
var
cl : color;
s : String;
begin
s:= ' ';
for cl:=red to orange do
if cl in c then
begin
if (s<>' ') then s :=s +' , ';
s:=s+names[cl];
end;
writeln('[',s,']');
end;
var
c : colors;
begin
c:= [red, blue, yellow, green, white, black, orange];
displayColors(c);
c:=[red, blue]+[yellow, green];
displayColors(c);
c:=[red, blue, yellow, green, white, black, orange] - [green, white];
displayColors(c);
c:= [red, blue, yellow, green, white, black, orange]*[green, white];
displayColors(c);
c:= [red, blue, yellow, green]><[yellow, green, white, black];
displayColors(c);
end.
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
[ red , blue , yellow , green , white , black , orange]
[ red , blue , yellow , green]
[ red , blue , yellow , black , orange]
[ green , white]
[ red , blue , white , black]