パスカル-セット

セットは、同じタイプの要素のコレクションです。Pascalでは、設定されたデータ型を定義できます。セット内の要素は、そのメンバーと呼ばれます。数学では、セットはメンバーを中括弧{}で囲むことによって表されます。ただし、Pascalでは、集合要素は角括弧[]で囲まれ、集合コンストラクターと呼ばれます。

セットタイプと変数の定義

パスカルセットタイプは次のように定義されます

type
set-identifier = set of base type;

セットタイプの変数は、次のように定義されます。

var
s1, s2, ...: set-identifier;

または、

s1, s2...: set of base type;

いくつかの有効なセット型宣言の例は次のとおりです。

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;

演算子の設定

Pascalセットでは、次のセット操作を実行できます。

シニア番号 操作と説明
1

Union

これは2つのセットを結合し、両方のセットのメンバーを含む新しいセットを提供します。

2

Difference

2つのセットの差を取得し、どちらのセットにも共通ではない要素を持つ新しいセットを提供します。

3

Intersection

2つのセットの共通部分を取得し、両方のセットに共通の要素を持つ新しいセットを提供します。

4

Inclusion

P内のすべてのアイテムもQに含まれているが、その逆ではない場合、セットPはセットQに含まれます。

5

Symmetric difference

2つのセットの対称差を取得し、いずれかのセットにあり、それらの交点にはない要素のセットを提供します。

6

In

メンバーシップをチェックします。

次の表は、FreePascalでサポートされているすべての集合演算子を示しています。と仮定するS1 そして S2 次のような2つの文字セットです。

S1:= ['a'、 'b'、 'c'];

S2:= ['c'、 'd'、 'e'];

オペレーター 説明
+ 2セットのユニオン

S1 + S2はセットを与えます

['a'、 'b'、 'c'、 'd'、 'e']

- 2セットの違い

S1-S2はセットを与えます

['a'、 'b']

* 2つのセットの交差

S1 * S2はセットを与えます

['c']

> < 2セットの対称差 S1> <S2は集合['a'、 'b'、 'd'、 'e']を与えます
= 2セットの同等性をチェックします S1 = S2はブール値Falseを与えます
<> 2セットの不等式をチェックします S1 <> S2はブール値Trueを与えます
<= 含む(一方のセットが他方のサブセットであるかどうかを確認します) S1 <= S2はブール値Falseを与えます
含める セットに要素を含めます。基本的には、同じ基本型のセットと要素の和集合です。

インクルード(S1、['d'])はセットを与えます

['あいうえお']

除外する セットから要素を除外します。基本的には同じ基本型のセットと要素の違いです

Exclude(S2、['d'])はセットを与えます

['c'、 'e']

セット内の要素のセットメンバーシップをチェックします S2の['e']はブール値Trueを与えます

次の例は、これらの演算子のいくつかの使用法を示しています-

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.

上記のコードをコンパイルして実行すると、次の結果が得られます。

[ red , blue , yellow , green , white , black , orange]
[ red , blue , yellow , green]
[ red , blue , yellow , black , orange]
[ green , white]
[ red , blue , white , black]