Напишу на Visual Basic
На форме будет 5 текстовых полей: txtA, txtB, txtC (для ввода), txtX1, txtX2 (для вывода)
И две кнопки: "Выход", на которой висит программа из одной команды End
И "Решить", на которой висит основная программа
' Объявляем переменные
Dim a As Double, b As Double, c As Double, D As Double
Dim stra As String, strb As String, strc As String, zap As Integer
stra = txtA.Text: strb = txtB.Text: strc = txtC.Text: txtX1.Text = "": txtX2.Text = ""
' Проверяем десятичные запятые во введенных числах и меняем их на точки
' Это необходимо сделать, потому что пользователь скорее всего напишет запятые,
' а VB понимает в числах только точки
If stra = "" Then
a = 0
Else
zap = InStr(1, stra, ",", vbTextCompare) ' Ищем десятичную запятую в txtA
If zap > 0 Then stra = Left(stra, zap - 1) & "." & Mid(stra, zap + 1) ' Меняем на точку
a = Val(stra)
End If
If strb = "" Then
b = 0
Else
zap = InStr(1, strb, ",", vbTextCompare) ' Ищем десятичную запятую в txtB
If zap > 0 Then strb = Left(strb, zap - 1) & "." & Mid(strb, zap + 1) ' Меняем на точку
b = Val(strb)
End If
If strc = "" Then
c = 0
Else
zap = InStr(1, strc, ",", vbTextCompare) ' Ищем десятичную запятую в txtC
If zap > 0 Then strc = Left(strc, zap - 1) & "." & Mid(strc, zap + 1) ' Меняем на точку
c = Val(strc)
End If
' Проверяем различные сочетания переменных a, b, c
If (a = 0) And (b = 0) And (c = 0) Then
txtX1.Text = "Решений беск. много" ' Если a = b = c = 0
ElseIf (a = 0) And (b = 0) And (c <> 0) Then
txtX1.Text = "Решений нет" ' Если a = b = 0, c <> 0
ElseIf (a = 0) And (b <> 0) Then
stra = Str(-c / b) ' Если a = 0, b <> 0, c любое
zap = InStr(1, stra, ".", vbTextCompare) ' Находим десятичную точку
If zap > 0 Then stra = Left(stra, zap - 1) & "," & Mid(stra, zap + 1) ' Меняем на привычную запятую
If Left(stra, 1) = "," Then stra = "0," & Mid(stra, 2)
If Left(stra, 2) = "-," Then stra = "-0," & Mid(stra, 3)
txtX1.Text = stra ' Выводим единственный корень
Else ' Самый общий случай - если a =/= 0, b и с любые
D = b * b - 4 * a * c ' Находим дискриминант D
If D >= 0 Then ' Если D > 0, то у нас 2 разных действительных корня. Если D = 0, то 2 равных.
stra = Str(-b / (2 * a) - Sqr(D) / (2 * a)) ' Вычисляем x1
zap = InStr(1, stra, ".", vbTextCompare) ' Заменяем точку на запятую
If zap > 0 Then stra = Left(stra, zap - 1) & "," & Mid(stra, zap + 1)
If Left(stra, 1) = "," Then stra = "0," & Mid(stra, 2)
If Left(stra, 2) = "-," Then stra = "-0," & Mid(stra, 3)
txtX1.Text = stra ' Выводим x1
strb = Str(-b / (2 * a) + Sqr(D) / (2 * a)) ' Вычисляем x2
zap = InStr(1, strb, ".", vbTextCompare) ' Заменяем точку на запятую
If zap > 0 Then strb = Left(strb, zap - 1) & "," & Mid(strb, zap + 1)
If Left(strb, 1) = "," Then strb = "0," & Mid(strb, 2)
If Left(strb, 2) = "-," Then strb = "-0," & Mid(strb, 3)
txtX2.Text = strb ' Выводим x2
ElseIf D < 0 Then ' Если D < 0, то у нас 2 комплексно-сопряженных корня
' Если тебе это не нужно, то можешь эту часть не писать
stra = Str(-b / (2 * a)) ' Вычисляем действительную часть, она одинакова у обоих корней
zap = InStr(1, stra, ".", vbTextCompare) ' Заменяем точку на запятую
If zap > 0 Then stra = Left(stra, zap - 1) & "," & Mid(stra, zap + 1)
If Left(stra, 1) = "," Then stra = "0," & Mid(stra, 2)
If Left(stra, 2) = "-," Then stra = "-0," & Mid(stra, 3)
strb = Trim(Str(Sqr(-D) / (2 * a))) ' Вычисляем комплексную часть, они у корней противоположные
zap = InStr(1, strb, ".", vbTextCompare) ' Заменяем точку на запятую
If zap > 0 Then strb = Left(strb, zap - 1) & "," & Mid(strb, zap + 1)
If Left(strb, 1) = "," Then strb = "0," & Mid(strb, 2)
If Left(strb, 2) = "-," Then strb = "-0," & Mid(strb, 3)
txtX1.Text = stra & "- i*" & strb ' Выводим комплексный x1
txtX2.Text = stra & "+ i*" & strb ' Выводим комплексный x2
' Здесь кончается часть про комплексные корни.
End If
End If
End Sub