[OT] Re: duda con Fortran
José Pablo Fonfría
jpablo.fonfria en gmail.com
Jue Ago 21 01:51:49 BST 2008
Hola Héctor,
> Hola a todos!
> Tengo un problemita con el leguaje Fortran, espero que alguien de las
> tantas personas que leen los mensajes de la lista de correo pueda
> ayudarme (espero que en la lista se pueda hacer la pregunta).
>
> Resulta que estoy haciendo un programa que lee una matriz a partir de un
> archivo .dat, el problema es que necesito que el programa obtenga el
> tamaño de la matriz sin necesidad de ingresar el tamaño de esta y que
> tampoco se encuentre en el archivo donde está la matriz.
>
> Me pregunto si en Fortran se pueden usar los caracteres de fin de linea
> para esto (si es posible), si no... no se que hacer por favor ayudenme.
>
> Gracias.
>
Es un proceso bastante manual pero sencillo. Al menos el que utilizo yo
aunque seguro que hay otros más interesantes. Supón que abres el archivo
donde tienes la matriz escrita. Haces un bucle para la lectura y la
cortas cuando el programa encuentra el EOF. Sería algo así:
! Inicializamos la matriz A utilizando un valor fácilmente reconocible
! y que sepas que no va a aparecer en tus matrices.
do i=1,1000
do j=1,1000
A(i,j)=-100
enddo
enddo
! Abrimos el archivo de datos.
open(10,file='datos.dat',status='old')
! Inicializamos un contador
n=0
! Hacemos un bucle haciendo variar los índices entre
! 1 y un valor alto.
! Al leer los números usamos la opción "end" para dirigir
! al programa a la línea que nos interese cuando haya llegado
! al EOF.
! En cuanto al formato de lectura, a mi me gusta usarlo. Queda todo
! muy ordenado y me parece más adecuado para manejar datos.
! Además, este proceso no funciona sin formato.
do i=1,1000
read(10,20,end=15)(A(i,j),j=1,1000)
n=n+1
enddo
15 close(10)
20 format(1000(i2,1x)) !ejemplo de formato para este caso
De esta forma podrías leer la matriz completa sin conocer sus
dimensiones. El número de filas es igual a n, puesto que cuando el
programa llega al EOF sale del bucle y el número n es el número de filas
leídas. Para hallar el número de columnas basta con utilizar el número
al cual has inicializado la matriz A.
m=0
do j=1,1000
if(A(1,j).eq.-100)goto 30
m=m+1
enddo
30 continue
En fortran 90/95 se puede hacer de forma más sencilla. También échale un
vistazo a la lectura directa de archivos. Es posible que te sirva.
El libro siguiente siempre me ha ayudado mucho:
http://www.star.le.ac.uk/~cgp/prof77.html
Un libro básico de fortran 90 lo puedes encontrar aquí:
http://mat21.etsii.upm.es/ayudainf/aprendainf/Fortran90/Fortran90.pdf
Por supuesto, también puedes utilizar (te lo aconsejo) el manual de tu
compilador para conocer las mejores opciones dependiendo de lo que
quieras hacer. Y sigue buscando en la red, que hay mucha información.
Espero que esto te sirva. Si te hace falta más ayuda, vuelve a escribir
pero esta vez añade un [OT] en el asunto. De ese modo te evitarás
respuestas como la de David (o al menos las minimizarás). Yo creo que es
muy probable que siempre encuentres aquí a alguien que te ayude en este
tipo de cosas.
Un saludo.
Pablo.
Más información sobre la lista de distribución ubuntu-es