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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2011, 14:32   #1
Kugen
 
Регистрация: 13.12.2010
Сообщений: 7
По умолчанию Не правильно вычисляет корни квадратного уравнения

Суть указана в заголовке темы. При больших числах она не правильно считает корни уравнения, хотя дискриминант находит правильно...Писал на 7 делфи
код
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    Edit3: TEdit;
    Button1: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    GroupBox1: TGroupBox;
    Edit4: TEdit;
    Label7: TLabel;
    Edit5: TEdit;
    Label8: TLabel;
    Edit6: TEdit;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,x1,x2:Real;
begin
    {чистим лабелы}
label3.Caption:='';label4.Caption:='';label5.Caption:='';label6.Caption:='';label10.Caption:='';
    {Решение уравнения}
  a:=strtofloat(edit1.Text);
  b:=strtofloat(edit2.Text);
  c:=strtofloat(edit3.Text);
  d:=b*b-4*a*c;
if d>=0 then
begin
  x1:=(-b + sqrt(d))/2*a;
  x2:=(-b - sqrt(d))/2*a;
    {Выводим значения корней и дискриминанта}
  label3.Caption := ' первый корень: '+floattostr(x1);
  label4.Caption := ' второй корень: ' +floattostr(x2);
  label5.Caption := ' дискриминант:  ' +floattostr(d);
end;
{if d<0 then
begin
  While (d<0) Do Begin
  b:=b+1;
  d:=b*b-4*a*c ; end;
  x1:=(-b-sqrt(d))/2*a;
  x2:=(-b+sqrt(d))/2*a;
    label6.Caption:= ' дискриминант: ' +floattostr(d)+
  ' первый корень: '+floattostr(x1)+
  ' второй корень: ' +floattostr(x2);
  edit4.Text:=floattostr(a);
  edit5.Text:=floattostr(b);
  edit6.Text:=floattostr(c);
  label10.Caption:= ' дискриминант: ' +floattostr(d)+
  ' первый корень: '+floattostr(x1)+
  ' второй корень: ' +floattostr(x2);
end;}
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in ['A'..'Z','a'..'z'] then key :=#0;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if Key in ['A'..'Z','a'..'z'] then key :=#0;
end;


end.
Вложения
Тип файла: rar prog1.rar (169.1 Кб, 5 просмотров)
Kugen вне форума Ответить с цитированием
Старый 18.06.2011, 15:14   #2
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Вот изучайте :

Как посчитать корни квадратного уравнения

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 18.06.2011, 15:17   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
 x1:=(-b + sqrt(d))/2/a;
  x2:=(-b - sqrt(d))/2/a;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 18.06.2011, 17:25   #4
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
Код:
 x1:=(-b + sqrt(d))/2/a;
  x2:=(-b - sqrt(d))/2/a;
А, как же формула ?




Код:
if d < 0 then
x1 := (-b + Sqrt(d)) / (2 * a);
x2 := (b + Sqrt(d)) / (2 * a);

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 18.06.2011, 17:29   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
А, как же формула ?
а разница?
например
12/(6*2)=12/12=1
12/6/2=2/2=1
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 18.06.2011, 18:49   #6
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
а разница?
например
12/(6*2)=12/12=1
12/6/2=2/2=1
Согласен, не подумал.

А, вот со знаками, как быть.

Код:
x1 := (-b + Sqrt(d)) / (2 * a);
x2 := (b + Sqrt(d)) / (2 * a);

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 19.06.2011, 08:24   #7
Kugen
 
Регистрация: 13.12.2010
Сообщений: 7
По умолчанию

всем спасибо. Действительно, не хватало скобочек.
Kugen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция возвращающая корни квадратного уравнения C++ synthetic rabbit Помощь студентам 1 11.01.2011 00:30
найти корни квадратного уравнения с высокой точностью FL8 Фриланс 10 23.12.2010 23:04
корни квадратного уравнения, пример Alexxx92 Помощь студентам 5 18.02.2009 23:37
корни квадратного уравнения InseR Общие вопросы Delphi 12 01.06.2007 17:30