Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
88
Task/Binary-search/Simula/binary-search.simula
Normal file
88
Task/Binary-search/Simula/binary-search.simula
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
BEGIN
|
||||
|
||||
|
||||
INTEGER PROCEDURE BINARYSEARCHREC(A, LVALUE);
|
||||
INTEGER ARRAY A;
|
||||
INTEGER LVALUE; ! VALUE IS A KEY WORD ;
|
||||
BEGIN
|
||||
|
||||
INTEGER PROCEDURE SEARCH(LOW, HIGH);
|
||||
INTEGER LOW, HIGH;
|
||||
BEGIN
|
||||
INTEGER MID;
|
||||
! INVARIANTS: VALUE > A[I] FOR ALL I < LOW
|
||||
VALUE < A[I] FOR ALL I > HIGH ;
|
||||
MID := (LOW + HIGH) // 2;
|
||||
SEARCH := IF HIGH < LOW THEN -LOW - 1
|
||||
ELSE IF A(MID) > LVALUE THEN SEARCH(LOW, MID-1)
|
||||
ELSE IF A(MID) < LVALUE THEN SEARCH(MID+1, HIGH)
|
||||
ELSE MID;
|
||||
END SEARCH;
|
||||
|
||||
BINARYSEARCHREC := SEARCH(LOWERBOUND(A, 1), UPPERBOUND(A, 1));
|
||||
END BINARYSEARCHREC;
|
||||
|
||||
|
||||
INTEGER PROCEDURE BINARYSEARCH(A, LVALUE);
|
||||
INTEGER ARRAY A;
|
||||
INTEGER LVALUE; ! VALUE IS A KEY WORD ;
|
||||
BEGIN
|
||||
INTEGER LOW, HIGH, MID;
|
||||
BOOLEAN FOUND;
|
||||
|
||||
LOW := LOWERBOUND(A, 1);
|
||||
HIGH := UPPERBOUND(A, 1);
|
||||
WHILE NOT FOUND AND LOW <= HIGH DO BEGIN
|
||||
! INVARIANTS: LVALUE > A(I) FOR ALL I < LOW
|
||||
LVALUE < A(I) FOR ALL I > HIGH ;
|
||||
MID := (LOW + HIGH) // 2;
|
||||
IF A(MID) > LVALUE THEN
|
||||
HIGH := MID - 1
|
||||
ELSE IF A(MID) < LVALUE THEN
|
||||
LOW := MID + 1
|
||||
ELSE
|
||||
FOUND := TRUE;
|
||||
END;
|
||||
! LVALUE WOULD BE INSERTED AT INDEX "LOW" ;
|
||||
BINARYSEARCH := IF FOUND THEN MID ELSE -LOW - 1;
|
||||
END BINARYSEARCH;
|
||||
|
||||
|
||||
COMMENT ** CAUTION ** ONLY WORKS FOR ARRAY LOWER BOUND=0;
|
||||
INTEGER ARRAY HAYSTACK(0:9);
|
||||
INTEGER I, J, K, NEEDLE;
|
||||
|
||||
OUTTEXT("ARRAY = (");
|
||||
I := LOWERBOUND(HAYSTACK, 1);
|
||||
FOR J := 1, 6, 17, 29, 45, 78, 79, 87, 95, 100 DO BEGIN
|
||||
HAYSTACK(I) := J;
|
||||
OUTINT(HAYSTACK(I), 0);
|
||||
IF I < UPPERBOUND(HAYSTACK, 1) THEN OUTTEXT(", ");
|
||||
I := I + 1;
|
||||
END;
|
||||
OUTTEXT(")");
|
||||
OUTIMAGE;
|
||||
OUTIMAGE;
|
||||
|
||||
FOR NEEDLE:= 0, 1, 7, 17, 95, 99, 100, 101 DO BEGIN
|
||||
|
||||
OUTTEXT("LOOKUP RECURSIV ");
|
||||
OUTINT(NEEDLE, 3);
|
||||
OUTTEXT(" ... INDEX = ");
|
||||
K := BINARYSEARCHREC(HAYSTACK, NEEDLE);
|
||||
OUTINT(K, 3);
|
||||
IF K < 0 THEN OUTTEXT(" NOT FOUND!");
|
||||
OUTIMAGE;
|
||||
|
||||
OUTTEXT("LOOKUP ITERATIV ");
|
||||
OUTINT(NEEDLE, 3);
|
||||
OUTTEXT(" ... INDEX = ");
|
||||
K := BINARYSEARCH(HAYSTACK, NEEDLE);
|
||||
OUTINT(K, 3);
|
||||
IF K < 0 THEN OUTTEXT(" NOT FOUND!");
|
||||
OUTIMAGE;
|
||||
|
||||
OUTIMAGE;
|
||||
END;
|
||||
|
||||
END
|
||||
Loading…
Add table
Add a link
Reference in a new issue