Fortran期望表达式中的右括号(1) - 子例程中的派生类型

时间:2015-04-16 00:57:03

标签: fortran subroutine triangulation derived-types

我收到错误

  

" Fortran期望在(1)"

的表达中使用右括号

在子例程中指定声明类型的组件时。 (1)出现在子程序中a,b,c赋值的第二个%下面。我究竟做错了什么?提前谢谢。

program prototipo

implicit none

!DECLARACIÓN DE TIPOS
type triangulo
    integer :: vertices(3)          !VECTOR DE VÉRTICES DE CADA TRIÁNGULO EN NUBE DE VÉRTICES
    real (kind = 8) :: X(3)         !VECTOR DE COORDENADAS X DE LOS TRES VÉRTICES DEL TRIÁNGULO
    real (kind = 8) :: Y(3)         !VECTOR DE COORDENADAS Y DE LOS TRES VÉRTICES DEL TRIÁNGULO
    real (kind = 8) :: area_triang  !ÁREA DEL TRIÁNGULO
end type triangulo

!irrelevant code removed

contains

subroutine Area (V)

  implicit none 
  type(triangulo), intent(inout) :: V       !VECTOR DE TRIÁNGULOS

    integer :: i                            !ÍNDICE
    real (kind = 8) :: a, b, c              !LONGITUDES DEL LADO DE CADA TRIANGULO
    real (kind = 8) :: t                    !TÉRMINO PARA CALCULAR LA ALTURA
    real (kind = 8) :: h                    !ALTURA

    do i = 1, 8042  
        a = sqrt(((V(i)%X(2) - V(i)%X(1))**2) + ((V(i)%Y(2) - V(i)%Y(1))**2))
        b = sqrt(((V(i)%X(3) - V(i)%X(1))**2) + ((V(i)%Y(3) - V(i)%Y(1))**2))
        c = sqrt(((V(i)%X(3) - V(i)%X(2))**2) + ((V(i)%Y(3) - V(i)%Y(2))**2))
        t = (sqrt((a + b - c)*(a - b + c)*(-a + b + c)*(a + b + c))) / 2.D0
        h = t / b
        V(i)%area_triang = (b*h) / 2.D0
    end do

end subroutine Area

end program

1 个答案:

答案 0 :(得分:1)

您错误地将V声明为子程序Area中的单个三角形而不是三角形数组。将您的声明更改为

type(triangulo), intent(inout) :: V(:)     !VECTOR DE TRIÁNGULOS

并编译。