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

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

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

> Определенный интеграл
PUMA
сообщение 19.06.2010 18:18
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Женский
Реальное имя: Оля

Репутация: -  0  +


Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида (используя рекурсию) mega_chok.gif
как применить рекурсию? blink.gif помогите пожалуйста
  program r;
uses crt;
var a,b,s,ss,dx,x,p1,p2,p3,p4,p5,p:real;
i,n,m:integer;
begin
clrscr;
write ('a=');
readln (a);
write ('b=');
readln (b);
write ('m>0, m=');
readln (m);
if a<b then dx:=(b-a)/m else dx:=(a-b)/m;
x:=a;
ss:=0;
write ('n=0,1,2,3,...., n=');
readln (n);
if n=0 then for i:=1 to m do ss:=ss+exp(a*x)/a
else if n=1 then for i:=1 to m do begin
p1:=exp(a*x);
p2:=a*sin(b*x);
p3:=b*cos(b*x);
ss:=ss+p1*(p2-p3)/(a*a+sqr(n*b))
end
else while n>=1 do begin
p4:=n*(n-1)*b*b/(a*a+sqr(n*b));
s:=0;
for i:=1 to m do begin
p1:=exp(a*x);
p2:=a*sin(b*x);
p3:=b*cos(b*x);
p5:=exp((n-1)*ln(sin(b*x)));
s:=s+p1*p5*(p2-p3)/(a*a+sqr(n*b));
end;
ss:=ss+n*(n-1)*b*b*s/(a*a+sqr(n*b));
n:=n-2;
end;
writeln ('int=',ss*dx:0:5);
readln;
end.

Правильно ли я вообще решила blush.gif

Сообщение отредактировано: PUMA - 19.06.2010 18:23


--------------------
Никогда, никогда ни о чем не жалейте.Поздно начали вы или рано ушли.Кто-то пусть гениально играет на флейте.Но ведь песни берет он из вашей души.Никогда, никогда ни о чем не жалейте —Ни потерянных дней, ни сгоревшей любви.Пусть другой гениально играет на флейте,Но еще гениальнее слушали вы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
PUMA
сообщение 20.06.2010 13:35
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Женский
Реальное имя: Оля

Репутация: -  0  +


function IntPow(x: double; n: integer): double;
var
r: double;i:byte;
begin
r:=1;
for i:=1 to n do
r:=r*x;
IntPow:=r
end;
function IntEAXSINNBX(a,b,x: double; n: integer): double;
begin
case n of
0: IntEAXSINNBX:= Exp(a*x)/a;
1: IntEAXSINNBX:= Exp(a*x)*(a*Sin(b*x)-b*Cos(b*x))/(a*a+b*b);
else IntEAXSINNBX:=
(Exp(a*x)*IntPow(Sin(b*x),n-1)*(a*Sin(b*x)-n*b*Cos(b*x)) +
n*(n-1)*b*b*IntEAXSINNBX(a,b,x,n-2))/
(a*a+n*n*b*b)
end
end;
var a,b,n,x:integer;
begin
writeln('vvedite a i b');
readln(a,b);
writeln('vvedite stepen n i chislo x');
readln(n,x);
writeln( IntEAXSINNBX(a,b,x,n));
readln;
end.


вроде как решает


--------------------
Никогда, никогда ни о чем не жалейте.Поздно начали вы или рано ушли.Кто-то пусть гениально играет на флейте.Но ведь песни берет он из вашей души.Никогда, никогда ни о чем не жалейте —Ни потерянных дней, ни сгоревшей любви.Пусть другой гениально играет на флейте,Но еще гениальнее слушали вы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 20.06.2010 13:57
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(PUMA @ 20.06.2010 14:35) *
вроде как решает

Вау! респект тебе и твоим преподпвателям: ничего лишнего, никаких идиотских CRT, и даже печать результата непосредственно из функции без всяких перекладываний - уважаю! ))
Только надо бы сдвиги делать нормальные.. иначе увязнешь на второй странице кода..

Очень просто:
- после begin (case, repeat, while) все сдвигаем право на 2 поз
- перед end (until) - влево на 2 поз
- между функциями оставляй строку (лучше две)
- разделы декларвций тоже двигаем

Вот, посмотри и старайся так делать
function IntPow(x: double; n: integer): double;
var
r: double;
i:byte;
begin
r:=1;
for i:=1 to n do r:=r*x;
IntPow:=r
end;


function IntEAXSINNBX(a,b,x: double; n: integer): double;
begin
case n of
0: IntEAXSINNBX:= Exp(a*x)/a;
1: IntEAXSINNBX:= Exp(a*x)*(a*Sin(b*x)-b*Cos(b*x))/(a*a+b*b);
else IntEAXSINNBX:=
(Exp(a*x)*IntPow(Sin(b*x),n-1)*(a*Sin(b*x)-n*b*Cos(b*x)) +
n*(n-1)*b*b*IntEAXSINNBX(a,b,x,n-2))/
(a*a+n*n*b*b)
end
end;


var
a,b,n,x: integer;

begin
writeln('vvedite a i b');
readln(a,b);
writeln('vvedite stepen n i chislo x');
readln(n,x);
writeln( IntEAXSINNBX(a,b,x,n));
readln;
end.

Только сейчас заметил, что ты переделала IntPow .. Ага, я ошибся.. забыл вычитать n. Нужно было вот так:
function IntPow(x: double; n: integer): double;
var
r: double;
begin
r:=1;
if n<0 then begin
n:=-n;
x:=1/x
end;
while n>0 do begin
r:=r*x;
Dec(n)
end;
IntPow:=r
end;

Молодец! )) Твоя функция, правда, не будет работать с отрицательными n, но оно тут и не нужно.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
PUMA   Определенный интеграл   19.06.2010 18:18
Lapp   значение определенного интеграла следующего вида (...   20.06.2010 1:39
PUMA   удалила случайно формулу :10:   20.06.2010 10:37
Lapp   удалила случайно формулуЧто это??.. :blink: аа...   20.06.2010 10:47
PUMA   ну в задании так написано...откуда тогда взялись a...   20.06.2010 10:56
Lapp   Немудрено, я, например, тоже с трудом въезжаю.. Х...   20.06.2010 11:06
PUMA   продолжить :blink: как куда рекурсию применить в ...   20.06.2010 11:24
Lapp   продолжить :blink: как куда рекурсию применить в ...   20.06.2010 11:41
PUMA   1)Там где n>=2 в числителе,где синус было (a*si...   20.06.2010 11:54
Lapp   1)Там где n>=2 в числителе,где синус было (a*si...   20.06.2010 12:21
PUMA   из общих соображений :10: да вроде все понятно))п...   20.06.2010 12:35
Lapp   из общих соображений :10: функция для степени - ...   20.06.2010 12:50
Lapp   Есть эта формула в Википедии )) То есть, почти та...   20.06.2010 13:15
PUMA   function IntPow(x: double; n: integer): double; va...   20.06.2010 13:35
Lapp   вроде как решает Вау! респект тебе и твоим пре...   20.06.2010 13:57
PUMA   что то я не совсем поняла зачем вычитать при n...   20.06.2010 14:15
Lapp   что то я не совсем поняла зачем вычитать при n...   20.06.2010 14:21
PUMA   Это не при n>0, а пока n>0. Это цикл. При...   20.06.2010 14:23


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

 



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