Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
66
Task/Stack/Oberon-2/stack-1.oberon
Normal file
66
Task/Stack/Oberon-2/stack-1.oberon
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
MODULE Stacks;
|
||||
IMPORT
|
||||
Object,
|
||||
Object:Boxed,
|
||||
Out := NPCT:Console;
|
||||
|
||||
TYPE
|
||||
Pool(E: Object.Object) = POINTER TO ARRAY OF E;
|
||||
Stack*(E: Object.Object) = POINTER TO StackDesc(E);
|
||||
StackDesc*(E: Object.Object) = RECORD
|
||||
pool: Pool(E);
|
||||
cap-,top: LONGINT;
|
||||
END;
|
||||
|
||||
PROCEDURE (s: Stack(E)) INIT*(cap: LONGINT);
|
||||
BEGIN
|
||||
NEW(s.pool,cap);s.cap := cap;s.top := -1
|
||||
END INIT;
|
||||
|
||||
PROCEDURE (s: Stack(E)) Top*(): E;
|
||||
BEGIN
|
||||
RETURN s.pool[s.top]
|
||||
END Top;
|
||||
|
||||
PROCEDURE (s: Stack(E)) Push*(e: E);
|
||||
BEGIN
|
||||
INC(s.top);
|
||||
ASSERT(s.top < s.cap);
|
||||
s.pool[s.top] := e;
|
||||
END Push;
|
||||
|
||||
PROCEDURE (s: Stack(E)) Pop*(): E;
|
||||
VAR
|
||||
resp: E;
|
||||
BEGIN
|
||||
ASSERT(s.top >= 0);
|
||||
resp := s.pool[s.top];DEC(s.top);
|
||||
RETURN resp
|
||||
END Pop;
|
||||
|
||||
PROCEDURE (s: Stack(E)) IsEmpty(): BOOLEAN;
|
||||
BEGIN
|
||||
RETURN s.top < 0
|
||||
END IsEmpty;
|
||||
|
||||
PROCEDURE (s: Stack(E)) Size*(): LONGINT;
|
||||
BEGIN
|
||||
RETURN s.top + 1
|
||||
END Size;
|
||||
|
||||
PROCEDURE Test;
|
||||
VAR
|
||||
s: Stack(Boxed.LongInt);
|
||||
BEGIN
|
||||
s := NEW(Stack(Boxed.LongInt),100);
|
||||
s.Push(NEW(Boxed.LongInt,10));
|
||||
s.Push(NEW(Boxed.LongInt,100));
|
||||
Out.String("size: ");Out.Int(s.Size(),0);Out.Ln;
|
||||
Out.String("pop: ");Out.Object(s.Pop());Out.Ln;
|
||||
Out.String("top: ");Out.Object(s.Top());Out.Ln;
|
||||
Out.String("size: ");Out.Int(s.Size(),0);Out.Ln
|
||||
END Test;
|
||||
|
||||
BEGIN
|
||||
Test
|
||||
END Stacks.
|
||||
83
Task/Stack/Oberon-2/stack-2.oberon
Normal file
83
Task/Stack/Oberon-2/stack-2.oberon
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
MODULE Stacks; (** AUTHOR ""; PURPOSE ""; *)
|
||||
|
||||
IMPORT
|
||||
Out := KernelLog;
|
||||
|
||||
TYPE
|
||||
Object = OBJECT
|
||||
END Object;
|
||||
|
||||
Stack* = OBJECT
|
||||
VAR
|
||||
top-,capacity-: LONGINT;
|
||||
pool: POINTER TO ARRAY OF Object;
|
||||
|
||||
PROCEDURE & InitStack*(capacity: LONGINT);
|
||||
BEGIN
|
||||
SELF.capacity := capacity;
|
||||
SELF.top := -1;
|
||||
NEW(SELF.pool,capacity)
|
||||
END InitStack;
|
||||
|
||||
PROCEDURE Push*(a:Object);
|
||||
BEGIN
|
||||
INC(SELF.top);
|
||||
ASSERT(SELF.top < SELF.capacity,100);
|
||||
SELF.pool[SELF.top] := a
|
||||
END Push;
|
||||
|
||||
PROCEDURE Pop*(): Object;
|
||||
VAR
|
||||
r: Object;
|
||||
BEGIN
|
||||
ASSERT(SELF.top >= 0);
|
||||
r := SELF.pool[SELF.top];
|
||||
DEC(SELF.top);RETURN r
|
||||
END Pop;
|
||||
|
||||
PROCEDURE Top*(): Object;
|
||||
BEGIN
|
||||
ASSERT(SELF.top >= 0);
|
||||
RETURN SELF.pool[SELF.top]
|
||||
END Top;
|
||||
|
||||
PROCEDURE IsEmpty*(): BOOLEAN;
|
||||
BEGIN
|
||||
RETURN SELF.top < 0
|
||||
END IsEmpty;
|
||||
|
||||
END Stack;
|
||||
|
||||
BoxedInt = OBJECT
|
||||
(Object)
|
||||
VAR
|
||||
val-: LONGINT;
|
||||
|
||||
PROCEDURE & InitBoxedInt*(CONST val: LONGINT);
|
||||
BEGIN
|
||||
SELF.val := val
|
||||
END InitBoxedInt;
|
||||
|
||||
END BoxedInt;
|
||||
|
||||
PROCEDURE Test*;
|
||||
VAR
|
||||
s: Stack;
|
||||
bi: BoxedInt;
|
||||
obj: Object;
|
||||
BEGIN
|
||||
NEW(s,10); (* A new stack of ten objects *)
|
||||
NEW(bi,100);s.Push(bi);
|
||||
NEW(bi,102);s.Push(bi);
|
||||
NEW(bi,104);s.Push(bi);
|
||||
Out.Ln;
|
||||
Out.String("Capacity:> ");Out.Int(s.capacity,0);Out.Ln;
|
||||
Out.String("Size:> ");Out.Int(s.top + 1,0);Out.Ln;
|
||||
obj := s.Pop(); obj := s.Pop();
|
||||
WITH obj: BoxedInt DO
|
||||
Out.String("obj:> ");Out.Int(obj.val,0);Out.Ln
|
||||
ELSE
|
||||
Out.String("Unknown object...");Out.Ln;
|
||||
END (* with *)
|
||||
END Test;
|
||||
END Stacks.
|
||||
Loading…
Add table
Add a link
Reference in a new issue