Rак составить программу решения уравнения ax2+bx+c=0 ?

математика програмирование

Rак составить программу решения уравнения ax2+bx+c=0. Программа должна выдавать правильный ответ при любых значениях коэффициентов a, b и c. Может текст программы кто-то знает?
Ответы:
На каком языке программирования?
var a,b,c,d:integer;
x1,x2:real;
begin
write('A = ');
readln(a);
write('B = ');
readln(b);
write('C = ');
readln(c);
d:=b*b-4*a*c;
if a<>0 then
begin
if d>0 then
begin
x1:=(-b-sqrt(d))/(2*a);
x2:=(-b+sqrt(d))/(2*a);
writeln('X1 = ',x1:0:4,' X2 = ',x2:0:4);
end else
if d=0 then
begin
x1:=-b/(2*a);
writeln('X = ',x1:0:4);
end else
writeln('Net korney');
end else
begin
if(b<>0) then
begin
x1:=-c/b;
writeln('X = ',x1:0:4);
end else
if c=0 then
writeln('Beskonechnoe mnoshestvo') else
writeln('Net korney');
end;
readln;
end.
Напишу на 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


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.