Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Циклы итерационной структуры - 2


Автор: Аликс 8.5.2006, 15:55
Я подумал, что может вам не понятна задача, я прекрепил файл.
Задача на ветвление и циклы.

С уважением Аликс

Добавлено @ 15:58 
"Задача на ветвление и циклы." - это не отсюда! 

Автор: VAngeL86 10.5.2006, 15:45
Простая программа на подсчёт функции с заданой точностью! 
Используем цикл с пост условием...
Код

Program Inter;
uses CRT;
var n: integer;
    x, a, S: real;

Function st(a: real; b:integer): real; {функция считает степень по формуле x^a = exp(a*ln(x))}
var tmp: real;
begin
 tmp:=exp(b*ln(abs(a)));
 if a<0 then
  if b mod 2 <> 0 then tmp:=-tmp;
 st:=tmp;
end;

BEGIN
 clrscr;

 S:=0; x:=0.15; n:=1;
 repeat
  a:=st(-1, n+1)*st(x, 2*n+1)/(4*sqr(n) + 1); {считаем очередное слагаемое}
  S:=S+a;
  inc(n);
 until abs(a) < 1E-3; {если это слагаемое меньше точности то завершаем цикл}

 write('S = ', S:0:5);

readkey;
END.


P.S. надеюсь в этот раз я всё правильно понял smile 
 

Автор: Аликс 4.6.2006, 11:09

Я посмотрел программу. Вроде всё правильно. Вот только начиная отсюда ничего непонятно:

Цитата

Function st(a: real; b:integer): real; {функция считает степень по формуле x^a = exp(a*ln(x))}
var tmp: real;
begin
tmp:=exp(b*ln(abs(a)));
if a<0 then
if b mod 2 <> 0 then tmp:=-tmp;
st:=tmp;
end;

BEGIN
clrscr;

S:=0; x:=0.15; n:=1;
repeat
a:=st(-1, n+1)*st(x, 2*n+1)/(4*sqr(n) + 1); {считаем очередное слагаемое}
S:=S+a;
inc(n);
until abs(a) < 1E-3; {если это слагаемое меньше точности то завершаем цикл}

write('S = ', S:0:5);


Да, и написание формул тоже непонятно. 

Автор: volvo877 4.6.2006, 11:41
Аликс, так более понятно:
Код

const
  eps = 1E-3;

{ Функция возвращает (-1) в степени N }
function minusOnePower(n: integer): integer;
begin
  if odd(n) then minusOnePower := -1
  else minusOnePower := 1;
end;

var
  x, s, next: real;
  n: integer;

begin
  s := 0;
  n := 1;
  x := 0.15;

  x := x * x * x; { В первом слагаемом степень X равна 3 }
  repeat
    { Находим очередное слагаемое }
    next := minusOnePower(n + 1) * x / (4 * sqr(n) + 1);
    s := s + next; { <--- Увеличиваем сумму}

    { Степень Х в каждем следующем слагаемом увеличивается на 2 }
    x := x * sqr(x);
    inc(n);
  until abs(next) < eps;
  writeln(s:15:10);
end.

? 

Автор: Аликс 4.6.2006, 11:56
Спасибо! 

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