Function tucengshu(y1 As Double, x0 As Double, y0 As Double, hd() As Double) As Double
Dim x() As Double, y() As Double
R = Sqr(x0 * x0 + y0 * y0)
a = 1
b = -2 * x0
c = x0 * x0 + y1 * y1 - 2 * y0 * y1 + y0 * y0 - R * R
d = b * b - 4 * a * c
x = (-b + Sqr(d)) / (2 * a)'--------------------1此处错误:x 应是个数组
For i = 1 To 100
x(i) = (x / 1000) * (i)‘--------------------------2此处错误:x 应是个数组
Next i
For i = 1 To 1000
a = 1
b = -2 * y0
c = y0 * y0 + x(i) * x(i) - 2 * x0 * x(i) + x0 * x0 - R * R
d = b * b - 4 * a * c
y(i) = (-b - Sqr(d)) / (2 * a)
Next i
lowy = y(1)
For i = 1 To 1000
If m > y(i) Then'--------------3此处错误:if...then....使用不合法
m = y(i)
Next i
c = x0 * x0 + lowy * lowy - 2 * y0 * lowy + y0 * y0 - R * R
d = b * b - 4 * a * c
lowx = (-b + Sqr(d)) / (2 * a)
For i = 1 To n
tuchengshu = i
If hd(i + 1) <= lowy And lowy < hd(i) Then'--------------4此处错误:if...then....使用不合法
Exit For
Next i
End Function
Private Sub command1_click()
Dim y1 As Double, x0 As Double, y0 As Double, hd() As Double, n As Integer
y1 = InputBox("请输入y1的值", "y1")
x0 = InputBox("请输入x0的值", "x0")
y0 = InputBox("请输入y0的值", "y0")
n = InputBox("请输入土层数", "土层数")
For i = 1 To n
ReDim hd(i)
hd(i) = InputBox("请输入第" & i & "层土的顶标高", "顶标高")
Next i
Print "土层数为" & tucengshu(y1, x0, y0, hd())
End Sub
--------------------------------------- 分析------------------------
1、2、从内容上看X应是个单一的变量(本人理解),而不是个数组变量。
解决方法:另外用一个变量名,如 e
3、4、if....then....使用方法:
一类:if .... then .....
如:
if a>b then b=a
二类:if.....then......end if
如:
if a>b then
b=a
end if
三类(请自学)
解决方法:
3、
If m > y(i) Then
m = y(i)
修改为:
If m > y(i) Then m = y(i)
4、
If hd(i + 1) <= lowy And lowy < hd(i) Then
Exit For
修改为:
If hd(i + 1) <= lowy And lowy < hd(i) Then Exit For
Function tucengshu(y1 As Double, x0 As Double, y0 As Double, hd() As Double) As Double '显示函数定义的这错误
Dim x() As Double, y() As Double
Dim d As Double, b As Double, a As Double '未定义
R = Sqr(x0 * x0 + y0 * y0)
a = 1
b = -2 * x0
c = x0 * x0 + y1 * y1 - 2 * y0 * y1 + y0 * y0 - R * R
d = b * b - 4 * a * c
ReDim Preserve x(0)
x(0) = (-b + Sqr(d)) / (2 * a) '为定义变量
For i = 1 To 100 '数组x()和y()的维数未定义,x(i)的上限也没统一
ReDim Preserve x(i)
x(i) = (x(i) / 1000) * (i) '显示的还有这一行的斜杠错误
Next i
For i = 1 To 1000
a = 1
b = -2 * y0
c = y0 * y0 + x(i) * x(i) - 2 * x0 * x(i) + x0 * x0 - R * R
d = b * b - 4 * a * c
ReDim Preserve y(i)
y(i) = (-b - Sqr(d)) / (2 * a)
Next i
lowy = y(1)
For i = 1 To 1000
If m > y(i) Then
m = y(i)
End If ';;;'缺少end if
Next i
c = x0 * x0 + lowy * lowy - 2 * y0 * lowy + y0 * y0 - R * R
d = b * b - 4 * a * c
lowx = (-b + Sqr(d)) / (2 * a)
For i = 1 To n
tuchengshu = i
If hd(i + 1) <= lowy And lowy < hd(i) Then
Exit For
End If '缺end if
Next i
End Function
Private Sub command1_click()
Dim y1 As Double, x0 As Double, y0 As Double, hd() As Double, n As Integer
y1 = InputBox("请输入y1的值", "y1")
x0 = InputBox("请输入x0的值", "x0")
y0 = InputBox("请输入y0的值", "y0")
n = InputBox("请输入土层数", "土层数")
For i = 1 To n
ReDim hd(i)
hd(i) = InputBox("请输入第" & i & "层土的顶标高", "顶标高")
Next i
Print "土层数为" & tucengshu(y1, x0, y0, hd())
End Sub
你这个代码还有很多问题,重写吧