Помощь - Поиск - Пользователи - Календарь
Полная версия: итерационные циклы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Hunt666
помогите разобраться
вот задачка:
вычислить приближенное значение бесконечной суммы.Нужное приближение считается полученным если сумма первых нескольких слагаемых , и очередное слагаемое оказалось по модулю меньше данного положительного e .


X+1*X^3/(2*3) + 1*3X^5/(2*4*5) + 1*3*5*X^7/(2*4*6*7)+ 1*3*5*7*X^9/(2*4*6*8*9)+...... и тд

const MaxIter = 500;
var x, eps    : double;
       c, y   : double;
       n      : integer;
       done   : boolean;
begin
 writeln('vvedite x  u tochnost:');
 readln(x, eps);
 if sqr(x)>=1 then writeln('x ne podhodit')
 else
  done :=  true;
  c := x; y := c;
  n := 0;
  while abs(c) > eps do begin c := c*sqr(x)*x/(2*n + 1)/(2*n + 3);
  y := y + c;
  inc(n);
  if n > MaxIter then begin
    writeln('piad pacxoditcia!');
    done := false; break
  end
  end;
 if done then
    writeln('Dlia argumenta ', x , 'znachenie funkcii: ' , y , ' vicheslino s tochnostiu', eps, ' za ', n, ' iteraciy');
 readln;
 end.

количество итераций у меня вседа =0, и я очень не уверен в правильности c := c*sqr(x)*x/(2*n + 1)/(2*n + 3);
klem4
Вот как-то так это должно выглядеть :

uses crt;

const
  eps = 1E-3;

var
  s, next: Single;
  x, x2, p, ch, zn, t: Integer;

begin
  clrscr;

  write('x = '); readln(x);

  s := x;

  x2 := x * x;

  ch := x;

  p := 1;

  t := 1;

  zn := 1;

  repeat


    ch := ch * x2 * p; // chislitel

    zn := zn * (t + 1) * (t + 2) div t; // znamenatel

    next := ch / zn; // ocherednoi chlen summi

    s := s + next;

    p := p + 2;
    t := t + 2;

  until abs(next) < eps;

  writeln('s = ', s:2:3);

  readln;
end.

Hunt666
я еще забыл указать X^2<1

у меня постоянно выдает ошибку на строчке
 zn := zn * (t + 1) * (t + 2) div t;

operand type do not match operator
klem4
Поменял integer на real ? Теперь вместо div поставь просто "/". Для вещественных чисел операция div не определена ...

Точнее лучше просто zn и t объяви как Integer;
Hunt666
type mismatch теперь вот такую выдает ошибку на той же строчке
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.