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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2014, 18:38   #1
Алькер
Пользователь
 
Регистрация: 07.04.2014
Сообщений: 26
Восклицание Последовательность. Найти ошибку

Вычислить сумму последовательности, из элементов аk вычисляемых по формуле, с точностью е = 0.001. Выяснить сколько нужно слагаемых для достижения заданной точности. Значение k=1,2,…
аk =( tg(x)+ 7k)/k!

Код:
program sum;

const
  e = 0.001;

var
  x, a, summa: real;
  k: integer;

function ReversedFactorial(n: word): real;
begin
  if n = 0 then
    ReversedFactorial := 1
  else
    ReversedFactorial := 1 / n * ReversedFactorial(n - 1);
end;

begin
  writeln('Введите x:');
  readln(x);
  summa := 0;
  k := 1;
  a := sin(x)/cos(x)+exp(k*ln(7));
  while (abs(a) > e) do
  begin
    summa := summa + a;
    k := k + 1;
    a := (sin(x)/cos(x)+exp(k*ln(7)))/ReversedFactorial(k);
  end;
  writeln('Сумма=', summa:5:2);
  writeln('Количество слагаемых=', k - 1);
end.
Ошибку выдает...
Алькер вне форума Ответить с цитированием
Старый 03.05.2014, 18:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не удивительно )
Твое "а" постоянно увеличивается. Условие цикла никогда не дат false, потому цикл не закончится. А вот то что закончится, так это ресурсы компьютера )
Переделывай программу. Тебе нужно сохранять предидуще "а", чтоб сравнивать с текущим, если разница между ними будет менее "е" - выходить из цикла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.05.2014, 18:47   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

или я формулу не понимаю (попробуйте её вставить в виде LaTex формулы или скриншота), но, имхо, Вы лишний раз факториал делите.
т.е. либо в
Код:
function ReversedFactorial(n: word): real;
begin
  if n = 0 then
    ReversedFactorial := 1
  else
    ReversedFactorial := n * ReversedFactorial(n - 1);
end;
либо надо в формуле на ваш ReversedFactorial домножать, а не делить

p.s. и вынесите вычисление тагненса за цикл, он же не зависит от K
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi) Artsiom Помощь студентам 10 18.12.2013 14:10
Найти ошибку в коде (Для данной целочисленной матрицы размером n*m найти матрицу из 0 и 1...) код на C camel5 Помощь студентам 1 26.11.2013 06:11
С++ Найти последовательность SholpanB Помощь студентам 1 30.05.2013 21:24
Не могу найти ошибку.. одномерный массив, убывающая последовательность Malloperro Помощь студентам 1 23.12.2010 21:15
Найти последовательность матрицы. gessi Паскаль, Turbo Pascal, PascalABC.NET 1 14.09.2009 16:07