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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 17)
Lapp
сообщение 20.06.2010 1:39
Сообщение #2


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

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

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


Цитата(PUMA @ 19.06.2010 19:18) *
значение определенного интеграла следующего вида (используя рекурсию) mega_chok.gif
ну и какого же вида? blink.gif
PUMA, ты забыла привести вид, или не смогла? Можно сделать картинкой, а можно просто от руки, типа так:
[интеграл от a до b] scrt(sin (x2))
- верхние и нижние индексы есть в форме ввода, а остальное как сумеешь.

Цитата
как применить рекурсию?
Вообще, применение рекурсии для вычисления интеграла - абсолютная нелепость. Но если надо - покажем.. Я думаю, имеется в виду рекурсивно прибавлять очередной кусочек при суммировании. То есть заменить цикл до m на рекурсию. Это медленно, требует много памяти, некрасиво, но - если такая цель, то можно.. ))

Цитата
Правильно ли я вообще решила blush.gif
Как это можно сказать, не зная, что требуется? ))
Приведи условие - посмотрим. Но, вообще-то, уже и так видно, что есть, что исправлять. И, пока я разглядывал твои вычисления в попытках догадаться, что же это за функция была, у меня возникли большие сомнения в том, что это может быть правильно.. Например - почему у тебя в вычислениях функции присутствуют a и b? как это вообще возможно? функция не может зависеть от пределов интегрирования. Ты уверена, что, например, не интегрируешь первообразную? ))
Давай, ждем вида функции.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PUMA
сообщение 20.06.2010 10:37
Сообщение #3


Новичок
*

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

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


удалила случайно формулу 10.gif


Эскизы прикрепленных изображений
Прикрепленное изображение

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


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

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

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


Цитата(PUMA @ 20.06.2010 11:37) *
удалила случайно формулу
Что это??.. blink.gif


аа...
ну, тогда ясно, где и зачем тут рекурсия...

Добавлено через 5 мин.
Но я тебя должен окончательно разочаровать: нет, твое решение неправильное, и это точно уже ((.

Ты видишь, справа такой же интегральчик, как и слева? Вот отсюда и рекурсия.

Погоди - а ты уверена, что тебе нужен именно определенный интеграл?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PUMA
сообщение 20.06.2010 10:56
Сообщение #5


Новичок
*

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

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


ну в задании так написано...откуда тогда взялись a и b?
вообще не очень понимаю как и что делать надо blush.gif


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


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

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

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


Цитата
вообще не очень понимаю как и что делать надо blush.gif
Немудрено, я, например, тоже с трудом въезжаю.. Хорошо, давай разбираться )).

Цитата(PUMA @ 20.06.2010 11:56) *
ну в задании так написано...откуда тогда взялись a и b?
a и b - это просто параметры, входящие в функцию. И они, конечно, должны быть заданы, если в итоге требуется числовой ответ.

То, что тут написано - это уже готовая формула интеграла, причем НЕопределенного (только константа у них куда-то затерялась..) То есть численное интегрирование (всякие трапеции и Симпсоны) тут не требуется. Нужно только сделать прогу для расчета по этим формулам.
Стало яснее? )) или продолжить?

P.S.
если можно, приведи условие поточнее.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PUMA
сообщение 20.06.2010 11:24
Сообщение #7


Новичок
*

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

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


продолжить blink.gif как куда рекурсию применить

в задании только написано:Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида (используя рекурсию) и дана эта огроменная формула..мало того она еще с опечатками была дана mad.gif

Сообщение отредактировано: PUMA - 20.06.2010 11:28


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


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

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

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


Цитата(PUMA @ 20.06.2010 12:24) *
продолжить blink.gif как куда рекурсию применить

в задании только написано:Для заданных границ интегрирования a и b вычислите значение определенного интеграла следующего вида (используя рекурсию) и дана эта огроменная формула..мало того она еще с опечатками была дана mad.gif
С какими опечатками? ты уверена?

Если a и b - пределы, то либо это интеграл чего-то еще, либо я персидский шах..

