![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здравствуйте!
Мне нужно найти экстремумы функции методом поразрядного приближения (все еще нужно). 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; |
#2
|
||||
|
||||
![]() Ну судя по сообщение наблюдается ошибка деления на 0. Так-что проверяйте строки где происходит это самое деление. Я таких насчитал у вас 7 штук. Если проходов неочень много, можно пошагово пройтись и проверить где именно ошибка вылазит.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Локальная переменная x не инициализируется каким-либо значением перед тем как использоваться в условии завершения цикла while... Деление на нуль происходит, вероятнее всего, внутри функции F1. Все остальные операции деления в этом участке кода — деление на константу n=10. Если, конечно, проблемный участок именно этот.
|
#4
|
|||
|
|||
![]() Delphi насколько я знаю не только выводит сообщение об ошибке, но и отображает строку кода где она допущенна... так что строку в студию - и желающих помочь станет гораздо больше...
![]() ![]() Я ни в чем никогда не уверен... И в этом тоже... ![]() |