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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2014, 14:33   #1
Vitalyas
Пользователь
 
Регистрация: 25.11.2014
Сообщений: 47
Восклицание Программа для вычисления выражения по формуле (вычисление числового ряда)

Привет всем! Задача такая написать программу для решения этого уравнения (n! - факториал)
Написал программу, но при вводе в программу n = 2 или более ответ расходится от просчитанного в ручную, но при вводе n = 1 ответ правильный...Нужна помощь

Вот текст программы:

Код:
uses crt;
var a, b, c, x, s, f:real;
    n, i, j:integer;
   begin
        write('Введите х. x=');
        read(x);
        write('Введите n. n=');
        read(n);
        if n=-0.5
           then WriteLn('Функция не определена')
                else
                    For i:=1 to n do
                       begin
                          If odd(n) then a:=-1
                                    else a:=1;
                          f:=1;
                          for j:=1 to n do
                             begin
                             f:=f*j
                             end;
                          b:=1/f;
                          c:=exp((2*n+1)*ln(x))/(2*n+1);
                          s:=x+a*b*c;
                       end;
                    WriteLn('Сумма=', s:8:2);
   end.

Последний раз редактировалось Vitalyas; 26.11.2014 в 16:09.
Vitalyas вне форума Ответить с цитированием
Старый 26.11.2014, 15:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Сделай ты функциями.
Код:
function fac(n:integer):integer;var x:integer;
 begin x:=n; dec(n); repeat x:=x*n; until n=1; fac:=x; end;
И выражение:
Код:
double y(x:double;n:integer); var a:integer;
begin
 If odd(n) then a:=-1   else a:=1;end;
 y:=a*exp((2*n+1)*ln(x))/(fac(n)*(2*n+1));
И в цикле уже юзай функцию y();
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.11.2014, 15:07   #3
Vitalyas
Пользователь
 
Регистрация: 25.11.2014
Сообщений: 47
По умолчанию

Извините, но я паскаль начал изучать совсем недавно. Сможете написать код программы, если вам не сложно?
Vitalyas вне форума Ответить с цитированием
Старый 26.11.2014, 15:23   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а я бы воспользовался реккурентой формулой (очевидно, что для нахождения K-го элемента нужно числитель R-1 члена ряда умножать на -X^2, а его знаменатель на K ):
ну и делить на (2*K + 1).

Примерно так
Код:
        write('Введите х. x=');
        read(x);
        write('Введите n. n=');
        read(n);
        sum := x;
        f := x;
        for i:=1 to n do begin
             f := -f *x*x/i;
             sum := sum + f / (2*i+1);
        end;
       WriteLn('Сумма=', s:8:2);
end.

не проверял...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.11.2014, 16:08   #5
Vitalyas
Пользователь
 
Регистрация: 25.11.2014
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а я бы воспользовался реккурентой формулой (очевидно, что для нахождения K-го элемента нужно числитель R-1 члена ряда умножать на -X^2, а его знаменатель на K ):
ну и делить на (2*K + 1).

Примерно так
Код:
        write('Введите х. x=');
        read(x);
        write('Введите n. n=');
        read(n);
        sum := x;
        f := x;
        for i:=1 to n do begin
             f := -f *x*x/i;
             sum := sum + f / (2*i+1);
        end;
       WriteLn('Сумма=', s:8:2);
end.

не проверял...
Что-то я как-то не понял...Подставил :
Код:
        sum := x;
        f := x;
        for i:=1 to n do begin
             f := -f *x*x/i;
             sum := sum + f / (2*i+1);
        end;
заместо С в моем коде, но ответ совсем отличается...Может я что-то не так сделал? Вот код:
Код:
uses crt;
var a, b, c, x, s, f, sum:real;
    n, i, j:integer;
   begin
        write('Введите х. x=');
        read(x);
        write('Введите n. n=');
        read(n);
        if n=-0.5
           then WriteLn('Функция не определена')
                else
                    For i:=1 to n do
                       begin
                          If odd(n) then a:=-1
                                    else a:=1;
                          sum:=x;
                          f := x;
                          for j:=1 to n do 
                             begin
                                f := -f *x*x/j;
                                sum := sum + f / (2*j+1);
                             end;
                          b:=1/f;
                          s:=x+a*b*sum;
                       end;
                    WriteLn('Сумма=', s:8:2);
   end.
