Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2011, 00:11   #1
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию Рекурентное соотношение. Паскаль.

s=n/n!x, у меня получилось что a(n+1)=a(n)*1/n.
условие выхода из цикла |s(n-1)|-|s(n)|<=E
Я написал но у меня цикл выполняется только два раза и один и тот же ответ. Посмотрите в чем ошибка. minus - для ого что бы слагаемые при непарном n были отрицательными( ну типа a-b+c-d+e.....)
Вот код
Код:
program Lab_3;

{$APPTYPE CONSOLE}

uses
  SysUtils;
const minus=-1;
var sn1,sn2,s,an,eps:real;
    n:word;
 begin
 writeln('vvedite eps');
 readln(eps);
 n:=1;
 s:=0;
 an:=n;
  repeat
   S:=S+an;
   sn1:=s;
   n:=n+1;
   an:=minus*an/n;
   sn2:=s+an;
  until(abs(sn2)-abs(s)<=eps);
    writeln('S=',s:-8:5,' n=',n);
    readln;readln
  { TODO -oUser -cConsole Main : Insert code here }
end.
Антон Лысенко вне форума Ответить с цитированием
Старый 23.02.2011, 21:30   #2
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

почему у меня всегда такие темы, что никто не может решить?
Антон Лысенко вне форума Ответить с цитированием
Старый 24.02.2011, 07:01   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Может потому, что понять же невозможно, что вам нужно.

> s=n/n!x

Это типа нужно догадаться, что нужно вычислять сумму последовательности, где n-тый член вычисляется по формуле S(n) = n / n!, так? И что за х там прилепился?

> a(n+1)=a(n)*1/n.

х уже куда-то загадочно пропал.

> но у меня цикл выполняется только два раза

Так это же зависит от того, какое значение для Eps вы вводите. Т.е. мы должны догадаться, что вы вводите число меньше 0.5?

> слагаемые при непарном n были отрицательными

Здрасте, а это откуда взялось? Это условие задачи? Или вам так захотелось?

Вот и представьте, не слишком ли много загадок для одного примера, и захочется ли их кому-нибудь разгадывать.

Вам лень было по-человечески выписать условия задачи? Ну а нам лень вам помогать.

Вот код, примерно по вашим условиям, включая этот загадочный минус.

Код:
program
  Lab_3;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  s, sprev, E: double;
  n: word;
  m: integer;
begin
  write('E=');
  readln(E);
  //
  n := 1;
  s := 0;
  m := 1;
  repeat
    //
    sprev := s;
    //
    s := s + 1 / n * m;
    m := -m;
    //
    inc(n);
    //
  until (abs(abs(sprev) - abs(s)) <= E);
  //
  writeln('S=',s:-8:5,' n=',n);
  readln;
end.
Для eps=0.05 он крутится 22 раза.

Цитата:
E=0.05
S=0.71639 n=22
Понятия не имею, соответсвует ли это вашему реальному заданию хоть немного.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 24.02.2011, 21:07   #4
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

Да про сумму я забыл написать. Но я думал что это как то общепринято, что S - сумма, P - произведении.А еще пример в скобка
Цитата:
( ну типа a-b+c-d+e.....)
Цитата:
слагаемые
я думаю по этом видно что сумма.
В заголовке написано рекуррентное соотношение. Ну и написал начальное задание
Цитата:
s=n/n!x
Цитата:
а при рекуррентном соотношении как правило ищут следующий элемент. ну я и написал что у меня получилось
a(n+1)=a(n)*1/n
просто так я бы не писал об минусе, значит это условие задачи. темболее в скобках вид ряд.
Антон Лысенко вне форума Ответить с цитированием
Старый 24.02.2011, 21:14   #5
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

ещё я написал вот такое условие выхода из цикла
Цитата:
|s(n-1)|-|s(n)|<=E
ну а вы сделали всё по модулю. Уберите модуль и посмотрите на результат.
Антон Лысенко вне форума Ответить с цитированием
Старый 27.02.2011, 21:28   #6
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

вот я продвигаюсь с этим заданием. затаскал уже этот минус в рекуррентное соотношение. Теперь ещё и "х" мне понадобился. Но программа не в рабочем состоянии. сумма получается равна нулю, а n=2. Ну это видимо проблема с условием выхода из цикла. Пересчитываю на листочке, вроди должно работать, ввожу данные в программу она выключается. Я не могу найти проблему. Может вы взгляните со свежей головой, и укажите мне путь истинный)

Код:
program Lab_3;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var sk,s,a,eps,x:real;
    n:word;
 begin
 writeln('Input eps');
 readln(eps);
 writeln('Input x');
 readln(x);
if x=0 then
 writeln('you entered an incorrect value x')
else
 begin
 s:=0;
 n:=1;
 a:=1/x;
  repeat
   S:=S+a;
   n:=n+1;
   a:=(-1/(n-1))*a;
   sk:=s+a;
   until(abs(sk)-abs(s)<=eps);
   //until(abs(abs(sk)-abs(s))<=eps);
    writeln('S=',sk:-8:5,' n=',n);
 end;
    readln;
  readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Антон Лысенко вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль, Борланд Паскаль-в чем разница??? Vremya-Dengy Паскаль, Turbo Pascal, PascalABC.NET 13 31.05.2011 18:23
Рекурентное соотношение на Паскаль АБС Архат Паскаль, Turbo Pascal, PascalABC.NET 0 14.06.2009 13:10
написать запрос, который бы выводил процентное соотношение nikkol SQL, базы данных 5 19.08.2008 11:42