Pascal - Sets
Un set è una raccolta di elementi dello stesso tipo. Pascal permette di definire il tipo di dati impostato. Gli elementi in un insieme sono chiamati i suoi membri. In matematica, gli insiemi sono rappresentati racchiudendo i membri tra parentesi graffe {} . Tuttavia, in Pascal, gli elementi set sono racchiusi tra parentesi quadre [], che sono indicate come costruttore di set.
Definizione di tipi di set e variabili
I tipi di Pascal Set sono definiti come
type
set-identifier = set of base type;
Le variabili di tipo set sono definite come
var
s1, s2, ...: set-identifier;
o,
s1, s2...: set of base type;
Esempi di alcune dichiarazioni di tipo set valide sono:
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;
Imposta operatori
È possibile eseguire le seguenti operazioni sugli insiemi sugli insiemi Pascal.
Suor n | Operazioni e descrizioni |
---|---|
1 | Union Questo unisce due set e fornisce un nuovo set con membri di entrambi i set. |
2 | Difference Ottiene la differenza di due set e fornisce un nuovo set con elementi non comuni a nessuno dei due set. |
3 | Intersection Ottiene l'intersezione di due insiemi e fornisce un nuovo insieme con elementi comuni a entrambi gli insiemi. |
4 | Inclusion Un insieme P è incluso nell'insieme Q, se tutti gli elementi in P sono anche in Q ma non viceversa. |
5 | Symmetric difference Ottiene la differenza simmetrica di due insiemi e fornisce un insieme di elementi, che si trovano in uno degli insiemi e non nella loro intersezione. |
6 | In Controlla l'appartenenza. |
La tabella seguente mostra tutti gli operatori di set supportati da Free Pascal. AssumiloS1 e S2 sono due set di caratteri, tali che -
S1: = ['a', 'b', 'c'];
S2: = ['c', 'd', 'e'];
Operatore | Descrizione | Esempio |
---|---|---|
+ | Unione di due serie | S1 + S2 darà un set ["a", "b", "c", "d", "e"] |
- | Differenza di due serie | S1 - S2 darà un set ["a", "b"] |
* | Intersezione di due insiemi | S1 * S2 darà un set ["c"] |
> < | Differenza simmetrica di due insiemi | S1> <S2 darà un insieme ['a', 'b', 'd', 'e'] |
= | Verifica l'uguaglianza di due insiemi | S1 = S2 darà il valore booleano False |
<> | Verifica la non uguaglianza di due insiemi | S1 <> S2 darà il valore booleano True |
<= | Contiene (controlla se un insieme è un sottoinsieme dell'altro) | S1 <= S2 darà il valore booleano False |
Includere | Include un elemento nel set; fondamentalmente è l'unione di un insieme e un elemento dello stesso tipo di base | Includi (S1, ['d']) darà un insieme ["a", "b", "c", "d"] |
Escludere | Esclude un elemento da un insieme; fondamentalmente è la differenza di un insieme e un elemento dello stesso tipo di base | Escludi (S2, ['d']) darà un set ['c', 'e'] |
In | Controlla l'appartenenza a un insieme di un elemento in un insieme | ['e'] in S2 fornisce il valore booleano True |
Esempio
Il seguente esempio illustra l'uso di alcuni di questi operatori:
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.
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
[ red , blue , yellow , green , white , black , orange]
[ red , blue , yellow , green]
[ red , blue , yellow , black , orange]
[ green , white]
[ red , blue , white , black]