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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2012, 18:20   #1
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию Использование подпрограммы функции и факториала.

Добрый вечер.
Наткнулся на такую вот задачу!
Дано: y= 1-(1/1!)+(1/2!)-(1/3!)+...+ - (1/n!)
И вся эта сумма ряда должна свестись к значению (1/e), что приблизительно равно 0.37373737...

Вот мой код программы:

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,Math;
  var y,c:real;n,j,k,s,p:integer;
  function sum(var n1:integer):real;
  var i:integer;
  c1:real;
begin
c1:=1;
for i:=1 to n1 do begin
s:=1;                               //
for p:=1 to n1 do begin       //это факториал
s:=s*p;                            //
c1:=(c1+(Power(-1,i))*(1/s)); //это сама функция
end;
end;
sum:=c1;
end;
begin
writeln('Enter n');
readln(n);
for j:=1 to n do begin
y:=sum(j);
writeln('y=',y:2:10);
readln;
end
end.
К сожалению оно не сходится к этому числу.
Подскажите, чем можете!
ShaoKhan вне форума Ответить с цитированием
Старый 22.03.2012, 18:26   #2
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

код хотя бы отформатировать надо, чтобы можно было разобраться.
Код:
program Project2;

{$APPTYPE CONSOLE}

uses SysUtils,Math;

var y,c:real;
     n,j,k,s,p:integer;

function sum(var n1:integer):real;
var i:integer;
     c1:real;
begin

c1:=1;

for i:=1 to n1
do begin
   s:=1;                               
   for p:=1 to n1
   do begin
      s:=s*p;                            
      c1:=(c1+(Power(-1,i))*(1/s));
      end;
   end;

sum:=c1;
end;

begin
writeln('Enter n');
readln(n);
for j:=1 to n 
do begin
   y:=sum(j);
   writeln('y=',y:2:10);
   readln;
   end
end.
Решение, кстати, весьма красивое. Вот только непонятно, зачем внешний цикл. Возводи -1 в степень p и все.
Nobody expects Spanish Inquisition!

Последний раз редактировалось Juffin; 22.03.2012 в 18:41.
Juffin вне форума Ответить с цитированием
Старый 22.03.2012, 18:38   #3
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

держи... подправил... немного по другому реализовал... в процедуру запихнул само вычисление обратного факториала...
Код:
program Project2;
  var y:real;
  n,j:integer;
  
function factor(n1:integer):real;
var i:integer;
  c1:real;
begin
    c1 := 1;
    for i:=1 to n1 do // cчитаем факториал N!
      c1:= c1 * i;
    if odd(n1) then // если нечетный то
      factor := -1/c1
    else factor := 1/c1;  
end;
begin
  writeln('Enter n');
  readln(n);
  y := 1;
  for j:=1 to n do
    begin
      y := y + factor(j);
    end;
writeln('y=',y:2:10);
readln;
end.
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 22.03.2012, 18:45   #4
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Juffin Посмотреть сообщение
Решение, кстати, весьма красивое. Вот только непонятно, зачем внешний цикл. Возводи -1 в степень p и все.
Если это делать, то ряд только идёт на уменьшение, а не сходится к числу.

Последний раз редактировалось ShaoKhan; 22.03.2012 в 18:48.
ShaoKhan вне форума Ответить с цитированием
Старый 22.03.2012, 18:46   #5
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
держи... подправил... немного по другому реализовал... в процедуру запихнул само вычисление обратного факториала...
Спасибо!
Но вот хотелось бы, что бы он пошагово высчитывал всё, а не сразу выдавал ответ.
ShaoKhan вне форума Ответить с цитированием
Старый 22.03.2012, 18:50   #6
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

пошагово... это же лишь в цикл запихнуть... и все... )))
к примеру как было у вас...по нажатию Enter ))
Код:
begin
  writeln('Enter n');
  readln(n);
  y := 1;
  for j:=1 to n do
  begin
    begin
      y := y + factor(j);
    end;
writeln('y=',y:2:10);
readln;
end;
readln;
end.
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 22.03.2012, 18:56   #7
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
пошагово... это же лишь в цикл запихнуть... и все... )))
к примеру как было у вас...по нажатию Enter ))
Как говориться, смотришь в книгу - видишь фигу, так и у меня сейчас.
Не могу понять куда засунуть цикл, и от чего до чего брать..
ShaoKhan вне форума Ответить с цитированием
Старый 22.03.2012, 19:02   #8
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от ShaoKhan Посмотреть сообщение
Как говориться, смотришь в книгу - видишь фигу, так и у меня сейчас.
Не могу понять куда засунуть цикл, и от чего до чего брать..
собственно в предыдущем посте подредактировал... для Enter... можно даже видоизменить и сделать так... будет попроще и красивше...
Код:
begin
  writeln('Enter n');
  readln(n);
  y := 1;
  for j:=1 to n do
  begin
   y := y + factor(j); // подсчет на данном шаге
   writeln('y=',y:2:10); // вывод на данном шаге
   readln; // ожидание нажатия Enter
  end;
readln;
end.
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 22.03.2012, 19:05   #9
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию

Всё!
Понял, разобрался!
Огромное спасибо!
ShaoKhan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование подпрограммы в Delphi artimed Помощь студентам 0 21.12.2011 16:56
Поиск факториала суммы цифр числа с использование только процедур или функций. Zzoyberg Паскаль, Turbo Pascal, PascalABC.NET 2 08.12.2011 01:18
Подпрограммы.Использование процедур Elec92 Помощь студентам 8 01.03.2011 15:00
Подпрограммы-процедуры, подпрограммы-функции в Pascal rishikesh Помощь студентам 19 18.05.2010 23:05
нарисовать График функции факториала melloun Помощь студентам 8 10.01.2010 16:11