Saut de ligne dans "write" sous fortran !

Résolu
younexpro Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   -  
younexpro Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   -
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?

3 réponses

  1. Yoda
     
    Bonjour,

    Tu dois ecrire ta matrice dans une double boucle

    !--- saisie de la matrice C dans un fichier texte ---!
    open(15,file='matrix.txt',action='write',form='formatted',status='replace')
    do i=1,n
    do j=1,n
    WRITE(15, 100, ADVANCE='NO') C(i,j)
    100 FORMAT (I5)
    end do
    WRITE(15, *) ' '
    end do
    close(15)

    A+
    0
  2. younexpro Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
     
    Salut ca affiche une erreur au niveau de la ligne ou t'as défini 100 le format !
    Du coup non c'est pas résolu , merci quand même !
    0
    1. Yoda
       
      Alors essaye avec cette syntaxe

      WRITE(15, '(I5)', ADVANCE='NO') C(i,j)

      Supprime la ligne 100
      0
  3. younexpro Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
     
    Voilà donc la solution que j'ai trouvé à la fin
    Je rappelle que l'objectif est réaliser un code fortran qui fait le produit de deux matrices et enregistre la matrice résultante dans un fichier texte !

    program produit_matrice
    integer :: i,j,k,n
    real,dimension(:,:),allocatable :: A,B,C
    CHARACTER(99) :: FMT
    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(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
    end program


    Bonne fin de journée !
    0