IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Conversion d'un code FORTRAN en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Par défaut Conversion d'un code FORTRAN en C
    Bonjour,
    D'abord je suis pas informaticien mais j'utilise les outils informatique dans mon boulot, je travaille normalement sur fortran mais là je dois faire un petit programme sur C et je connais rien dans le monde de C, est ce que ya quelqun qui peut me convertir mon programme fortran en C :

    Code fortran : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    OPEN (UNIT=50,FILE='sourceO.txt') 
        		DO 1001 S=1,280
        		READ (50,*)LTEST, ATEST
    	IF ((L.NE.LTEST).AND.(NUMSPC.EQ.3)) GOTO 1001
    	ATERM = 0.0
    	BTERM = 0.0
    	GOTO 1002
    1001	CONTINUE
    1002	CLOSE(50)

    merci

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Ben déjà si tu nous disait ce qu'il fait ce programme ? On sent bien qu'il y a un truc de lecture de fichier mais c'est pas parce qu'on est bons en C qu'on est forcément bons en Fortran !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Code FORTRAN : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    OPEN (UNIT=50,FILE='sourceO.txt') 
        		DO 1001 S=1,280
        		READ (50,*)LTEST, ATEST
    	IF ((L.NE.LTEST).AND.(NUMSPC.EQ.3)) GOTO 1001
    	ATERM = 0.0
    	BTERM = 0.0
    	GOTO 1002
    1001	CONTINUE
    1002	CLOSE(50)


    Deviendrait (si transformée en procédure) :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #include <stdlib.h>
    #include <stdio.h>
     
     
    void MaFonction ( int L, int NUMSPC, double *ATERM, double *BTERM )
    {
    FILE *Fichier= NULL ;
    char Ligne[1000] ;
    int i ;
    int LTEST ;
    float ATEST ;
     
    Fichier = fopen ( "sourceO.txt", "r" );
    if ( Fichier != NULL )
      {
           while ( fgets ( Ligne, 999, Fichier) != NULL )
             {
                if ( sscanf ( Ligne,  "%d %g", &LTEST, &ATEST ) == 2 )
                  {
                      if ( ! ((LTEST != L) && (NUMSPC == 3)) )
                        {
                            *ATERM = 0.0 ;
                            *BTERM = 0.0 ;
                            break ;
                        }
                  }
             }
     
           fclose ( Fichier );  
      }

    Fonction qui doit être appelée comme :


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    MaFonction ( L, NUMSPC, &ATERM, &BTERM );


    Par contre :

    a) il est possible d'optimiser le if...
    b) il serait souhaitable de passer le nom du fichier en paramètre...


    du style :


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    MaFonction ( "source0.txt", L, NUMSPC, &ATERM, &BTERM );

    Avec une définition comme :


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void MaFonction ( char *Filename, int L, int NUMSPC, double *ATERM, double *BTERM )
    {
    FILE *Fichier= NULL ;
    char Ligne[1000] ;
    int i ;
    int LTEST ;
    float ATEST ;
     
    Fichier = fopen ( Filename, "r" );
    if ( Fichier != NULL )
    ..

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Par défaut à Sve@r et autres
    Pour répondre à ta question:
    ce que je voudrais faire dans ce programme c'est d'ouvrir un tableau qui s'appelle "sourceO.txt", ce tableau il contient deux colonnes que j'ai nommé (LTEST: première colonne et ATEST: deuxièmement colonne) et chaque valeur de la deuxieme colonne correspond au maille de la premiere colonne et le but c'est d'injecter chaque valeur de la deuxieme colonne dans le numero de maille de la première colonne voilà j'espere que j'ai bien expliquer le probleme

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par stage75 Voir le message
    et le but c'est d'injecter chaque valeur de la deuxieme colonne dans le numero de maille de la première colonne voilà j'espere que j'ai bien expliquer le probleme
    Presque. C'est quoi le séparateur qui sépare la colonne 1 de la colonne 2 ?
    Les nombres sont-ils des entiers ou ont-ils une virgule ?
    C'est quoi un "maille" ??? T'aurais-pu rajouter le début de ton fichier qu'on voit mieux.

    Bon, déjà le code pour ouvrir le fichier et le lire ligne à ligne
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <stdio.h>
    #include <errno.h>
     
    int main()
    {
        FILE *fp;
        char ligne[81];
     
        fp=fopen("sourceO.txt", "r");
        if (fp == NULL)
        {
             perror("Erreur ouverture sourceO.txt");
             exit(1);
        }
     
        while (fgets(ligne, 81, fp) != NULL)
        {
             printf("Ligne lue: %s", ligne);
        }
     
        fclose(fp);
    }

    Bon, j'ai tapé à capella donc peut-être que j'ai oublié un include mais j'espère que tu vois l'idée...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Par défaut plus d'explication du prob
    Merci Sve@r,

    EN FAIT MON JE SUIS PAS INFORMATICIEN C'EST POUR çA J'EXPLIQUE MAL, MOI J4UTILISE JUSTE LES OUTILS INFORMATIQUE POUR FAIRE DE LA SIMULATION

    1 maille ça vient du maillage par exemple je devise mon domaine de calcul à 200 petit carreau et moi je veux injecter des termes sources que dans des cellules définies, c'est pour ça mon tableau il contient deux colonnes la 1ere colonnes contiens des entiers (1, 2, 3,....100) et en face dans la 2éme colonne j'ai les valeurs de termes sources corresponds à chaque cellule (1E-12, 2E-11,...2.4E-10) et moi ce que je veux c'est de faire un petit programme qui permis de lire ce tableau et de dire a ce programme que la valeur 1E-12 il faut la mettre dans la cellule 1 et la valeur 2E-11 faut la mettre dans la cellule 2....et la valeur 2.4E-10 faut la mettre dans la cellule 100.. voilà, voiçi une partie de mon programme fortran

    Code fortran : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
                                                                       C
    C----------------------------------------------------------------------C
    C
    #include "IMPLICIT.INC"
    C
    #include "SIZE.INC"
    #include "SPECSZ.INC"
    C
    C----------------------------------------------------------------------C
    C     COMMON BLOCKS...                                                 C
    C----------------------------------------------------------------------C
    C
    #include "BOUNDS.INC"
    #include "GRID.INC"
    #include "FLOVEL.INC"
    #include "FLOPRO.INC"
    #include "FLPEXV.INC"
    #include "FLPGEO.INC"
    #include "SPCONS.INC"
    #include "FTURB.INC"
    #include "MPHASE.INC"
    #include "MPPROP.INC"
    #include "MPVOF.INC"
    #include "CSHEAR.INC"
    #include "DNITER.INC"
    #include "TDFLOW.INC"
    #include "USFUNS.INC"
    #include "POLAR.INC"
    #include "GAPS.INC"
    #include "AREAS.INC"
    #include "LOCATE.INC"
    #include "LOCATV.INC"
    #include "LCTYPE.INC"
    #include "LBOUND.INC"
    #include "WSFLOW.INC"
    #include "TDTEMP.INC"
    #include "CHANEL.INC"
    #include "NCHANL.INC"
    C
    C----------------------------------------------------------------------C
    C     ARGUEMENT TYPE DECLARATIONS...                                   C
    C----------------------------------------------------------------------C
    C
          INTEGER IVBLE
          INTEGER IPHASE
          REAL    ATERM
          REAL    BTERM
    C
    C----------------------------------------------------------------------C
    C     LOCAL VARIABLE TYPE DECLARATIONS...                              C
    C----------------------------------------------------------------------C
    C
          INTEGER NUMSPC
          INTEGER NUMVOF
          INTEGER LTEST,S
          REAL  ATEST,A_N
          REAL  A_T,A_T2
          REAL  A_V
     
    SINGLE PHASE FLOW :
    C
     
         	OPEN (UNIT=40,FILE='source.txt') (#source.txt c'est mon fichier tableau#)
     
         		DO 1005 S=1,276  (# S sont le nombre des ligne (de 1 jusqu'a 276#)
         		READ (40,*)B, A_T (# B c'est le nom de la 1ere colonne et A_T c'est le nom de la 2eme colonne#)
     
    	IF (L.NE.B) GOTO 1005  (# L c'est le nom du maille (chaque petite cellule s'appel L #)
     
    	ATERM = A_T*YACOB(L)   (# ATERM represente le parametre terme source#)
     
    	GOTO 1006
     
    1005	CONTINUE

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/01/2009, 14h10
  2. Réponses: 1
    Dernier message: 18/12/2008, 13h43
  3. Problème de conversion d'un code de AS2 en AS3
    Par platondog dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 20/11/2008, 01h30
  4. [MEX] Problème avec le code Fortran yprimef.F
    Par ZeFMG dans le forum MATLAB
    Réponses: 5
    Dernier message: 13/11/2008, 10h36
  5. Réponses: 8
    Dernier message: 15/03/2008, 20h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo