ребята, помогите. цикл с факториалом

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

ребята, помогите. цикл с факториалом

Сообщение *13* » 18.04.2007 20:59:59

помогите написать программу, пожалуйста. мозг у меня уже практически не варит а на завтра она должна быть готова. у меня есть более-менее кривой набросок, но несерчайте если найдете внем глупые ошибки :)
итак...
Используя оператор цикла с последующим условием, вычислить сумму нескончаемого ряда, учитывая только те слогаемые, которые по абсолютной величине больше заданного числа E = 10 в минус пятой степени.
при вычислении члена ряда использовать рекурентные соотношения( вроде так звучит, сорри я с украинского перевожу )
значение Х ввести с клавы.
Изображение

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
const E = 10E-5;
var s,x,ff,f:real;
k,i:integer;
begin
x:=Strtofloat(edit1.Text);
k:=1; s:=0; 
repeat
f:=1;
for i:=1 to k do f:=3*f*i;
if (k mod 2 = 5) then
ff:=(exp(3*k)*ln(x)/f)*(-1)
else ff:=(exp(3*k)*ln(x)/f);
S:=S + ff;
inc(k);
until ff >=E;
label2.visible:=true;
label2.caption:='S = '+floattostr(s);

end;

заранее БОЛЬШОЕ СПАСИБО!
*13*
новенький
 
Сообщения: 28
Зарегистрирован: 14.12.2006 16:29:57

Сообщение shade » 18.04.2007 22:54:38

Если ничего не попутал:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
const E = 10E-5;
var
  x: real;       // x
  k: integer;
  Sk: real;      // S[k]
  Ak: real;      // A[k]
  x3: real;      // x^3
  sign: Integer; // (-1)^k
begin
  x:=Strtofloat(edit1.Text);
  x3 := x*x*x;  // x^3
  k := 1;
  sign := -1;
  Ak := x3 / 6;
  Sk := sign * Ak;  // S[1]
  while (Ak >= E)  do
  begin
    Ak := Ak * x3 / ( (3*k+1) * (3*k+2) * (3*k+3) );
    Inc(k);
    sign := - sign;
    Sk := Sk + sign * Ak;  // S[k]
  end; // while
  label2.visible:=true;
  label2.caption:='S = '+floattostr(Sk);
end;
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение *13* » 19.04.2007 09:53:46

shade писал(а):Если ничего не попутал:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
const E = 10E-5;
var
  x: real;       // x
  k: integer;
  Sk: real;      // S[k]
  Ak: real;      // A[k]
  x3: real;      // x^3
  sign: Integer; // (-1)^k
begin
  x:=Strtofloat(edit1.Text);
  x3 := x*x*x;  // x^3
  k := 1;
  sign := -1;
  [b]Ak := x3 / 6;[/b]
  Sk := sign * Ak;  // S[1]
  while (Ak >= E)  do
  begin
    Ak := Ak * x3 / ( (3*k+1) * (3*k+2) * (3*k+3) );
    Inc(k);
    sign := - sign;
    Sk := Sk + sign * Ak;  // S[k]
  end; // while
  label2.visible:=true;
  label2.caption:='S = '+floattostr(Sk);
end;

спасибо, еще раз :) только такой вопрос, а почему А-катому присвается значение, с делением на 6 (Ak := x3 / 6)? а так вроде все понятно :roll:
*13*
новенький
 
Сообщения: 28
Зарегистрирован: 14.12.2006 16:29:57

Сообщение shade » 19.04.2007 11:21:52

Это abs(A[1]) = x^3 / 3! ;)
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Илья Аввакумов » 19.04.2007 11:49:08

Правильно!
Не надо никаких факториалов выдумывать. Следует k-ый член в сумме вычислять через (k-1)-ый.
Илья Аввакумов
новенький
 
Сообщения: 50
Зарегистрирован: 04.05.2005 15:06:42
Откуда: Екатеринбург


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru