Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.136.97.64] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
написал прогу по расчету корней биквадратного уравнения, при компиляции проекта ошибок не выдает, вот код программы:
procedure TForm1.btn1Click(Sender: TObject); var x1, x2, y1, y2, x3, x4, a, b, c, d: Real; begin Edt4.Text := ''; Edt5.Text := ''; Edt6.Text := ''; Edt7.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 lbl1.Caption := 'Нет решений' else begin lbl1.Caption := 'Два корня'; y1 := -c / b; if (y1<0) then lbl1.Caption := 'Нет решений' else if (y1>0) then x1 := Sqrt(y1); x2 :=-Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt5.Text := FloatToStr(x2); end; end else begin if (d=0) then begin if (y1<0) then lbl1.Caption := 'Нет решений' else if (y1>0) then y1 := (-b)/(2 * a); lbl1.Caption := 'Два корня'; x1 := Sqrt(y1); x2 := -Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt6.Text := FloatToStr(x2); end else if (d < 0) then lbl1.Caption := 'Дискриминант меньше нуля,нет корней' else if (d > 0) then y1 := (-b + Sqrt(d)) / (2 * a); y2 := (-b - Sqrt(d)) / (2 * a); if (y1<0) and (y2<0) then lbl1.Caption := 'Нет решений'; if (y1>0) and (y2<0) then lbl1.Caption := 'Два корня'; x1 := Sqrt(y1); x3 := -Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt6.Text := FloatToStr(x3); if (y1<0) and (y2>0) then lbl1.Caption := 'Два корня'; x2 := Sqrt(y2); x4 := -Sqrt(y2); edt5.Text := FloatToStr(x2); edt7.Text := FloatToStr(x4); if (y1>0) and (y2>0) then lbl1.Caption := 'Четыре корня'; x1 := Sqrt(y1); x2 := Sqrt(y2); x3 := -Sqrt(y1); x4 := -Sqrt(y2); Edt4.Text := FloatToStr(x1); edt5.Text := FloatToStr(x2); Edt6.Text := FloatToStr(x3); Edt7.Text := FloatToStr(x4); end; end; end. после запуска программы, например с коэффициэнтами (а=1, в=4, с=-21) выдает ошибку invalid floating operation в чём может быть ошибка? Заранее спасибо за помощь. |
Сообщ.
#2
,
|
|
|
M Используем тег [code] для добавления текста программы в пост! Устное предупреждение! Читаем правила! |
Сообщ.
#3
,
|
|
|
Цитата Artem812 @ Во втором случае (когда d>0) увас вычисляется y1=3 и y2=-7. И вот в строкахв чём может быть ошибка? if (y1<0) and (y2>0) then lbl1.Caption := 'Два корня'; x2 := Sqrt(y2); x4 := -Sqrt(y2); Цитата Artem812 @ выдает ошибку invalid floating operation |
Сообщ.
#4
,
|
|
|
То есть нужно поставить бегите после условия?
Добавлено Бегин? |
Сообщ.
#5
,
|
|
|
Поправил все в программе, теперь когда а=1, в=1, с=1 пишет ivalid floating operation, мож кто подскажет, в чем дело?
Прикреплённый файлProject1.dpr (223 байт, скачиваний: 87) |
Сообщ.
#6
,
|
|
|
Цитата Artem812 @ Основной код расчёта приведите здесь. Поправил все в программе |
Сообщ.
#7
,
|
|
|
Цитата Славян @ Цитата Artem812 @ Основной код расчёта приведите здесь. Поправил все в программе procedure TForm1.btn1Click(Sender: TObject); var x1, x2, y1, y2, x3, x4, a, b, c, d: Real; begin Edt4.Text := ''; Edt5.Text := ''; Edt6.Text := ''; Edt7.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 lbl1.Caption := 'Íåò ðåøåíèé' else begin lbl1.Caption := 'Äâà êîðíÿ'; y1 := -c / b; end else if (y1<0) then begin lbl1.Caption := 'Íåò ðåøåíèé' end else if (y1>0) then begin x1 := Sqrt(y1); x2 :=-Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt5.Text := FloatToStr(x2); end; end else begin if (d=0) then begin if (y1<0) then lbl1.Caption := 'Íåò ðåøåíèé' else if (y1>0) then y1 := (-b)/(2 * a); lbl1.Caption := 'Äâà êîðíÿ'; x1 := Sqrt(y1); x2 := -Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt6.Text := FloatToStr(x2); end else if (d < 0) then begin lbl1.Caption := 'Äèñêðèìèíàíò ìåíüøå íóëÿ,íåò êîðíåé' end else if (d > 0) then y1 := (-b + Sqrt(d)) / (2 * a); y2 := (-b - Sqrt(d)) / (2 * a); if (y1<0) and (y2<0) then begin lbl1.Caption := 'Íåò ðåøåíèé'; end else if (y1>0) and (y2<0) then begin lbl1.Caption := 'Äâà êîðíÿ'; x1 := Sqrt(y1); x3 := -Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt6.Text := FloatToStr(x3); end else if (y1<0) and (y2>0) then begin lbl1.Caption := 'Äâà êîðíÿ'; x2 := Sqrt(y2); x4 := -Sqrt(y2); edt5.Text := FloatToStr(x2); edt7.Text := FloatToStr(x4); end else if (y1>0) and (y2>0) then begin lbl1.Caption := '×åòûðå êîðíÿ'; x1 := Sqrt(y1); x2 := Sqrt(y2); x3 := -Sqrt(y1); x4 := -Sqrt(y2); Edt4.Text := FloatToStr(x1); edt5.Text := FloatToStr(x2); Edt6.Text := FloatToStr(x3); Edt7.Text := FloatToStr(x4); end; end; end; end. |
Сообщ.
#8
,
|
|
|
У вас опять не всюду begin'ы/end'ы расставлены. Скажем, здесь же явно не хватает:
if (d > 0) then y1 := (-b + Sqrt(d)) / (2 * a); y2 := (-b - Sqrt(d)) / (2 * a); if (y1>0) then y1 := (-b)/(2 * a); lbl1.Caption := 'Два корня'; x1 := Sqrt(y1); x2 := -Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt6.Text := FloatToStr(x2); |
Сообщ.
#9
,
|
|
|
Цитата Славян @ У вас опять не всюду begin'ы/end'ы расставлены. Скажем, здесь же явно не хватает: if (d > 0) then y1 := (-b + Sqrt(d)) / (2 * a); y2 := (-b - Sqrt(d)) / (2 * a); if (y1>0) then y1 := (-b)/(2 * a); lbl1.Caption := 'Два корня'; x1 := Sqrt(y1); x2 := -Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt6.Text := FloatToStr(x2); procedure TForm1.btn1Click(Sender: TObject); var x1, x2, y1, y2, x3, x4, a, b, c, d: Real; begin Edt4.Text := ''; Edt5.Text := ''; Edt6.Text := ''; Edt7.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 lbl1.Caption := 'Íåò ðåøåíèé' else begin lbl1.Caption := 'Äâà êîðíÿ'; y1 := -c / b; end; if (y1<0) then begin lbl1.Caption := 'Íåò ðåøåíèé' end else if (y1>0) then begin x1 := Sqrt(y1); x2 :=-Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt5.Text := FloatToStr(x2); end; end else begin if (d=0) then begin if (y1<0) then begin lbl1.Caption := 'Íåò ðåøåíèé'; end else if (y1>0) then begin y1 := (-b)/(2 * a); lbl1.Caption := 'Äâà êîðíÿ'; x1 := Sqrt(y1); x2 := -Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt6.Text := FloatToStr(x2); end; end else if (d < 0) then begin lbl1.Caption := 'Äèñêðèìèíàíò ìåíüøå íóëÿ,íåò êîðíåé'; end else if (d > 0) then begin y1 := (-b + Sqrt(d)) / (2 * a); y2 := (-b - Sqrt(d)) / (2 * a); end else if (y1<0) and (y2<0) then begin lbl1.Caption := 'Íåò ðåøåíèé'; end else if (y1>0) and (y2<0) then begin lbl1.Caption := 'Äâà êîðíÿ'; x1 := Sqrt(y1); x3 := -Sqrt(y1); Edt4.Text := FloatToStr(x1); Edt6.Text := FloatToStr(x3); end else if (y1<0) and (y2>0) then begin lbl1.Caption := 'Äâà êîðíÿ'; x2 := Sqrt(y2); x4 := -Sqrt(y2); edt5.Text := FloatToStr(x2); edt7.Text := FloatToStr(x4); end else if (y1>0) and (y2>0) then begin lbl1.Caption := '×åòûðå êîðíÿ'; x1 := Sqrt(y1); x2 := Sqrt(y2); x3 := -Sqrt(y1); x4 := -Sqrt(y2); Edt4.Text := FloatToStr(x1); edt5.Text := FloatToStr(x2); Edt6.Text := FloatToStr(x3); Edt7.Text := FloatToStr(x4); end; end; end; end. теперь ругается на invalid floating operation когда а=1, в=1, с=1 |
Сообщ.
#10
,
|
|
|
Пока немножко уход в сторону, - если у вас a=0, b=1, то y1 расчитываться не будет, а вот проверяться условие с ним будет, что неправильно.
|
Сообщ.
#11
,
|
|
|
Цитата Славян @ Пока немножко уход в сторону, - если у вас a=0, b=1, то y1 расчитываться не будет, а вот проверяться условие с ним будет, что неправильно. это где а = 0 и в=0? |
Сообщ.
#12
,
|
|
|
А, в остальном, у меня ваш код работает нормально, - так (как у вас) не ругается.
|
Сообщ.
#13
,
|
|
|
Цитата Славян @ А, в остальном, у меня ваш код работает нормально, - так (как у вас) не ругается. То есть без ошибок? Подскажите, где проверяется условие с а? |
Сообщ.
#14
,
|
|
|
Цитата Artem812 @ Что-то я ошибся. Это если a=0 и b=0, то напишет что надо, но потом всё равно пойдёт проверять y1, что неверно (там end после вычисления y1 лишний, думается). это где а = 0 и в=0? |
Сообщ.
#15
,
|
|
|
Тогда почему высказывает ошибка, или у Вас все работает без ошибок?
|