1 : C IFIDIC SOURCE CHAT 05/01/13 00:32:50 5004 2 : SUBROUTINE IFIDIC(LONTAB,TAB,VAL, 3 : $ IDX, 4 : $ IMPR,IRET) 5 : IMPLICIT INTEGER(I-N) 6 : IMPLICIT REAL*8 (A-H,O-Z) 7 : C*********************************************************************** 8 : C NOM : IFIDIC 9 : C DESCRIPTION : Recherche l'index d'une valeur dans un tableau ordonné 10 : C d'entiers. 11 : C 12 : C Cherche IDX dans un tableau ordonné d'entiers TAB 13 : C tel que : TAB(IDX)=VAL 14 : C La méthode utilisée est un binary search decrite dans 15 : C The art of Programming Vol.3 (D. Knuth) 16 : C 17 : C 18 : C LANGAGE : FORTRAN 77 (sauf (E/S) 19 : C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) 20 : C mél : gounand@semt2.smts.cea.fr 21 : C*********************************************************************** 22 : C APPELE PAR : MKIZA 23 : C*********************************************************************** 24 : C ENTREES : LONTAB, TAB, VAL 25 : C SORTIES : IDX 26 : C*********************************************************************** 27 : C VERSION : v1, 08/10/99, version initiale 28 : C HISTORIQUE : v1, 08/10/99, création 29 : C HISTORIQUE : 30 : C HISTORIQUE : 31 : C*********************************************************************** 32 : C Prière de PRENDRE LE TEMPS de compléter les commentaires 33 : C en cas de modification de ce sous-programme afin de faciliter 34 : C la maintenance ! 35 : C*********************************************************************** 36 : -INC CCOPTIO 37 : INTEGER LONTAB 38 : INTEGER TAB(LONTAB) 39 : INTEGER VAL,IDX 40 : * 41 : INTEGER IMPR,IRET 42 : * 43 : INTEGER IDXINF,IDXMIL,IDXSUP 44 : INTEGER VALMIL 45 : C 46 : C Executable statements 47 : C 48 : IF (IMPR.GT.5) WRITE(IOIMP,*) 'Entrée dans ifidic' 49 : IDXINF=1 50 : IDXSUP=LONTAB 51 : 1 CONTINUE 52 : IF (IDXSUP.LT.IDXINF) GOTO 9998 53 : IDXMIL=(IDXINF+IDXSUP)/2 54 : VALMIL=TAB(IDXMIL) 55 : IF (VAL.LT.VALMIL) THEN 56 : IDXSUP=IDXMIL-1 57 : GOTO 1 58 : ELSEIF (VAL.GT.VALMIL) THEN 59 : IDXINF=IDXMIL+1 60 : GOTO 1 61 : ELSE 62 : IDX=IDXMIL 63 : ENDIF 64 : * 65 : * Normal termination 66 : * 67 : IRET=0 68 : RETURN 69 : * 70 : * Format handling 71 : * 72 : * 73 : * Error handling 74 : * 75 : 9998 CONTINUE 76 : WRITE(IOIMP,*) 'La valeur n''est pas dans le tableau ', 77 : $ 'ou le tableau n''est pas ordonnée...' 78 : 9999 CONTINUE 79 : IRET=1 80 : WRITE(IOIMP,*) 'An error was detected in subroutine ifidic' 81 : RETURN 82 : * 83 : * End of subroutine IFIDIC 84 : * 85 : END 86 : 87 : 88 :
© Cast3M 2003 - All rights reserved.
Disclaimer