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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.02.2012, 07:46
Аватар для littlePCgenius
littlePCgenius littlePCgenius вне форума
Прохожий
 
Регистрация: 01.02.2012
Адрес: Магнитогорск
Сообщения: 11
Репутация: 10
По умолчанию математические функции

доброго времени суток!) столкнулась с проблемой, в маткаде есть некая функция root которая возвращает значение аргумента, при котором функция равна нулю...есть ли какой-нибудь аналог этой функии в делфи? если нет, то подскажите, как правильно записать формулу? исходный код во вложениях.
Изображения
Тип файла: jpg Безымянный.jpg (10.6 Кбайт, 17 просмотров)
Ответить с цитированием
  #2  
Старый 01.02.2012, 13:22
Аватар для DelphiM0ZG
DelphiM0ZG DelphiM0ZG вне форума
Новичок
 
Регистрация: 22.10.2011
Сообщения: 62
Репутация: 666
По умолчанию

В Delphi есть модуль Math - функции, которые в нём есть описаны здесь. Аналога этой функции, скорее всего, нет. Поэтому такую функцию как-то самостоятельно писать придётся, как-то так: один параметр - сама функция (процедурный тип данных или как-то распознавать нужно что это за функция).
__________________
Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!..
Ответить с цитированием
Этот пользователь сказал Спасибо DelphiM0ZG за это полезное сообщение:
littlePCgenius (01.02.2012)
  #3  
Старый 01.02.2012, 14:14
Аватар для littlePCgenius
littlePCgenius littlePCgenius вне форума
Прохожий
 
Регистрация: 01.02.2012
Адрес: Магнитогорск
Сообщения: 11
Репутация: 10
По умолчанию

ну так я и предполагала...оч надеялась найти что-то подобное((( но всё равно спасибо, будем пробовать
Ответить с цитированием
  #4  
Старый 01.02.2012, 14:18
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

А это примитивный алгоритм. root(f, x, a, b). a и b - это координаты x, на которых f имеет разные знаки. Поэтому внутри должен быть по крайней мере один корень, если f непрерывная. Решение находится методом деления [a,b] пополам. Если внутри корней несколько, то находится один.
Ответить с цитированием
Этот пользователь сказал Спасибо AlexSku за это полезное сообщение:
littlePCgenius (02.02.2012)
  #5  
Старый 02.02.2012, 08:19
Аватар для littlePCgenius
littlePCgenius littlePCgenius вне форума
Прохожий
 
Регистрация: 01.02.2012
Адрес: Магнитогорск
Сообщения: 11
Репутация: 10
По умолчанию

это что-то вроде этого?

Код:
function root(f,a,b,eps): real;
var fa,fb,fc,c: real;
begin
  fa:=f(a);
  fb:=f(b);
  c:=a/2+b/2;
  fc:=f(c);
  if abs(fc)<eps then root:=c else
  if fa<fb 
    then
      if fc>0 then root:=root(f,a,c,eps) else root:=root(f,c,b,eps)
    else
      if fc>0 then root:=root(f,c,b,eps) else root:=root(f,a,c,eps)

этот код на каком-то сайте нашла, но не совсем его поняла(( если можете, объясните пожалуйста

Последний раз редактировалось littlePCgenius, 02.02.2012 в 08:23.
Ответить с цитированием
  #6  
Старый 02.02.2012, 15:54
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

1) формальные параметры должны иметь типы. a, b, eps это real:
var a, b: real; const eps: real;
f это указатель на функцию, можно написать так:
Код:
type
  TFun = function(x: real): real;

function MyFun(x: real): real;
begin
  Result:= x * 5 + 2;  // пример функции одной переменной
end;

function root(f: TFun; var a, b: real; const eps: real): real;
begin
  ...
  Result:= ...;
end;

2) В примере используется рекурсия, а я бы сделал с помощью цикла.
Ответить с цитированием
  #7  
Старый 02.02.2012, 15:57
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Объяснения:
Код:
function root(f,a,b,eps): real;
var fa,fb,fc,c: real;
begin
  fa:=f(a);
  fb:=f(b);
  c:=a/2+b/2;   // это середина отрезка
  fc:=f(c);
  if abs(fc)<eps then root:=c else  // значение около 0, можно закончить
  if fa<fb     // если нет, то проверим на вдвое узком отрезке
    then
      if fc>0 then root:=root(f,a,c,eps) else root:=root(f,c,b,eps)
    else
      if fc>0 then root:=root(f,c,b,eps) else root:=root(f,a,c,eps)
Ответить с цитированием
Этот пользователь сказал Спасибо AlexSku за это полезное сообщение:
littlePCgenius (03.02.2012)
  #8  
Старый 03.02.2012, 07:08
Аватар для littlePCgenius
littlePCgenius littlePCgenius вне форума
Прохожий
 
Регистрация: 01.02.2012
Адрес: Магнитогорск
Сообщения: 11
Репутация: 10
По умолчанию

вроде теперь все понятно)) огромное спасибо за помощь пойду писать)
Ответить с цитированием
  #9  
Старый 15.04.2012, 13:25
vitalik8311 vitalik8311 вне форума
Прохожий
 
Регистрация: 15.04.2012
Сообщения: 10
Репутация: 10
По умолчанию

Какие математические операции есть в делфи?
Ответить с цитированием
  #10  
Старый 15.04.2012, 13:34
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Arithmetic operators, which take real or integer operands, include +, -, *, /, div, and mod.
The Boolean operators not, and, or, and xor take operands of any Boolean type and return a value of type Boolean.
The operations x shl y and x shr y shift the value of x to the left or right by y bits, which (if x is an unsigned integer) is equivalent to multiplying or dividing x by 2^y; the result is of the same type as x.
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 15.04.2012 в 13:36.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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