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

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

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

> Вычислить сумму ряда с заданной точностью с помощью рекурсии, Рекурсия
dog
сообщение 2.02.2010 21:46
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

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


Прикрепленное изображение

Вычислить сумму ряда с заданной точностью e(epsilon)>0

Есть решение, нет уверенности, что правильно:


PROGRAM PRP6;
var e, res, a, b : REAL;

FUNCTION comp(x, y, e: REAL):real;{функция нахождения суммы}
var w, z, sum: real;
BEGIN
w:=x;
z:=y;
sum:=1/(w*z);
IF 1/(w*z) >= e
then
BEGIN
sum:=comp(x, y, e);
w:=w+4;
z:=z+4;
END
else comp:=sum;

END;

BEGIN
WRITELN('Введите точность e');
READLN(e);
a:=3;
b:=5;
res:=comp(a, b, e);
WRITELN('Сумма ряда', res:5:2);
END.



Просьба проверить и поправить, если что неправильно
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Client
сообщение 18.02.2010 17:54
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


убрал свои модификации, оставил как сделал volvo с подсчетом итераций, и eps сделал глобальной. Вот как выглядит функция
function f(x:integer):real;
begin
inc(i);
if 1/(1.0* x * (x+2)) < eps then f := 0
else f := (1/(x * (x+2))) + f(x + 4);
end;
и обработчик кнопки
procedure TForm2.Button1Click(Sender: TObject);
var
r:real;
k:byte;
begin
eps:=1E-1;
Memo1.Clear;
for k := 1 to 10 do begin
i:=0;
r:=f(3);
Memo1.Lines.Add(inttostr(k)+ ') ' +FloatToStr®);
Memo1.Lines.Add('Кол-во итераций: ' + inttostr(i)+ ' eps= '+FloatToStr(eps));
Memo1.Lines.Add(' ');
eps:=eps/10;
end;
end;
Моя ошибка была в добалении переменной и результат был не правильным. Но хотя если заменить выражение переменной, измений быть не должно. Видимо при возвращении функции результата вместо бывшей x1 подставлялось самое последнее значение вместо текущего (т.е. на каждой итерации свое значение)? (в этой стоке)
else f:=x1 + f(x+4);

Хм, на Delphi вроде работает. Теперь паскаль smile.gif
uses crt;
var
x1:real;
i,k:integer;
eps:real;

function f(x:integer):real;

begin
inc(i);
if 1/(1.0 * x * (x+2)) < eps then f := 0
else f := (1/(1.0 * x * (x+2))) + f(x + 4);
end;

begin
clrscr;
i:=0;
eps:=1E-1;
for k:=1 to 7 do begin
i:=0;
writeln(f(3):0:7, ' ',i);
eps:=eps/10;
end;
readkey
end.
Выдает такие же значения (до 1Е-7, потом стек переполняется).


Эскизы прикрепленных изображений
Прикрепленное изображение Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
dog   Вычислить сумму ряда с заданной точностью с помощью рекурсии   2.02.2010 21:46
TarasBer   Так ты сначала у себя запусти, проверь. Ты ж не пр...   2.02.2010 22:11
dog   Она при некоторых значениях епсилон выдает всегда ...   2.02.2010 23:34
TarasBer   Дык проверь сначала, чего меня спрашивать. От заме...   2.02.2010 23:53
volvo   На самом деле рекурсия - проще, чем итерация. Если...   3.02.2010 0:52
Unconnected   Наверное, проблема с максимальной точностью значен...   3.02.2010 7:43
Client   ошибка в этом месте if 1/(x * (x+2)) < eps then...   3.02.2010 15:11
volvo   Оба предыдущих ответа не содержат правильной идеи....   3.02.2010 18:46
TarasBer   > else f := (1/(x * (x+2))) + f(x + 4, eps); Т...   3.02.2010 18:46
volvo   Ничего не должно произойти, без разбиения все прек...   3.02.2010 18:52
dog   P.S. А где, собственно, топикстартер? Ей не интер...   5.02.2010 1:18
TarasBer   Тут про переполнение типа говорили. Я бы написал д...   3.02.2010 18:55
volvo   Вот от тебя (с твоей тягой к оптимизации) я это о...   3.02.2010 19:03
Client   x * (x+2)ошибка именно здесь, даже без деления. ты...   3.02.2010 19:06
TarasBer   > Вот от тебя (с твоей тягой к оптимизации) я ...   3.02.2010 19:15
dog   f := tmp_f + 1/(longint(x)*(x+2)) То есть как я...   5.02.2010 1:54
TarasBer   > Поэтому программа и вылетает? Нет, у меня пр...   6.02.2010 14:29
Client   volvo, кажется больше идей нету... тут приведение ...   7.02.2010 19:18
volvo   Приведение типов не нужно... Явное по крайней мере...   7.02.2010 23:03
Krjuger   Я думаю,что для начала надо разобраться почему выл...   7.02.2010 23:16
TarasBer   > пока никто не показал окончательный код, кото...   8.02.2010 20:42
volvo   Ответ неверный... Для 1E[color=red]-8 - вычисляетс...   11.02.2010 12:12
Client   uses crt; var x1:real; i:integer; eps:rea...   15.02.2010 16:12
Lapp   Получилось так. Терерь проблема со стеком.Client, ...   18.02.2010 14:35
Krjuger   Volvo,а разве я не высказал причину,ты бы хоть про...   17.02.2010 16:39
Client   убрал свои модификации, оставил как сделал volvo с...   18.02.2010 17:54
feniks25   если дописать uses crt,memory; этот алгоритм рас...   19.02.2010 11:15
volvo   Ложь: Кроме того: [quote name='volvo' post='1424...   19.02.2010 13:12
feniks25   Ложь: правда   19.02.2010 13:21
volvo   А я говорю - ложь... Вот мои настройки: Нечисто ...   19.02.2010 13:28
feniks25   А я говорю - ложь... Вот мои настройки: ну гово...   19.02.2010 13:39
Client   {$S-} uses crt; var x1:real; i,k:intege...   19.02.2010 14:04
feniks25   uses crt; var x1,s:real; i,k:integer; ep...   19.02.2010 15:17
TarasBer   Костыль. function f(X: longint; eps: real): real...   19.02.2010 16:37
feniks25   так что ответ можно считать правильным?   19.02.2010 17:38
volvo   Твой что-ли? Размечтался: (хотя, в принципе, може...   25.02.2010 14:44
Rian   Твой что-ли? Размечтался: Всем привет, от темы от...   1.03.2010 17:07
TarasBer   > В общем, ребята, не напрягайтесь, сортируйте ...   26.02.2010 20:24
Гость   -   4.03.2010 22:42
Jova   Цитата так что ответ можно считать правильным? Т...   4.03.2010 23:15


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

 



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