127 lines
3.5 KiB
Plaintext
127 lines
3.5 KiB
Plaintext
function is_in( N as integer, S() as integer ) as boolean
|
|
'test if the value N is in the set S
|
|
for i as integer = 0 to ubound(S)
|
|
if N=S(i) then return true
|
|
next i
|
|
return false
|
|
end function
|
|
|
|
sub add_to_set( N as integer, S() as integer )
|
|
'adds the element N to the set S
|
|
if is_in( N, S() ) then return
|
|
dim as integer k = ubound(S)
|
|
redim preserve S(0 to k+1)
|
|
S(k+1)=N
|
|
end sub
|
|
|
|
sub setunion( S() as integer, T() as integer, U() as integer )
|
|
'makes U() the union of the sets S and T
|
|
dim as integer k = ubound(S)
|
|
redim U(-1)
|
|
for i as integer = 0 to k
|
|
add_to_set( S(i), U() )
|
|
next i
|
|
k = ubound(T)
|
|
for i as integer = 0 to k
|
|
if not is_in( T(i), U() ) then
|
|
add_to_set( T(i), U() )
|
|
end if
|
|
next i
|
|
end sub
|
|
|
|
sub setintersect( S() as integer, T() as integer, U() as integer )
|
|
'makes U() the intersection of the sets S and T
|
|
dim as integer k = ubound(S)
|
|
redim U(-1)
|
|
for i as integer = 0 to k
|
|
if is_in(S(i), T()) then add_to_set( S(i), U() )
|
|
next i
|
|
end sub
|
|
|
|
sub setsubtract( S() as integer, T() as integer, U() as integer )
|
|
'makes U() the difference of the sets S and T
|
|
dim as integer k = ubound(S)
|
|
redim U(-1)
|
|
for i as integer = 0 to k
|
|
if not is_in(S(i), T()) then add_to_set( S(i), U() )
|
|
next i
|
|
end sub
|
|
|
|
function is_subset( S() as integer, T() as integer ) as boolean
|
|
for i as integer = 0 to ubound(S)
|
|
if not is_in( S(i), T() ) then return false
|
|
next i
|
|
return true
|
|
end function
|
|
|
|
function is_equal( S() as integer, T() as integer ) as boolean
|
|
if not is_subset( S(), T() ) then return false
|
|
if not is_subset( T(), S() ) then return false
|
|
return true
|
|
end function
|
|
|
|
function is_proper_subset( S() as integer, T() as integer ) as boolean
|
|
if not is_subset( S(), T() ) then return false
|
|
if is_equal( S(), T() ) then return false
|
|
return true
|
|
end function
|
|
|
|
sub show_set( L() as integer )
|
|
'display a set
|
|
dim as integer num = ubound(L)
|
|
if num=-1 then
|
|
print "[]"
|
|
return
|
|
end if
|
|
print "[";
|
|
for i as integer = 0 to num-1
|
|
print str(L(i))+", ";
|
|
next i
|
|
print str(L(num))+"]"
|
|
end sub
|
|
|
|
'sets are created by making an empty array
|
|
redim as integer S1(-1), S2(-1), S3(-1), S4(-1), S5(-1)
|
|
'and populated by adding elements one-by-one
|
|
add_to_set( 20, S1() ) : add_to_set( 30, S1() )
|
|
add_to_set( 40, S1() ) : add_to_set( 50, S1() )
|
|
add_to_set( 19, S2() ) : add_to_set( 20, S2() )
|
|
add_to_set( 21, S2() ) : add_to_set( 22, S2() )
|
|
add_to_set( 22, S3() ) : add_to_set( 21, S3() )
|
|
add_to_set( 19, S3() ) : add_to_set( 20, S3() )
|
|
add_to_set( 21, S3() ) ' attempt to add a number that's already in the set
|
|
add_to_set( 21, S4() )
|
|
print "S1 ",
|
|
show_set S1()
|
|
print "S2 ",
|
|
show_set S2()
|
|
print "S3 ",
|
|
show_set S3()
|
|
print "S4 ",
|
|
show_set S4()
|
|
print "S5 ",
|
|
show_set S5()
|
|
print "----"
|
|
redim as integer S_U(-1)
|
|
setunion S1(), S2(), S_U()
|
|
print "S1 U S2 ",
|
|
show_set S_U()
|
|
redim as integer S_U(-1)
|
|
setintersect S1(), S2(), S_U()
|
|
print "S1 n S2 ",
|
|
show_set S_U()
|
|
redim as integer S_U(-1)
|
|
setsubtract S1(), S2(), S_U()
|
|
print "S1 \ S2 ",
|
|
show_set S_U()
|
|
redim as integer S_U(-1)
|
|
setsubtract S3(), S1(), S_U()
|
|
print "S3 \ S1 ",
|
|
show_set S_U()
|
|
print "S4 in S3? ", is_subset(S4(), S3())
|
|
print "S3 in S4? ", is_subset(S3(), S4())
|
|
print "S5 in S3? ", is_subset(S5(), S3()) 'empty set is a subset of every set
|
|
print "S2 = S3? ", is_equal(S2(), S3())
|
|
print "S4 proper subset of S3? ", is_proper_subset( S4(), S3() )
|
|
print "S2 proper subset of S3? ", is_proper_subset( S2(), S3() )
|