你们用人工智能写的代码,遇到过bug吗?
想用人工智能写个简单的程序,的确是给出了代码,看起来是正确的,但是实际运行的时候,给不出结果,
只好自己debug,最后还是靠我自己debug,最后得到了结果。
有别人有我这样的经历吗? 简单的程序没有问题,复杂的程序需要自己debug,平均每1百行要改2行 KeyTo9_Fans 发表于 2025-2-18 13:52
简单的程序没有问题,复杂的程序需要自己debug,平均每1百行要改2行
用vba实现分段线性插值,增加检测第一列与第二列数组是否相等,给我详细的注释与说明。
如果插值点在范围外,用前两个点插值或者最后两个点插值,并且单元格里面的文字用红色显示。
确保数组下标不出问题。在程序的开始,详细地说明函数的功能以及各个参数代表的意义以及函数
返回值的意义
我提这个要求给人工智能,基本上都错误,需要我自己debug! nyy 发表于 2025-2-18 13:56
我提这个要求给人工智能,基本上都错误,需要我自己debug!
人工智能的好处是写注释很勤快,并且变量名很容易懂。但是遇上bug就只能人工来写了! nyy 发表于 2025-2-18 13:56
我提这个要求给人工智能,基本上都错误,需要我自己debug!
' 函数名:PiecewiseLinearInterpolation
' 功能:该函数用于实现分段线性插值。分段线性插值是一种在给定的离散数据点之间进行线性插值的方法。
' 它将数据点之间的区间视为线性函数,根据插值点所在的区间,利用该区间的两个端点进行线性插值计算。
' 参数:
' xArray:一维数组,代表已知数据点的 x 坐标,要求该数组中的元素必须按升序排列。
' yArray:一维数组,代表已知数据点的 y 坐标,其长度必须与 xArray 相同。
' xValue:要进行插值计算的 x 坐标值。
' 返回值:
' 函数返回根据分段线性插值计算得到的对应 xValue 的 y 坐标值。如果输入的数组长度不相等,函数将返回错误值 CVErr(xlErrValue)。
Function PiecewiseLinearInterpolation(xArray As Variant, yArray As Variant, xValue As Double) As Variant
' 检查输入的 xArray 和 yArray 的长度是否相等
If UBound(xArray) - LBound(xArray) <> UBound(yArray) - LBound(yArray) Then
' 如果长度不相等,返回错误值 CVErr(xlErrValue)
PiecewiseLinearInterpolation = CVErr(xlErrValue)
Exit Function
End If
Dim i As Long
' 查找插值点 xValue 所在的区间
For i = LBound(xArray) To UBound(xArray) - 1
If xValue >= xArray(i) And xValue <= xArray(i + 1) Then
' 如果 xValue 在当前区间内,使用该区间的两个端点进行线性插值
PiecewiseLinearInterpolation = yArray(i) + (yArray(i + 1) - yArray(i)) * (xValue - xArray(i)) / (xArray(i + 1) - xArray(i))
Exit Function
End If
Next i
' 如果 xValue 在已知数据点的范围外
If xValue < xArray(LBound(xArray)) Then
' 如果 xValue 小于最小的 x 坐标,使用前两个点进行插值
PiecewiseLinearInterpolation = yArray(LBound(yArray)) + (yArray(LBound(yArray) + 1) - yArray(LBound(yArray))) * (xValue - xArray(LBound(xArray))) / (xArray(LBound(xArray) + 1) - xArray(LBound(xArray)))
' 将结果单元格的文字颜色设置为红色
Application.Caller.Font.Color = RGB(255, 0, 0)
Else
' 如果 xValue 大于最大的 x 坐标,使用最后两个点进行插值
PiecewiseLinearInterpolation = yArray(UBound(yArray) - 1) + (yArray(UBound(yArray)) - yArray(UBound(yArray) - 1)) * (xValue - xArray(UBound(xArray) - 1)) / (xArray(UBound(xArray)) - xArray(UBound(xArray) - 1))
' 将结果单元格的文字颜色设置为红色
Application.Caller.Font.Color = RGB(255, 0, 0)
End If
End Function
这是豆包写的代码! nyy 发表于 2025-2-19 10:09
这是豆包写的代码!
我告诉豆包
实际运行时,传递进来的xArray,是一个对象,而不是一维数组,你解决一下这个问题。
然后豆包给我新生成了新的代码如下:
' 函数名:PiecewiseLinearInterpolation
' 功能:该函数用于实现分段线性插值。分段线性插值是一种在给定的离散数据点之间进行线性插值的方法。
' 它将数据点之间的区间视为线性函数,根据插值点所在的区间,利用该区间的两个端点进行线性插值计算。
' 参数:
' xRange:Range 对象,代表已知数据点的 x 坐标所在的单元格区域,要求该区域中的元素必须按升序排列。
' yRange:Range 对象,代表已知数据点的 y 坐标所在的单元格区域,其行数必须与 xRange 相同。
' xValue:要进行插值计算的 x 坐标值。
' 返回值:
' 函数返回根据分段线性插值计算得到的对应 xValue 的 y 坐标值。如果输入的区域行数不相等,函数将返回错误值 CVErr(xlErrValue)。
Function PiecewiseLinearInterpolation(xRange As Range, yRange As Range, xValue As Double) As Variant
' 将 Range 对象转换为一维数组
Dim xArray As Variant
Dim yArray As Variant
xArray = Application.Transpose(xRange.Value)
yArray = Application.Transpose(yRange.Value)
' 检查输入的 xArray 和 yArray 的长度是否相等
If UBound(xArray) - LBound(xArray) <> UBound(yArray) - LBound(yArray) Then
' 如果长度不相等,返回错误值 CVErr(xlErrValue)
PiecewiseLinearInterpolation = CVErr(xlErrValue)
Exit Function
End If
Dim i As Long
' 查找插值点 xValue 所在的区间
For i = LBound(xArray) To UBound(xArray) - 1
If xValue >= xArray(i) And xValue <= xArray(i + 1) Then
' 如果 xValue 在当前区间内,使用该区间的两个端点进行线性插值
PiecewiseLinearInterpolation = yArray(i) + (yArray(i + 1) - yArray(i)) * (xValue - xArray(i)) / (xArray(i + 1) - xArray(i))
Exit Function
End If
Next i
' 如果 xValue 在已知数据点的范围外
If xValue < xArray(LBound(xArray)) Then
' 如果 xValue 小于最小的 x 坐标,使用前两个点进行插值
PiecewiseLinearInterpolation = yArray(LBound(yArray)) + (yArray(LBound(yArray) + 1) - yArray(LBound(yArray))) * (xValue - xArray(LBound(xArray))) / (xArray(LBound(xArray) + 1) - xArray(LBound(xArray)))
' 将结果单元格的文字颜色设置为红色
Application.Caller.Font.Color = RGB(255, 0, 0)
Else
' 如果 xValue 大于最大的 x 坐标,使用最后两个点进行插值
PiecewiseLinearInterpolation = yArray(UBound(yArray) - 1) + (yArray(UBound(yArray)) - yArray(UBound(yArray) - 1)) * (xValue - xArray(UBound(xArray) - 1)) / (xArray(UBound(xArray)) - xArray(UBound(xArray) - 1))
' 将结果单元格的文字颜色设置为红色
Application.Caller.Font.Color = RGB(255, 0, 0)
End If
End Function nyy 发表于 2025-2-19 10:21
我告诉豆包
由于我会调试,我一调试,知道问题出在了哪里! nyy 发表于 2025-2-19 10:21
我告诉豆包
代码显示太丑了,我不喜欢自动折行! 我叫chatgpt寫一個求直線與圓的交點坐標,結果出錯,只好手工檢查哪裏出錯,後來找到它把一個加號弄錯了。 ejsoon 发表于 2025-2-20 17:41
我叫chatgpt寫一個求直線與圓的交點坐標,結果出錯,只好手工檢查哪裏出錯,後來找到它把一個加號弄錯了。 ...
具体代码发上来看看!
页:
[1]
2