home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib37b.dsk / SEARCH.SAMPLER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  4KB  |  43 lines

  1. 10  REM  ***********************
  2. 20  REM  * SEARCH.SAMPLER      *
  3. 30  REM  * BY ANTONIO          *
  4. 40  REM  * DE PASQUALE         *
  5. 50  REM  * COPYRIGHT(C) 1989   *
  6. 60  REM  * MINDCRAFT PUBL CORP *
  7. 70  REM  * CONCORD, MA 01742   *
  8. 80  REM  ***********************
  9. 90  PRINT  CHR$(21): TEXT : HOME : CLEAR 
  10. 100  REM   INITIALIZE ARRAY
  11. 110  REM   AND FILL IT
  12. 120  DIM ARRAY(1000)
  13. 130  PRINT "FILLING ARRAY, PLEASE WAIT";: POKE 34,1: FOR X = 1 TO 1000:ARRAY(X) = ARRAY(X -1) + INT(10 * RND(1) +1): PRINT ".";: NEXT X:X = X -1: TEXT : HOME 
  14. 140  REM  PRINT MENU
  15. 150  PRINT  TAB( 13)"SEARCH SAMPLER": PRINT  TAB( 19)"BY": PRINT  TAB( 10)"ANTONIO DE PASQUALE": PRINT  TAB( 2)"COPYRIGHT(C) 1989 MINDCRAFT PUBL CORP": FOR Y = 1 TO 40: PRINT  CHR$(95);: NEXT Y: PRINT 
  16. 160  PRINT "THIS PROGRAM CURRENTLY CONTAINS AN ARRAY";: PRINT "WITH ";: INVERSE : PRINT X;: NORMAL : PRINT " VALUES RANGING FROM ";: INVERSE : PRINT ARRAY(1);: NORMAL : PRINT " TO ";: INVERSE : PRINT ARRAY(X): NORMAL : PRINT 
  17. 170  VTAB 9: HTAB 1: PRINT "PLEASE CHOOSE ONE OF THE FOLLOWING:": PRINT : PRINT "   1. CONDUCT A LINEAR SEARCH": PRINT "   2. CONDUCT A BINARY SEARCH": PRINT "   3. EXIT THIS PROGRAM": PRINT 
  18. 180  VTAB 15: HTAB 1: CALL  -958: PRINT "ENTER CHOICE: ";: POKE  -16368,0: GET K$: ON (K$ < >"1"  AND K$ < >"2"  AND K$ < >"3"  AND K$ < > CHR$(27)) GOTO 180: IF K$ =  CHR$(27)  THEN K$ = "3"
  19. 190  PRINT K$: IF K$ = "3"  THEN  PRINT : PRINT "QUIT, REALLY? (";: INVERSE : PRINT "Y/N";: NORMAL : PRINT "> ";: GET K$: ON (K$ < >"Y"  AND K$ < > CHR$(121)) GOTO 180: TEXT : HOME : END : REM HANDLE END OF PROGRAM
  20. 200  POKE 34,16: ON  VAL(K$) GOSUB 230,290
  21. 210  GOTO 180
  22. 220  REM  LINEAR SEARCH
  23. 230 N$ = "":LL = 0: VTAB 17: HTAB 1: CALL  -958: INVERSE : PRINT " LINEAR SEARCH ";: NORMAL : VTAB 17: HTAB 18: PRINT "ENTER NUMBER: ";
  24. 240  GET K$: ON (K$ =  CHR$(27)  AND LL = 0) GOTO 180: ON (K$ =  CHR$(32)  OR K$ =  CHR$(21)) GOTO 240: ON (K$ =  CHR$(8)  AND LL = 0) GOTO 240: IF K$ =  CHR$(8)  THEN LL = LL -1:N$ =  MID$ (N$,1,LL): PRINT  CHR$(8);" "; CHR$(8);: GOTO 240
  25. 250  ON (K$ =  CHR$(27)  AND LL = 0) GOTO 180: ON (K$ =  CHR$(27)  AND LL < >0) GOTO 230: ON (K$ =  CHR$(13)  AND LL = 0) GOTO 240: ON (K$ =  CHR$(13)  AND LL < >0) GOTO 260: PRINT K$;:N$ = N$ +K$:LL = LL +1: GOTO 240
  26. 260  PRINT : ON (N$ < > STR$( VAL(N$))) GOTO 230:N =  VAL(N$):NT = 1: FOR INDEX = 1 TO X: ON (ARRAY(INDEX) = N) GOTO 410: ON (ARRAY(INDEX) >N) GOTO 420:NT = NT +1: NEXT INDEX
  27. 270  GOTO 420: REM  NO MATCH
  28. 280  REM  BINARY SEARCH
  29. 290 N$ = "":LL = 0: VTAB 17: HTAB 1: CALL  -958: INVERSE : PRINT " BINARY SEARCH ";: NORMAL : VTAB 17: HTAB 18: PRINT "ENTER NUMBER: ";
  30. 300  GET K$: ON (K$ =  CHR$(27)  AND LL = 0) GOTO 180: ON (K$ =  CHR$(32)  OR K$ =  CHR$(21)) GOTO 300: ON (K$ =  CHR$(8)  AND LL = 0) GOTO 300: IF K$ =  CHR$(8)  THEN LL = LL -1:N$ =  MID$ (N$,1,LL): PRINT  CHR$(8);" "; CHR$(8);: GOTO 300
  31. 310  ON (K$ =  CHR$(27)  AND LL = 0) GOTO 180: ON (K$ =  CHR$(27)  AND LL < >0) GOTO 290: ON (K$ =  CHR$(13)  AND LL = 0) GOTO 300: ON (K$ =  CHR$(13)  AND LL < >0) GOTO 320: PRINT K$;:N$ = N$ +K$:LL = LL +1: GOTO 300
  32. 320  PRINT : ON (N$ < > STR$( VAL(N$))) GOTO 290:N =  VAL(N$)
  33. 330 NT = 1:LN = 1:HI = X:INDEX = 1
  34. 340  IF N = ARRAY(INDEX)  OR LN >HI  THEN 390
  35. 350 INDEX =  INT((LN +HI)/2)
  36. 360  IF N <ARRAY(INDEX)  THEN HI = INDEX -1
  37. 370  IF N >ARRAY(INDEX)  THEN LN = INDEX +1
  38. 380 NT = NT +1: GOTO 340
  39. 390  IF N < >ARRAY(INDEX)  THEN  GOTO 420
  40. 400  REM  PRINT RESULT & RETURN
  41. 410  PRINT : PRINT "IT HAS BEEN DETERMINED ON ";: INVERSE : PRINT NT;: NORMAL : PRINT " TRIES": PRINT "THAT THE NUMBER ";: INVERSE : PRINT N;: NORMAL : PRINT " OCCUPIES POSITION ": INVERSE : PRINT INDEX;: NORMAL : PRINT " IN THE ARRAY": PRINT : GOTO 430
  42. 420  PRINT : PRINT "IT HAS BEEN DETERMINED ON ";: INVERSE : PRINT NT;: NORMAL : PRINT " TRIES": PRINT "THAT THE NUMBER ";: INVERSE : PRINT N;: NORMAL : PRINT " IS NOT IN THE ARRAY": PRINT 
  43. 430  PRINT "PRESS <";: INVERSE : PRINT "RETURN";: NORMAL : PRINT "> TO CONTINUE: ";: POKE  -16368,0: GET K$: RETURN