パスカル-セット
セットは、同じタイプの要素のコレクションです。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]