Reconnaissance de caractères - Page 2

Précédent
  • 1
  • 2
  1. elnilam Messages postés 41 Statut Membre 1
     
    C'est eoncre moi,
    j'ai essayé de compiler le programme mais j'ai une erreur . Je pense qu'en enlevant le STOP, ce la règle le problème mais on perd le sens de ce qu'on veut faire.
    elnilam
    0
    1. elnilam Messages postés 41 Statut Membre 1
       
      Désolé pour le précédent post, en fait je me demande si ce n'est pas un probème de compilateur, parce que le mien est pointilleux. Je vais esayer.

      ]$ ifort *.f transco.f -Check -o transcod
      fortcom: Error: transco.f, line 127: Either a PAUSE or STOP statement has an invalid argument. [ENDIF]
      STOP END IF
      -------------------------^
      fortcom: Error: transco.f, line 128: An ENDDO statement occurred without a corresponding DO or DO WHILE statement.
      ENDDO
      ^
      fortcom: Error: transco.f, line 125: An unterminated block exists.
      IF (NB_POSTES_VALID > LONG_TABS) THEN
      ^
      fortcom: Error: transco.f, line 123: An unterminated block exists.
      DO WHILE ( TAB_GRP (NB_POSTES_VALID) (1:1) .NE. '£')
      ^
      compilation aborted for transco.f (code 1)
      fortcom: Error: transco.f, line 127: Either a PAUSE or STOP statement has an invalid argument. [ENDIF]
      STOP END IF
      -------------------------^
      fortcom: Error: transco.f, line 128: An ENDDO statement occurred without a corresponding DO or DO WHILE statement.
      ENDDO
      ^
      fortcom: Error: transco.f, line 125: An unterminated block exists.
      IF (NB_POSTES_VALID > LONG_TABS) THEN
      ^
      fortcom: Error: transco.f, line 123: An unterminated block exists.
      DO WHILE ( TAB_GRP (NB_POSTES_VALID) (1:1) .NE. '£')
      0
      1. cchristian Messages postés 928 Statut Membre 131 > elnilam Messages postés 41 Statut Membre
         
        Bonjour,

        Je ne serai pas là cet après-midi, je ne pourrai te répondre que ce soir,
        A ce soir,
        0
      2. elnilam Messages postés 41 Statut Membre 1 > cchristian Messages postés 928 Statut Membre
         
        IL n'y a pas de soucis je ne suis pas pressé et puis même si je l'étais je te presserai pas.
        elnilam
        0
  2. cchristian Messages postés 928 Statut Membre 131
     
    Me v'la r'venu .

    Pour les erreurs de compilation, tu as raison c'est bien le STOP, il suffit de les remplacer chacun (il y en a deux) par :
    GO TO 110
    0
  3. cchristian Messages postés 928 Statut Membre 131
     
    POUR CHAQUE FORMULE COMPTAGE DU NOMBRE DE GROUPE SITUE AVANT LE SYMBOLE ->

    Réf. Ton message du 06/06/2008 à 11h17
    ça doit être la solution avec TAB_FORM_INIT.
    Effectivement je voulais placer dans rect(i1) plusieurs caractères 'H2' ... ( i1 pour react() et i2 pour prod() )
    Donc en mettant TAB_FORM_INIT à la place de TAB_GRP ca devrait ere bon selon toi?


    De manière plus générale j'ai écrit deux petites extensions (en italique et en gras) à la partie existante. Les valeurs sont stockées la aussi en table AV_POSTES_FLECHE et AV2_POSTES_FLECHE.
    Pourquoi deux tables ?
    Il y en a une servant au comptage du nombre de groupe avant le compactage et une seconde servant au comptage du nombre de groupe effectué après le compactage (au choix ,logiquement il devrait à terme n'en rester qu'une seule) Qui peut le plus, peut le moins.... j'ai donc traiter les 2 cas
    (Il faut aussi faire remonter le symbole -> dans la 1ere partie de la table TAB_GRP et lui affecter une valeur quelconque (0 par exemple, de toutes manières il n'es pas transcodé) :

     TAB_FORM_INIT : Table des formules avant compactage:
     H2 + H2+ H4+ -> H2+ + e + e     nb.groupes avant ->  4
     H2 + e -> H2+ + e + e           nb.groupes avant ->  3
     H1 + a -> H2+ + a + a           nb.groupes avant ->  3
     H3 + b -> H4+ + b + b           nb.groupes avant ->  3
     H5 + c -> H6+ + c + c           nb.groupes avant ->  3
     H7 + d -> H8+ + d + d           nb.groupes avant ->  3
     H2 + abcde -> H2+ + e + x       nb.groupes avant ->  3
    
     TAB_FORM : Table des formules sans operateurs :
     H2 H2+ H4+ H2+ e e              nb.groupes avant ->   3
     H2 e H2+ e e                    nb.groupes avant ->   2
     H1 a H2+ a a                    nb.groupes avant ->   2
     H3 b H4+ b b                    nb.groupes avant ->   2
     H5 c H6+ c c                    nb.groupes avant ->   2
     H7 d H8+ d d                    nb.groupes avant ->   2
     H2 abcde H2+ e x                nb.groupes avant ->   2

    C      Boucle de lecture des enregistrements du fichier des formules.        
    
           INTEGER  AV_POSTES_FLECHE  (256)!nb. positions avant le signes ->.
           INTEGER  AV2_POSTES_FLECHE (256) idem  avant compactage .
           ...............................................
           ..............................................
     
           DATA     (AV_POSTES_FLECHE  (K), K = 1,256,1)  /256 * -1  /
    
           DATA     (AV2_POSTES_FLECHE (K), K = 1,256,1)  /256 * -1  /
    
           ...............................................
           ..............................................
     
           DO  WHILE          (IO_RC      ==   0)
                      
             IO_ORDRE                      = ' READ_IN'
             READ   (UNIT   = DATA_UT_IN,      FMT    = 500,
         S           IOSTAT = IO_RC ,          ERR    = 15)
         S	         C0_TEST
    
             IF     (IO_RC    .eq.    -1)                            THEN
               PRINT *,F_NAME_IN,     ': Fin normale de fichier RC : ',
         S                            IO_RC ,  ' SUR ORDRE :',   IO_ORDRE  
               PRINT *,F_NAME_IN,     ': Nb. d''enregistrements traités : ',
         S                            CPT_ENREG             
             ELSE
               CPT_ENREG                   =  CPT_ENREG  +  1
               TAB_FORM_INIT  (CPT_ENREG)  =  C0_TEST
               IS_I                        =  1
               ICPT_CAR                    =  0
               ICPT_GRP                    =  0
               ISAVE_CPT_CAR               =  0
               ISAVE_POS                   =  1
               IPOS_TRANS                  =  0
               
    C          Boucle d'exploration des caractères d'une même formule.             
               DO WHILE       (IS_I       <=  LEN      (C0_TEST) )
               
      	     C_XX                      =  C0_TEST  (IS_I:1)
    	     IF (C_XX    .eq. ' '   .AND. IS_I  <  LEN(C0_TEST))   THEN
    C              Extraction de l'enregistrement lu du (des) c. d'un groupe
                   IF (ICPT_CAR            >  0)                       THEN  	        
    	          C1_TEST (1:ICPT_CAR) = 
         S	                  C0_TEST     (ISAVE_POS:ISAVE_POS + ICPT_CAR)
    	          ISAVE_POS            =  IS_I       +   1  
                      ISAVE_CPT_CAR        =  ICPT_CAR 
                      ICPT_CAR             =  0 
    
                         IF (C1_TEST (1:2) == '->')                    THEN
    		       AV2_POSTES_FLECHE (CPT_ENREG) = ICPT_GRP
    		     END IF  
                      ICPT_GRP             =  ICPT_GRP   + 1 
                   END IF		   		   
    	     ELSE
                   ICPT_CAR                =  ICPT_CAR   +   1
    	       IF (C1_TEST    (1: 1) .ne. ' '   .OR.   IS_I == 1)  THEN
    C                 Recherche d'égalité entre TAB_GRP <=> groupe en cours.          
                      CALL CHERCH_GRP (C1_TEST,   TAB_GRP,         IS_KO_OK,
         S                             NB_POSTES, NB_POSTES_VALID, IPOS_GRP)
                      IF    (IS_KO_OK      ==  1 )                     THEN
    
                         IF (C1_TEST (1:2) == '->')                    THEN
    		       AV_POSTES_FLECHE (CPT_ENREG) = IND_GRP
    C		     END IF 
    		     ELSE 	             IND_GRP            =  IND_GRP    +   1   
                         TAB_FORM (CPT_ENREG) = 
         S                         TAB_FORM   (CPT_ENREG)  (1:IPOS_TRANS) // 
         S    	               C1_TEST    (1:ISAVE_CPT_CAR)
                         IPOS_TRANS         = IPOS_TRANS + ISAVE_CPT_CAR + 1
    C	             Correspondance groupe <=> valeur numérique
                         TAB_INT_VAL (IND_GRP) = TAB_VAL_GRP (IPOS_GRP) 		    
                         END IF
                      ELSE                     
                         IF     ( IS_KO_OK  == 0 )                     THEN
    C                      Positionnement d'un indicateur d'anomalie(s)                     
                           INDIC_ANOM       =  1 
                         END IF
                      END IF
    	          C1_TEST               =  ' '
    	       END IF
                 END IF 
                 IS_I                       =  IS_I      +   1 
    	       
               END DO             ! Fin de la Boucle d'exploration des c..


    Ces modifs intégrées il devient alors possible quelque soit l"endroit" dans le programme ou l'on souhaite intégrer une séquence du type react() prod() . d'exploiter les données contenues dans l'une ou l'autre des 2 tables.

    Essayons de faire un point :

    - Une ou plusieurs transcodifications sont à effectuer sur chacune des formules. Pour ce faire on dispose de 2 tables :
    TAB_GRP et TAB_VAL_GRP.
    La première recense tous les caractères binômes trinômes, symboles et opérateurs ....... utiles à la concrétisation d'une formule. De plus elle isole ceux de ces groupes de caractères qui doivent être transcodés (£) de ceux qui n'ont pas à l'être,( $).
    La seconde TAB_GRP a le même nombre de postes actifs que TAB_VAL_GRP : un poste actif est un poste dans la table TAB_GRP dont le contenu fait l'objet d'une transco (1er poste à celui précédent le poste occupé par le signe £.)
    La fonction remplie par ces 2 table est "générique" c'est-à-dire que le paramétrage est actif durant tout un traitement (au moins, davantage si les tables ne sont pas à nouveau paramétrées entre deux traitements) et s'applique à toutes les formules présentes dans le fichier en entrée du traitement. Ici il faudrait déterminer même de façon approximative les règles et la finalité de ces transcos.
    La transco actuellement porte sur :
    -Un compactage de chaque formule (élimination des groupes de c. non formalisés dans la 1ere partie de la table TAB_GRP)
    - Une traduction groupe de c. => valeur numérique associée de manière positionnelle dans la table TAB_VAL_GRP le tout donne un nombre constitué de n rang n = aux valeurs numériques concaténées de chacun des groupes d'une formule retenu pour la transcodification.

    - Le résultat de ces transcodifications ainsi que les formules avant transco, sont stockés durant le traitement dans différentes tables. La préservation des données en table permet de disposer en fin d'étape de transcodification de toutes les valeurs utiles au programme, ce qui apporte une souplesse et une latitude de réaction notamment lors de l"analyse et de l'élaboration d'extensions de l'existant (programme). Cette souplesse peut par exemple s'illustrer par le récent ajout des deux tables (voir ci-dessus). Mais attention il ne faut en user mais pas en abuser car au final le programme risque de devenir trop conséquent et faire tout et n'importe quoi (on appelle ça une usine à gaz). Il faut prévoir un découpage organique (unité de traitement/programme) de l'ensemble fonctionnel (le problème à résoudre). C'est à dire scinder ce problème en étapes (step). Je crois que l'on n'"y coupera pas"

    - Des fichiers (un par formule ? C'est ce que j'ai retenu jusqu'à présent) dont les noms sont élaborés avec le résultat d'une des phases de transco, doivent être créés. Il faudrait ici formaliser le contenu (la structure) type des enregistrements.

    Dis moi ce que tu en penses, j'ai dû certainement passé à côté de certains trucs,
    0
    1. elnilam
       
      Bonjour Cchristian,
      C'est moi qui ne peut pas êtreprésent je n'ai que très peu de connexion internet, et surtout je suis dans un colloque d'écoles en gros...je ne suisquasi pas là, je rentre la semaine prochaine, je vais imprimer ce que tu m'as envoyé puis je te répondrais ce week end
      elnilam
      0
  4. cchristian Messages postés 928 Statut Membre 131
     
    Bonsoir Elnilam,

    Pas de problème, dés la semaine prochaine je serai absent pour quelques temps (durée indéterminée), on garde le contact !
    0
    1. elnilam Messages postés 41 Statut Membre 1
       
      Bonjour Cchristian,
      Je suis de retour, avec une question bien sûr pour ne pas changer.
      J'y vais :

      ! ici on ouvre le fichier formul.txt

      c ########

      IO_ORDRE = 'OPEN_IN'
      OPEN (UNIT = DATA_UT_IN, IOSTAT = IO_RC,
      S FILE = F_NAME_IN, STATUS = 'OLD',
      S ACCESS = 'SEQUENTIAL', FORM = 'FORMATTED',
      S ERR = 15)

      IO_ORDRE = ' READ_IN'
      C BOUCLE DE LECTURE DES ENREGISTREMENTS DU FICHIER DES FORMULES.
      c et ici comme le commentaire on fait une boucle ligne par ligne sur les formules dans le fichier formul.txt
      c en ayant relu les précédents posts je te mets le fichier formul.txt pour revoir le concept £ et $.
      c Ma question, en fait, concerne les boucles sur

      c DO WHILE ( TAB_GRP (NB_POSTES_VALID) (1:1) .NE. '£')
      c et DO WHILE ( TAB_GRP (NB_POSTES) (1:1) .NE. '$')
      c ne faudrait-il pas les mettre juste après les étoiles **** au lieu des ######## tous deux en commentaires
      c et apres si je change les stop en GO TO 110 à chaque fois le programme s'arrête sur £.( juste 110 pour $ ??)
      DO WHILE (IO_RC == 0)
      READ (UNIT = DATA_UT_IN, FMT = 500,
      S IOSTAT = IO_RC , ERR = 15)
      S C0_TEST

      c ****

      J'aurai dû mettre que j'attaquais fort pour mon retour.
      merci
      elnilam
      0
      1. elnilam Messages postés 41 Statut Membre 1 > elnilam Messages postés 41 Statut Membre
         
        Encore moi,
        je suis arrivé à quelque chose, en modifiant la place des NB_POSTES et NB_POSTES_VALID après les ètoiles et en enlevant le go to 110 remplacé par go to 99 en fin de boucles do while .
        ca donne
        IO_ORDRE = 'OPEN_IN'
        OPEN (UNIT = DATA_UT_IN, IOSTAT = IO_RC,
        S FILE = F_NAME_IN, STATUS = 'OLD',
        S ACCESS = 'SEQUENTIAL', FORM = 'FORMATTED',
        S ERR = 15)

        IO_ORDRE = ' READ_IN'
        C BOUCLE DE LECTURE DES ENREGISTREMENTS DU FICHIER DES FORMULES.
        DO WHILE (IO_RC == 0)
        READ (UNIT = DATA_UT_IN, FMT = 500,
        S IOSTAT = IO_RC , ERR = 15)
        S C0_TEST

        C RECHERCHE LA POSITION DE LA BORNE £ DE FIN DES GROUPES à RETENIR.
        NB_POSTES_VALID = 1
        DO WHILE ( TAB_GRP (NB_POSTES_VALID) (1:1) .NE. '£')
        NB_POSTES_VALID = NB_POSTES_VALID + 1
        IF (NB_POSTES_VALID .EQ. LONG_TABS) THEN
        WRITE(*,*)'PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP'
        GO TO 99
        END IF
        ENDDO

        C RECHERCHE LA POSITION DE LA BORNE $ DE FIN DU TABLEAU.
        NB_POSTES = 1
        DO WHILE ( TAB_GRP (NB_POSTES) (1:1) .NE. '$')
        NB_POSTES = NB_POSTES + 1
        IF (NB_POSTES .EQ. LONG_TABS) THEN
        WRITE(*,*)'PAS DE BORNE DE FIN DE GROUPE ($) TABLE TAB_GRP'
        GO TO 99
        END IF
        ENDDO

        c PRINT 1000
        c PRINT 1010
        99 CONTINUE

        IF (IO_RC .EQ. -1) THEN
        WRITE(*,*)F_NAME_IN, ': FIN NORMALE DE FICHIER RC : ',
        S IO_RC , ' SUR ORDRE :', IO_ORDRE
        WRITE(*,*)F_NAME_IN, ': NB. D''ENREGISTREMENTS LUS : ',
        S CPT_ENREG
        ELSE
        .....................

        En espérant que c'est bon.
        elnilam
        0
      2. elnilam Messages postés 41 Statut Membre 1 > elnilam Messages postés 41 Statut Membre
         
        TOUJOURS MOI,
        j'ai fait un test en lançant le programme et je te mets le résultat, j'ai un problème de résultats comme tu vas le voir au niveau du compactage et dans l'identification des H, H2....
        Je te mets aussi une partie du code car je me demande si quelque chose manque?!
        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP

        H2 + E -> H + H + E £


        TAB_INT_VAL : 1 1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1

        TAB_FORM_INIT : H2 + E -> H + H + E £
        TAB_FORM 1ER NIVEAU (COMPACTAG): H
        TAB_VAL_NUM 2EM NIVEAU (NUMERIQUE): 101
        TAB_CHAR_NUM 3EM NIVEAU (ALPHANUM.): 101

        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP

        H2+ + E -> H+ + H + E £


        TAB_INT_VAL : 1 1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1

        TAB_FORM_INIT : H2+ + E -> H+ + H + E £
        TAB_FORM 1ER NIVEAU (COMPACTAG): H
        TAB_VAL_NUM 2EM NIVEAU (NUMERIQUE): 101
        TAB_CHAR_NUM 3EM NIVEAU (ALPHANUM.): 101

        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP

        H3+ + E -> H+ + H + H + E £


        TAB_INT_VAL : 1 1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1

        TAB_FORM_INIT : H3+ + E -> H+ + H + H +
        TAB_FORM 1ER NIVEAU (COMPACTAG): H
        TAB_VAL_NUM 2EM NIVEAU (NUMERIQUE): 101
        TAB_CHAR_NUM 3EM NIVEAU (ALPHANUM.): 101

        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP

        H2+ + H2 -> H3+ + H £


        TAB_INT_VAL : 1 1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1

        TAB_FORM_INIT : H2+ + H2 -> H3+ + H £
        TAB_FORM 1ER NIVEAU (COMPACTAG): H
        TAB_VAL_NUM 2EM NIVEAU (NUMERIQUE): 101
        TAB_CHAR_NUM 3EM NIVEAU (ALPHANUM.): 101

        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP

        H+ + H2 + H2 -> H3+ + H2 £


        TAB_INT_VAL : 1 1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1

        TAB_FORM_INIT : H+ + H2 + H2 -> H3+ + H2
        TAB_FORM 1ER NIVEAU (COMPACTAG): H
        TAB_VAL_NUM 2EM NIVEAU (NUMERIQUE): 101
        TAB_CHAR_NUM 3EM NIVEAU (ALPHANUM.): 101

        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP

        H2 + E -> H2+ + E + E £


        TAB_INT_VAL : 1 1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1

        TAB_FORM_INIT : H2 + E -> H2+ + E + E �
        TAB_FORM 1ER NIVEAU (COMPACTAG): H
        TAB_VAL_NUM 2EM NIVEAU (NUMERIQUE): 101
        TAB_CHAR_NUM 3EM NIVEAU (ALPHANUM.): 101

        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP

        H + E -> H+ + E + E £


        TAB_INT_VAL : 1 1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1

        TAB_FORM_INIT : H + E -> H+ + E + E �
        TAB_FORM 1ER NIVEAU (COMPACTAG): H
        TAB_VAL_NUM 2EM NIVEAU (NUMERIQUE): 101
        TAB_CHAR_NUM 3EM NIVEAU (ALPHANUM.): 101

        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP

        H2+ + E -> H + H £


        TAB_INT_VAL : 1 1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1

        TAB_FORM_INIT : H2+ + E -> H + H £
        TAB_FORM 1ER NIVEAU (COMPACTAG): H
        TAB_VAL_NUM 2EM NIVEAU (NUMERIQUE): 101
        TAB_CHAR_NUM 3EM NIVEAU (ALPHANUM.): 101

        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP

        H3+ + E -> H2 + H £ $


        TAB_INT_VAL : 1 1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1 -1 -1 -1
        -1 -1 -1

        TAB_FORM_INIT : H3+ + E -> H2 + H £ $
        TAB_FORM 1ER NIVEAU (COMPACTAG): H
        TAB_VAL_NUM 2EM NIVEAU (NUMERIQUE): 101
        TAB_CHAR_NUM 3EM NIVEAU (ALPHANUM.): 101

        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP
        F_FORMUL.txt : FIN NORMALE DE FICHIER RC : -1 SUR ORDRE :
        READ_IN
        F_FORMUL.txt : NB. D'ENREGISTREMENTS LUS : 9
        FORTRAN PAUSE
        PAUSE prompt>


        (le code continue mais j'ai mis une pause ici, pour alléger.


        CALL CHERCH_GRP (C1_TEST,TAB_GRP,IS_KO_OK,
        S NB_POSTES, NB_POSTES_VALID, IPOS_GRP)
        IF (IS_KO_OK == 1) THEN
        c ici on repère le numéro de réaction associé à une flèche
        IF (C1_TEST (1:2) == '->') THEN
        AV_POSTES_FLECHE (CPT_ENREG) = IND_GRP
        C END IF
        ELSE
        IND_GRP=IND_GRP+1

        c c'est ici où je me demande s'il ne manque pas quelque chose?
        c ou bien ce n'est pas çà, auquel cas désolé.

        TAB_FORM (CPT_ENREG) =
        S TAB_FORM (CPT_ENREG) (1:IPOS_TRANS) //
        S C1_TEST (1:ISAVE_CPT_CAR)
        IPOS_TRANS = IPOS_TRANS + ISAVE_CPT_CAR + 1
        C CORRESPONDANCE GROUPE <=> VALEUR NUMERIQUE
        TAB_INT_VAL (IND_GRP) = TAB_VAL_GRP (IPOS_GRP)
        ENDIF
        ELSE
        IF(IS_KO_OK == 0) THEN
        INDIC_ANOM = 1
        END IF
        END IF
        C1_TEST = ' '
        END IF
        C PRINT *, 'LE CARACTERE ', C_XX, ' SE TROUVE EN ',
        C S IS_I, ' EME POSITION. '
        END IF
        IS_I = IS_I + 1
        ENDDO ! FIN DE LA BOUCLE D'EXPLORATION DES C..


        elnilam
        0
      3. cchristian > elnilam Messages postés 41 Statut Membre
         
        Bonjour,

        Le GO TO 99 et le positionnement de l'étiquette 99 te permettent de poursuive MALGRE TOUT l'exécution du programme, alors que l'erreur détectée :
        PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP
        est d'une gravité tele que ce traitement doit être interrompu.
        Le symbole £ termine la liste des groupes, présents dans la première partie de la table TAB_GRP, pour lesquels une transcodification est souhaitée. A chaque groupe cité dans cette partie de la table TAB_GRP doit correspondre (même emplacement relatif) une valeur numérique (actuellement codée sur 2 c. numériques) dans la table TAB_VAL_GRP (ex: ci-dessous H1 = 01 ou toute autre valeur choisie par toi au moment du paramétrage, a = 02 ou toute autre valeur, ..........., ect) qui sert précisément à affecter une valeur numérique unique à un groupe qui restera valide pour tout le traitement en cours

        C      Tableaux de définition des codes et des équivalences numériques. 
               DATA (TAB_GRP           (K), K = 1,23,1)               /
             S                    'H1', 'a', 'H2+', 'H3', 'b', 'H4+',
             S                    'H5', 'c', 'H6+', 'H7', 'd', 'H8+',
             S                    'H2', 'e', 'abcde', 'x','H9+','->',
             S                              '£', 
             S                     '+', '-', ' ',
             S                              '$'                        /
        C      '£' Borne identifiant la fin des groupes à transcoder avec les valeurs de TAB_VAL_GRP.        
        C      '$' Borne identifiant la fin du tableau.        
        C      Les(groupes de)caractères compris entre le début du tableau et'£'
        C          génèrent une transcodification (voir TAB_VAL_GRP ci-dessous) 
        C      Les (groupes de) caractères compris entre '£' et '$' ne génèrent
        C          aucune transcodification. 
        
        C      Equivalences numériques(POSITIONNELLES avec TAB_GRP ex: H2 = 03):
        C      Taleaux de définition des équivalences numériques. 
               DATA (TAB_VAL_GRP       (K), K = 1,18,1)                /
             S                      01,  02,  03,   04,   05,  06,
             S                      07,  08,  09,   10,   11,  12,
             S                      13,  14,  15,   16,   17,   0             /



        Il faudrait profiter de cette exemple et que tu me donnes les valeurs numériques affectées à chaque groupe pour que je puisse illustrer davantage mon propos. Dans tes exemples :
        H2 + E -> H + H + E génère TAB_INT_VAL : 1 1 -1 -1 -1 Si je considère que cela correspond à une réalité H2 = 1 ainsi que E = 1; Pour obtenir ce résultat les tables TAB_GRP et TAB_VAL_GRP auraient du être renseignées avec au moins deux postes (le 3ème H = ?) de la manière suivante:

        C      Tableaux de définition des codes et des équivalences numériques. 
               DATA (TAB_GRP           (K), K = 1,9,1)             /
             S                    'H2',  'E', '..','->',
             S                              '£', 
             S                     '+', '-', ' ',
             S                              '$'                        /
               DATA (TAB_VAL_GRP       (K), K = 1,4,1)                /
             S                      01,  01,  ..,  00         
         /

        Et H2 + E -> H + H + E ne doit pas être suivi de £ dans le fichier.
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. elnilam Messages postés 41 Statut Membre 1
     
    ENCORE moi,
    j'ai mis des posts précédemment au cas où, j'ia une autre question dans le prograame quelle est la différence entre icpt_car et icpt_grp?
    elnilam, à la traine
    0
  7. cchristian Messages postés 928 Statut Membre 131
     
    Bonjour,

    Je viens de prendre connaissance de tes messages, je rentre d'une hospitalisation (intervention chirurgicale) et je n'ai pas encore les idées très claires, ça va revenir dans les jours qui viennent.
    D'ores et déjà, ICPT_CAR (exploitée sous le nom de variable ISAVE_CPT_CAR) contient le nombre de caractères d'un groupe (binôme, tri.........). La variable ICPT_GRP contient le nombre de groupes (ou , si tu préfères, son numéro relatif compté de 1 à n et de la gauche vers la droite) d'une même formule.
    0
  8. cchristian Messages postés 928 Statut Membre 131
     
    Bonjour,

    Le GO TO 99 et le positionnement de l'étiquette 99 te permettent de poursuivre MALGRE TOUT l'exécution du programme, alors que l'erreur détectée :
    PAS DE BORNE DE FIN DE GROUPE (£) TABLE TAB_GRP
    est d'une gravité telle que ce traitement doit être interrompu.
    Le symbole £ termine la liste des groupes, présents dans la première partie de la table TAB_GRP, partie contenant les groupes à transcoder. A chaque groupe cité dans cette partie de la table TAB_GRP doit correspondre (même emplacement relatif) une valeur numérique (actuellement codée sur 2 c. numériques) dans la table TAB_VAL_GRP (ex: ci-dessous H1 = 01 ou toute autre valeur choisie par toi au moment du paramétrage, a = 02 ou toute autre valeur, ..........., ect) qui sert précisément à affecter une valeur numérique unique à un groupe, cette valeur restera valide pour tout le traitement en cours

    C      Tableaux de définition des codes et des équivalences numériques. 
           DATA (TAB_GRP           (K), K = 1,23,1)               /
         S                    'H1', 'a', 'H2+', 'H3', 'b', 'H4+',
         S                    'H5', 'c', 'H6+', 'H7', 'd', 'H8+',
         S                    'H2', 'e', 'abcde', 'x','H9+','->',
         S                              '£', 
         S                     '+', '-', ' ',
         S                              '$'                        /
    C      '£' Borne identifiant la fin des groupes à transcoder avec les valeurs de TAB_VAL_GRP.        
    C      '$' Borne identifiant la fin du tableau.        
    C      Les(groupes de)caractères compris entre le début du tableau et'£'
    C          génèrent une transcodification (voir TAB_VAL_GRP ci-dessous) 
    C      Les (groupes de) caractères compris entre '£' et '$' ne génèrent
    C          aucune transcodification. 
    
    C      Equivalences numériques(POSITIONNELLES avec TAB_GRP ex: H2 = 03):
    C      Taleaux de définition des équivalences numériques. 
           DATA (TAB_VAL_GRP       (K), K = 1,18,1)                /
         S                      01,  02,  03,   04,   05,  06,
         S                      07,  08,  09,   10,   11,  12,
         S                      13,  14,  15,   16,   17,   0             /


    Il faudrait profiter de cette exemple et que tu me donnes les valeurs numériques affectées à chaque groupe pour que je puisse illustrer davantage mon propos. Dans tes exemples :
    H2 + E -> H + H + E génère TAB_INT_VAL : 1 1 -1 -1 -1 Si je considère que cela correspond à une réalité H2 = 1 ainsi que E = 1; Pour obtenir ce résultat les tables TAB_GRP et TAB_VAL_GRP auraient du être renseignées avec au moins deux postes (le 3ème H = ?) de la manière suivante:

    C      Tableaux de définition des codes et des équivalences numériques. 
           DATA (TAB_GRP           (K), K = 1,9,1)             /
         S                    'H2',  'E', '..','->',
         S                              '£', 
         S                     '+', '-', ' ',
         S                              '$'                        /
           DATA (TAB_VAL_GRP       (K), K = 1,4,1)                /
         S                      01,  01,  ..,  00         
     /

    Et H2 + E -> H + H + E ne doit pas être suivi de £ dans le fichier.
    0
  9. elnilam Messages postés 41 Statut Membre 1
     
    Bonjour Cchristian,
    J'ai changé de technique d'approche pour mon programme, je n'utilise plus de transcodification en numérique pour mon fihier .txt, maintenant c'est un peu barbare mais je prends comme nom de fichier la ligne de ma réaction-formule et je rajoute un .txt
    Je t'envoies ma dernière version mais elle n'est pas encore finie. Il y a des passages non alignés car je n'ai pas terminé d faire ce que je veux, d'ailleurs si tu voudras m'aider sur ce passage..
    merci pour tout, et bon retour

    C DATE: DEBUT LE 29/05/2008
    C REFERENCES :

    PROGRAM FORTRANS

    C CHARACTER TYPE (P.20 IBM)
    CHARACTER C0_TEST*80 /' '/
    CHARACTER C1_TEST*80 /' '/
    CHARACTER C_XX*16
    CHARACTER C1_XX*16
    CHARACTER C2_XX*16
    CHARACTER(*) IO_ORDRE*16
    CHARACTER F_NAME_IN*16,NOM_PGM*8
    CHARACTER FMT_VAL*32

    C CHARACTER*8 HEURE
    C NUMERIC TYPE (P.15 IBM)
    INTEGER NB_POSTES /1/, NB_POSTES_VALID /1/
    INTEGER DATA_UT_I
    INTEGER IO_RC /0/
    INTEGER CPT_ENREG /0/
    INTEGER CPT_ENREG_MAX /0/
    INTEGER IND_GRP /0/
    INTEGER*8 INT_CALCUL /0/
    INTEGER IND_INTERM /0/
    INTEGER IS_KO_OK /0/
    INTEGER INDIC_ANOM /0/
    INTEGER LONG_TABS
    INTEGER KMAX /6/

    DIMENSION ICPT_FLECHE(2)
    INTEGER ICPT_FLECHE
    DIMENSION ICPT_FLECHE_MAX(10,2)
    INTEGER ICPT_FLECHE_MAX

    DIMENSION coef_rp(10,6)
    INTEGER coef_rp

    C Boucle de lecture des enregistrements du fichier des formules.

    INTEGER AV_POSTES_FLECHE (256)!nb. positions avant le signes ->.
    INTEGER AV2_POSTES_FLECHE (256) !idem avant compactage
    PARAMETER (
    S DATA_UT_IN = 10,
    S F_NAME_IN = 'F_FORMUL.txt',
    S FMT_VAL = '(I10)',
    S LONG_TABS = 256,
    S NOM_PGM = 'FORTRANS')

    C DECLARATION DES TABLEAUX (P.21 IBM)
    DIMENSION CCCP (10,2,4)
    CHARACTER CCCP*8

    DIMENSION TAB_GRP (256) !TABLEAU DES GROUPES DE
    CHARACTER TAB_GRP*32 ! CARACTERES ET SIGNES VALIDES.
    DIMENSION TAB_VAL_GRP (256) !TABLEAU DES VALEURS AFFECTEES AUX
    INTEGER TAB_VAL_GRP ! GROUPES DE CARACTERES ET SIGNES

    C TABLEAU DE STOCKAGE RESULTATS INTERMEDIAIRES:TAB_GRP<=>TAB_VAL_GRP
    INTEGER TAB_INT_VAL (32) !

    C TABLEAUX DE STOCKAGE.
    DIMENSION TAB_FORM_INIT (256) !TABLEAU DES FORMULES D'ORIGINE.
    CHARACTER TAB_FORM_INIT*80 !(IDEM FICHIER)
    C TABLEAUX DE STOCKAGE DES RESULTATS DES TRANSCODIFICATIONS.
    DIMENSION TAB_FORM (256)
    CHARACTER TAB_FORM*80 !TABLEAU DES FORMULES SANS OPERATEURS.
    INTEGER*8 TAB_VAL_NUM (256) !TABLEAU DES VALEURS<=>FORMULES
    DIMENSION TAB_CHAR_NUM (256) !TABLEAU DES VALEURS DES FORMULES
    CHARACTER TAB_CHAR_NUM*80 !EN MODE CARACTERES.

    common/data/kmax

    C DATA (P.44 IBM)
    C --------------------------------------------------------------------
    C LES 2 TABLEAUX SUIVANTS SONT A RENSEIGNER OU A VERIFIER AVANT
    C TOUT NOUVEAU TRAITEMENT.

    C TALEAUX DE DEFINITION DES CODES ET DES EQUIVALENCES NUMERIQUES.
    DATA (TAB_GRP(K),K=1,12,1)/
    C TRES ATTENTION (KMAX+6)=12 A MOFIFER MANUELLEMENT
    C LES(GROUPES DE)CARACTERES SUIVANTS GENERENT UNE TRANSCODIFICATION
    S 'H','H2','H+','H2+','H3+','E',
    S '?','->','+','-',' ','%' /
    c S 'H5', 'C', 'H6+', 'H7', 'D', 'H8+',
    c S 'H2', 'E', 'ABCDE', 'X',
    C '?' BORNE IDENTIFIANT LA FIN DES GROUPES DE C. Ã TRANSCODER.
    c S '?',
    C LES (GROUPES DE) CARACTERES SUIVANTS NE GENERENT AUCUNE TRANSCO.
    c S '->', '+', '-', ' ',
    c S '%' /
    C '%' BORNE IDENTIFIANT LA FIN DU TABLEAU.

    C EQUIVALENCES NUMERIQUES (POSITIONNELLES AVEC TAB_GRP EX: H2+ = 03):
    C TALEAUX DE DEFINITION DES EQUIVALENCES NUMERIQUES.
    C --------------------- ATTENTION ----------!2 CHIFFRES AU MAXIMUM
    DATA (TAB_VAL_GRP(K),K=1,6,1) / 01,02,03,04,05,06 /
    c S 07, 08, 09, 10, 11, 12,
    c S 13, 14, 15, 16 /

    C -----------------------------------------------------------
    C TALEAUX DE STOCKAGE DES RESULTATS DE TRANSCODIFICATION
    C -----------------------------------------------------------

    DATA (TAB_INT_VAL (K), K = 1,32,1) /32 * -1 /

    DATA (TAB_FORM_INIT (K), K = 1,256,1) /256 * ' '/

    DATA (TAB_FORM (K), K = 1,256,1) /256 * ' '/

    DATA (TAB_VAL_NUM (K), K = 1,256,1) /256 * 0 /

    DATA (TAB_CHAR_NUM (K), K = 1,256,1) /256 * ' '/

    C ------------------------------------------------------------
    DATA (AV_POSTES_FLECHE (K), K = 1,256,1) /256 * -1 /

    DATA (AV2_POSTES_FLECHE (K), K = 1,256,1) /256 * -1 /

    do i1=1,10
    do i2=1,2
    do i3=1,4
    CCCP=' '
    enddo
    enddo
    enddo

    IO_ORDRE = 'OPEN_IN'
    OPEN (UNIT = DATA_UT_IN, IOSTAT = IO_RC,
    S FILE = F_NAME_IN, STATUS = 'OLD',
    S ACCESS = 'SEQUENTIAL', FORM = 'FORMATTED',
    S ERR = 15)

    IO_ORDRE = ' READ_IN'
    C BOUCLE DE LECTURE DES ENREGISTREMENTS DU FICHIER DES FORMULES.
    DO WHILE (IO_RC == 0)
    READ(UNIT=DATA_UT_IN,FMT=500,IOSTAT=IO_RC,ERR=15) C0_TEST
    C RECHERCHE LA POSITION DE LA FLECHE -> SEPARANT LES REACTANTS DES PRODUITS
    IPOS_FLECHE = 1
    DO WHILE(C0_TEST(IPOS_FLECHE:IPOS_FLECHE+1).NE.'->')
    IF ((IPOS_FLECHE+1) .EQ. LEN(C0_TEST)) THEN
    WRITE(*,*)'PAS DE BORNE DE FIN DE GROUPE (%)'
    GO TO 999
    ENDIF
    IPOS_FLECHE = IPOS_FLECHE + 1
    ENDDO

    C RECHERCHE LA POSITION DE LA BORNE ? DE FIN DES GROUPES Ã RETENIR.
    999 NB_POSTES_VALID = 1
    DO WHILE(C0_TEST(NB_POSTES_VALID:NB_POSTES_VALID).NE.'?')
    IF (NB_POSTES_VALID .EQ. LEN(C0_TEST)) THEN
    WRITE(*,*)'PAS DE BORNE DE FIN DE GROUPE (?)'
    GO TO 998
    ENDIF
    NB_POSTES_VALID = NB_POSTES_VALID + 1
    ENDDO

    C RECHERCHE LA POSITION DE LA BORNE % DE FIN DU TABLEAU.
    998 NB_POSTES = 1
    DO WHILE(C0_TEST(NB_POSTES:NB_POSTES).NE.'%')
    IF (NB_POSTES .EQ. LEN(C0_TEST)) THEN
    WRITE(*,*)'ENCORE DES REACTIONS (%)'
    GO TO 997
    ENDIF
    NB_POSTES = NB_POSTES + 1
    ENDDO

    c PRINT 1000
    c PRINT 1010
    997 IF (NB_POSTES .LT. LEN(C0_TEST)) THEN
    IO_RC=-1
    ENDIF

    IF (IO_RC .EQ. -1) THEN
    WRITE(*,*)F_NAME_IN,': FIN NORMALE DE FICHIER RC : ',
    S IO_RC, ' SUR ORDRE :', IO_ORDRE
    WRITE(*,*)F_NAME_IN,': NB. D''ENREGISTREMENTS LUS : ',
    S CPT_ENREG
    ELSE
    CPT_ENREG = CPT_ENREG + 1
    CPT_ENREG_MAX=CPT_ENREG
    TAB_FORM_INIT (CPT_ENREG) = C0_TEST
    IS_I = 1
    ICPT_CAR = 0
    ICPT_GRP = 0
    ISAVE_CPT_CAR = 0
    ISAVE_POS = 1
    IPOS_TRANS = 0

    DO J=1,2
    ICPT_FLECHE(J)=0
    ICPT_FLECHE_MAX(CPT_ENREG,J)=0
    ENDDO

    DO J=1,6
    coef_rp(CPT_ENREG,J)=0
    ENDDO

    C BOUCLE D'EXPLORATION DES CARACTERES D'UNE MEME FORMULE.

    DO WHILE (IS_I .LT. LEN(C0_TEST))
    C_XX = C0_TEST(IS_I:IS_I)
    IF (C_XX .EQ. ' ') THEN

    C EXTRACTION DE L'ENREGISTREMENT LU LE(S) C. D'UN GROUPE
    IF (ICPT_CAR > 0) THEN
    ICPT_CAR = 0
    ICPT_GRP = ICPT_GRP + 1
    ENDIF
    GO TO 95

    ELSE

    DO WHILE(C0_TEST(IS_I+ICPT_CAR:IS_I+ICPT_CAR).NE.' ')
    ICPT_CAR = ICPT_CAR + 1
    ENDDO
    C1_XX=C0_TEST(IS_I:IS_I+ICPT_CAR)

    CALL CHERCH_GRP(C1_XX,TAB_GRP,IS_KO_OK,ICPT_CAR,IPOS_GRP)

    IF (IS_KO_OK.EQ.1) THEN
    c ici on repère le numéro de réaction associé à une flèche
    IF(C1_XX=='->')THEN
    c AV_POSTES_FLECHE (CPT_ENREG) = IND_GRP
    c AV2_POSTES_FLECHE (CPT_ENREG) = ICPT_GRP
    C2_XX=' '
    IND_GRP=IND_GRP+1
    TAB_FORM (CPT_ENREG) =
    S TAB_FORM (CPT_ENREG) (1:IPOS_TRANS) //
    S C2_XX
    IPOS_TRANS = IPOS_TRANS + ISAVE_CPT_CAR + 1
    C CORRESPONDANCE GROUPE <=> VALEUR NUMERIQUE
    TAB_INT_VAL (IND_GRP) = TAB_VAL_GRP (IPOS_GRP)
    ELSE
    IF(C1_XX=='?'.OR.C1_XX=='+'.OR.C1_XX=='%') THEN
    C1_XX=' '
    GO TO 94
    ENDIF
    c react ou prod selon qu'on est avant ou après ipos_fleche
    if(IS_I.LT.IPOS_FLECHE) I_R_P=1
    if(IS_I.GT.IPOS_FLECHE) I_R_P=2
    c ICPT_FLECHE: nombre d'élément
    ICPT_FLECHE(I_R_P)=ICPT_FLECHE(I_R_P)+1
    ICPT_FLECHE_MAX(CPT_ENREG,I_R_P)=ICPT_FLECHE(I_R_P)
    CCCP(CPT_ENREG,I_R_P,ICPT_FLECHE(I_R_P))=C1_XX
    write(*,*)CPT_ENREG,' ',I_R_P,' ',ICPT_FLECHE(I_R_P),'zz'
    write(*,*)CCCP(CPT_ENREG,I_R_P,ICPT_FLECHE(I_R_P))
    pause
    c peut etre pas de boucle sur i_r_p
    c do I_R_P=1,2
    do I=1,ICPT_FLECHE_MAX(CPT_ENREG,I_R_P)
    do II=1,6
    if (I_R_P==1) then
    if(CCCP(CPT_ENREG,I_R_P,ICPT_FLECHE(I_R_P))==
    S TAB_GRP(II))coef_rp(CPT_ENREG,II)=coef_rp(CPT_ENREG,II)-1
    endif
    if (I_R_P==2) then
    if(CCCP(CPT_ENREG,I_R_P,ICPT_FLECHE(I_R_P))==
    S TAB_GRP(II))coef_rp(CPT_ENREG,II)=coef_rp(CPT_ENREG,II)+1
    endif
    enddo
    enddo
    c enddo
    94 IND_GRP=IND_GRP+1
    TAB_FORM (CPT_ENREG) =
    S TAB_FORM (CPT_ENREG) (1:IPOS_TRANS) //
    S C1_XX
    c write(*,*)' prems ',ipos_trans,' deuz ',ipos_grp,icpt_grp
    IPOS_TRANS = IPOS_TRANS + ISAVE_CPT_CAR + 1
    C CORRESPONDANCE GROUPE <=> VALEUR NUMERIQUE
    TAB_INT_VAL (IND_GRP) = TAB_VAL_GRP (IPOS_GRP)
    ENDIF

    ELSE
    IF(IS_KO_OK == 0) THEN
    INDIC_ANOM = 1
    c stop
    ENDIF
    C1_TEST = ' '
    ENDIF
    PRINT *,'LE CARACTERE ',C1_XX,' SE TROUVE EN ',
    S IS_I, ' EME POSITION. '

    ENDIF

    95 IF(ICPT_CAR.EQ.0) THEN
    IS_I = IS_I + 1
    ELSE
    IS_I = IS_I + ICPT_CAR
    ENDIF
    IF(IS_I.GE.NB_POSTES_VALID) IS_I=LEN(C0_TEST)

    ENDDO ! FIN DE LA BOUCLE D'EXPLORATION DES C..

    WRITE(*,*)' '
    WRITE(*,*)C0_TEST(1:NB_POSTES_VALID)

    IF (INDIC_ANOM == 0 ) THEN
    WRITE(*,*) ' '
    WRITE(*,*)'TAB_INT_VAL : ',TAB_INT_VAL
    WRITE(*,*) ' '
    ENDIF

    IND_GRP = 0

    ENDIF ! FIN NORMALE DE FICHIER

    ENDDO ! FIN DE LA BOUCLE DE LECTURE DU FICHIER

    IO_ORDRE = 'CLOSE_IN'
    CLOSE(UNIT=DATA_UT_IN,IOSTAT=IO_RC,ERR=15,STATUS='KEEP')
    500 FORMAT (A80 )
    1000 FORMAT (
    S '0 1 2 3 4 5 ',
    S ' 6 7 8')
    1010 FORMAT (
    S '1---5----0----5----0----5----0----5----0----5----0----5',
    S '----0----5----0----5----0', / )

    GO TO 110
    15 WRITE(*,*)' '
    WRITE(*,*)'ANOMALIE E/S FS:',IO_RC,'SUR ORDRE:',IO_ORDRE
    110 CONTINUE

    END

    C-----------------------------------------------------------------------
    C S.P. DE RECHERCHE D'EGALITE ENTRE TAB_GRP <=> GROUPE EN COURS.

    SUBROUTINE CHERCH_GRP(GRP,TAB_GRP,IS_KO_OK,ICPT_CAR
    S ,IS_POS_GRP)

    CHARACTER GRP*ICPT_CAR
    INTEGER IS_POS_GRP
    DIMENSION TAB_GRP (256) !TABLEAU DES GROUPES DE
    CHARACTER TAB_GRP*32 ! CARACTERES ET SIGNES VALIDES.
    DIMENSION TAB_VAL_GRP (256) !TABLEAU DES VALEURS AFFECTEES AUX
    INTEGER TAB_VAL_GRP ! GROUPES DE CARACTERES
    common/data/kmax

    IS_KO_OK = 2
    IS_POS_GRP = 1
    DO WHILE(TAB_GRP(IS_POS_GRP).NE.GRP)
    IS_POS_GRP = IS_POS_GRP + 1
    ENDDO
    IF(IS_POS_GRP.LE.(KMAX+6)) THEN
    IS_KO_OK = 1
    ELSE
    WRITE(*,*) ' NON TROUVE C1_TEST: ', GRP (1:50)
    IS_KO_OK = 0
    ENDIF

    RETURN
    END

    C-----------------------------------------------------------------------
    C fonction calculant le taux de la cinétique d'une réaction
    c par ex. d[H]/dt= f°(H,VV)=.....
    c I correspond au n° d'un élément identifié par tab_grp(I)
    c VV est le tableau de variables des éléments E,H,H2, ....
    DOUBLE PRECISION FUNCTION CINETIC(I,VV)
    IMPLICIT DOUBLE PRECISION (A-H,P-Z)

    pre_res_cin(i)=0.0d0
    res_cin(i)=0.0d0
    do cpt_enreg=1,cpt_enreg_max
    do I_R_P=1,2
    do ICPT_FLECHE(I_R_P)=1,ICPT_FLECHE_MAX(CPT_ENREG,I_R_P)
    if(cccp(cpt_enreg,i_r_p,icpt_fleche(i_r_p))==tab_grp(1)) then
    go to 'cas électron', 'pas encore défini'
    else
    go to 'autre cas'

    I_beta=1
    do ICPT_FLECHE(1)=1,ICPT_FLECHE_MAX(CPT_ENREG,1)
    do II=1,6
    if(cccp(cpt_enreg,1,icpt_fleche(1))==tab_grp(II)) then
    VV_beta(I_beta)=VV(II)
    I_beta=I_beta+1
    I_beta_max=I_beta
    endif
    enddo
    enddo
    pd_cin(cpt_enreg)=1.0d0
    do J=1,I_beta_max
    pd_cin(cpt_enreg)=pd_cin(cpt_enreg)*VV_beta(I_beta)
    enddo

    endif
    enddo
    enddo
    pre_res_cin(i)=pre_res_cin(i)+coef_rp(CPT_ENREG,I)*pd_cin(cpt_enreg)
    res_cin(i)=pre_res_cin(i)
    enddo

    OPEN (UNIT=cpt_enreg,FILE='')
    READ(cpt_enreg,*)CONSTANTE_DE_REACTION
    CLOSE(cpt_enreg)
    cinet=CONSTANTE_DE_REACTION*res_cin(i)

    RETURN
    END
    0
  10. cchristian Messages postés 928 Statut Membre 131
     
    Bonjour,

    Je t'envoies ma dernière version mais elle n'est pas encore finie. Il y a des passages non alignés car je n'ai pas terminé d faire ce que je veux, d'ailleurs si tu voudras m'aider sur ce passage..............

    Je préfère pour le moment te laisser avancer et finaliser les parties programmation et premiers tests car malheureusement je ne dispose plus suffisamment de temps libre,

    Bon courage,
    0
    1. elnilam Messages postés 41 Statut Membre 1
       
      Bonjour Cchristian,
      ca y est j'ai fini ou presque en fait j'ai fait tous les sous-programmes et je maintenant je dois les mettre ensemble avec les noms de variables qu'il faut, ce n'est pas le plus drôle à faire mais je suis content. Si après mise en boîte ça ne mlarche pas ..pour autre chose qu'un nom de variables je te demanderais peut être de l'aide mais merci pour tout.
      elnilam
      0
      1. cchristian Messages postés 928 Statut Membre 131 > elnilam Messages postés 41 Statut Membre
         
        Bonsoir Elnilam,

        OK, d'accord, pas d'problème, ça roule comme ça !
        0
  11. elnilam Messages postés 41 Statut Membre 1
     
    Bonjour Cchristian,
    ça faisait longtemps je sais, mais j'arrive avec un problème mais pas petit en fait.
    J'ai un problème de link sur un programme qui d'habitude marche.
    j'ai repris d'anciennes versions du programme, qui de souvenirs fonctionnaient, et j'ai toujours la même erreur de link!!
    qu'est ce ça pourrait être selon toi?
    merci
    elnilam
    0
    1. cchristian Messages postés 928 Statut Membre 131
       
      Bonjour Elnilam,

      Envoie le message (link) ça va peut-être me mettre sur la voie.
      0
  12. elnilam Messages postés 41 Statut Membre 1
     
    Bonjour,
    c'était le plus gros oubli du monde, je n'avais pas tout compilé, une erreur dans la ligne de commande et une liste de programme non compilée..et voilà le résultat..je passe pour un abruti. mini-problème résolu en fait.
    merci
    elnilam
    0
Précédent
  • 1
  • 2