sets

February 2020

program Sets;

type
    // sets are collections of same type
    days_of_week = set of (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
    letters = set of char;
    alphabet = set of 'A' .. 'Z';
var
    // declare sets
    A: alphabet;
    B: alphabet;
    C: alphabet;

    days: days_of_week;

    // declare iterator variables
    i: char;
begin
    A := ['A', 'B', 'C', 'D'];
    for i in A do write(i, ' '); writeln();
    // A B C D

    B := ['C', 'D', 'E', 'F'];
    for i in B do write(i, ' '); writeln();
    // C D E F

    // union
    for i in (A + B) do write(i, ' '); writeln();
    // A B C D E F 

    // intersection
    for i in (A * B) do write(i, ' '); writeln();
    // C D 

    // difference
    for i in (A - B) do write(i, ' '); writeln();
    // A B

    // symmetric difference
    for i in (A >< B) do write(i, ' '); writeln();
    // A B E F 

    // subset
    C := ['A', 'B', 'C'];
    if (C <= A) then writeln(true);
    // TRUE

    // include
    include(A, 'E');
    for i in A do write(i, ' '); writeln();
    // A B C D E

    // exclude
    exclude(A, 'E');
    for i in A do write(i, ' '); writeln();
    // A B C D

    // in
    if 'A' in A then writeln(true);
    // TRUE

    days := [Mon, Wed, Fri];
    if Wed in days then writeln(true);
    // TRUE
end.