How to resolve the algorithm Set step by step in the FreeBASIC programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Set step by step in the FreeBASIC programming language

Table of Contents

Problem Statement

A   set  is a collection of elements, without duplicates and without order.

Show each of these set operations:

As an option, show some other set operations. (If A ⊆ B, but A ≠ B, then A is called a true or proper subset of B, written A ⊂ B or A ⊊ B.) As another option, show how to modify a mutable set.

One might implement a set using an associative array (with set elements as array keys and some dummy value as the values). One might also implement a set with a binary search tree, or with a hash table, or with an ordered array of binary bits (operated on with bit-wise binary operators). The basic test, m ∈ S, is O(n) with a sequential list of elements, O(log n) with a balanced binary search tree, or (O(1) average-case, O(n) worst case) with a hash table.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Set step by step in the FreeBASIC programming language

Source code in the freebasic programming language

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() )

  

You may also check:How to resolve the algorithm Create an HTML table step by step in the Ruby programming language
You may also check:How to resolve the algorithm Count in factors step by step in the Scala programming language
You may also check:How to resolve the algorithm Count the coins step by step in the Scilab programming language
You may also check:How to resolve the algorithm Run-length encoding step by step in the Oforth programming language
You may also check:How to resolve the algorithm Largest int from concatenated ints step by step in the AWK programming language