Reconnaissance de caractères

Fermé
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 - 26 mai 2008 à 15:31
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 - 8 août 2008 à 15:56
Bonjour,
je suis en fortran 95 et je cherche une méthode pour écrire dans un fichier .txt une série de formule type h + f -> e + d.
Ensuite, cette formule serait lue (h,f,e,d) en tant que caractères pour être utiliser dans un autre fichier et c'est là où je bloque parce que je ne sais pas du tout comment faire. Si vous aviez un cours ou un exemple cela m'aiderait beaucoup.
D'avance merci.
A voir également:

31 réponses

elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1
6 juin 2008 à 11:35
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
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1
6 juin 2008 à 11:59
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131 > elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010
6 juin 2008 à 12:31
Bonjour,

Je ne serai pas là cet après-midi, je ne pourrai te répondre que ce soir,
A ce soir,
0
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1 > cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012
6 juin 2008 à 16:22
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 juin 2008 à 18:32
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 juin 2008 à 21:04
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
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
10 juin 2008 à 23:20
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
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1
18 juin 2008 à 12:18
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
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1 > elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010
18 juin 2008 à 12:45
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
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1 > elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010
18 juin 2008 à 13:12
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
cchristian > elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010
24 juin 2008 à 22:27
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1
18 juin 2008 à 17:47
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
24 juin 2008 à 02:35
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
24 juin 2008 à 22:34
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
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1
27 juin 2008 à 14:29
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
29 juin 2008 à 13:36
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
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1
17 juil. 2008 à 17:23
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131 > elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010
17 juil. 2008 à 19:34
Bonsoir Elnilam,

OK, d'accord, pas d'problème, ça roule comme ça !
0
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1
6 août 2008 à 12:20
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 août 2008 à 18:20
Bonjour Elnilam,

Envoie le message (link) ça va peut-être me mettre sur la voie.
0
elnilam Messages postés 38 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 3 mars 2010 1
8 août 2008 à 15:56
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