Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
189
Task/Symmetric-difference/Action-/symmetric-difference.action
Normal file
189
Task/Symmetric-difference/Action-/symmetric-difference.action
Normal file
|
|
@ -0,0 +1,189 @@
|
|||
CARD EndProg ;required for ALLOCATE.ACT
|
||||
|
||||
INCLUDE "D2:ALLOCATE.ACT" ;from the Action! Tool Kit. You must type 'SET EndProg=*' from the monitor after compiling, but before running this program!
|
||||
|
||||
DEFINE PTR="CARD"
|
||||
DEFINE NODE_SIZE="6"
|
||||
TYPE SetNode=[PTR data,prv,nxt]
|
||||
TYPE SetInfo=[PTR name,begin,end]
|
||||
|
||||
PROC PrintSet(SetInfo POINTER s)
|
||||
SetNode POINTER n
|
||||
CHAR ARRAY a
|
||||
|
||||
n=s.begin
|
||||
PrintF("%S=(",s.name)
|
||||
WHILE n
|
||||
DO
|
||||
Print(n.data)
|
||||
a=n.data
|
||||
IF n.nxt THEN
|
||||
Print(", ")
|
||||
FI
|
||||
n=n.nxt
|
||||
OD
|
||||
PrintE(")")
|
||||
RETURN
|
||||
|
||||
PROC CreateSet(SetInfo POINTER s CHAR ARRAY n)
|
||||
s.name=n
|
||||
s.begin=0
|
||||
s.end=0
|
||||
RETURN
|
||||
|
||||
PTR FUNC Find(SetInfo POINTER s CHAR ARRAY v)
|
||||
SetNode POINTER n
|
||||
|
||||
n=s.begin
|
||||
WHILE n
|
||||
DO
|
||||
IF SCompare(v,n.data)=0 THEN
|
||||
RETURN (n)
|
||||
FI
|
||||
n=n.nxt
|
||||
OD
|
||||
RETURN (0)
|
||||
|
||||
BYTE FUNC Contains(SetInfo POINTER s CHAR ARRAY v)
|
||||
SetNode POINTER n
|
||||
|
||||
n=Find(s,v)
|
||||
IF n=0 THEN
|
||||
RETURN (0)
|
||||
FI
|
||||
RETURN (1)
|
||||
|
||||
PROC Append(SetInfo POINTER s CHAR ARRAY v)
|
||||
SetNode POINTER n,tmp
|
||||
|
||||
IF Contains(s,v) THEN RETURN FI
|
||||
|
||||
n=Alloc(NODE_SIZE)
|
||||
n.data=v
|
||||
n.prv=s.end
|
||||
n.nxt=0
|
||||
IF s.end THEN
|
||||
tmp=s.end tmp.nxt=n
|
||||
ELSE
|
||||
s.begin=n
|
||||
FI
|
||||
s.end=n
|
||||
RETURN
|
||||
|
||||
PROC Remove(SetInfo POINTER s CHAR ARRAY v)
|
||||
SetNode POINTER n,prev,next
|
||||
|
||||
n=Find(s,v)
|
||||
IF n=0 THEN RETURN FI
|
||||
|
||||
prev=n.prv
|
||||
next=n.nxt
|
||||
|
||||
Free(n,NODE_SIZE)
|
||||
|
||||
IF prev THEN
|
||||
prev.nxt=next
|
||||
ELSE
|
||||
s.begin=next
|
||||
FI
|
||||
IF next THEN
|
||||
next.prv=prev
|
||||
ELSE
|
||||
s.end=prev
|
||||
FI
|
||||
RETURN
|
||||
|
||||
PROC AppendSet(SetInfo POINTER s,other)
|
||||
SetNode POINTER n
|
||||
|
||||
n=other.begin
|
||||
WHILE n
|
||||
DO
|
||||
Append(s,n.data)
|
||||
n=n.nxt
|
||||
OD
|
||||
RETURN
|
||||
|
||||
PROC RemoveSet(SetInfo POINTER s,other)
|
||||
SetNode POINTER n
|
||||
|
||||
n=other.begin
|
||||
WHILE n
|
||||
DO
|
||||
Remove(s,n.data)
|
||||
n=n.nxt
|
||||
OD
|
||||
RETURN
|
||||
|
||||
PROC Clear(SetInfo POINTER s)
|
||||
SetNode POINTER n
|
||||
|
||||
DO
|
||||
n=s.begin
|
||||
IF n=0 THEN RETURN FI
|
||||
Remove(s,n.data)
|
||||
OD
|
||||
RETURN
|
||||
|
||||
PROC Union(SetInfo POINTER a,b,res)
|
||||
Clear(res)
|
||||
AppendSet(res,a)
|
||||
AppendSet(res,b)
|
||||
RETURN
|
||||
|
||||
PROC Difference(SetInfo POINTER a,b,res)
|
||||
Clear(res)
|
||||
AppendSet(res,a)
|
||||
RemoveSet(res,b)
|
||||
RETURN
|
||||
|
||||
PROC SymmetricDifference(SetInfo POINTER a,b,res)
|
||||
SetInfo tmp1,tmp2
|
||||
|
||||
CreateSet(tmp1,"")
|
||||
CreateSet(tmp2,"")
|
||||
Difference(a,b,tmp1)
|
||||
Difference(b,a,tmp2)
|
||||
Union(tmp1,tmp2,res)
|
||||
Clear(tmp1)
|
||||
Clear(tmp2)
|
||||
RETURN
|
||||
|
||||
PROC TestSymmetricDifference(SetInfo POINTER a,b,res)
|
||||
SymmetricDifference(a,b,res)
|
||||
PrintF("%S XOR %S: ",a.name,b.name)
|
||||
PrintSet(res)
|
||||
RETURN
|
||||
|
||||
PROC TestDifference(SetInfo POINTER a,b,res)
|
||||
Difference(a,b,res)
|
||||
PrintF("%S-%S: ",a.name,b.name)
|
||||
PrintSet(res)
|
||||
RETURN
|
||||
|
||||
PROC Main()
|
||||
SetInfo s1,s2,s3
|
||||
|
||||
Put(125) PutE() ;clear screen
|
||||
|
||||
AllocInit(0)
|
||||
CreateSet(s1,"A")
|
||||
CreateSet(s2,"B")
|
||||
CreateSet(s3,"C")
|
||||
|
||||
Append(s1,"John") Append(s1,"Bob")
|
||||
Append(s1,"Mary") Append(s1,"Serena")
|
||||
Append(s2,"Jim") Append(s2,"Mary")
|
||||
Append(s2,"John") Append(s2,"Bob")
|
||||
|
||||
PrintSet(s1) PrintSet(s2)
|
||||
PutE()
|
||||
|
||||
TestSymmetricDifference(s1,s2,s3)
|
||||
TestDifference(s1,s2,s3)
|
||||
TestDifference(s2,s1,s3)
|
||||
|
||||
Clear(s1)
|
||||
Clear(s2)
|
||||
Clear(s3)
|
||||
RETURN
|
||||
Loading…
Add table
Add a link
Reference in a new issue