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 :

lecture de tableau en fortran 77


Sujet :

Fortran

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut lecture de tableau en fortran 77
    Bonjour,

    j'ai fait le programme suivant pour lire un fichier de données .dat et modéliser ses composantes. J'aimerais le faire fonctionner quelque soit la taille du tableau, mais je n'y arrive pas : je suis toujours obligé de donner la taille du tableau !
    Si quelqu'un avait une idée ! (Je sais qu'en fortran 90 c'est facilement faisable, mais je dois uniquement utiliser le fortran 77...).
    Voici le code :
    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
    59
    C
    C this program gives the linear (average) equation giving the acceleration
    C as a function of the voltage :
    C
          PROGRAM linearleast
          IMPLICIT NONE
          INTEGER i,c,j,n
          PARAMETER (n=8)
    C n is the number of rows in the data file
          REAL A(n,2)     
    C A is the matrix in which the datas will be stored
          OPEN (33,FILE='xydata.dat',form='formatted',status='old')
          DO i=1,n
    C creation of the matrix A :
             READ (33,*) (A(i,j),j=1,2) 
          END DO
          CALL coef (A,n)
          END
    C
          SUBROUTINE coef (D,m)
          IMPLICIT NONE
          INTEGER i,j,m
          REAL D(m,2),c,b,g,E(m),f,a,H(m),k,l
    C c is the sum of the accelerations
          c=0
          DO i=1,m
             c=c+D(i,1)
          END DO
    C b is the sum of the voltages
          b=0
          DO i=1,m
             b=b+D(i,2)
          END DO
    C g is the average coefficient (b/c)
          g=b/c
    C E contains the residuals
          DO i=1,m
             E(i)=D(i,2)-g*D(i,1)
          END DO
    C H contains the estimated voltages (the estimated Y)
          DO i=1,m
             H(i)=g*D(i,1)+H(i)
          END DO
    C k is the sum of the residuals      
          k=0
          DO i=1,m
             k=k+E(i)
          END DO
    C l is the average residual
          l=k/m
          PRINT 10, g,l
     10   FORMAT (1X,'THE LINEAR EQUATION IS : Y(X)= ',F6.3,' X + ',F6.3)
          PRINT *,'ORIGINAL     ORIGINAL     ESTIMATED     RESIDUAL'
          PRINT *,'   X            Y             Y '
          DO i=1,m
          PRINT 20, D(i,1),D(i,2),g*D(i,1)+l,E(i)
     20   FORMAT (' ',F6.3,'       ',F6.3,'        ',F6.3,'       ',F6.3)
          END DO
          END

    Merci d'avance,
    Nulysses

  2. #2
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Si quelqu'un avait une idée ! (Je sais qu'en fortran 90 c'est facilement faisable, mais je dois uniquement utiliser le fortran 77...).
    La seule solution que je connaisse consiste à simuler une allocation dynamique en créant un gigantesque tableau puis en lisant le fichier pour connaitre le nombre de lignes c'est à dire la taille réelle du tableau.
    Tu utilises ce nombre de lignes à la place de ton paramètre n

    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
     
    PROGRAM linearleast
          IMPLICIT NONE
          INTEGER I,J,N,NL
          REAL X, Y
    C Depend de la memoire physique de l'ordinateur
          PARAMETER (N=10000000)
    C n is the number of rows in the data file
          REAL A(N,2)
    C A is the matrix in which the datas will be stored
          OPEN (33,FILE='xydata.dat',form='formatted',status='old')
          NL = 0
    10   READ (33, *, END=20) X, Y
          NL = NL + 1
          GO TO 10
    20   REWIND (33)
    C creation of the matrix A :
          DO I =1, NL
            READ (33,*) (A(i,j),j=1,2)
          END DO
          CALL coef (A,N,NL)
          END
     
          SUBROUTINE coef (D,m,nl)
          IMPLICIT NONE
          INTEGER i,j,m,nl
          REAL D(m,2),c,b,g,E(m),f,a,H(m),k,l
    C c is the sum of the accelerations
          c=0
          DO i=1,nl
          c=c+D(i,1)
         END DO
    . . .
    en remplacant partout m par nl

    Commentaire personnel : je trouve curieux de devoir "uniquement utiliser le fortran 77" en 2009.
    D'autant qu'une boucle DO...ENDDO ne fait pas partie de la norme ANSI FORTRAN77, quoique tous les compilateurs FORTRAN77 récents l'acceptent.

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

Discussions similaires

  1. Lecture de tableau par pointeur
    Par SPACHFR dans le forum Débuter
    Réponses: 7
    Dernier message: 16/05/2007, 16h43
  2. Lecture de fichier binaire fortran avec java
    Par bigbrother737 dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2007, 10h34
  3. Réponses: 3
    Dernier message: 05/02/2006, 22h59
  4. erreur de lecture de tableau incompréhensible
    Par Anouschka dans le forum C++
    Réponses: 2
    Dernier message: 27/01/2006, 13h40
  5. C++ et lecture de tableau
    Par ero-sennin dans le forum C++
    Réponses: 17
    Dernier message: 31/10/2005, 23h42

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