RosettaCodeData/Task/Binary-search/BASIC/binary-search-5.basic

28 lines
715 B
Plaintext

100 PROGRAM "Search.bas"
110 RANDOMIZE
120 NUMERIC ARR(1 TO 20)
130 CALL FILL(ARR)
140 PRINT:INPUT PROMPT "Value: ":N
150 LET IDX=SEARCH(ARR,N)
160 IF IDX THEN
170 PRINT "The value";N;"was found the index";IDX
180 ELSE
190 PRINT "The value";N;"was not found."
200 END IF
210 DEF FILL(REF T)
220 LET T(LBOUND(T))=RND(3):PRINT T(1);
230 FOR I=LBOUND(T)+1 TO UBOUND(T)
240 LET T(I)=T(I-1)+RND(3)+1
250 PRINT T(I);
260 NEXT
270 END DEF
280 DEF SEARCH(REF T,N)
290 LET SEARCH=0:LET BO=LBOUND(T):LET UP=UBOUND(T)
300 DO
310 LET K=INT((BO+UP)/2)
320 IF T(K)<N THEN LET BO=K+1
330 IF T(K)>N THEN LET UP=K-1
340 LOOP WHILE BO<=UP AND T(K)<>N
350 IF BO<=UP THEN LET SEARCH=K
360 END DEF