[updated 30.May.2000]

Librairie redlib > Fichier redmat.f

Qui appelle redmat ?

line
      SUBROUTINE REDMAT (TEXTE,TEXTEC,NER,N1,N2,FLOT)  
line
  Auteur : D.Martin (Mai 1996)
  Derniere modification (D.Martin) le 20 Mai 1996
   
  Valeur d'expression mathematique sous forme de chaine de caracteres ASCII 
 
 -- Argument d'entree --
  TEXTE  chaine de caractere "expression mathematique"
  TEXTEC tableau de caracteres "equivalent"
  NER    numero d'erreur
         =1 nombre invalide
         =2 expression mathematique invalide
         =3 operande invalide
  N1     numero du 1er caractere de la sous-chaine contenant l'erreur
  N2     numero du dernier caractere de la sous-chaine contenant l'erreur
  FLOT   valeur de l'expression si NER=0
line
      CHARACTER       TEXTE*(*),TEXTEC(*)
      INTEGER         NER,N1,N2
      DOUBLEPRECISION FLOT
 
      INTEGER         NI,NF,RAN1OD,RAN1OF,RAN2OD,RAN2OF
      DOUBLEPRECISION EPSI,FLOT2
      DATA            EPSI/3.D-16/
line
      NI=1
      NF=LEN (TEXTE)
      IF (NI.GT.NF) RETURN
 
      CALL REDOPE (TEXTE(NI:NF),RAN1OD,RAN1OF)
      RAN1OD=RAN1OD+NI-1
      RAN1OF=RAN1OF+NI-1
 
      N1=NI
      N2=NF
      IF (RAN1OD.LE.0) THEN
         Operation unaire
         N1=NI
         N2=NF
         CALL REDVAL (TEXTE,TEXTEC,NER,FLOT)
         RETURN
      ELSE
         CALL REDOPE (TEXTE(RAN1OF+1:NF),RAN2OD,RAN2OF)
         IF (RAN2OD.GT.0) THEN
            NER=4
            RETURN
         ENDIF
      ENDIF
 
      N1=NI
      N2=RAN1OD-1
      CALL REDVAL (TEXTE(N1:N2),TEXTEC(N1),NER,FLOT)
      IF (NER.NE.0) RETURN
      N1=RAN1OF+1
      N2=NF
      CALL REDVAL (TEXTE(N1:N2),TEXTEC(N1),NER,FLOT2)
      IF (NER.NE.0) RETURN
 
      IF (TEXTE(RAN1OD:RAN1OF).EQ.'**'
     &.OR.TEXTE(RAN1OD:RAN1OD).EQ.'^') THEN
         Exponentation
         IF (FLOT.LE.0.D0.AND.ABS(FLOT2-INT(FLOT2)).GE.EPSI) NER=3
         IF (NER.NE.0) RETURN
         FLOT = FLOT**FLOT2
         RETURN
      ELSEIF (TEXTE(RAN1OD:RAN1OD).EQ.'*') THEN
         Multiplication
         FLOT = FLOT*FLOT2
         RETURN
      ELSEIF (TEXTE(RAN1OD:RAN1OD).EQ.'/') THEN
         Division
         IF (ABS(FLOT2).LE.EPSI) NER=3
         IF (NER.NE.0) RETURN
         FLOT = FLOT/FLOT2
         RETURN
      ELSEIF (TEXTE(RAN1OD:RAN1OD).EQ.'+') THEN
         Addition
         FLOT = FLOT+FLOT2
         RETURN
      ELSEIF (TEXTE(RAN1OD:RAN1OD).EQ.'-') THEN
         Soustraction
         FLOT = FLOT-FLOT2
         RETURN
      ENDIF
                                                                    END !RedMat
line
top

redmat est appelé dans

top