Вот, смотри, я наборсал тут функцию по этой формуле. В ней рекурсия есть - видишь? Функция IntPow - вспомогательная, вычисляет целую степень.
Копирую сюда без отладки, извини уж..
Спрашивай, где непонятно.
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 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)-b*Cos(b*x)) +
n*(n-1)*b*b*IntEAXSINNBX(a,b,x,n-2))/ {вот тут рекурсивный вызов}
(a*a+n*n*b*b)
end
end;


что-то все же неясно с заданием.. что за опечатки были? скажи, ладно?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PUMA
сообщение 20.06.2010 11:54
Сообщение #9


Новичок
*

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

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


1)Там где n>=2 в числителе,где синус было (a*sinx-n*b*cos bx) ,то есть не хватало в синусе буквы b
2)n=1, знак минус перед выражением
3)n=0, экспонента была в степени a*n , а не a*x
вроде как все.
прикреплю картинку с первоначальным видом.


Эскизы прикрепленных изображений
Прикрепленное изображение

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


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

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

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


Цитата(PUMA @ 20.06.2010 12:54) *
1)Там где n>=2 в числителе,где синус было (a*sinx-n*b*cos bx) ,то есть не хватало в синусе буквы b
2)n=1, знак минус перед выражением
3)n=0, экспонента была в степени a*n , а не a*x
вроде как все.
прикреплю картинку с первоначальным видом.
хм.. а откуда уверенность, что это опечатки? из общих соображений или есть эта формула в справочнике? Вообще, должна быть.. но я сейчас навскидку не нашел ((. Надо посерьезнее поискать.

Буква b под синусом - это да, похоже, что должна быть. А вот про минус я как-то сомневаюсь..

Ну как, разобралась с функцией?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PUMA
сообщение 20.06.2010 12:35
Сообщение #11


Новичок
*

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

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


из общих соображений 10.gif
да вроде все понятно))первое это степень считаем.ставим условие если она отрицательна.второе эт мы уже непосредственно считаем при разных значениях n. так?
cool.gif спасибо большое


Сообщение отредактировано: PUMA - 20.06.2010 12:36


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


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

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

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


Цитата(PUMA @ 20.06.2010 13:35) *
из общих соображений 10.gif


Цитата
да вроде все понятно))первое это степень считаем.ставим условие если она отрицательна.второе эт мы уже непосредственно считаем при разных значениях n. так?
функция для степени - чисто вспомогательная. В ней я немного лишнего наворотил.. в этой задаче n не может быть отрицательным, так что проверка и все, что внутри делается - это все лишнее, можно выбросить. Я сделал из любви к общности - понимаешь?

Основное, на что тебе тут надо обратить внимание - это как работает рекурсия. Еще раз посмотри и проследи логику, чтоб никаких вопросов не оставалось неотвеченных. Я жду твоего ответа.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 20.06.2010 13:15
Сообщение #13


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

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

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


Есть эта формула в Википедии ))
То есть, почти такая, там нету b. Но оно вроде легко туда вводится заменой типа x=by.. или нет? тяжко шевелить извилинами в такую позднь.. (


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PUMA
сообщение 20.06.2010 13:35
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 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
Сообщение #15


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

Группа: Модераторы
Сообщений: 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
сообщение 20.06.2010 14:15
Сообщение #16


Новичок
*

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

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


что то я не совсем поняла зачем вычитать при n>0
r:=r*x;
Dec(n)
blink.gif


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


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

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

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


Цитата(PUMA @ 20.06.2010 15:15) *

что то я не совсем поняла зачем вычитать при n>0
r:=r*x;
Dec(n)
blink.gif

Это не при n>0, а пока n>0. Это цикл. При каждом умножении r уменьшаем n на 1. Получается как бы счетчик. Когда n обнулится - выходим из цикла. Это как бы твой for, только наоборот, сверху вниз.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PUMA
сообщение 20.06.2010 14:23
Сообщение #18


Новичок
*

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

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


Цитата(Lapp @ 20.06.2010 14:21) *

Это не при n>0, а пока n>0. Это цикл. При каждом умножении r уменьшаем n на 1. Получается как бы счетчик. Когда n обнулится - выходим из цикла. Это как бы твой for, только наоборот, сверху вниз.

ага,всё поняла cool.gif


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

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

 



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