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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2012, 02:23   #1
kenkenken
Новичок
Джуниор
 
Регистрация: 04.05.2012
Сообщений: 3
По умолчанию Не пойму почему выскакивает overflow

Код:
unit Kyrsachello;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart;

type
  TForm2 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label8: TLabel;
    Label9: TLabel;
    Edit6: TEdit;
    Edit7: TEdit;
    Chart1: TChart;
    Series1: TLineSeries;
    Series2: TLineSeries;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

function f1(l1,b1,a,n1,n2:extended):extended;
   begin
        f1:=l1*n1-b1*a*n1*n2;  // ВОТ ТУТ ВЫСКАКИВАЕТ И ПИШЕТ " raised exception class EOverflow with message 'Floating point overflow' "
   end;

function f2(l2,b2,a,n1,n2:extended):extended;
   begin
        f2:=-l2*n2+b2*a*n1*n2;
   end;

procedure TForm2.Button1Click(Sender: TObject);
const h = 0.01;

var l1,l2,b1,b2,a,n1,n2,st:extended;
p:integer;
k1,k2,k3,k4,m1,m2,m3,m4:extended;
begin
a := StrToFloat(Edit1.Text);
l1 := StrToFloat(Edit2.Text);
l2 := StrToFloat(Edit3.Text);
b1 := StrToFloat(Edit4.Text);
b2 := StrToFloat(Edit5.Text);
n1 := StrToFloat(Edit6.Text);
n2 := StrToFloat(Edit7.Text);
st := -h;

for p := 1 to 500 do
 begin
    st := st + h;
    k1 := h * f1(l1,b1,a,n1,n2);
    m1 := h * f2(l2,b2,a,n1,n2);

    k2 := h * f1(l1,b1,a, n1 + k1/2, n2 + m1/2);
    m2 := h * f2(l2,b2,a, n1 + k1/2, n2 + m1/2);

    k3 := h * f1(l1,b1,a,n1 + k2/2, n2 + m2/2);
    m3 := h * f2(l2,b2,a,n1 + k2/2, n2 + m2/2);

    k4 := h * f1(l1,b1,a,n1 + k3,n2 + m3);
    m4 := h * f2(l2,b2,a,n1 + k3,n2 + m3);

    Chart1.Series[0].AddXY(st, n1, '', clTeeColor);
    Chart1.Series[1].AddXY(st, n2, '', clTeeColor);

    n1 := n1 + (1/6) * ( k1 + 2 * k2 + 2 * k3 + k4);
    n2 := n2 + (1/6) * ( m1 + 2 * m2 + 2 * m3 + m4);

    end;


end;

procedure TForm2.Button2Click(Sender: TObject);
begin
Form2.Close; // çàêðûòü ãëàâíîå îêíî ïðîãðàììû
end;

procedure TForm2.FormCreate(Sender: TObject);
begin

end;

end.
Прога на тему "математическая теория популяций"

Последний раз редактировалось Stilet; 05.05.2012 в 12:03.
kenkenken вне форума Ответить с цитированием
Старый 05.05.2012, 03:54   #2
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Код:
function f1(l1,b1,a,n1,n2:extended):extended ;
begin
f1:=l1*n1-b1*a*n1*n2; // ВОТ ТУТ ВЫСКАКИВАЕТ И ПИШЕТ " raised exception class EOverflow with message 'Floating point overflow' "
end;

function f2(l2,b2,a,n1,n2:extended):extended ;
begin
Res:=-l2*n2+b2*a*n1*n2;
end;
Странные функции) Попробуйте вот так
Код:
function f1(l1,b1,a,n1,n2:extended):extended ;
var Res:Extended;
begin
Res:=l1*n1-b1*a*n1*n2;
Result:=Res;
end;

function f2(l2,b2,a,n1,n2:extended):extended ;
var Res:Extended;
begin
Res:=-l2*n2+b2*a*n1*n2;
Result:=Res;
end;
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 05.05.2012, 04:25   #3
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Иногда в результате выполнения f1 получается слишком большое число
dolphin705 вне форума Ответить с цитированием
Старый 05.05.2012, 23:46   #4
kenkenken
Новичок
Джуниор
 
Регистрация: 04.05.2012
Сообщений: 3
По умолчанию

Не помогает. Теперь косяк выскакивает в res
kenkenken вне форума Ответить с цитированием
Старый 05.05.2012, 23:47   #5
kenkenken
Новичок
Джуниор
 
Регистрация: 04.05.2012
Сообщений: 3
По умолчанию

Функции из книжки нашего декана. Леонов - Теория управления))
kenkenken вне форума Ответить с цитированием
Старый 06.05.2012, 00:51   #6
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Исключительные ситуации еще не учили?
=master= вне форума Ответить с цитированием
Старый 06.05.2012, 14:42   #7
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от =master= Посмотреть сообщение
Исключительные ситуации еще не учили?
Может он и учил, но хочет знать почему
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 06.05.2012, 15:47   #8
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

chertovich если "почему", то тогда врядли, читать-то не обучен, это видно.
=master= вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
with ... do - не пойму почему ошибка MyLastHit Общие вопросы Delphi 2 23.12.2010 15:26
не пойму почему так (comm32) yuta_86 Общие вопросы Delphi 11 15.12.2010 16:07
Не пойму почему ошибка... ImmortalAlexSan Общие вопросы Delphi 13 22.08.2010 20:26
не пойму почему. spaun88 Общие вопросы Delphi 8 09.06.2010 17:26
C# Почему выскакивает ошибка. slim>>> Помощь студентам 6 10.02.2010 17:57