53 lines
1.1 KiB
Text
53 lines
1.1 KiB
Text
MODULE BS;
|
|
|
|
IMPORT Out;
|
|
|
|
VAR
|
|
List:ARRAY 10 OF REAL;
|
|
|
|
PROCEDURE Init(VAR List:ARRAY OF REAL);
|
|
BEGIN
|
|
List[0] := -31; List[1] := 0; List[2] := 1; List[3] := 2;
|
|
List[4] := 2; List[5] := 4; List[6] := 65; List[7] := 83;
|
|
List[8] := 99; List[9] := 782;
|
|
END Init;
|
|
|
|
PROCEDURE BinarySearch(List:ARRAY OF REAL;Element:REAL):LONGINT;
|
|
VAR
|
|
L,M,H:LONGINT;
|
|
BEGIN
|
|
L := 0;
|
|
H := LEN(List)-1;
|
|
WHILE L <= H DO
|
|
M := (L + H) DIV 2;
|
|
IF List[M] > Element THEN
|
|
H := M - 1;
|
|
ELSIF List[M] < Element THEN
|
|
L := M + 1;
|
|
ELSE
|
|
RETURN M;
|
|
END;
|
|
END;
|
|
RETURN -1;
|
|
END BinarySearch;
|
|
|
|
PROCEDURE RBinarySearch(VAR List:ARRAY OF REAL;Element:REAL;L,R:LONGINT):LONGINT;
|
|
VAR
|
|
M:LONGINT;
|
|
BEGIN
|
|
IF R < L THEN RETURN -1 END;
|
|
M := (L + R) DIV 2;
|
|
IF Element = List[M] THEN
|
|
RETURN M
|
|
ELSIF Element < List[M] THEN
|
|
RETURN RBinarySearch(List, Element, L, R-1)
|
|
ELSE
|
|
RETURN RBinarySearch(List, Element, M-1, R)
|
|
END;
|
|
END RBinarySearch;
|
|
|
|
BEGIN
|
|
Init(List);
|
|
Out.Int(BinarySearch(List, 2), 0); Out.Ln;
|
|
Out.Int(RBinarySearch(List, 65, 0, LEN(List)-1),0); Out.Ln;
|
|
END BS.
|