Попробовал по другому, убрав цикл с j, вот что получилось, но ответ все равно не сходится:
Код:
uses crt;
var a, b, c, x, s, f, sum:real;
    n, i, j:integer;
   begin
        write('Введите х. x=');
        read(x);
        write('Введите n. n=');
        read(n);
        if n=-0.5
           then WriteLn('Функция не определена')
                else
                    For i:=1 to n do
                       begin
                          If odd(n) then a:=-1
                                    else a:=1;
                          sum:=x;
                          f := x;
                          begin
                                f := -f *x*x/i;
                                sum := sum + f / (2*i+1);
                          end;
                          b:=1/f;
                          s:=x+a*b*sum;
                       end;
                    WriteLn('Сумма=', s:8:2);
   end.

Последний раз редактировалось Vitalyas; 26.11.2014 в 16:14.
Vitalyas вне форума Ответить с цитированием
Старый 26.11.2014, 16:23   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я дал ПОЛНОСТЬЮ готовый код!


проверять нужно такой код:
Код:
uses crt;
var
  x, f, sum: real;
  n, i: integer;
begin
  write('Введите х. x=');
  readLn(x);
  write('Введите n. n=');
  readLn(n);

  sum := x;
  f := x;
  for i := 1 to n do begin
    f := -f * x * x / i;
    sum := sum + f / (2 * i + 1);
  end;
  WriteLn('Сумма=', sum: 8: 2);
  Readln
end.

Последний раз редактировалось Serge_Bliznykov; 26.11.2014 в 16:27.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.11.2014, 16:48   #7
Vitalyas
Пользователь
 
Регистрация: 25.11.2014
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я дал ПОЛНОСТЬЮ готовый код!


проверять нужно такой код:
Код:
uses crt;
var
  x, f, sum: real;
  n, i: integer;
begin
  write('Введите х. x=');
  readLn(x);
  write('Введите n. n=');
  readLn(n);

  sum := x;
  f := x;
  for i := 1 to n do begin
    f := -f * x * x / i;
    sum := sum + f / (2 * i + 1);
  end;
  WriteLn('Сумма=', sum: 8: 2);
  Readln
end.
Спасибо большое! Код правильный! Я просто ваш код пробовал до этого и что-то ответ не сошелся, а вот сейчас вы полностью расписали и сошелся. Спасибо большое еще раз!
Vitalyas вне форума Ответить с цитированием
Старый 26.11.2014, 16:53   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Да всегда пожалуйста! Обращайтесь!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.11.2014, 11:42   #9
Vitalyas
Пользователь
 
Регистрация: 25.11.2014
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Да всегда пожалуйста! Обращайтесь!
А можно вопросик один по этой же функции?
Возможно ли решить эту функцию так как записано в код в самом начале, то есть n! расписав через цикл?
Vitalyas вне форума Ответить с цитированием
Старый 27.11.2014, 12:13   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ну да, разумеется можно!!
Просто получится сложнее и менее эффективно (для каждого члена ряда заново будут просчитываться степени числа X и факториал N), но, тем не менее, можно и так решить задачу.
Если всё правильно расписать, то результат должен получиться один и тот же!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа для вычисления выражения Александрq Помощь студентам 2 16.11.2012 14:07
Программа для вычисления выражения Advocad4 Паскаль, Turbo Pascal, PascalABC.NET 6 17.11.2011 13:37
программа для вычисления суммы ряда Vitalina69 Общие вопросы Delphi 2 01.12.2010 19:47
Программа вычисления бесконечного числового ряда anna_ Помощь студентам 8 11.11.2010 13:48