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 / écriture fichier Fortran


Sujet :

Fortran

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Lecture / écriture fichier Fortran
    salut ,
    j'ai écrit un programme qui fait le produit de deux matrices et enregistre la matrice résultante dans un fichier texte .
    Sauf que l'affichage n'est pas correcte , je veux un affichage de la matrice ligne par ligne et non pas tout les éléments dans la même ligne .

    voilà le code sous Fortran

    program produit_matrice
    integer :: i,j,k,n
    real,dimension(:,:),allocatable :: A,B,C
    print*,'entrez la dimension des matrices'
    read*,n
    allocate(A(n,n),B(n,n),C(n,n))
    !--- saisie des matrices A et B --- !
    print*,'entrez les elements de A '
    do i=1,n
    do j=1,n
    read*,A(i,j)
    end do
    end do
    print*,'entrez les éléments de B '
    do i=1,n
    do j=1,n
    read*,B(i,j)
    end do
    end do
    !--- calcul de la matrice C -----!
    do i=1,n
    do j=1,n
    C(i,j)=0
    do k=1,n
    C(i,j)=C(i,j)+A(i,k)*B(k,j)
    end do
    end do
    end do
    do i=1,n
    print*,c(i,:)
    end do
    !--- saisie de la matrice C dans un fichier texte ---!
    open(15,file='matrix.txt',action='write',form='formatted',status='replace')
    write(15,*) C
    close(15)
    end program


    Bonne fin de soirée !
    Et j'espère que quelqu'un pourrait me dire ce que je dois ajouter/modifier.
    ps : je me demande si l'option advance=Yes/No pourrait aider ,si oui ,comment l'utiliser?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Points : 191
    Points
    191
    Par défaut
    Salut,

    Ton problème vient directement du format que tu utilises lors de ton écriture.

    En effet, tu ne lui spécifies pas combien d'élément tu souhaite voir écrit sur une ligne.

    Si tu veux qu'il écrive correctement une ligne de la matrice, il faut lui spécifier combien d'éléments contient la ligne en question.

    Pour ce faire, tu peux par exemple recourir à la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CHARACTER(99) :: FMT
     
    write(FMT,'(i0,a,i0,a,i0)')size(C,dim=2),'f',50,'.',10
     
    do i=1,n
    write(15,trim(adjustl(FMT)))C(i,:)
    end do
    Ce que fait FMT : le size(C,dim=2) va représenter ton nombre de colonne. Le format 'f' dit que tu vas écrire des réels en leur réservant 50 espaces par nombre avec un maximum de 10 chiffres après la virgules (ce qui est la signification du 50.10).

    Ton fichier sera alors comme tu l'auras souhaité.

    En espérant avoir répondu à ta question,

    Marlan

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Nikki
    Salut, j'ai fait comme ce que t'as dit mais ,ca m'affiche une erreur lors de l’exécution au niveau de la ligne :
    write(15,trim(adjustl(FMT)))C(i,

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Points : 191
    Points
    191
    Par défaut
    Effectivement, il y avait une erreur. Voici la version corrigée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     
    CHARACTER(99) :: FMT
     
    write(FMT,'(a,i0,a,i0,a,i0,a)')'(',size(C,dim=2),'f',50,'.',10,')'
     
    do i=1,n
    write(15,trim(adjustl(FMT)))C(i,:)
    end do

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut ByNikki
    Waouw , ca marche à merveille !
    Mais stp tu pourrai m'expliquer le rôle de chaque ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    write(FMT,'(a,i0,a,i0,a,i0,a)')'(',size(C,dim=2),'f',50,'.',10,')' ===> sert à quoi ca ?
    write(15,trim(adjustl(FMT)))C(i,:)      ===> ca fait quoi ca aussi???

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Points : 191
    Points
    191
    Par défaut
    write(FMT,'(a,i0,a,i0,a,i0,a)')'(',size(C,dim=2),'f',50,'.',10,')'
    Cette ligne sert à te définir un format d'écriture. Un format en fortran s'écrit de la façon suivante :
    '(NTM[.O])' avec N : le nombre de colonne, T le type de format, M le nombre de caractères réservés à chaque donnée de tes colonnes et, en option (indiqué entre [ ]) le nombre de caractères réservés après le '.' si en format réel.

    Le format doit être indiqué avec une variable de type character

    En somme, ici avec cette écriture nous disons au code :
    Stockes dans une variable FMT de type caractère un :
    a : caractère (ici : une parenthèse ouverte ( )
    i0 : entier (ici le nombre de colonnes de la matrice à écrire : size(C,dim=2))
    a : caractère (ici on indique au code que le format sera de type réel : f)
    i0 : entier (ici le nombre de caractères à réserver à chaque donnée : 50 [mais on aurait pu mettre moins])
    a : caractère (ici puisque l'on utilise des réels, il faut spécifier combien de décimale on souhaite avoir (d'où le . pour la séparation))
    i0 : entier (le nombre de décimales que l'on souhaite avoir : ie : le nombre de caractères réservés aux décimales)
    a : caractère (parenthèse fermée ) )
    En somme, si l'on imprimait FMT, l'on aurait : FMT=(NB_COLONNEf50.10)

    Ensuite vis à vis de la ligne :
    write(15,trim(adjustl(FMT)))C(i,: )
    Cette ligne se lit :
    Ecris dans l'unité de fichier 15, avec le format FMT la ligne courante de C

    Les fonction trim(adjustl(FMT)) signifient que l'on réajuste la variable FMT en retirant tous les blancs (car FMT est dans notre cas un character de 99 éléments dont on en utilise qu'une petite partie d'où le réajustement).

    La boucle d'écriture t'assureras quant à elle que les données sont bien écrites dans l'ordre désiré.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut ByNikki
    Merci , infiniment !

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

Discussions similaires

  1. [LV 2009] Autorisation lecture/écriture fichiers
    Par K-RK-S dans le forum LabVIEW
    Réponses: 5
    Dernier message: 21/04/2011, 09h51
  2. problème commentaire multiligne lecture /écriture fichier
    Par makaphrodite dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 17/03/2011, 08h48
  3. Lecture/écriture fichier excel
    Par darkwall_37 dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 11/03/2011, 16h03
  4. création lecture écriture fichier
    Par mendezino dans le forum VB.NET
    Réponses: 2
    Dernier message: 12/10/2010, 12h01
  5. Lecture/écriture fichier binaire via structure
    Par Tenebrous dans le forum C
    Réponses: 9
    Dernier message: 07/03/2010, 00h02

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