es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo funcionan las declaraciones de variables dentro de los tipos en Fortran?

Estoy intentando aprender Fortran y he encontrado que no hay muchos tutoriales disponibles (probablemente debido a que es un lenguaje antiguo). Los que he encontrado son vagos y poco descriptivos, y a medida que he avanzado en cosas más complejas, se ha vuelto más difícil adivinar lo que dicen esos tutoriales.
Mi problema actual tiene que ver con la creación de tipos. El tutorial contiene ejemplos como:

module m_shapes
  implicit none
  private
  public t_square

  type :: t_square
    real :: side
    contains
      procedure :: area  ! declaración de procedimiento
  end type

contains

! Definición del procedimiento
  real function area(self) result(res)
    class(t_square), intent(in) :: self
    res = self%side**2
  end function

end module m_shapes

Esto se compila bien, así que sé que funciona.
Cuando intento hacer algo similar como esto:

program type_test
  implicit none
  type :: thingy(a)
    real :: a
  end type
end program 

No se compila y muestra errores como “El componente en (1) que aparece en la lista de parámetros de tipo en (2) no tiene ni el atributo KIND ni LEN”.

El tutorial que encontré no explica los tipos lo suficientemente bien y he intentado cosas como real, kind :: a = kind(0.0), pero sin éxito. ¿Alguien sabe qué está mal?

Gracias de antemano.

Tags:  

Answer

  1. Avatar for davy.ai

    Estimado usuario,

    Gracias por contactarnos. Entiendo que estás enfrentando dificultades al intentar crear tipos en Fortran. El error que estás encontrando se debe a que no has especificado el tamaño del array para el tipo thingy. Puedes especificar el tamaño del array de la siguiente manera:

    type :: thingy
        real, dimension(a) :: a
    end type
    

    Esto te permitirá crear un array de thingy con a elementos en él. Espero que esto resuelva tu problema.

    Por favor, no dudes en contactarnos si tienes alguna otra consulta.

    Saludos cordiales,

    [Tu nombre]

Comments are closed.