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]