maximu
C MAXIMU SOURCE CB215821 21/06/10 21:15:35 11029 ************************************************************************ * * M A X I M U * ----------- * * SOUS-PROGRAMME ASSOCIE AUX OPERATEURS : * MAXI ( KPLUS = 1 ) * MINI ( KPLUS =-1 ) * * FONCTION: * --------- * * DETERMINER LA PLUS GRANDE VALEUR D'UN OBJET (QUAND CELA A UN * SENS). * * PHRASE D'APPEL (EN GIBIANE): * ---------------------------- * * |(AVEC)| * GRANDVAL = MAXI OBJET (| | COMPOS ) ; * | SANS | * * indice2 absc3 ordo4 = MAXI EVOL1 ( 'ABS' ) * * OBJET3 = MAXI OBJET1 OBJET2 (OBJETi ..) * * LES PARENTHESES INDIQUANT DES ARGUMENTS FACULTATIFS. * * OPERANDES ET RESULTATS: * ----------------------- * * OBJ TYPE_1 OBJET DONT ON CHERCHE LA PLUS GRANDE VALEUR. * GRANDVAL TYPE_2 PLUS GRANDE VALEUR EXTRAITE DE "OBJ". * CETTE "PLUS GRANDE VALEUR" EST LA PLUS * GRANDE EN VALEUR ABSOLUE, MAIS ELLE EST * RETOURNEE AVEC SON SIGNE. * AVEC 'MOT ' MOT-CLE INDIQUANT QUE L'ON REGARDE * UNIQUEMENT,DANS LA RECHERCHE DU MAXIMUM, * LES VALEURS ASSOCIEES AUX COMPOSANTES CITEES * DANS "COMPOS". * C'EST L'OPTION PAR DEFAUT. * SANS 'MOT ' MOT-CLE INDIQUANT QUE L'ON EXCLUT, DANS LA * RECHERCHE DU MAXIMUM, LES VALEURS ASSOCIEES * AUX COMPOSANTES CITEES DANS "COMPOS". * COMPOS 'LISTMOTS' LISTE DES NOMS DES COMPOSANTES COMPRISES * OU EXCLUES. * * SI TYPE_1 = 'CHPOINT', ALORS * . TYPE_2 = 'FLOTTANT', * . LES COMPOSANTES SONT UX,UY,UZ,RX,RY,RZ,LX,... * SI TYPE_1 = 'LISTENTI', ALORS * . TYPE_2 = 'ENTIER', * . ON PRENDS TOUJOURS TOUTES LES COMPOSANTES EN CONSIDERATION. * SI TYPE_1 = 'LISTREEL', ALORS * . TYPE_2 = 'FLOTTANT', * . ON PRENDS TOUJOURS TOUTES LES COMPOSANTES EN CONSIDERATION. * * LEXIQUE: (ORDRE ALPHABETIQUE) * -------- * * KGRAND ENTIER PLUS GRANDE VALEUR EXTRAITE (CAS DE VALEURS * ENTIERES). * IPLMOT ENTIER POINTEUR DE L'OBJET "COMPOS". * IPOINT ENTIER POINTEUR DE L'OBJET "OBJ". * IPOS ENTIER NUMERO D'ORDRE DU TYPE DE L'OBJET "OBJ" DANS LA * LISTE CONTENUE DANS "LISTYP". * LISTYP ENTIER CONTIENT LES NOMS DES DIFFERENTS TYPES D'OBJET * DONT ON PEUT RECHERCHER LA PLUS GRANDE VALEUR. * MOTCLE ENTIER CONTIENT LA CHAINE DE CARACTERES 'AVEC' OU * 'SANS'. * NBTYPE ENTIER NOMBRE DE NOMS DANS "LISTYP". * PGRAND REEL DP PLUS GRANDE VALEUR EXTRAITE (CAS DE VALEURS * REELLES). * * MODE DE FONCTIONNEMENT: * ----------------------- * * APPEL D'UN SOUS-PROGRAMME DISTINCT SELON LE TYPE DE L'OBJET "OBJ". * * SOUS-PROGRAMMES APPELES: * ------------------------ * * LIRE, LIRTYP, ECRIRE,MAXIN1, MAXIN2, MAXIN3,MAXICH, * MAXIN4,MAXIN6,MAXIN7 * * AUTEUR, DATE DE CREATION: * ------------------------- * * PASCAL MANIGOT 5 NOVEMBRE 1984 * * "MAXIMUM D'UN LISTENTI" AJOUTE LE 19 FEVRIER 1985 (P. MANIGOT) * "MAXIMUM D'UN LISTREEL" AJOUTE LE 16 AVRIL 1985 (P. MANIGOT) * * LANGAGE: * -------- * * FORTRAN77 + EXTENSION: CARACTERES MIS DANS DES ENTIERS * ************************************************************************ * IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) * -INC PPARAM -INC CCOPTIO * PARAMETER (NBTYPE = 5, NBMOT = 3, NBMO2 = NBMOT-1) CHARACTER*4 LISMO(NBMOT) CHARACTER*4 MOTCLE & 'EVOLUTIO' / DATA LISMO/'AVEC','SANS','ABS '/ LOGICAL ZABSO ************************************************************************ * LECTURES, INITIALISATION ET AIGUILLAGE ************************************************************************ * * -- LECTURE DU MOT-CLE -- * LABSO=0 IF (IERR.NE.0) RETURN IF (IPLAC.EQ.3) THEN LABSO=1 IF (IERR.NE.0) RETURN ENDIF ZABSO=LABSO.eq.1 * * PAR DEFAUT, LES COMPOSANTES NOMMEES SONT LES COMPOSANTES * PRISES EN COMPTE (ET NON PAS LES COMPOSANTES EXCLUES) IF (IPLAC.EQ. 0) THEN MOTCLE = 'AVEC' ICODE = 0 ELSE MOTCLE = LISMO(IPLAC) ICODE = 1 END IF * * -- LECTURE DE LA LISTE DES NOMS DES COMPOSANTES -- * (OBLIGATOIRE SI MOT CLE 'AVEC' OU 'SANS' EST PRECISE) IPLMOT = 0 IF (IERR.NE.0) RETURN * * -- LECTURE DE L'OBJET -- * IF (IRETOU.EQ.0) THEN RETURN ENDIF * -cas entier et flottant IF(MONTYP.EQ.'ENTIER') GOTO 1 IF(MONTYP.EQ.'FLOTTANT') GOTO 2 * -autres objets DO 5 IPOS=1,NBTYPE 5 CONTINUE c ERREUR 39 : On ne veut pas d'objet de type ... MOTERR(1:8)=MONTYP RETURN ************************************************************************ c -- MAXIMUM de n FLOTTANTS OU ENTIERS -- ************************************************************************ * ENTIERS 1 CONTINUE IF (IERR.NE.0) RETURN IF(KPLUS.eq.1) THEN IF(IRETOU.NE.0) THEN if (ZABSO) IVAL=ABS(IVAL) GOTO 11 ENDIF ELSEIF(KPLUS.eq.-1) THEN IF(IRETOU.NE.0) THEN if (ZABSO) IVAL=ABS(IVAL) GOTO 12 ENDIF ELSE RETURN ENDIF RETURN * FLOTTANTS 2 CONTINUE IF (IERR.NE.0) RETURN if (ZABSO) XMAX=ABS(XMAX) IF(KPLUS.eq.1) THEN IF(IRETOU.NE.0) THEN if (ZABSO) XVAL=ABS(XVAL) XMAX=MAX(XMAX,XVAL) GOTO 21 ENDIF ELSEIF(KPLUS.eq.-1) THEN IF(IRETOU.NE.0) THEN if (ZABSO) XVAL=ABS(XVAL) XMAX=MIN(XMAX,XVAL) GOTO 22 ENDIF ELSE RETURN ENDIF RETURN ************************************************************************ c on a trouve un objet compatible dans LISTYP : on le lit ************************************************************************ 6 CONTINUE IF(IERR .NE. 0) RETURN IF(IERR .NE. 0) RETURN ************************************************************************ c -- MAXIMUM de n OBJETS (de type LISTENTI, LISTREEL ou CHPOINT) -- ************************************************************************ c if( ipos.eq.2.or.ipos.eq.3) then if( ipos.le.3 ) then c si on lit un 2nd objet du meme type if( iretou.ne.0) then IF(IERR .NE. 0) RETURN c CHPOINT if( ipos.eq.1 ) c LISTENTI ou LISREEL if( ipos.eq.2.or.ipos.eq.3 ) return endif endif IF (IERR .NE. 0) RETURN * ************************************************************************ * -- RECHERCHE DU MAXIMUM d'1 OBJET -- ************************************************************************ * IF (IPOS .EQ. 1) THEN * * RECHERCHE DU MAXIMUM D'UN "CHPOINT": IPLACE = 0 IF (IERR .NE. 0) RETURN * ELSE IF (IPOS .EQ. 2) THEN * * RECHERCHE DU MAXIMUM D'UN 'LISTENTI': IF (IERR .NE. 0) RETURN * ELSE IF (IPOS .EQ. 3) THEN * * RECHERCHE DU MAXIMUM D'UN 'LISTREEL': IF (IERR .NE. 0) RETURN * ELSE IF (IPOS .EQ. 4) THEN * * RECHERCHE DU MAXIMUM D'UN "MCHAML": IPLACE = 0 IF (IERR .NE. 0) RETURN * ELSE IF (IPOS .EQ. 5) THEN * * RECHERCHE DU MAXIMUM D'UNE "EVOLUTIO": IPLACE = 0 &JGRAND) IF (IERR .NE. 0) RETURN if(kgrand.eq.0.and.jgrand.eq.0) then else endif END IF * RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales