Как в Lazarus (или Delphi) решить квадратное уравнение (), когда ?

0 голосов
99 просмотров

Как в Lazarus (или Delphi) решить квадратное уравнение (ax^{2} + bx + c = 0), когда ax^{2} = 0 ?


image

Информатика (768 баллов) | 99 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Просто добавить условие, что делить на 0 нельзя.

Delphi/Lazarus
------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  a, b, c, d, x1, x2: real;
begin
  a := StrToFloat(Edit1.Text);
  b := StrToFloat(Edit2.Text);
  c := StrToFloat(Edit3.Text);
  if a <> 0 then
  begin
       d := sqr(b) - 4 * a * c;
       if (d > 0) then
       begin
            x1 := (-b+sqrt(d))/(2*a);
            x2 := (-b-sqrt(d))/(2*a);
            Label1.Caption := 'x1 = ' + FloatToStr(x1);
            Label2.Caption := 'x2 = ' + FloatToStr(x2);
       end
       else
       if d = 0 then
       begin
            x1:=-b /(2*a);
            x2:=x1;
            Label1.Caption := 'x1 = ' + FloatToStr(x1);
            Label2.Caption := 'x2 = ' + FloatToStr(x2);
       end
       else
       if d < 0 then
          ShowMessage('Корней нет');
  end
  else
  if (a = 0) and (b = 0) and (c = 0) then
    ShowMessage('X = любое.')
  else
  if (a = 0) and (b = 0) then
    ShowMessage('Решений нет.')
  else
  if (a = 0) then
  begin
    x1 := (-c)/b;
    Label1.Caption := 'x = ' + FloatToStr(x1);
    Label2.Caption := '';
  end;
end;


image
image
image
(9.4k баллов)
0

Нам дали задание, сделать так, чтобы при значении а = 0, уравнение всё равно решалось.

0

И тогда получится уравнение: bx + c = 0

0

Отредактировал.

0

А ты знаешь команду остановки решения задания в конкретном месте?

0

Есть break для прерывания цикла и exit для прерывания процедуры, но их обычно избегают.

0

Просто, когда дискриминант меньше нуля, оно пишет "Нет корней", но всё равно решает и выводит ответ, а мне нужно, чтобы после этой фразы у меня не было решения

0

Он ничего не решает. Наверно просто результаты предыдущего решения остались. Просто сотри их. Поменяй строчку if d < 0 then ShowMessage('Корней нет'); на if d < 0 then begin Label1.Caption := ''; Label2.Caption := ''; ShowMessage('Корней нет'); end;

0

Хорошо

0

То же самое. Оно сначала пишет "Корней нет" и Label пустые, а после нажатия "ОК", оно мне выбивает какой-то ответ.