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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2010, 13:37   #1
brazilec2
Новичок
Джуниор
 
Регистрация: 09.06.2010
Сообщений: 4
По умолчанию Вычисление суммы!

вот написал программу по заданию , но значения арксинуса, не сходятся со значениями суммы!
program vata;
Цитата:
{$APPTYPE CONSOLE}

uses
SysUtils;

Function stn(Var chislo:real; stepen:integer):Real;
Var pow,per:real;
begin
Per:= Abs(chislo);
If chislo < 0 Then Pow:= (-1)*Exp((stepen)*Ln(per))
Else Pow:= Exp((stepen)*Ln(per));
stn:=pow;
end;


Function Fact(num : Integer) : Integer;
begin
if (num<=0) then Fact := 1
else Fact := num*Fact(num-1);
end;


var sum,z:real;
fc,k: integer;
begin
sum:=0;
z:=-1.2;
while z<=0.8 do
begin
for k:=0 to 10 do
begin
fc:=fact(k);
sum:=(sum+2*fc*stn(z,2*k+1)){/((2*k+1)*stn(fact(k),2)*stn(2,2*k)) };
sum:=sum/((2*k+1)*sqr(fc)*exp((2*k)*ln(2)));
end;
z:=z+0.2;
writeln ('z=', z:4:4, ' sum=', sum:11:25);
readln;
readln;
end;

end.
Изображения
Тип файла: jpg prosss.JPG (40.0 Кб, 134 просмотров)
brazilec2 вне форума Ответить с цитированием
Старый 09.06.2010, 13:50   #2
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

Код:
sum:=(sum+2*fc*stn(z,2*k+1)){/((2*k+1)*stn(fact(k),2)*stn(2,2*k)) };
sum:=sum/((2*k+1)*sqr(fc)*exp((2*k)*ln(2)));
сразу бросилось в глаза то, что 2*факториал(k) не равно факториал(2*k), как требуется по формуле.
ну и вообще какая-то громоздкая запись, в которой ошибку найти сложно, разбей ее на куски.
Snejnaya вне форума Ответить с цитированием
Старый 09.06.2010, 15:43   #3
brazilec2
Новичок
Джуниор
 
Регистрация: 09.06.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Snejnaya Посмотреть сообщение
Код:
sum:=(sum+2*fc*stn(z,2*k+1)){/((2*k+1)*stn(fact(k),2)*stn(2,2*k)) };
sum:=sum/((2*k+1)*sqr(fc)*exp((2*k)*ln(2)));
сразу бросилось в глаза то, что 2*факториал(k) не равно факториал(2*k), как требуется по формуле.
ну и вообще какая-то громоздкая запись, в которой ошибку найти сложно, разбей ее на куски.
а как тогда записать факториал 2*k?
brazilec2 вне форума Ответить с цитированием
Старый 09.06.2010, 15:49   #4
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

надо думать fc1=fact(2*k)
Snejnaya вне форума Ответить с цитированием
Старый 09.06.2010, 17:08   #5
brazilec2
Новичок
Джуниор
 
Регистрация: 09.06.2010
Сообщений: 4
По умолчанию

сама программа, ибо функции нам, наверно, не интересны!
Цитата:
var sum,z:real;
fc,fc1,k: integer;
begin
sum:=0; сумма равна нулю
z:=-1.2; задаем z...ставим 1.2...для шага 0.2
while z<=0.8 do выполнять для z пока не будет меньше или равно 0.8
begin
for k:=0 to 10 do задаем сумму до 10!
begin
fc:=fact(k); факториал наш
fc1:=fact(2*k); 2*k !
sum:=(sum+2*fc*stn(z,2*k+1)); числитель
sum:=sum/((2*k+1)*sqr(fc)*exp((2*k)*ln(2))); сумма
end;
z:=z+0.2; выполнять для z с шагом 0.2
writeln ('z=', z:4:4, ' sum=', sum:11:25);
readln;
readln;
end;

end.
brazilec2 вне форума Ответить с цитированием
Старый 09.06.2010, 17:11   #6
brazilec2
Новичок
Джуниор
 
