Fortran Coder

查看: 9329|回复: 4
打印 上一主题 下一主题

[求助] 菜鸟一个,一个简单的程序 竟然有31个错误,求大神指教

[复制链接]

8

帖子

3

主题

0

精华

入门

菜鸟

F 币
47 元
贡献
24 点
跳转到指定楼层
楼主
发表于 2015-9-1 13:29:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
系统版本  win8.1 64位,编译环境microsoft visual studio2010      Intel.Visual.Fortran.Composer.XE.2011
下面小弟的代码  错误一箩筐  求指教
[Fortran] 纯文本查看 复制代码
program tajing
implicit none
    real,external::H,LV
    real,external::W,C,Ci
    real L,V,Rl,Rv,Ht,hli,st
    call sub_di(V,W)
end
subroutine sub_di(V,W)
implicit none
    real,external::W,Ci
    real L,V,Rl,Rv,Ht,hli,st
    read Ht,hli
    read L,V,Rl,Rv
    read st
    call W(C,Rl,Rv)
         Di=(V/0.785/W(C,Rl,Rv))**0.5
    print *,"初步估计塔径Di:",Di
end subroutine
subroutine W(C,Rl,Rv)
implicit none
    real,external::C
    real Rl,Rv,W
    call C(Ci,st)
         W=0.8*C*((Rl-Rv)/Rv)**0.5
    print *,"选取计算空速W:",W
end subroutine
subroutine C(Ci,st)
implicit none
    real,external::Ci
    real st,C
    read st
    call Ci(H,LV)
    C=Ci/(20/st)**0.2
    print *,"经验系数C:",C
end subroutine
subroutine Ci(H,LV)
implicit none
    real,external::H,LV
    real Ci
    Ci=exp(-4.531+1.6562*H+5.5496*H**2-6.4695*H**3+&
        (-0.474675+0.079*H-1.39*H**2+1.3212H**3)*log(expr)LV&
        +(-0.07291+0.088307*H-0.49123*H**2+0.43196*H**3)*(log(expr)LV)**2)
    print *,"标准系数Ci:",Ci
end subroutine
function H(Ht,hli)
implicit none
    real Ht,hli
    real H
    read Ht,hli
         H=Ht-hli
end function

function LV(L,V,Rl,Rv)
implicit none
    real L,V,Rl,Rv
    real LV
    read L,V,Rl,Rv
         LV=L*(Rl/Rv)**0.5/V
end function

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

135

帖子

15

主题

0

精华

版主

F 币
1159 元
贡献
637 点

爱心勋章管理勋章

沙发
发表于 2015-9-1 14:45:34 | 只看该作者
程序里面一些基本的错误是一眼可以看出来了的,比如read  语句的基本用法,请楼主先把一些最基本的错误改掉

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

板凳
发表于 2015-9-1 14:48:07 | 只看该作者
错误太多了,没法改。

read Ht,hli
需要改成 read(*,*) Ht,hli,其他类似

在 sub_di 函数里。W 被定义为外部的函数。那么就不能 call W(Ci,Rl,Rv),因为 call 是对子例行程序。

先改了这两条。然后上新的代码。

8

帖子

3

主题

0

精华

入门

菜鸟

F 币
47 元
贡献
24 点
地板
 楼主| 发表于 2015-9-1 15:20:52 | 只看该作者
已改过!定义的external不是把外部子程序名作为形参吗?为什么不能call?
[Fortran] 纯文本查看 复制代码
program tajing
implicit none
    real,external::H,LV
    real,external::W,C,Ci
    real L,V,Rl,Rv,Ht,hli,st
    call sub_di(V,W)
end

subroutine sub_di(V,W)
implicit none
    real,external::W,Ci
    real L,V,Rl,Rv,Ht,hli,st
    read(*,*)Ht,hli
    read(*,*)L,V,Rl,Rv
    read(*,*)st
    call W(C,Rl,Rv)
         Di=(V/0.785/W(C,Rl,Rv))**0.5
    print *,"初步估计塔径Di:",Di
end subroutine

subroutine W(C,Rl,Rv)
implicit none
    real,external::C
    real Rl,Rv,W
    call C(Ci,st)
         W=0.8*C*((Rl-Rv)/Rv)**0.5
    print *,"选取计算空速W:",W
end subroutine

subroutine C(Ci,st)
implicit none
    real,external::Ci
    real st,C
    read(*,*)st
    call Ci(H,LV)
    C=Ci/(20/st)**0.2
    print *,"经验系数C:",C
end subroutine

subroutine Ci(H,LV)
implicit none
real,external::H,LV
real Ci
Ci=exp(-4.531+1.6562*H+5.5496*H**2-6.4695*H**3+&
        (-0.474675+0.079*H-1.39*H**2+1.3212H**3)*log(expr)(LV)&
        +(-0.07291+0.088307*H-0.49123*H**2+0.43196*H**3)*(log(expr)(LV))**2)
print *,"标准系数Ci:",Ci
end

function H(Ht,hli)
implicit none
real Ht,hli
real H
read(*,*)Ht,hli
H=Ht-hli
end function


function LV(L,V,Rl,Rv)
implicit none
real L,V,Rl,Rv
real LV
read(*,*)L,V,Rl,Rv
LV=L*(Rl/Rv)**0.5/V
end function

4

帖子

0

主题

0

精华

熟手

F 币
183 元
贡献
29 点
5#
发表于 2015-9-1 15:36:39 | 只看该作者
call 是对子例行程序
函数不能 call,只能是 返回值 = 函数名(参数....)
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-6 08:14

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表