salto resueltos programación problemas matrices manejo linea libro ciclo arreglos archivos fortran output fortran77

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á.