Data update
This commit is contained in:
parent
07c7092a52
commit
61b93a2cd1
313 changed files with 6160 additions and 346 deletions
46
Task/Binary-search/MACRO-11/binary-search.macro11
Normal file
46
Task/Binary-search/MACRO-11/binary-search.macro11
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
.TITLE BINRTA
|
||||
.MCALL .TTYOUT,.PRINT,.EXIT
|
||||
; TEST CODE
|
||||
BINRTA::CLR R5
|
||||
1$: MOV R5,R0
|
||||
ADD #'0,R0
|
||||
.TTYOUT
|
||||
MOV R5,R0
|
||||
MOV #DATA,R1
|
||||
MOV #DATEND,R2
|
||||
JSR PC,BINSRC
|
||||
BEQ 2$
|
||||
.PRINT #4$
|
||||
BR 3$
|
||||
2$: .PRINT #5$
|
||||
3$: INC R5
|
||||
CMP R5,#^D10
|
||||
BLT 1$
|
||||
.EXIT
|
||||
4$: .ASCII / NOT/
|
||||
5$: .ASCIZ / FOUND/
|
||||
.EVEN
|
||||
|
||||
; TEST DATA
|
||||
DATA: .WORD 1, 2, 3, 5, 7
|
||||
DATEND = . + 2
|
||||
|
||||
; BINARY SEARCH
|
||||
; INPUT: R0 = VALUE, R1 = LOW PTR, R2 = HIGH PTR
|
||||
; OUTPUT: ZF SET IF VALUE FOUND; R1 = INSERTION POINT
|
||||
BINSRC: BR 3$
|
||||
1$: MOV R1,R3
|
||||
ADD R2,R3
|
||||
ROR R3
|
||||
CMP (R3),R0
|
||||
BGE 2$
|
||||
ADD #2,R3
|
||||
MOV R3,R1
|
||||
BR 3$
|
||||
2$: SUB #2,R3
|
||||
MOV R3,R2
|
||||
3$: CMP R2,R1
|
||||
BGE 1$
|
||||
CMP (R1),R0
|
||||
RTS PC
|
||||
.END BINRTA
|
||||
70
Task/Binary-search/Modula-2/binary-search.mod2
Normal file
70
Task/Binary-search/Modula-2/binary-search.mod2
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
MODULE BinarySearch;
|
||||
|
||||
FROM STextIO IMPORT
|
||||
WriteLn, WriteString;
|
||||
FROM SWholeIO IMPORT
|
||||
WriteInt;
|
||||
|
||||
TYPE
|
||||
TArray = ARRAY [0 .. 9] OF INTEGER;
|
||||
|
||||
CONST
|
||||
A = TArray{-31, 0, 1, 2, 2, 4, 65, 83, 99, 782}; (* Sorted data *)
|
||||
|
||||
VAR
|
||||
X: INTEGER;
|
||||
|
||||
PROCEDURE DoBinarySearch(A: ARRAY OF INTEGER; X: INTEGER): INTEGER;
|
||||
VAR
|
||||
L, H, M: INTEGER;
|
||||
BEGIN
|
||||
L := 0; H := HIGH(A);
|
||||
WHILE L <= H DO
|
||||
M := L + (H - L) / 2;
|
||||
IF A[M] < X THEN
|
||||
L := M + 1
|
||||
ELSIF A[M] > X THEN
|
||||
H := M - 1
|
||||
ELSE
|
||||
RETURN M
|
||||
END
|
||||
END;
|
||||
RETURN -1
|
||||
END DoBinarySearch;
|
||||
|
||||
PROCEDURE DoBinarySearchRec(A: ARRAY OF INTEGER; X, L, H: INTEGER): INTEGER;
|
||||
VAR
|
||||
M: INTEGER;
|
||||
BEGIN
|
||||
IF H < L THEN
|
||||
RETURN -1
|
||||
END;
|
||||
M := L + (H - L) / 2;
|
||||
IF A[M] > X THEN
|
||||
RETURN DoBinarySearchRec(A, X, L, M - 1)
|
||||
ELSIF A[M] < X THEN
|
||||
RETURN DoBinarySearchRec(A, X, M + 1, H)
|
||||
ELSE
|
||||
RETURN M
|
||||
END
|
||||
END DoBinarySearchRec;
|
||||
|
||||
PROCEDURE WriteResult(X, IndX: INTEGER);
|
||||
BEGIN
|
||||
WriteInt(X, 1);
|
||||
IF IndX >= 0 THEN
|
||||
WriteString(" is at index ");
|
||||
WriteInt(IndX, 1);
|
||||
WriteString(".")
|
||||
ELSE
|
||||
WriteString(" is not found.")
|
||||
END;
|
||||
WriteLn
|
||||
END WriteResult;
|
||||
|
||||
BEGIN
|
||||
X := 2;
|
||||
WriteResult(X, DoBinarySearch(A, X));
|
||||
X := 5;
|
||||
WriteResult(X, DoBinarySearchRec(A, X, 0, HIGH(A)));
|
||||
END BinarySearch.
|
||||
Loading…
Add table
Add a link
Reference in a new issue