当前位置:编程学习 > VB >>

vb中一个函数的问题

小弟的分不多,可小弟的问题很急,请各位大侠帮帮忙啊,问题就出在红色区域
Dim m!, n!, i!, q!, b!, hs!, l!, g!, hk!, h0!, dh!, he!

Private Sub Command1_Click()
m = Val(InputBox("边坡粗糙系数m", "", "2.0000"))
n = InputBox("粗糙系数n", "", "0.0250")
i = InputBox("底坡i", "", "0.0016")
q = InputBox("流量Q", "", "10.0000")
b = InputBox("底宽b", "", "6.0000")
l = InputBox("渠道长度", "", "500")
hs = InputBox("开始断面水深hs", "", "1.5000")
h1 = 0.5
g = 9.8





Do                                   '正常水深的迭代
h0 = (n ^ 2 * q ^ 2 / i) ^ 0.3 * (b + 2 * h1 * Sqr(1 + m ^ 2)) ^ 0.4 / (b + m * h1)
If Abs(h0 - h1) < 0.001 Then Exit Do
h1 = h0
Loop
Print "h0="; Format(h0, "0.000")




Do                                    '临界水深的迭代
hk = (q ^ 2 * (b + 2 * m * h1) / g) ^ (1 / 3) / (b + m * h1)
If Abs(hk - h1) < 0.001 Then Exit Do
h1 = hk
Loop
Print "hk="; Format(hk, "0.000")





If k = 1 Then                               '末端断面水深的判断
he = 1.01 * h0
ElseIf k = 2 Then
he = 0.99 * h0
ElseIf k = 3 Then
he = 1.01 * hk
Else
he = 0.99 * hk
End If



