Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2016, 11:22   #1
Артём812
Пользователь
 
Регистрация: 12.10.2016
Сообщений: 12
По умолчанию решение корней уранения

Всем добрый день!
Пишу программу по решению корней квадратного уравнения, при запуске с значением переменной а=0 выдает ошибку invalid floating operation.
В самом файле все прописал, когда а=0 что делать, мож где ошибся, или упустил что-нибудь. вот код:

Код:
procedure TForm1.btn1Click(Sender: TObject);
var x1,x2,a,b,c,d: Real;
begin

a := StrToFloat(Edt1.Text);
b := StrToFloat(Edt2.Text);
c := StrToFloat(Edt3.Text);
d := b*b-4*a*c;
begin
if (a=0) then
lbl3.Caption := 'Делить на нуль нельзя'
else
if (b=0) then
lbl3.Caption := 'Нельзя извлечь корень (отрицательное число)'
end;
else
 begin
 if (d<0) then
 lbl3.Caption := 'Нельзя извлечь корень'
 else
  if (d>0) then
 lbl3.Caption := 'Два корня';
 x1 := (-b + Sqrt(d)) / (2*a);
 x2 := (-b - Sqrt(d)) / (2*a);
 Edt5.Text:=FloatToStr(x1);
 Edt6.Text:=FloatToStr(x2);
 end;
 end;
 end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 12.10.2016 в 11:32.
Артём812 вне форума Ответить с цитированием
Старый 12.10.2016, 11:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы не понимаете, для чего используются BEGIN ... END;
и поэтому ставите их там, где они не нужны (после вычисления d, например, begin не нужен)
и не ставите там, где нужны.

Кстати, Вы лукавите. Ваш код вообще не должен комплироваться, там чисто синтаксические ошибки.

и последнее - форматируйте код с помощью отступов, тогда сразу будет наглядно, где Вы ошиблись со структурой программы.

Успехов!

p.s. кстати, уравнение при a=0 может иметь решение (при B не равном нулю),
только это уже не квадратное уравнение получается, а уравнение вида B*X + C = 0.
для нахождения X можно использовать формулу x := -C / B;

Последний раз редактировалось Serge_Bliznykov; 12.10.2016 в 11:38.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.10.2016, 12:30   #3
Артём812
Пользователь
 
Регистрация: 12.10.2016
Сообщений: 12
По умолчанию

программа запускается и работает, просто выдаёт ошибку, можно было бы помочь решить проблему, а не строить из себя супер-умного
Артём812 вне форума Ответить с цитированием
Старый 12.10.2016, 13:36   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
программа запускается и работает,
я не люблю, когда врут. Код из вашего примера не компилируется.
compile_error.png
Если у Вас в проекте другой код (с исправленной ошибкой), то, допускаю,
что он компилируется и запускается.


В любом случае я Вам объяснил в чём ваши ошибки.
Не хотите слушать - воля ваша, продолжайте в том же духе!
Адью!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.10.2016, 16:07   #5
Артём812
Пользователь
 
Регистрация: 12.10.2016
Сообщений: 12
По умолчанию прошу прощения, код такой

procedure TForm1.btn1Click(Sender: TObject);
var x1,x2,a,b,c,d: Real;
begin

a := StrToFloat( Edt1.Text );
b := StrToFloat( Edt2.Text );
c := StrToFloat( Edt3.Text );
d := b * b - 4 * a * c;
begin
if (a=0) then
lbl3.Caption := 'Делить на нуль нельзя'
else
if (b=0) then
lbl3.Caption := 'Нельзя извлечь корень (отрицательное число)'
end;
begin
if (d<0) then
lbl3.Caption := 'Нельзя извлечь корень'
else
if (d>0) then
lbl3.Caption := 'Два корня';
x1 := (-b + Sqrt( d )) / (2 * a);
x2 := (-b - Sqrt( d )) / (2 * a);
Edt5.Text:=FloatToStr(x1);
Edt6.Text:=FloatToStr(x2);
end;
end;
end.
Артём812 вне форума Ответить с цитированием
Старый 12.10.2016, 16:21   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
procedure TForm1.btn1Click(Sender: TObject);
var x1, x2, a, b, c, d: Real;
begin

  Edt5.Text := '';
  Edt6.Text := '';

  a := StrToFloat(Edt1.Text);
  b := StrToFloat(Edt2.Text);
  c := StrToFloat(Edt3.Text);
  d := b * b - 4 * a * c;
  if (a = 0) then begin
    if (b = 0) then
      lbl3.Caption := 'Нет решений'
    else begin
      lbl3.Caption := 'Один корень';
      x1 := -c / b;
      Edt5.Text := FloatToStr(x1);
    end;
  end
  else begin
    if (d < 0) then
      lbl3.Caption := 'Дискриминант меньше нуля, нет действительных корней'
    else begin
      if (d > 0) then
        lbl3.Caption := 'Два корня'
      else
        lbl3.Caption := 'Один корень';

      x1 := (-b + Sqrt(d)) / (2 * a);
      x2 := (-b - Sqrt(d)) / (2 * a);
      Edt5.Text := FloatToStr(x1);
      Edt6.Text := FloatToStr(x2);

    end;
  end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.10.2016, 18:34   #7
Артём812
Пользователь
 
Регистрация: 12.10.2016
Сообщений: 12
По умолчанию код не компилируется в делфи 7

Большое спасибо за помощь, только при запуске программы, когда должен создаваться ексешник, ничего не происходит. Run with debugging - нет такого файла. Делфи переустановил. В чем может быть проблема. Заранее очень благодарен
Артём812 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, которая будет производить отделение корней графическим способом и уточнить решение итерационным алгоритмом Olecinia Паскаль, Turbo Pascal, PascalABC.NET 28 18.12.2014 16:41
сумма корней 3dg_fan Помощь студентам 2 26.12.2010 16:51
Уточнение корней Настя Кацалап Помощь студентам 0 14.11.2010 11:58
Извлечение корней MalCer Общие вопросы по Java, Java SE, Kotlin 2 27.03.2010 16:10