home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
modula2
/
mtmod2.lbr
/
MTPTR.MZD
/
MTPTR.MOD
Wrap
Text File
|
1987-08-30
|
3KB
|
104 lines
MODULE MTPtr;
(*---------------------------------------------*)
(* Program to measure the speed of: *)
(* *)
(* 1) Allocating dynamic binary-tree structure *)
(* *)
(* 2) Searching through the binary-tree *)
(*---------------------------------------------*)
FROM InOut IMPORT WriteString, WriteLn, Read, Write;
FROM SYSTEM IMPORT TSIZE;
FROM Storage IMPORT ALLOCATE;
FROM MathLib0 IMPORT sin, entier;
CONST SIZE = 1000;
MainLoopCount = 30;
TYPE Ptr = POINTER TO Node;
Node = RECORD
Value : INTEGER;
Left, Right : Ptr;
END;
VAR Numbers : ARRAY [1..SIZE] OF INTEGER;
Iter, I : CARDINAL;
TreeRoot : Ptr;
Pi : REAL;
dummy : CHAR;
PROCEDURE Create;
(* Create array using sin() *)
VAR J : CARDINAL;
Angle, FloatSize, Increment : REAL;
BEGIN
Angle := 0.0;
J := 1;
Increment := Pi / 360.0;
FloatSize := FLOAT(SIZE);
WHILE J <= SIZE DO
Numbers[J] := entier(sin(Angle) * FloatSize);
Angle := Angle + Increment;
INC(J);
END;
END Create;
PROCEDURE Insert(VAR Root : Ptr; Item : INTEGER);
(* Insert element in binary-tree *)
BEGIN
IF Root = NIL THEN
ALLOCATE(Root,TSIZE(Node));
Root^.Value := Item;
Root^.Left := NIL;
Root^.Right := NIL
ELSE
WITH Root^ DO
IF Item < Value THEN Insert(Left,Item)
ELSE Insert(Right,Item)
END;
END;
END;
END Insert;
PROCEDURE Search(VAR Root : Ptr; Target : INTEGER);
(* Recursive procedure to search for Target value *)
BEGIN
IF Root <> NIL THEN
IF Target <> Root^.Value THEN
IF Target < Root^.Value THEN
Root := Root^.Left; Search(Root,Target)
ELSE
Root := Root^.Right; Search(Root,Target)
END
END;
END;
END Search;
BEGIN (* MAIN *)
Pi := 355. / 113.;
Create;
WriteString('Created array'); WriteLn;
(* Building the binary tree *)
WriteString('Press <CR> to time tree creation '); WriteLn;
Read(dummy);
NEW(TreeRoot);
TreeRoot := NIL;
FOR I := 1 TO SIZE DO
Insert(TreeRoot,Numbers[I]);
END; (* FOR I *)
WriteLn;
WriteString('Created Tree'); WriteLn;
WriteString('Press <CR> to time tree search'); WriteLn;
Read(dummy); WriteLn;
FOR Iter := 1 TO MainLoopCount DO
FOR I := SIZE TO 1 BY -1 DO
Search(TreeRoot,Numbers[I]);
END; (* FOR I *)
END; (* FOR Iter *)
WriteLn;
WriteString('DONE'); WriteLn;
END MTPtr.