00000000: 0D 0D 0D 20 42 49 4E 53 45 41 52 43 48 3A 0D 20 |... BINSEARCH:. |
00000010: 20 20 20 20 72 6F 77 20 31 30 20 69 6E 74 20 63 | row 10 int c|
00000020: 6F 6E 73 74 20 4C 49 53 54 20 3A 3A 20 5B 20 31 |onst LIST :: [ 1|
00000030: 20 2C 20 32 20 2C 20 34 20 2C 20 36 20 2C 20 31 | , 2 , 4 , 6 , 1|
00000040: 31 20 2C 20 31 33 20 2C 20 31 35 20 2C 20 32 31 |1 , 13 , 15 , 21|
00000050: 20 2C 20 32 32 20 2C 20 32 33 20 2C 20 33 30 20 | , 22 , 23 , 30 |
00000060: 5D 20 3B 0D 20 20 20 20 20 69 6E 74 20 76 61 72 |] ;. int var|
00000070: 20 5A 20 3B 0D 20 20 20 20 20 50 55 54 20 28 20 | Z ;. PUT ( |
00000080: 22 5A 3D 22 20 29 20 3B 0D 20 20 20 20 20 47 45 |"Z=" ) ;. GE|
00000090: 54 20 28 20 5A 20 29 20 3B 0D 20 20 20 20 20 50 |T ( Z ) ;. P|
000000A0: 55 54 20 28 20 49 4E 44 45 58 20 4F 46 20 5A 20 |UT ( INDEX OF Z |
000000B0: 29 20 2E 0D 0D 0D 0D 20 49 4E 44 45 58 20 4F 46 |) ..... INDEX OF|
000000C0: 20 5A 3A 0D 20 20 20 20 20 44 45 4C 49 4D 49 54 | Z:. DELIMIT|
000000D0: 20 53 45 41 52 43 48 20 52 41 4E 47 45 20 3B 0D | SEARCH RANGE ;.|
000000E0: 20 20 20 20 20 77 68 69 6C 65 0D 20 20 20 20 20 | while. |
000000F0: 20 20 53 45 41 52 43 48 20 52 41 4E 47 45 20 4E | SEARCH RANGE N|
00000100: 4F 54 20 45 4D 50 54 59 0D 20 20 20 20 20 72 65 |OT EMPTY. re|
00000110: 70 0D 20 20 20 20 20 20 20 4C 4F 4F 4B 20 49 4E |p. LOOK IN|
00000120: 20 54 48 45 20 4D 49 44 44 4C 45 20 3B 0D 20 20 | THE MIDDLE ;. |
00000130: 20 20 20 20 20 69 66 0D 20 20 20 20 20 20 20 20 | if. |
00000140: 20 45 4C 45 4D 45 4E 54 20 49 4E 20 4D 49 44 44 | ELEMENT IN MIDD|
00000150: 4C 45 20 3D 20 5A 0D 20 20 20 20 20 20 20 74 68 |LE = Z. th|
00000160: 65 6E 0D 20 20 20 20 20 20 20 20 20 5A 20 46 4F |en. Z FO|
00000170: 55 4E 44 0D 20 20 20 20 20 20 20 65 6C 73 65 0D |UND. else.|
00000180: 20 20 20 20 20 20 20 20 20 52 45 44 55 43 45 20 | REDUCE |
00000190: 53 45 41 52 43 48 20 52 41 4E 47 45 0D 20 20 20 |SEARCH RANGE. |
000001A0: 20 20 20 20 66 69 0D 20 20 20 20 20 65 6E 64 72 | fi. endr|
000001B0: 65 70 20 3B 0D 20 20 20 20 20 5A 20 4C 4F 53 54 |ep ;. Z LOST|
000001C0: 20 2E 0D 0D 0D 0D 20 44 45 4C 49 4D 49 54 20 53 | ..... DELIMIT S|
000001D0: 45 41 52 43 48 20 52 41 4E 47 45 3A 0D 20 20 20 |EARCH RANGE:. |
000001E0: 20 20 69 6E 74 20 76 61 72 20 4C 4F 57 45 52 20 | int var LOWER |
000001F0: 3A 3A 20 31 20 3B 0D 20 20 20 20 20 69 6E 74 20 |:: 1 ;. int |
00000200: 76 61 72 20 55 50 50 45 52 20 3A 3A 20 31 30 20 |var UPPER :: 10 |
00000210: 2E 0D 0D 0D 0D 20 53 45 41 52 43 48 20 52 41 4E |..... SEARCH RAN|
00000220: 47 45 20 4E 4F 54 20 45 4D 50 54 59 3A 0D 20 20 |GE NOT EMPTY:. |
00000230: 20 20 20 4C 4F 57 45 52 20 3C 3D 20 55 50 50 45 | LOWER <= UPPE|
00000240: 52 20 2E 0D 0D 0D 0D 20 4C 4F 4F 4B 20 49 4E 20 |R ..... LOOK IN |
00000250: 54 48 45 20 4D 49 44 44 4C 45 3A 0D 20 20 20 20 |THE MIDDLE:. |
00000260: 20 69 6E 74 20 63 6F 6E 73 74 20 4D 49 44 44 4C | int const MIDDL|
00000270: 45 20 3A 3A 20 28 20 4C 4F 57 45 52 20 2B 20 55 |E :: ( LOWER + U|
00000280: 50 50 45 52 20 29 20 64 69 76 20 32 20 2E 0D 0D |PPER ) div 2 ...|
00000290: 0D 0D 20 45 4C 45 4D 45 4E 54 20 49 4E 20 4D 49 |.. ELEMENT IN MI|
000002A0: 44 44 4C 45 3A 0D 20 20 20 20 20 4C 49 53 54 20 |DDLE:. LIST |
000002B0: 5B 20 4D 49 44 44 4C 45 20 5D 20 2E 0D 0D 0D 0D |[ MIDDLE ] .....|
000002C0: 20 5A 20 46 4F 55 4E 44 3A 0D 20 20 20 20 20 6C | Z FOUND:. l|
000002D0: 65 61 76 65 20 49 4E 44 45 58 20 4F 46 20 5A 20 |eave INDEX OF Z |
000002E0: 77 69 74 68 20 4D 49 44 44 4C 45 20 2E 0D 0D 0D |with MIDDLE ....|
000002F0: 0D 20 52 45 44 55 43 45 20 53 45 41 52 43 48 20 |. REDUCE SEARCH |
00000300: 52 41 4E 47 45 3A 0D 20 20 20 20 20 69 66 0D 20 |RANGE:. if. |
00000310: 20 20 20 20 20 20 45 4C 45 4D 45 4E 54 20 49 4E | ELEMENT IN|
00000320: 20 4D 49 44 44 4C 45 20 3E 20 5A 0D 20 20 20 20 | MIDDLE > Z. |
00000330: 20 74 68 65 6E 0D 20 20 20 20 20 20 20 54 41 4B | then. TAK|
00000340: 45 20 4C 45 46 54 20 50 41 52 54 0D 20 20 20 20 |E LEFT PART. |
00000350: 20 65 6C 73 65 0D 20 20 20 20 20 20 20 54 41 4B | else. TAK|
00000360: 45 20 52 49 47 54 48 20 50 41 52 54 0D 20 20 20 |E RIGTH PART. |
00000370: 20 20 66 69 20 2E 0D 0D 0D 0D 20 5A 20 4C 4F 53 | fi ..... Z LOS|
00000380: 54 3A 0D 20 20 20 20 20 30 20 2E 0D 0D 0D 0D 20 |T:. 0 ..... |
00000390: 54 41 4B 45 20 4C 45 46 54 20 50 41 52 54 3A 0D |TAKE LEFT PART:.|
000003A0: 20 20 20 20 20 55 50 50 45 52 20 3A 3D 20 4D 49 | UPPER := MI|
000003B0: 44 44 4C 45 20 2D 20 31 20 2E 0D 0D 0D 0D 20 54 |DDLE - 1 ..... T|
000003C0: 41 4B 45 20 52 49 47 54 48 20 50 41 52 54 3A 0D |AKE RIGTH PART:.|
000003D0: 20 20 20 20 20 4C 4F 57 45 52 20 3A 3D 20 4D 49 | LOWER := MI|
000003E0: 44 44 4C 45 20 2B 20 31 20 2E 0D 0D 0D 0D 20 50 |DDLE + 1 ..... P|
000003F0: 52 4F 47 52 41 4D 3A 0D 20 20 20 20 20 42 49 4E |ROGRAM:. BIN|
00000400: 53 45 41 52 43 48 20 2E 0D |SEARCH .. |
... BINSEARCH:. ROW 10 INT CONST LIS
T :: [ 1 , 2 , 4 , 6 , 11 , 13 , 15 , 21
, 22 , 23 , 30 ] ;. INT VAR Z ;.
PUT ( "Z=" ) ;. GET ( Z ) ;. P
UT ( INDEX OF Z ) ..... INDEX OF Z:.
DELIMIT SEARCH RANGE ;. WHILE.
SEARCH RANGE NOT EMPTY. REP.
LOOK IN THE MIDDLE ;. IF.
ELEMENT IN MIDDLE = Z. THEN.
Z FOUND. ELSE. REDUCE
SEARCH RANGE. FI. ENDREP ;.
Z LOST ..... DELIMIT SEARCH RANGE:.
INT VAR LOWER :: 1 ;. INT VAR UPPE
R :: 10 ..... SEARCH RANGE NOT EMPTY:.
LOWER <= UPPER ..... LOOK IN THE MIDD
LE:. INT CONST MIDDLE :: ( LOWER + U
PPER ) DIV 2 ..... ELEMENT IN MIDDLE:.
LIST [ MIDDLE ] ..... Z FOUND:. L
EAVE INDEX OF Z WITH MIDDLE ..... REDUCE
SEARCH RANGE:. IF. ELEMENT IN
MIDDLE > Z. THEN. TAKE LEFT P
ART. ELSE. TAKE RIGTH PART.
FI ..... Z LOST:. 0 ..... TAKE LEF
T PART:. UPPER := MIDDLE - 1 ..... T
AKE RIGTH PART:. LOWER := MIDDLE + 1
..... PROGRAM:. BINSEARCH ..
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL