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

Fortran Discussion :

Fichier ASCII avec colonnes nombres décimaux : problème avec les décimales


Sujet :

Fortran

  1. #1
    Invité
    Invité(e)
    Par défaut Fichier ASCII avec colonnes nombres décimaux : problème avec les décimales
    Bonjour

    J'ai un probleme en essayant de lire un fichier ASCII avec des colonnes de nombres decimaux. quand je met une instruction read pour lire ces colonnes et qu'ensuite je met une instruction print pour afficher ce qu'il a mis en memoire (afin de voir sil a bien compris), et bien je me rends compte que justement non il ne comprend pas bien!

    Par exemple quand j'ai 369.4317, il m'affiche 369.2970 !!! J'ai change le format real en format double precision mais rien n'y fait!

    que faire svp? :-(((((

    Code : 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
     
    program polarisation
     
    integer :: taille,m
    double precision, dimension (:,:), allocatable :: a,b
    double precision, dimension (:,:), allocatable :: p
     character(99) :: inputfile1, inputfile2,outputfile
     
    !---------------------------------------------------------------------------------------------------------------------------------------
     
    type *,'inputfile 1 :'
    read (*,'(a30)') inputfile1
    OPEN  (UNIT =1,FILE =inputfile1,form='formatted',status="old",action='read')
     
    taille=0
    do
     
    read (1,'(i2)', end=100) m
    taille=taille+1
     
    enddo
    100 continue
     
    print *,taille
    allocate(a(3,taille))
    allocate(b(3,taille))
    allocate(p(2,taille))
     
    rewind 1
     
    read (1,'(f10.4,2e12.8)') a
     
    type *,'inputfile 2 :'
    read (*,'(a30)') inputfile2
    OPEN  (UNIT =2,FILE =inputfile2,form='formatted',status="old",action='read')
     
     
    read (2,'(f10.4,2e12.8)') b
     
    print *,'a(1:3,1) =',a(1:3,1)
    print *,'b(1:3,1) =',b(1:3,1)
    print *,'a(1:3,10) =',a(1:3,10)
    print *,'b(1:3,10) =',b(1:3,10)
     
    p(1,:)=a(1,:)
    p(2,:)=sqrt( a(3,:)**2 + b(3,:)**2 )
     
    print *,'p(1:2,1) =',p(1:2,1)
    print *,'p(1:2,10) =',p(1:2,10)
     
    type *,'outputfile :'
    read (*,'(a30)') outputfile
     
    OPEN  (UNIT =3,FILE =outputfile,form='formatted',status="new",action="write")
     
    write (3,'(f10.4,3x,f10.7)') p
     
    end program polarisation
    C'est un programme qui a partir de 2 fichiers ASCII a et b de trois colonnes chacun cree un fichier sortie de deux colonnes p. La 1ere colonne est la meme que celle du fichier a et la 2eme est le resultat d'une operation sur les troisiemes colonnes des fichiers a et b.

    p(1,: )=a(1,: )
    p(2,: )=sqrt( a(3,: )**2 + b(3,: )**2 )

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 107
    Points
    107
    Par défaut
    Salut,

    J'ai eu le même problème avec gfortran sous windows. Le problème a été réglé en changeant le séparateur décimal dans les options régionales, le "." remplaçant la ","

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Salut,

    Attention les unités logiques de 1 à 9 sont réservées par certains compilateurs à des périphériques systèmes : clavier, écran, etc ....
    Tu devrais commencer donc de lire à partir de l'unité 10.
    Ensuite est-ce qu'entre de 2 nombres d'une même colonne tu as un espace qui les sépare ?
    Si tel est ton cas tu n'as pas besoin de mettre de format dans ton read : une * suffit.
    Le séparateur par défaut entre deux nombres est l'espace ou la virgule en fortran.

    Regarde aussi si il n'y a pas de mise à jour de ton compilateur.

  4. #4
    Invité
    Invité(e)
    Par défaut
    en fait je viens de trouver pourquoi. C'est tout bete, je ne comparais pas les bons fichiers et j'avais confondu avec un autre. Ca m'apprendra a faire attention

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/02/2009, 09h44
  2. bug (ou pas bug) avec des nombres décimaux
    Par cyberyan dans le forum Langage
    Réponses: 7
    Dernier message: 15/09/2008, 17h39
  3. Réponses: 3
    Dernier message: 30/05/2008, 10h39
  4. Réponses: 5
    Dernier message: 08/12/2006, 14h42
  5. Problèmes avec des nombres... que faire ?
    Par sducos81 dans le forum C++
    Réponses: 6
    Dernier message: 21/07/2005, 13h46

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