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

Delphi Sources



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

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.06.2009, 15:24
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;

Последний раз редактировалось Polina.from, 07.06.2009 в 12:49.
Ответить с цитированием
 


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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