[OT] Re: duda con Fortran

José Pablo Fonfría jpablo.fonfria en gmail.com
Jue Ago 21 17:04:34 BST 2008


Hola Héctor,

> Muchas gracias muchachos por su colaboración y ayuda, que pena por el 
> tema un poco fuera del tema principal de la lista, pero yo tenía la 
> esperanza que me ayudaran y afortunadamente asi fué.

De nada. Para eso están las listas.

> Me gustaría saber si les puedo seguir consultando mis dudas de este 
> potente lenguaje, ya que frecuentemente estoy haciendo programas con él, 
> y si las puedo poner en la lista de correo o que lugar me recomiendan, o 
> si les puedo escribir a algunos de ustedes en especial, quien se 
> ofrece?, jejeje

Por mi parte no tengo inconveniente en que hagas preguntas. Siempre que 
pueda te responderé, eso sí, desde mi conocimiento del tema que en 
ocasiones puede ser limitado. En cuanto a la lista, como ya te dije, 
añade un [OT] en el asunto a fin de que la gente quede advertida de que 
el tema no trata un tema enteramente de GNU/Linux (K)Ubuntu.

> Anoche encontré esta forma de leer el archivo:
> 
>         open(unit=10,file='entrada.dat',status='unknown')
>         do while (ios == 0)
>             read(10,*, iostat=ios) buffer       
>             if (ios==0) then
>                 lineas=lineas+1
>             end if
>         end do
>         
> print*,'--------------------------------------------------------------------'
>         print*,'Dimension de la matriz ',lineas,' x ',lineas+1
>         
> print*,'--------------------------------------------------------------------'
>         allocate(temp((lineas+1),lineas))
>         rewind(10)
>         read(10,*)temp       
> 
> ya que estoy leyendo matrices n x n+1 porque estoy haciendo un solver de 
> sistemas de ecuaciones.

Pues si te funciona, a mi me parece perfecto. Tiene buena pinta.

Felicidades y un saludo.

Pablo.

> El 20 de agosto de 2008 19:51, José Pablo Fonfría 
> <jpablo.fonfria en gmail.com <mailto:jpablo.fonfria en gmail.com>> escribió:
> 
>     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
>     <http://www.star.le.ac.uk/%7Ecgp/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.
> 
>     --
>     ubuntu-es mailing list
>     ubuntu-es en lists.ubuntu.com <mailto:ubuntu-es en lists.ubuntu.com>
>     https://lists.ubuntu.com/mailman/listinfo/ubuntu-es
> 
> 




Más información sobre la lista de distribución ubuntu-es