Найти сумму - Pascal (88001)

Узнай цену своей работы

Формулировка задачи:

Доброго дня! Помогите тут задача 5 что то не получается
Тут сумма, например при х = 0,82 равна 0,355465707949 а должна быть 0,682221207287614 (т.к. она должна ~ cos(x)) Уже весь мозг сломалНе пойму чем ошибка

Не по теме:

Компилировал Free Pascal 2.4.4. из командной строки

Не по теме:

Если сможете, то посмотрите ещё задачи 8, 11. Просто если у кого остались задачи, то поделитесь пжлст

В 8 всегда ответ 2, почему - незнаю Вот что сам сделал

Решение задачи: «Найти сумму»

textual
Листинг программы
Const eps = 0.001;
 
Function fib_sample(n : Integer) : Extended;
Var 
  i : Integer; 
  Num, un1, un2 : Extended;
Begin
  un1 := 1;
  un2 := 1;
  For i := 3 To n Do
    Begin
      Num := un1 + un2;
      un2 := un1;
      un1 := Num;
    End;
  fib_sample:=Num;
End;
 
{Function Pow(x, y : Real) : Extended;
begin
  If x > 0 Then 
    Pow := Exp(y * Ln(x))
  Else 
    If x < 0 Then 
      Pow := Exp(y * Ln(Abs(x))) 
  Else 
    If y = 0 Then 
      Pow := 1 
    Else 
      Pow := 0;
End;}
 
Function Pow(Base : Real; Exponent : Real): Extended;
var 
  Tmp: Real;
begin
  Pow:=0;
  if Int(Exponent/2)=Exponent/2 then Base:=Abs(Base);
  if Exponent=0 then
    begin
      Pow:=1;
      Exit
    end;
  if Base=0 then
    begin
      Pow:=0;
      exit
    end;
  if Base>0 then
    begin
      Tmp:=Exp((Abs(Exponent))*Ln(Base));
      if Exponent>0 then
        begin
          Pow:=Tmp;
          exit
        end;
      if Exponent<0 then
        begin
          Pow:=1/Tmp;
          exit
        end;
    end;
    if Base<0 then
      begin
        Tmp :=Exp((Abs(Exponent))*Ln(Abs(Base)));
        if Exponent>0 then
          begin
            Pow:=-Tmp;
            exit
          end;
        if Exponent<0 then
          begin
            Pow:=-1/Tmp;
            exit
          end;
      end;
end;
 
Function fib_test(n : Real) : Extended;
Begin
  fib_test := (1/sqrt(5)) * (Pow((1+sqrt(5))/2, n) - Pow((1-sqrt(5))/2, n));
End;
 
Var 
  i:Integer;
Begin
  i := 3;
  While fib_test(i) - fib_sample(i) < eps Do
  Begin
    WriteLn(fib_test(i):8:15, '  ', fib_sample(i):8:15);
    Inc(i);
  End;
 WriteLn ('Погрешность более чем ',eps:6:3,' начинается с ' , i,' номера');
 WriteLn ('Число Фибонначи по образцу: ',fib_sample(i):0:0);
 WriteLn ('Число Фибонначи по формуле: ',fib_test(i):0:8);
 ReadLn;
End.{6.XII 2011}

Объяснение кода листинга программы

  1. Находится функция fib_sample, которая вычисляет n-ое число Фибоначчи.
  2. Используется цикл для вычисления последовательности чисел Фибоначчи.
  3. Находится функция Pow, которая вычисляет x в степени y.
  4. Находится функция fib_test, которая вычисляет число Фибоначчи по формуле.
  5. В основной программе вычисляется число Фибоначчи по образцу и по формуле, и происходит сравнение результатов.
  6. Если разница между результатами больше заданной погрешности, то происходит вывод информации об этом.
  7. Выводится число Фибоначчи по образцу и по формуле.
  8. Программа завершается чтением строки с помощью ReadLn.

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы