编写lisp程序解一元二次方程_VB编程:编写求解一元二次方程 ax2+bx+c=0 的过程,要求a、b、c及解X1、X2都以参数传送的方式与主程序交换数据,输入a,b,c和输出X1,X2的操作入放...

本文介绍如何使用VB编程解决一元二次方程ax²+bx+c=0,包括各种情况的处理,如相等实根、不等实根和共轭复根。通过通用过程equa和辅助函数RootRet实现方程解的计算和输出。
摘要由CSDN通过智能技术生成

VB编程:编写求解一元二次方程 ax2+bx+c=0  的过程,要求a、b、c及解X1、X2都以参数传送的方式与主程序交换数据,输入a,b,c和输出X1,X2的操作入放在主程序中。

解:一元二次方程 ax2+bx+c=0  的解通常有以下几种可能。

(1)当a=0时,不是二次方程,不进行处理。

(2)当b2-4ac=0时,方程有两个相等实根。

(2)当b2-4ac>0时,方程有两个不等实根。

(2)当b2-4ac<0时,方程有两个共轭实根。

求解一元二次方程的通用过程如下:

Sub equa(a As Single, b As Single, c As Single, x1, x2)

If Abs(a) <= 0.000001 Then

MsgBox "该方程不是二次方程"

Exit Sub

Else

disc = b * b - 4 * a * c

End If

If Abs(disc) <= 0.000001 Then

Flag = 1

x1 = -b / (2 * a)

x2 = -b / (2 * a)

ElseIf disc > 0.000001 Then

Flag = 2

x1 = (-b + Sqr(disc)) / (2 * a)

x2 = (-b - Sqr(disc)) / (2 * a)

Else

Flag = 3

realpart = -b / (2 * a)

imagpart = Sqr(-disc) / (2 * a)

x1 = realpart & "+" & imagpart & "i"

x2 = realpart & "-" & imagpart & "i"

End If

End Sub

在上面的过程中,首先判断a的值是否为0,如果为0则退出。如果不为0,则计算判别式b2-4ac的值,并把它赋予变量disc。这里应注意,disc是一个实数,由于实数在计算和存储会有一些小的误差,因此不能直接判断disc是否等于0,因为这样可能会出现本来是0的量,由于上述误差而被判定为等于0,从而导致结果错误。这里采取的办法是,判别disc的绝对值(Abs(disc))是否小于一个很小的数(例如10-6),如果小于此数,则认为disc=0。过程用realpart和imagpart分别代表实部和虚部。

上述过程中的Flag是一个标志变量,在窗体层定义,当该变量为1,2和3时,分别代表方程有两个相同实根,两个不同的实根和两个共轭复根三种情况。通过一个Function过程来返回这三种情况,该过程如下:

Function RootRet() As String

If Flag = 1 Then

RootRet = "方程有两个相等实根"

ElseIf Flag = 2 Then

RootRet = "方程有两个不等实根"

ElseIf Flag = 2 Then

RootRet = "方程有两个共轭实根"

End If

End Function

该过程中的Flag的值在Equa过程中赋予。其初值为0,在Form_load过程中设置,过程如下:

Private Sub Form_Load()

Flag = 0

End Sub

在下面的事件过程中调用上面的两个通用过程,输出一元二次方程的解:

Private Sub Form_click()

equa 2, 6, 1, x1, x2

Print

Print "a=2,b=6,c=1"

Print RootRet

Print "x1="; x1, "x2="; x2

Print

Flag = 0

equa 1, 2, 1, x1, x2

Print

Print "a=1,b=2,c=1"

Print RootRet

Print "x1="; x1, "x2="; x2

Print

Flag = 0

equa 1, 2, 2, x1, x2

Print

Print "a=1,b=2,c=2"

Print RootRet

Print "x1="; x1, "x2="; x2

Flag = 0

End Sub

该过程通过三组数调用Equa和RootRet过程。这里直接对a,b,c进行赋值,也可以用InputBox函数从键盘上输入。程序运行后单击窗体,结果如下图所示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值