Fortran编译错误:(1)和(2)处的两个主要程序

时间:2011-11-16 02:27:30

标签: fortran gfortran

我编写这个程序时遇到了问题。我花了好几个小时试图弄清问题是什么,但它只是说有两个主要程序根本没有任何帮助。我会非常感谢任何帮助。感谢

c   comments
*

    program cylinder

    real diam(10),height(10),volume(10)
    external circ,surface,vol
    integer count,i,j
    parameter (pi = 3.14159)
    j = 0
    count = 1

    do i=1,10
    diam(i) = 0
    end do  

 10 j = j+1
    write(*,*) 'Please enter the diameter and height of
     A  a cylinder'
    read*, diam(j),height(j)

    if (diam(j) .NE. 0 .AND. j .LE. 10) goto 10


 20 write(*,*) 'Cylinder', count, 'Circumfrence =', circ(diam)

    write(*,*) 'Total Surface Area=', 
     B  surface(diam,height)

    Call vol(diam,height,volume)
    write(*,*) 'Volume=', volume(count)

    count = count+1

    if (diam(count) .NE. 0 .AND. count .LE. 10) goto 20

    end

    function circ(d) = d*pi

    function surface(d,h)
    real d,h
    surface = 2*pi*(d/2.)**2 + d*pi*h
    end

    subroutine vol(d,h,volume)
    real d,h,volume(count)
    volume(count) = h*pi*(d/2.)**2
    end

1 个答案:

答案 0 :(得分:2)

对于有两个主程序的特殊问题,你可以通过替换行

来消除它
      function circ(d) = d*pi

进入

      function circ(d)
      real circ
      real d
      circ = d*pi
      end

其他明显的问题是共享pi,跨程序/功能/子程序计数。当你在执行功能时,你无法看到主程序中的内容。最简单的解决方案是将其与其他参数一起传递。在子程序vol中,

      volume(count) = h*pi*(d/2.)**2

为什么你有count