Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Итеративные вычисления


Автор: Newchap 17.9.2013, 18:11
Добрый день, к сожалению, не могу понять как дальше делать задание и был бы признателен, если бы вы мне помогли.
Само уравнение я приклеил к посту, задача же такова :
Написать программу вычисления приближенных значений функции, представленной в виде ряда, в десяти равноотстоящих друг от друга точках указанного диапазона возможных значений аргумента, как в таблице, которая будет в след посте, т.е. сначала посчитать Х от 10^-1 до 10^-6, затем перейти на следующий X 

Вот то, что я имею на данный момент, она считает х от -0.5 до 0.3, но только с одним параметром eps.

Большое спасибо!

Код

uses crt,math;
var xn,xk,x,dx,eps,s,t,p:real; fp:text;
begin
AssignFile(fp,'lab1.text');
Rewrite(fp);
Write('xn='); ReadLn(xn);
Write('xn=');ReadLn(xk);
dx:=(xk-xn)/9;
eps:=0.00001;
x:=xn;
writeln('----------------------------');
writeln('eps,     |  x  |    s    | (1+x)^-1 |');
writeln('----------------------------');
while x<=xk+dx/2 do
 begin
  s:=1; 
  t:=1;
  while abs(t)>eps do
   begin
    t:=-t*x;
    s:=s+t;
   end;
  writeln(',x:5:2,'|',s:8:4,' |',1/(1+x):9:4,' |');
    x:=x+dx;
 write(fp,'lab1.text');
 end;
writeln('----------------------------');
readln;
Closefile(fp);
end.                                     



Автор: Newchap 17.9.2013, 18:13
Вот и табличка

Автор: Pawl 20.9.2013, 10:26
Вы неправильно поняли задачу. Тут не надо каждый раз считать х от 0.1 до 0.00001, тут надо для каждого х из заданого промежутка найти приближенное значение (1 + x)^-1 (т. е. 1 / (1 + х)) с заданой точностью. Делается это при помощи вложенного цикла:
Код

program Project2;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

const
  eps = 0.00001;
  b = -0.5;
  e = 0.3;

var
  x, fx, dx, a, u: real;
  k: integer;

begin
  dx := (e - b) / 9;
  a := b;
  while a <= e do
  begin
    x := 1;
    k := 1;
    fx := 1;
    repeat
      k := -k;
      x := x * (a);
      u := k * x;
      fx := fx + u;
    until eps > abs(u);
    write('x = ', a:3:3, ' (1 + x)^-1 = ', fx:5:5, ' ');
    writeln('proof: 1 / (1 + x) = ', (1 / (1 + a)):5:5);
    a := a + dx;
  end;
  readln;

end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)