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

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

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

 
 Ответить  Открыть новую тему 
> Написал свой модуль.Помогите доработать
Negor
сообщение 4.06.2006 13:08
Сообщение #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.07.2025 20:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"