matrices - problemas resueltos de programación en fortran 95 pdf
Cómo escribir la matriz formateada en una línea con fortran77? (1)
Supongamos que tengo la matriz c (i, j). Quiero escribirlo en la pantalla en el idioma Fortran77 más antiguo con tres signos después de la coma. yo escribo
do i=1,N
write(*,"(F8.3)") ( c(i,j), j=1,N )
end do
pero el resultado está en la forma
c (1,1)
c (1,2)
...
c (1,10) c (2,1)
c (2,2)
...
Finalmente, puedo simplemente escribir
do i=1,N
write(*,*) ( c(i,j), j=1,N )
end do
y luego el resultado es como la matriz, pero, por supuesto, no está formateado.
¿Cómo obtener la salida correcta en Fortran77?
Una edición Parece que una de las soluciones es escribir
do i=1, N
do j=1, N
write(*,''(F9.3,A,$)'') c(i,j), '' ''
end do
write(*,*) '' ''
end do
Su formato solo especifica un flotante único, pero en realidad desea escribir N
por línea.
Una solución bastante general para este caso simple sería algo así como
program temp
implicit none
integer, parameter :: N=3
real, dimension(N,N) :: c
integer :: i,j
character(len=20) :: exFmt
c = 1.0
write(exFmt,''("(",I0,"(F8.3))")'') N
do i=1,N
write(*,exFmt) (c(i,j), j=1,N)
end do
end program
Esto hará que exFmt
sea ''(3(F8.3))''
, que especifica la impresión de tres flotadores (tenga en cuenta que probablemente realmente desee ''(3(F8.3," "))''
incluir explícitamente algunos espacios.
Tenga en cuenta que algunos compiladores permitirán que exFmt
sea simplemente ''(*(F8.3))''
. Esto es parte de la especificación fortran 2008, por lo que puede que no todos los compiladores a los que tenga acceso. Consulte aquí para obtener un resumen de la compatibilidad del compilador (consulte el artículo de formato ilimitado , gracias a HighPerformanceMark para esto)
Finalmente, es fácil usar una declaración de formato como ''(1000(F8.3))''
donde 1000 es más grande de lo que alguna vez necesitará.