Call subroutinefrk                             '水面线定量计算
Call AA(h)
Call BB(h)
Call f(h)
dh = 0.02 * (he - hs)
g = 9.8
m1 = Sqr(1# + m * m)
c1 = q * q / g
c2 = n * n * q * q
For x = 1 To 50
h(1) = hs
f1 = f(h(1))
s = 0#
h(2) = h(1) + dh
f2 = f(h(2))
If ((h(2) - he) * dh < 0#) Then
ds = 0.5 * (f(h(1)) + f(h(2))) * dh
s = s + ds
Else
dh = he - h(1)
End If
Print "h2="; Format(h(2), "0.000")
Print "ds="; Format(ds, "0.000")
Print "s="; Format(s, "0.000")
h(1) = h(2)
f1 = f2
If Abs(h(2) - he) < 0.001 Then Exit For
Next x
End Sub
Public Function AA(ParamArray h() As Variant)                                   '定义AA(h)函数
AA(h) = (b + m * h) * h
End Function
Public Function BB(ParamArray h() As Variant)                                  '定义BB(h)函数
BB(h) = b + 2# * m * h
End Function
Public Function f(ParamArray h() As Variant)
f(h) = (1 - c1 * BB(h) / AA(h) ^ 3) / (i - c2 * (b + 2 * h * m1) ^ (4 / 3) / AA(h) ^ (10 / 3))                  '定义f(h)函数
End Function
Public Function subroutinefrk()                   '12种水面曲线的类型的判断的函数
If (i > 0#) Then

If (h0 > hk) Then
If (hs > h0) Then
Print "M1型水面曲线"
k = 1
ElseIf (hs > hk And hs < h0) Then
Print "M2型水面曲线"
k = 2
Else
Print "M3型水面曲线"
k = 4
End If
ElseIf (Abs(h0 - hk) < 0.0001) Then
Print "C1型水面曲线"
Else
Print "C3型水面曲线"
End If
Else
If (hs > hk) Then
Print "S1型水面曲线"
ElseIf (hs > h0 And hs < hk) Then
Print "S2型水面曲线"
k = 1
Else
Print "S1型水面曲线"
k = 2
End If
End If
If (i = 0) Then
If (hs > hk) Then
Print "H2型水面曲线"
k = 3
Else
Print "H3型水面曲线"
k = 4
End If
End If
If i < 0 Then
If (hs > hk) Then
Print "A2型水面曲线"
k = 3
Else
Print "A3型水面曲线"
k = 4
End If
End If
End Function


--------------------编程问答-------------------- 这表达

什么问题?具体哪个位置?

--------------------编程问答-------------------- 本人免费补课:小学到初一的语文,高年级的不敢接。 --------------------编程问答-------------------- 呃,  h好像是个数组呀,咋能直接参与数学运算呀? --------------------编程问答-------------------- 小学没毕业都敢出来混 --------------------编程问答--------------------
引用 1 楼 jjhhgg1111 的回复:
这表达

什么问题?具体哪个位置?

就是f(h)里面的h也是一个函数,小弟不知该怎么办。 --------------------编程问答--------------------
引用 3 楼 closevb 的回复:
呃, h好像是个数组呀,咋能直接参与数学运算呀?

h其实是一个函数,for x=1 to 50,h(x)=h(1)到h(50),只是小弟不知该如何定义f(h),这个函数,并将其带入上面的循环 --------------------编程问答--------------------
引用 4 楼 flfq 的回复:
小学没毕业都敢出来混

呵呵,这位大侠说笑了,小弟不是学计算机的,算是半个计算机盲,只是这是老师布置的作业,所以只能勉力而为之了,让大侠见笑了。还请大侠闲暇时帮帮忙 --------------------编程问答-------------------- 这是要干什么? --------------------编程问答--------------------
引用 8 楼 csttx 的回复:
这是要干什么?

这是水力学的一个计算问题,没问题得地方我就不赘述了,问题部分(即红色部分)是要通过AA(h)和BB(h)函数带入到函数f(h)中,通过f(h)的循环运算,求出过程中的h,ds和s的数值。其中h也是一个函数,for x=1 to 50,h(x)=h(1)到h(50),只是我不知道该怎么定义f(h)中的h,并使之能带入公式进行运算。可能我说的不是很专业,请见谅。 --------------------编程问答-------------------- 这是老师布置的作业啊,帖子可不能沉了啊,今天要交啊,十万火急啊。 --------------------编程问答-------------------- --------------------编程问答-------------------- Public Function AA(ParamArray h() As Variant) '定义AA(h)函数
AA(h) = (b + m * h) * h
End Function
Public Function BB(ParamArray h() As Variant) '定义BB(h)函数
BB(h) = b + 2# * m * h
End Function
Public Function f(ParamArray h() As Variant)
f(h) = (1 - c1 * BB(h) / AA(h) ^ 3) / (i - c2 * (b + 2 * h * m1) ^ (4 / 3) / AA(h) ^ (10 / 3)) '定义f(h)函数
End Function


为什么h是数组,里面又当数用,什么东西。

LZ是弄什么的呀,不是火星人?确定? --------------------编程问答--------------------
引用 11 楼 zhao4zhong1 的回复:
莫非
Private Function HH(i as integer) as double
 select case i
 case 1
  HH=h(1)
 case 2
  HH=h(2)
...
 case 50
  HH=h(50)
 end select
End Function

当x=1时,h为h(1),其中的1相当于下脚标的作用,此时f(h)为f(h(1)),h(2) = h(1)+ dh,f1=f(h(1)),f2 = f(h(2)),ds = 0.5 * (f(h(1)) + f(h(2))) * dh
我觉得主要问题就在于f(h)中函数h的定义,我不知道该怎么定义啊。 --------------------编程问答--------------------
引用 12 楼 spt_petrolor 的回复:
Public Function AA(ParamArray h() As Variant) '定义AA(h)函数
AA(h) = (b + m * h) * h
End Function
Public Function BB(ParamArray h() As Variant) '定义BB(h)函数
BB(h) = b + 2# * m * h
End Function
Public ……

我计算机编程比较小白,见笑了。不过你说的很对,h在公式AA(h),BB(h)和f(h)中就是当一个数用,当对于h本身来说,h2=h1+dh,h3=h2+dh……,并且过程中h不断带入公式AA(h),BB(h)和f(h)并求相关值。 --------------------编程问答-------------------- 帖子不能沉啊,这是我的水力学作业啊,今天要交了 --------------------编程问答-------------------- 如果你能用汉语把你的要求,程序过程说出来,我想你也就差不多能编写出来程序了

函数就是函数,数组就是数组,不要混了。。。 --------------------编程问答--------------------
引用 16 楼 spt_petrolor 的回复:
如果你能用汉语把你的要求,程序过程说出来,我想你也就差不多能编写出来程序了

函数就是函数,数组就是数组,不要混了。。。

对于红色区域的汉语描述是:通过对公式f(h) = (1 - c1 * BB(h) / AA(h) ^ 3) / (i - c2 * (b + 2 * h * m1) ^ (4 / 3) / AA(h) ^ (10 / 3))的循环运算,求出过程中所有的h和f(h)的值。h为h1到h50.就这么简单。可是小弟确实不是计算机系的,对于编程来说,我还是个小白。或许大侠觉得程序很简单,可是对我这些小白来说,任何一段代码都是一个很大的考验。术业有专攻嘛 --------------------编程问答-------------------- 我的帖子怎么又沉了呢? --------------------编程问答--------------------
引用 17 楼 blazing_angel 的回复:
引用 16 楼 spt_petrolor 的回复:
对于红色区域的汉语描述是:通过对公式f(h) = (1 - c1 * BB(h) / AA(h) ^ 3) / (i - c2 * (b + 2 * h * m1) ^ (4 / 3) / AA(h) ^ (10 / 3))的循环运算,求出过程中所有的h和f(h)的值。h为h1到h50.就这么简单。可是小弟确实不是计算机系的,对于编程来说,我还是个小白。或许大侠觉得程序很简单,可是对我这些小白来说,任何一段代码都是一个很大的考验。术业有专攻嘛


现在,你认为f(h)是一个公式,对吗?在这个公式里面用到了公式BB(h),AA(h)对吗,这3个公式里面,h是参数,是一个数,不是数组,对吗?

那么你现在可以描述你的BB(h),AA(h)公式了,这里h也必须是一个数,不是数组.这里如果:::你h是数组,就没法了,因为f(h)里面你把h是作为一个数用的,不是数组.

程序就是,让计算机先作这个,然后作那个,然后...最后.你能明白你要先算什么,得到一个什么结果,然后再算什么,用之前的什么结果,再得到什么结果,把这些写出来,就是编程了. --------------------编程问答--------------------
引用 19 楼 spt_petrolor 的回复:
引用 17 楼 blazing_angel 的回复:
引用 16 楼 spt_petrolor 的回复:
对于红色区域的汉语描述是:通过对公式f(h) = (1 - c1 * BB(h) / AA(h) ^ 3) / (i - c2 * (b + 2 * h * m1) ^ (4 / 3) / AA(h) ^ (10 / 3))的循环运算,求出过程中所有的h和f(h)的值。h为h1到h50.就……

不行啊,虽然你说的很正确,可是你高估我的计算机编程水平了,呵呵。请问你能不能浪费点时间帮忙把红色区域的程序问题解决啊,或者你有类似的例子也可以啊,起码能让我有个参考。谢谢了! --------------------编程问答-------------------- --------------------编程问答--------------------
引用 21 楼 dianyancao 的回复:
看看下雨時的心情

什么意思? --------------------编程问答-------------------- 我怎么光顶我自己的帖子啊,各位大侠有时间的就帮个忙吧。谢谢了! --------------------编程问答-------------------- --------------------编程问答-------------------- 因为大家都不懂你的逻辑,所以不可能有代码贴出来。

这里不做各种毕业设计,作业
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,