Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.06.2009, 12:40
Polina.from Polina.from вне форума
Прохожий
 
Регистрация: 04.06.2009
Сообщения: 2
Репутация: 10
По умолчанию Floating point division by zero. Где ошибка?

Здравствуйте!
Мне нужно найти экстремумы функции методом поразрядного приближения (все еще нужно). Delphi выдает Floating point division by zero. Где тут ошибка?

Код:
function F1(x: real):real;
  begin
    F1:=Ln(x)/Sqrt(x);
  end;

procedure TForm1.Result1Click(Sender: TObject);
  const n=10;

  var
    h,x: real;

  begin
    try
      eps:=StrToFloat(Trim(Edit2.Text)); //ïðåîáðàçóåì ââîä â ÷èñëî
    except //åñëè âîçíèêëà îøèáêà
      ShowMessage('Íåâåðíî çàäàíà òî÷íîñòü');
      Edit2.SetFocus;
      Exit;
    end;
    try
      a:=StrToFloat(Trim(Edit3.Text)); //ïðåîáðàçóåì ââîä â ÷èñëî
    except //åñëè âîçíèêëà îøèáêà
      ShowMessage('Íåâåðíî çàäàíà íèæíÿÿ ãðàíèöà èññëåäóåìîãî èíòåðâàëà');
      Edit3.SetFocus;
      Exit;
    end;
    try
      b:=StrToFloat(Trim(Edit4.Text)); //ïðåîáðàçóåì ââîä â ÷èñëî
    except //åñëè âîçíèêëà îøèáêà
      ShowMessage('Íåâåðíî çàäàíà âåðõíÿÿ ãðàíèöà èññëåäóåìîãî èíòåðâàëà');
      Edit4.SetFocus;
      Exit;
    end;
    if a<=0 then
      begin
      ShowMessage('Íèæíÿÿ ãðàíèöà èíòåðâàëà íå âõîäèò â îáëàñòü äîïóñòèìûõ çíà÷åíèé ôóíêöèè');
      Edit3.SetFocus;
      Exit;
      end;
    if b<a then
      ShowMessage('Çíà÷åíèå íèæíåé ãðàíèöû èññëåäóåìîãî èíòåðâàëà íå äîëæíî ïðåâûøàòü çíà÷åíèå âåðõíåé')
    else
      begin
        h:=(b-a)/n;
        begin
          c:=a;
          d:=b;
          while h>=eps do
            begin
              begin
                while x<=d do
                begin
                  x:=c+h;
                  Xmin:=c;
                  if F1(x)<F1(Xmin) then Xmin:=x;
                end;
              end;
              if Xmin=a then
              begin
                c:=Xmin;
                d:=Xmin+h;
                h:=h/n;
              end;
              if Xmin=b then
              begin
                c:=Xmin-h;
                d:=Xmin;
                h:=h/n;
              end;
              if (Xmin<>a) or (Xmin<>b) then
              begin
                c:=Xmin-h;
                d:=Xmin+h;
                h:=h/n;
              end;
            end;
        end;
        begin
          c:=a;
          d:=b;
          while h>=eps do
            begin
              begin
                while x<=d do
                begin
                  x:=c+h;
                  Xmax:=c;
                  if F1(x)>F1(Xmax) then Xmax:=x;
                end;
              end;
              if Xmax=a then
              begin
                c:=Xmax;
                d:=Xmax+h;
                h:=h/n;
              end;
              if Xmax=b then
              begin
                c:=Xmax-h;
                d:=Xmax;
                h:=h/n;
              end;
              if (Xmin<>a) or (Xmin<>b) then
              begin
                c:=Xmax-h;
                d:=Xmax+h;
                h:=h/n;
              end;
            end;
        end;
      end;
    Label15.Caption:=FloatToStrF(F1(Xmin),ffFixed,7,7);
    Label14.Caption:=FloatToStrF(F1(Xmax),ffFixed,7,7);
end;
Ответить с цитированием
 


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:20.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025