nyy 发表于 5 天前

你们用人工智能写的代码,遇到过bug吗?

想用人工智能写个简单的程序,的确是给出了代码,
看起来是正确的,但是实际运行的时候,给不出结果,
只好自己debug,最后还是靠我自己debug,最后得到了结果。

有别人有我这样的经历吗?

KeyTo9_Fans 发表于 5 天前

简单的程序没有问题,复杂的程序需要自己debug,平均每1百行要改2行

nyy 发表于 5 天前

KeyTo9_Fans 发表于 2025-2-18 13:52
简单的程序没有问题,复杂的程序需要自己debug,平均每1百行要改2行

用vba实现分段线性插值,增加检测第一列与第二列数组是否相等,给我详细的注释与说明。
如果插值点在范围外,用前两个点插值或者最后两个点插值,并且单元格里面的文字用红色显示。
确保数组下标不出问题。在程序的开始,详细地说明函数的功能以及各个参数代表的意义以及函数
返回值的意义


我提这个要求给人工智能,基本上都错误,需要我自己debug!

nyy 发表于 5 天前

nyy 发表于 2025-2-18 13:56
我提这个要求给人工智能,基本上都错误,需要我自己debug!

人工智能的好处是写注释很勤快,并且变量名很容易懂。但是遇上bug就只能人工来写了!

nyy 发表于 4 天前

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 发表于 4 天前

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 发表于 4 天前

nyy 发表于 2025-2-19 10:21
我告诉豆包




由于我会调试,我一调试,知道问题出在了哪里!

nyy 发表于 3 天前

nyy 发表于 2025-2-19 10:21
我告诉豆包




代码显示太丑了,我不喜欢自动折行!

ejsoon 发表于 3 天前

我叫chatgpt寫一個求直線與圓的交點坐標,結果出錯,只好手工檢查哪裏出錯,後來找到它把一個加號弄錯了。

nyy 发表于 3 天前

ejsoon 发表于 2025-2-20 17:41
我叫chatgpt寫一個求直線與圓的交點坐標,結果出錯,只好手工檢查哪裏出錯,後來找到它把一個加號弄錯了。 ...

具体代码发上来看看!
页: [1] 2
查看完整版本: 你们用人工智能写的代码,遇到过bug吗?