Квадратное уравнение... (Положительные числа)

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
Здравствуете надо написать программу квадратного уравнения, чтобы a,b и c были положительными, я сделал что-то похожее, но программа все равно и считает при отрицательных, что исправить подскажите пожалуйста:
Код:
var
a: real;
b: real;
c: real;
d: real;
x1: real;
x2: real;
begin
try
a:= StrToFloat(Edit1.Text);
if a>=0 then
begin
ShowMessage('Число "а" положительно, решение разрешено');
end;
a:= StrToFloat(Edit1.Text);

if a<0 then
begin
ShowMessage('Число "а" неположительно, введите другое...');
a:= StrToFloat(Edit1.Text);
end

else

b:= StrToFloat(Edit2.Text);

if b<0 then
begin
ShowMessage('Число "b" неположительно, введите другое...');
b:= StrToFloat(Edit1.Text);
end;

if b>=0 then
begin
ShowMessage('Число "b" положительно, решение разрешено');
end
else

c:= StrToFloat(Edit3.Text);
if c<0 then
begin
ShowMessage('Число "c" неположительно, введите другое...');
c:= StrToFloat(Edit1.Text);
end;

if c>=0 then
begin
ShowMessage('Число "c" положительно, решение разрешено');
end

else
d:= sqr(B)- 4*a*c;


if d>=0 then
begin
x1:= (-b + sqrt(d))/(2*a);
x2:= (-b - sqrt(d))/(2*a);
Label4.Caption := 'x1='+ FloatToStrF(x1,ffFixed,6,2)+#13+
'x2=' + FloatToStrF(x2,ffFixed,6,2);
end
else ShowMessage('Уравнение не имеет корней');
except
on EConvertError do
begin
ShowMessage('Введите данные');
exit;

end;
end;
end;

end.
 
F

flashkpi

#2
У Вас хоть проверки все и сеть, но блок
Код:
if d>=0 then
begin
x1:= (-b + sqrt(d))/(2*a);
x2:= (-b - sqrt(d))/(2*a);
Label4.Caption := 'x1='+ FloatToStrF(x1,ffFixed,6,2)+#13+
'x2=' + FloatToStrF(x2,ffFixed,6,2);
end
стоит отдельно, т.е. он считает независимо от того , что происходило ранее в программе..
 
F

flashkpi

#4
Просто дописать еще перед этим if (a>=0) and (b>=0) and (c>=0) then
Ваши просчеты ...
Впринципе уже так будет работать
 
09.11.2009
665
1
#5
Код:
if d>=0 then
...
begin
if (a>0)and(b>0)and(c>0) then
begin
x1:= (-b + sqrt(d))/(2*a);
x2:= (-b - sqrt(d))/(2*a);
Label4.Caption := 'x1='+ FloatToStrF(x1,ffFixed,6,2)+#13+
'x2=' + FloatToStrF(x2,ffFixed,6,2);
end
else ShowMessage('коэффициенты a,b,c неположительные');
end
...
 
G

Guest

#6
Получилось спс всем)) сейчас другими вариантами попробую))
Код:
 var
a: real;
b: real;
c: real;
d: real;
x1: real;
x2: real;
fl:boolean;
begin
a:= StrToFloat(Edit1.Text);
b:= StrToFloat(Edit2.Text);
c:= StrToFloat(Edit3.Text);
fl:=true;
if a<0 then
begin
fl:=false;
showmessage('A отрицательно, введите другое.');
end
else
showmessage('A подходит');

if b<0 then
begin
fl:=false;
showmessage('b отрицательно, введите другое.');
end
else
showmessage('b подходит');

if c<0 then
begin
fl:=false;
showmessage('C отрицательно, введите другое.');
end
else
showmessage('C подходит');

if fl 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);
Label4.Caption := 'x1='+ FloatToStrF(x1,ffFixed,6,2)+#13+
'x2=' + FloatToStrF(x2,ffFixed,6,2);
end
else ShowMessage('Уравнение не имеет корней');



exit;
end;





end;

end.
Добавлено: А как репутацию всем вам)) тыкнуть? чет не линк))
 
Статус
Закрыто для дальнейших ответов.