Télécharger minmax.eso

Retour à la liste

Numérotation des lignes :

minmax
  1. C MINMAX SOURCE SP204843 22/12/19 21:15:05 11532
  2. SUBROUTINE MINMAX (IPTR,CTYP,AMINI,AMAXI,IRET)
  3. *
  4. *=============================================================
  5. * IPTR (E/S) POINTEUR SUR UN LISTREEL ou LISTENTI
  6. * AMINI (S) MINI DE LA LISTE
  7. * AMAXI (S) MAXI DE LA LISTE
  8. * IRET = 0 si operation pas realisee
  9. *=============================================================
  10. *
  11. IMPLICIT INTEGER(I-N)
  12. IMPLICIT REAL*8 (A-H,O-Y)
  13.  
  14. CHARACTER*(*) CTYP
  15.  
  16. PARAMETER (NLIST=3)
  17. CHARACTER*(8) CLIST(NLIST)
  18. DATA CLIST /'LISTREEL','LISTENTI','LISTMOTS'/
  19. MACRO , (LISTREEL , LISTENTI , LISTMOTS)
  20.  
  21. -INC PPARAM
  22. -INC CCOPTIO
  23. -INC SMLREEL
  24. -INC SMLENTI
  25. -INC CCREEL
  26.  
  27. XGPOS = XGRAND
  28. XGNEG =-XGRAND
  29.  
  30. IRET = 0
  31.  
  32. CALL PLAMO8(CLIST,NLIST,IPOS1,CTYP)
  33. IF(IPOS1 .EQ. 0)THEN
  34. MOTERR=CTYP
  35. CALL ERREUR(39)
  36. RETURN
  37. ENDIF
  38.  
  39. CASE, IPOS1
  40. WHEN, LISTREEL
  41. MLREEL=IPTR
  42. JG =MLREEL.PROG(/1)
  43. WHEN, LISTENTI
  44. MLENTI=IPTR
  45. JG =MLENTI.LECT(/1)
  46. WHENOTHERS
  47. MOTERR=CTYP
  48. CALL ERREUR(39)
  49. RETURN
  50. ENDCASE
  51.  
  52. IF (JG.EQ.0) RETURN
  53.  
  54. *-----initialisation
  55. IDEB = 0
  56. 2 CONTINUE
  57. IDEB = IDEB + 1
  58. IF(IDEB.gt.JG) THEN
  59. WRITE(IOIMP,*) 'le listreel ',IPTR,
  60. & ' n a pas de valeur reelle finie !'
  61. MOTERR(1:8)='EVOLUTIO'
  62. CALL ERREUR(1012)
  63. RETURN
  64. ENDIF
  65. CASE, IPOS1
  66. WHEN, LISTREEL
  67. XI=MLREEL.PROG(IDEB)
  68. WHEN, LISTENTI
  69. XI=FLOAT(MLENTI.LECT(IDEB))
  70. WHENOTHERS
  71. MOTERR=CTYP
  72. CALL ERREUR(39)
  73. RETURN
  74. ENDCASE
  75. IF((XI.LT.0.D0).EQV.(XI.GE.0.D0)) THEN
  76. WRITE(IOIMP,*) IDEB,'eme valeur du listreel',IPTR,'est un NaN!'
  77. GOTO 2
  78. ENDIF
  79. IF(XI.GT.XGPOS) GOTO 2
  80. IF(XI.LT.XGNEG) GOTO 2
  81.  
  82. AMINI=XI
  83. AMAXI=XI
  84.  
  85. *-----on boucle sur les autres valeurs
  86. IFIN=JG
  87. IF(IDEB.GE.IFIN) RETURN
  88.  
  89. DO 1 I=IDEB+1,IFIN
  90. CASE, IPOS1
  91. WHEN, LISTREEL
  92. XI=MLREEL.PROG(I)
  93. WHEN, LISTENTI
  94. XI=FLOAT(MLENTI.LECT(I))
  95. WHENOTHERS
  96. MOTERR=CTYP
  97. CALL ERREUR(39)
  98. RETURN
  99. ENDCASE
  100.  
  101. * Verification que les valeurs entrees ne sont pas des NaN
  102. IF((XI.LT.0.D0).EQV.(XI.GE.0.D0)) THEN
  103. WRITE(IOIMP,*) I,'eme valeur du listreel',IPTR,'est un NaN!'
  104. IF(IERPER.GE.3) GOTO 1
  105. MOTERR(1:8)='EVOLUTIO'
  106. CALL ERREUR(1012)
  107. RETURN
  108. ENDIF
  109. * Si Infini, on ne prend pas en compte pour le min et max
  110. * on prend XSGRAND et pas XGRAND car DESSIN en simple precision
  111. c write(ioimp,*) I,XI,'>',XGPOS,(XI.GE.XGPOS)
  112. c write(ioimp,*) I,XI,'<',XGNEG,(XI.GE.XGNEG)
  113. IF(XI.GE.XGPOS) GOTO 1
  114. IF(XI.LE.XGNEG) GOTO 1
  115. * on realise ici le travail
  116. IF(AMINI.GT.XI) AMINI=XI
  117. IF(AMAXI.LT.XI) AMAXI=XI
  118. 1 CONTINUE
  119.  
  120. IRET = 1
  121.  
  122. END
  123.  
  124.  
  125.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales