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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2011, 14:44   #1
maks133
Новичок
Джуниор
 
Регистрация: 09.02.2011
Сообщений: 2
По умолчанию Рекурсия. Рекурсивные подпрограммы

Составить программу вычисления суммы:
-((x^1)/1!)+ ((x^3)/3!)- ((x^5)/5!)+ ((x^7)/7!)-...+(-1)^n*((x^n)/n!)
При увеличении n эта сумма приближается к значению sin(x).

нашел несколько программ:
Код:
Var
     x,j,n:longint;
     s:real;
  function  fact(i:longint):longint;
    begin
     if i>0 then fact:=i*fact(i-1)
     else fact:=1
    end;
      begin
       writeln('vvedite x and n');
       readln(x,n);
       s:=0;
       j:=1;
       while j<=n do
        begin
         s:=s+exp(j*ln(x))/fact(j);
         j:=j+2
       end;
  writeln('sin(x)=', s:5:2)
end.

Код:
uses crt;
var x,s,t:real;
    n,i:integer;
begin
clrscr;
write('x=');readln(x);
write('n=');readln(n);
s:=x;t:=1;
for i:=1 to n do
  begin
   t:=t*((-1)*x*x)/(2*i*(2*i+1));
   s:=s+t;
  end;
writeln('Приближенное значение  sinx=',s:10:8);
writeln('Аналитическое значение sinx=',sin(x):10:8);
readln
end.

Последний раз редактировалось Stilet; 12.02.2011 в 17:50.
maks133 вне форума Ответить с цитированием
Старый 12.02.2011, 16:59   #2
D1em
Новичок
Джуниор
 
Регистрация: 10.02.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от maks133 Посмотреть сообщение
Составить программу вычисления суммы:
-((x^1)/1!)+ ((x^3)/3!)- ((x^5)/5!)+ ((x^7)/7!)-...+(-1)^n*((x^n)/n!)
При увеличении n эта сумма приближается к значению sin(x).

нашел несколько программ:

Var
x,j,n:longint;
s:real;
function fact(i:longint):longint;
begin
if i>0 then fact:=i*fact(i-1)
else fact:=1
end;
begin
writeln('vvedite x and n');
readln(x,n);
s:=0;
j:=1;
while j<=n do
begin
s:=s+exp(j*ln(x))/fact(j);
j:=j+2
end;
writeln('sin(x)=', s:5:2)
end.



uses crt;
var x,s,t:real;
n,i:integer;
begin
clrscr;
write('x=');readln(x);
write('n=');readln(n);
s:=x;t:=1;
for i:=1 to n do
begin
t:=t*((-1)*x*x)/(2*i*(2*i+1));
s:=s+t;
end;
writeln('Приближенное значение sinx=',s:10:8);
writeln('Аналитическое значение sinx=',sin(x):10:8);
readln
end.
и что тебе мешает сменить одно уравнение на другое??
D1em вне форума Ответить с цитированием
Старый 14.02.2011, 01:23   #3
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

разбеваем формулу на несколько частей
a = 1(отвечает за знак выражения)
b = x
c = 1
создаем цикл
i = 0
sum = 0
for i to n do
begin
sum := sum + (a*b)\c;
a := a * (-1);
b := b * x * x;
c := c * (c + i) * (c + i);
end
Акоб вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсивные функции NiaSpa Помощь студентам 3 04.03.2010 11:53
Рекурсивные функции. Geg[C/c++] Общие вопросы C/C++ 2 11.10.2009 11:28