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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2016, 07:28   #1
Прелесть1
 
Регистрация: 27.10.2015
Сообщений: 3
По умолчанию Ошибка в вычислении корня из вещественного числа

Помогите исправить ошибку в программе( там не нравится корень из вещественного). Заранее спасибо!!
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Image1: TImage;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Image2: TImage;
    Label4: TLabel;
    Edit4: TEdit;
    Image3: TImage;
    Label5: TLabel;
    Edit5: TEdit;
    Label6: TLabel;
    Button1: TButton;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Label7: TLabel;
    Label9: TLabel;
    Edit6: TEdit;
    Image8: TImage;
    Image9: TImage;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Image10: TImage;
    Label8: TLabel;
    Image11: TImage;
    Label19: TLabel;
    Image12: TImage;
    Label20: TLabel;
    Label21: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
  var
 a,b,c,d:integer;
 r,q:double;
 p:extended;
    
begin
   a:=StrToInt(Edit2.Text);
   b:=StrToInt(Edit3.Text);
   c:=StrToInt(Edit4.Text);
   d:=StrToInt(Edit5.Text);
   p:=(b-(3*a*a)/8);
   r:=(-3*a*a*a*a)/256+(a*a*b)/16-(c*a)/4+d;
   q:=(a*a*a)/8-(a*b)/2+c;
   Label8.Caption:=FloatToStrF(p,ffFixed,9,2);
   Label9.Caption:=FloatToStrF(q,ffFixed,9,2);
   Label20.Caption:=FloatToStrF(r,ffFixed,9,2);
end;
procedure TForm1.Button2Click(Sender: TObject);
  var
 a,b,c,d,j:integer;
 q:double;
    s:integer;
  k,l,m,n,o,u,z,t:double;
  p:extended;

begin

   s:=StrToInt(Edit6.Text);

   k:=sqrt(2*s-p);
   l:=q/(2*sqrt(2*s-p));
   z:=k*k-4*(l+s);
    if z>0 then
     begin
      m:=(k+sqrt(z))/2;
      n:=(k-sqrt(z))/2;
     end;
    if z=0 then
     begin
      m:=k/2;
      n:=k/2;
     end;
    if z<0 then
     begin
      m:=0;
      n:=0;
     end;
   t:=k*k-4*(-l+s);
    if t>0 then
     begin
      o:=(-k+sqrt(t))/2;
      u:=(-k+sqrt(t))/2;
     end;
    if t=0 then
     begin
      o:=-k/2;
      u:=-k/2;
     end;
    if t<0 then
     begin
      o:=0;
      u:=0;
     end;
Label12.Caption:=FloatToStrF(m,ffFixed,9,2);
Label14.Caption:=FloatToStrF(n,ffFixed,9,2);
Label16.Caption:=FloatToStrF(o,ffFixed,9,2);
Label18.Caption:=FloatToStrF(u,ffFixed,9,2);

end;

end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 31.10.2016 в 08:18.
Прелесть1 вне форума Ответить с цитированием
Старый 31.10.2016, 08:20   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, сразу ошибка здесь:

Цитата:
Код:
procedure TForm1.Button2Click(Sender: TObject);
  var
 a,b,c,d,j:integer;
 q:double;
    s:integer;
  k,l,m,n,o,u,z,t:double;
  p:extended;

begin

   s:=StrToInt(Edit6.Text);

   k:=sqrt(2*s-p);
Вы в переменную p ничего не записывали, она локальная, поэтому там МУСОР!


во-вторых, корень не определён для отрицательных чисел.
поэтому, везде, где может быть отрицательное значение под корнем, нужно делать дополнительную проверку.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Представление вещественного числа... b0nny Общие вопросы по Java, Java SE, Kotlin 4 31.10.2015 17:47
Генерация вещественного числа sawer6 Общие вопросы C/C++ 3 18.04.2011 23:20
Ошибка при вычислении.. CodeExpert Помощь студентам 7 17.02.2010 17:24
вывод вещественного числа olegnaum Общие вопросы C/C++ 8 21.11.2009 21:03
ошибка в вычислении wowka Помощь студентам 4 21.07.2008 15:51