home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / PASCAL / NRPAS13.ZIP / HUNT.PAS < prev    next >
Pascal/Delphi Source File  |  1991-04-29  |  1KB  |  49 lines

  1. PROCEDURE hunt(xx: glnarray; n: integer;
  2.       x: real; VAR jlo: integer);
  3. (* Programs using routine HUNT must define the type
  4. TYPE
  5.    glnarray = ARRAY [1..n] OF real;
  6. in the main routine. *)
  7. LABEL 1,2,3,4;
  8. VAR
  9.    jm,jhi,inc: integer;
  10.    ascnd: boolean;
  11. BEGIN
  12.    ascnd := xx[n] > xx[1];
  13.    IF ((jlo <= 0) OR (jlo > n)) THEN BEGIN
  14.       jlo := 0;
  15.       jhi := n+1;
  16.       GOTO 3
  17.    END;
  18.    inc := 1;
  19.    IF ((x >= xx[jlo]) = ascnd ) THEN BEGIN
  20. 1:      jhi := jlo+inc;
  21.       IF (jhi > n) THEN BEGIN
  22.          jhi := n+1
  23.       END ELSE IF ((x >= xx[jhi]) = ascnd ) THEN BEGIN
  24.          jlo := jhi;
  25.          inc := inc+inc;
  26.          GOTO 1
  27.       END
  28.    END ELSE BEGIN
  29.       jhi := jlo;
  30. 2:      jlo := jhi-inc;
  31.       IF (jlo < 1) THEN BEGIN
  32.          jlo := 0
  33.       END ELSE IF ((x < xx[jlo]) = ascnd ) THEN BEGIN
  34.          jhi := jlo;
  35.          inc := inc+inc;
  36.          GOTO 2
  37.       END
  38.    END;
  39. 3:   IF ((jhi-jlo) = 1) THEN GOTO 4;
  40.    jm := (jhi+jlo) DIV 2;
  41.    IF ((x > xx[jm]) = ascnd ) THEN BEGIN
  42.       jlo := jm
  43.    END ELSE BEGIN
  44.       jhi := jm
  45.    END;
  46.    GOTO 3;
  47. 4:
  48. END;
  49.