IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Написал свой модуль.Помогите доработать
сообщение
Сообщение #1


Гость






Вот написал тут свой первый модуль.По задумке с его помощью
можно возводить в степень как в с++ с помощью функции pow(), и
выполнять численное интегрирования 4 методами. Но в возведении в степень
чего то не хватает, не пойму чего.А ответы совпадают только у метода симпсона
и правых прямоугольников, и то если использовать только тригонометрические функции
в противном случае - Float Overflow. Помогите кто-нибудь доработать.
Код

unit math;
{$F+}
interface
type func=function(x:real):real;
     Tmethod=procedure(a,b:real;n:byte; var x,EoI,h:real); {Metod integrirovanija}
                                                    {Pryamougolnikami.EoI-}
                                                    {End Of Iteration     }

function pow(x,n:real):real;                  {Vozvedenie 'X' v stepen 'N'}
function SimpsonDx(f:func;a,b:real;n:byte):real;{Opred.Integral metodom Simpsona}
function Dx(method:Tmethod;f:func;a,b:real;n:byte):real;{Opred.Integral metodom Pryamougolnikov}
procedure Left(a,b:real;n:byte; var x,EoI,h:real);  {\                                         }
procedure Right(a,b:real;n:byte; var x,EoI,h:real);{ |-Metodi integrirovanija pryamougolnikami}
procedure Middle(a,b:real;n:byte; var x,EoI,h:real);{/                                         }

implementation

function pow(x,n:real):real;
var _x:real;
    _n:integer;
begin
_n:=trunc(n);
if (x<0) and (n-_n=0)  then
   if (n>0) and ((_n mod 2)=0) then _x:=1 else _x:=-1
else
if n=0 then pow:=1 else pow:=exp(n*ln(abs(x)));
end;

function SimpsonDx(f:func; a,b:real; n:byte):real;
var h,integ,x:real;
    i:byte;
begin
if (n mod 2)>0 then inc(n);
h:=(b-a)/n;
integ:=F(a)+F(b)+4*F(a+h);
for i:=1 to (n div 2)-1 do
    begin
    x:=a+2*h*i;
    integ:=integ+2*F(x)+4*F(x+h);
    end;
SimpsonDx:=h*integ/3;
end;

procedure Left(a,b:real;n:byte; var x,EoI,h:real);
begin
     h:=(b-a)/n;
     x:=x+a;
     eoi:=b;
end;

procedure Right(a,b:real;n:byte; var x,EoI,h:real);
begin
     h:=(b-a)/n;
     x:=a;
     eoi:=b-h;
end;

procedure Middle(a,b:real;n:byte; var x,EoI,h:real);
begin
     h:=(b-a)/n;
     x:=a+h/2;
     eoi:=b-h/2;
end;

function Dx(method:Tmethod;f:func;a,b:real;n:byte):real;
var x,h,_dx,eoi:real;
begin
method(a,b,n,x,eoi,h);
repeat
_dx:=_dx+h*f(x);
x:=x+h;
until x>eoi;
Dx:=_dx;
end;

begin
end.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 18.12.2017 21:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"