1 |
* |
2 |
* $Id: locatf.F,v 1.2 1996/05/24 10:56:52 jamie Exp $ |
3 |
* |
4 |
* $Log: locatf.F,v $ |
5 |
* Revision 1.2 1996/05/24 10:56:52 jamie |
6 |
* add locatr entry for consistency with wrup |
7 |
* |
8 |
* Revision 1.1.1.1 1996/02/15 17:48:49 mclareni |
9 |
* Kernlib |
10 |
* |
11 |
* |
12 |
#if !defined(CERNLIB_QMIBMVF) |
13 |
*#include "kernnum/pilot.h" |
14 |
* |
15 |
* Name change (consistancy) |
16 |
* |
17 |
FUNCTION LOCATR(ARRAY,LENGTH,OBJECT) |
18 |
DIMENSION ARRAY(*) |
19 |
LOCATR=LOCATF(ARRAY,LENGTH,OBJECT) |
20 |
END |
21 |
|
22 |
FUNCTION LOCATF(ARRAY,LENGTH,OBJECT) |
23 |
C BINARY SEARCH THRU 'ARRAY' TO FIND 'OBJECT' |
24 |
C 'ARRAY' IS ASSUMED TO BE SORTED PRIOR TO CALL |
25 |
C IF MATCH IS FOUND, FUNCTION RETURNS POSITION OF ELEMENT |
26 |
C IF NO MATCH FOUND, FUNCTION GIVES NEGATIVE OF NEAREST ELEMENT |
27 |
C SMALLER THAN OBJECT |
28 |
C F. JAMES , SEPT.,1974 |
29 |
DIMENSION ARRAY(2) |
30 |
NABOVE = LENGTH + 1 |
31 |
NBELOW = 0 |
32 |
10 IF (NABOVE-NBELOW .LE. 1) GO TO 200 |
33 |
MIDDLE = (NABOVE+NBELOW) / 2 |
34 |
IF (OBJECT - ARRAY(MIDDLE)) 100, 180, 140 |
35 |
100 NABOVE = MIDDLE |
36 |
GO TO 10 |
37 |
140 NBELOW = MIDDLE |
38 |
GO TO 10 |
39 |
180 LOCATF = MIDDLE |
40 |
GO TO 300 |
41 |
200 LOCATF = -NBELOW |
42 |
300 RETURN |
43 |
END |
44 |
#endif |