Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 17.02.2010, 04:19   #1 (permalink)
Linka
Member
 
Аватар для Linka
 
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
По умолчанию Упражнение из учебника по Паскалю

Вот такое задание из учебника. Никак не могу понять. По теме "рекуррентная последовательность".

Ссылка удалена

1. Что такое "предельное значение ряда" ?
2. y0 задается произвольно, но желательно ближе к корень из x. "Желательно", это значит, все-таки я могу абсолютно произвольную величину выбрать ?

Вот как я себе это представляю все: каждый новый элемент ряда, добавляет точности к функции. Т.е. на один знак точнее и точнее. Или неверно ?

Помогите пожалуйста это реализовать. Каждый след. член надо вычислять из предыдущего. Здесь требуется рекурсия функции ? Или можно просто с помощью цикла с условием эпсилона?
Самая главная проблема, это - как задать предыдущий член ? К примеру там надо прибавлять yk-1. А как указать на этот предыдущий член ?

Спасибо заранее всем больше за ответы.

Последний раз редактировалось Fenix; 11.06.2013 в 12:59 Причина: Ссылка мертва
Linka вне форума   Ответить с цитированием

Старый 17.02.2010, 04:19
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На форуме это и ранее обсуждалось, посмотрите

Задача по Паскалю, файл
Задачка по Паскалю
Ищу свободного мастера по паскалю.
Помогите с задачей по паскалю
Задача по Паскалю. Нужна помощь.
Строка наоборот. Упражнение из учебника.

Старый 17.02.2010, 05:20   #2 (permalink)
Linka
Member
 
Аватар для Linka
 
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
По умолчанию

Вот, что у меня получилось:
Код:
program rekurrent6;

var a,a0:real;
x:integer;
begin
x:=3;
a0:=1.7;
a:=0.5*(a0+(x/a0));

repeat
a:=0.5*(a+(x/a));
until abs(a) > 1e-7;

writeln(a);
readln;
end.
На примере y=корень из 3. Число, похоже правильное выводится. Если взять 5, тоже уже видно различие с моим числом, и тем что на калькуляторе. Не понятно, с эпсилоном. Как его правильно задать ? Как написано в условии ? Спасибо)
Linka вне форума   Ответить с цитированием
Старый 17.02.2010, 09:05   #3 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,853
Сказал(а) спасибо: 317
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Ну что же, в принципе - всё правильно. Но есть несколько замечаний.
1. В условии выхода из цикла Repeat-Until знак отношения перепутан. Надо не ">", а "<". А сейчас у Вас цикл выполняется ровно один раз, потому что получившийся в первый раз результат заведомо больше крохотного числа, стоящего справа.
2. Условие остановки вычисления нужно задавать, как просят в условии задачи, т.е. по разности предыдущей и последующей итераций, если же пытаться по абсолютному значению результата итерации, то оно не стремится к 0, и поэтому цикл будет продолжаться вечно. Поставить правильно условие совсем просто.
3. Это скорее косметика. Программу лучше зациклить и вводить х с консоли. Условием прерывания можно поставить, например, х=0.
4. Опять же косметика. Для сравнения можно вывести точное значение корня. Чтобы не возиться с калькулятором.
5. И еще немного косметики. Вывод лучше сделать форматным - так красивее.
Итого:

Код:
program rekurrent6;

var
 a,a0,b:real;
 x:integer;

begin
 repeat
  Write('Integer x (x=0 terminates the program)= ');
  ReadLn(x);
  If x>0 then
   begin
    a0:=x;
    a:=0.5*(a0+(x/a0));
    repeat
     b:=a;
     a:=0.5*(a+(x/a));
    until abs(a-b)<1e-7;
    writeln(a:14:10,'    ',SQRT(x):14:10);
   end;
 until x=0;
end.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 17.02.2010, 19:36   #4 (permalink)
Linka
Member
 
Аватар для Linka
 
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
По умолчанию

Спасибо! Теперь все понятно.
Linka вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 00:20.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.