Регистрация: 09.06.2010
Сообщений: 4
По умолчанию

но тем не менее с исправленным факториалом все равно считает не правильно! ;[
brazilec2 вне форума Ответить с цитированием
Старый 09.06.2010, 20:14   #7
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, Math;

//Функция берёт строку в ANSI кодировке (Windows)
//и возвращает её перевод в OEM кодировку (DOS) в виде отдельной строки.
function AnsiToOem(aStr : String) : String;
begin
  Result := '';
  if Length(aStr) > 0 then begin
    SetLength(Result, Length(aStr));
    CharToOem(PChar(aStr), PChar(Result));
  end;
end;

//Вычисление факториала.
function Factorial(aNumber : Longword) : Extended;
var
  i : Longword;
begin
  Result := 1;
  for i := 2 to aNumber do begin
    Result := Result * i;
  end;
end;
 
//Вычисление элемента (члена) с номером aN ряда Маклорена для точки aX.
//aN - номер члена ряда. Номера начинаются с нуля.
function CalcElement(aX : Extended; aN : Longword) : Extended;
begin
  Result :=
    (
      Factorial(2 * aN)
      /
      (
        Power(4, aN)
        * Power(Factorial(aN), 2)
        * (2 * aN + 1)
      )
    )
    * Power(aX, 2 * aN + 1);
end;

var
  //Результат вычисления ряда.
  Res         : Extended;
  //Результат вычисления очередного члена ряда.
  CurElem     : Extended;
  //Точка для которой вычисляется ряд.
  x           : Extended;
  //Предельное число итерация (число членов ряда Маклорена).
  Count       : Integer;
  //Точность вычисления ряда.
  Precision   : Extended;
  //Счётчик итераций (счётчик членов ряда).
  n           : Integer;

begin
  Writeln(AnsiToOem( 'Вычисление функции arcsin(x)' ));
  Writeln(AnsiToOem( 'Задайте аргумент "x" (-1 < x < 1) :' ));
  Readln(x);
  Writeln(AnsiToOem( 'Задайте максимальное число итераций (число членов ряда Маклорена):' ));
  Readln(Count);
  Writeln(AnsiToOem( 'Задайте точность вычисления:' ));
  Readln(Precision);
 
  Res := 0;
  n := -1;
  repeat
    //Pred(Count) - потому что мы считаем n от нуля,
    //Succ(n) - потому что должны оценить n на ещё нерасчитанном шаге.
    if Succ(n) > Pred(Count) then begin
      Writeln(AnsiToOem( 'Достигнуто предельное число итераций (=' + IntToStr(Count) + '). Вычисления остановлены.' ));
      Break;
    end;
    //Считаем номер члена ряда.
    Inc(n);
    //Вычисляем очередной член ряда.
    CurElem := CalcElement(x, n);
    //Значение всего ряда.
    Res := Res + CurElem;
  Until Abs(CurElem) < Precision;


  Writeln(AnsiToOem( 'Вычисленное значение равно: ' + FloatToStr(Res) ));
  Writeln(AnsiToOem( 'Достигнутая точность = ' + FloatToStr(Abs(CurElem)) ));
  Writeln(AnsiToOem( 'Выполнено итераций (число расчитанных членов ряда Маклорена) = ' + IntToStr(Succ(n)) ));
  writeln(AnsiToOem('Аналитически='+floattostr(arctan(x/sqrt(1-x*x)))));
  Writeln(AnsiToOem( 'Для выхода нажмите ENTER' ));

  Readln;
end.
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!
DoDge_VipeR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление суммы mixanja Общие вопросы Delphi 1 13.04.2010 17:32
Вычисление суммы ряда 666Rayne666 Помощь студентам 3 25.12.2009 22:39
Вычисление суммы бесконечного ряда sanela Помощь студентам 2 08.12.2009 18:45
Задачи на вычисление суммы Many man Помощь студентам 7 20.12.2008 22:47
StringGrid, вычисление суммы Gorin Компоненты Delphi 5 23.08.2007 19:44