Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Сумма ряда

Автор: Clane 10.11.2002 1:30

Ищется решения для такой задачи : Вычислить сумму ряда: S=X+(x(в пятой степени)/5)+......(x(в степени4n+1)/4n+1)  
0.1<=x<=0.8 n=30! шаг равен h=0.07

Автор: Clane 21.11.2002 23:48

Код
program rad;
var x,a,y,s:real;
n:integer;
begin
x:=0.1;
n:=0.07;
while x<=0.8 do
begin
n:=0;
a:=x;
s:=x;
while n<30 do
begin
a:=(sqr(sqr(x))*a)/(4*n+5));
s:=s+a;
n:=n+1;
end;
y:= 1/2*(ln((1+x)/(1-x))-1/4*(arctan(x))));
x:=x+h;
writeln(x,s,y);
end;
end.
Вроде бы нигде не наврал !!!
ЧИТАЕМ ПРАВИЛА! И не забываем включать код в соответствующие теги!

Автор: trminator 25.11.2002 23:20

Цитата
Ищется решения для такой задачи : Вычислить сумму ряда: S=X+(x(в пятой степени)/5)+......(x(в степени4n+1)/4n+1)  
0.1<=x<=0.8 n=30! шаг равен h=0.07


После "n=30" воскл. знак - это просто воскл. знак или ФАКТОРИАЛ???

Автор: Clane 25.11.2002 23:27

Решение смотрите выше. Это не факториал, а просто опечатка...

Автор: Wert 21.10.2004 19:53

Плиз, очень срочно, нужно завтра:
Вычислить сумму ряда методом интераций:

x + (x^3)/3! + ... + (x^(2n+1))/(2n+1)! [a=0; b=1] ( ! - факториал )

Нужно на делфе, но и на паскале думаю разберусь...
Очень нужно, помогите плиз

Добавлено (21.10.04 14:55):
Чуть не забыл.
Погрешность e = 0,0001

Автор: Amro 21.10.2004 21:23

Цитата
Погрешность e = 0,0001
Что под ней подразумевается???
может не погрешность а точность??

Автор: Altair 21.10.2004 21:40

именно точность

Автор: Amro 21.10.2004 21:43

другими словами член ряда не должен быть меньше e=0,0001 так чтоль???
а X вводится с клавиатуры из промежутка ( a,b )??

Автор: Altair 21.10.2004 21:46

Нет, при вычислении шаг какого-либо действия должне быть не более e

Автор: Amro 21.10.2004 22:20

Вообще можно понимать по разному точность может быть достигнута когда
An станет меньше "e" или есть ещё такой вариант когда pазница междy An и An-1 бyдет меньше чем "e". Oleg_Z думаю это ты и имел ввиду!!! На первом курсе я применял первый вариант, учительница посчитала это правильным!!!
Думаю здесь условие не точное!!!
Wert Для начала узнай что будут от тебя требовать в отношении "e", а потом мы еже помогём чем смогём!!

Автор: Wert 22.10.2004 0:27

под е подразумевается именно точность
"другими словами член ряда не должен быть меньше e=0,0001 так чтоль???
а X вводится с клавиатуры из промежутка ( a,b )??"
ДА
Заранее спасибо

Автор: Wert 22.10.2004 0:34

У меня есть похожее приложение но для другого варианта, но в делфи, как собственно почти во всех других языках программирования я смыслю мало, поэтому даже переделать под свой вариант не могу sad.gif
Далее привожу текст того приложения (задание того варианта мне не известно...), приложение консольное:

Код
program Wert;

{$APPTYPE CONSOLE}

uses
 SysUtils;

var t,x,s:real;
i,j:integer;
const a=0.1; b=0.6; e=0.00001;
begin
writeln('vvedite x ot ',a:1:1,' do ',b:1:1);
readln(x);
i:=0;
s:=1;
t:=1;
repeat
i:=i+1;
j:=i*i+1;
t:=t*(x/2)/i;
s:=s+t*j;
until t<e;
writeln('summa ryada =',s);
writeln('posledny chlen ryada =',t);
writeln('kolichestvo povtorov =',i);
readln;
end.

Понятно, что нужно поставить вместо е, а и b , но вот все остальное...

Код заключаем в теги!

Автор: Wert 22.10.2004 0:35

однако я не уверен в правильности этого кода...

Автор: Amro 22.10.2004 0:57

Цитата
однако я не уверен в правильности этого кода...

Код увроде правильный!!!
Цитата
но вот все остальное...

Что остальное??
Вот когда-то делал прогу
Код

uses crt;
var
An,S : real;
n    : integer;
begin
clrscr;
n:=1;
S:=0;
repeat
An:=exp(n*ln(1/2))+exp(n*ln(1/3));
S:=S+An;
n:=n+1;
until An <= 0.001;
writeln('S=',S:7:3);
readkey;
end.

Вместо An делай своё выражение, плюс надо факториал найти, это не сложно ...... вот рекурсивная ф-ция
Код

function f(k:integer):longint;
begin
  if k = 1 then f := 1 else f := k * f(k-1);
end;


Остаётся собрать всё вместе!!!! Думаю догадаешься!!!
Просто Oleg_Z нас учит не писать программу полностью а подсказывать, направлять в нужное русло!!!! Ибо писать полность это зло, если прога лёгкая!!!
Wert Так шо думай!!!

Автор: Wert 22.10.2004 1:21

Большое спасибо!!!
Но наверное я совсем тупой...
Просто до этого по глупости я не изучал языков программирования.
Я просто ума не приложу как написать в коде эту функцию...
Ведь не напишешь же ее так:
x + (x^3)/3! + ... + (x^(2n+1))/(2n+1)!
И куда этот факториал вставлять?

Может так?

Код
program Wert;

{$APPTYPE CONSOLE}

uses crt;
var
An,S : real;
n    : integer;
function f(k:integer):longint;
begin
 if k = 1 then f := 1 else f := k * f(k-1);
end;

begin
clrscr;
n:=1;
S:=0;
repeat
An:=x + (x*x*x)/3f;
S:=S+An;
n:=n+1;
until An <= 0.001;
writeln('S=',S:7:3);
readkey;
end.


Блин, наверное я совсем тупой, не работает... sad.gif

Автор: zx1024 22.10.2004 1:40

Код

A := x;
s := x;
n := 2; {это ед. целое число, остальные real}
repeat
 A := A * x*x / n / (n+1)
 n := n + 2;
 s := s + A;
until A > e

Автор: volvo 22.10.2004 1:42

Так не пробовал ? :D


program wert;

const
 eps = 0.0001;
 a = 0.0; b = 1.0;

var
 x, s, item: real;
 count: integer;

begin
 writeln('input x [',a:1:1,', ',b:1:1, ']');
 readln(x);

 count := 0;

 item := x;
 s := item;
 repeat
   inc(count);
   item := (item * sqr(x)) /
     ((2*count)*(2*count+1));
   s := s + item;
 until item < eps;

 writeln( 's = ', s:12:7 );
 writeln( 'counter = ', count );
 writeln( 'last row item = ', item:12:7 )
end.


Автор: volvo 22.10.2004 1:47

zx1024

А у тебя код получше ... Старею
sad.gif

Автор: Wert 22.10.2004 2:35

Блин.
Помогите идиоту
Вольво, этот код для консольного приложения?
Я вставляю в консольное а оно выдает: Runtime Error 105
Пожалуйста, напишите уже готовый вариант, если не сложно конечно, а то для меня это как древнегреческий...
:((((((((((((((((((((((((((((((((((((((((((((((

Автор: Wert 22.10.2004 2:39

А если переделать так, то при введении х и нажатия Ентер вылетает:


program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils;
const
eps = 0.0001;
a = 0.0; b = 1.0;

var
x, s, item: real;
count: integer;

begin
writeln('input x [',a:1:1,', ',b:1:1, ']');
readln(x);

count := 0;

item := x;
s := item;
repeat
  inc(count);
  item := (item * sqr(x)) /
    ((2*count)*(2*count+1));
  s := s + item;
until item < eps;

writeln( 's = ', s:12:7 );
writeln( 'counter = ', count );
writeln( 'last row item = ', item:12:7 )
end


Автор: zx1024 22.10.2004 2:48

Она не вылетает. Она заканчивает свою работу и закрывает окно.
Поставь в конце readln

Автор: Wert 22.10.2004 3:04

Поставил, а он выделил как ошибку...
Где именно поставить, и что именно поставить?
"readln;" прямо перед "end." ???

Автор: Wert 22.10.2004 3:06

АААААААААААААААААААААААААААААА!!!!!!
С П А С И Б О ! ! !
В С Е Р А Б О Т А Е Т ! ! !
ОГРОМНОЕ СПАСИБО ВСЕМ ЗА ПОМОЩЬ И ПОДДЕРЖКУ!!!!!!!!!!!!!!!!

Автор: Wert 22.10.2004 3:15

Чувствую, что нагло испытываю ваше терпение, посему на этот пост можете не отвечать...
Нам задавали 2 проги...
Вторую надо сделать в оконном варианте...
Вот задание для нее:

Решить методом Ньютона (В качестве первого приближения взять значение примерно на 50% отличающееся от приближенного значения корня) и секущих:
x*tg x - 1/3 = 0
x ~=~ 0,5472
Вобщем это наверное уже наглость, так что можете меня послать...
Но если найдется время помогите плиз... smile.gif

Автор: Amro 22.10.2004 3:37

zx1024 volvo Зацените!!!!
А что если так сделать!!!

program wert;

const
eps = 0.0001;
a = 0.0; b = 1.0;

var
x, s, An : real;
fac,n: integer;

function f(k:integer):longint;
begin
 if k = 1 then f := 1 else f := k * f(k-1);
end;

begin
writeln('input x [',a:1:1,', ',b:1:1, ']');
readln(x);
n:=1;
s := 0;
repeat
  fac:=(2*n+1);
  An := exp((2*n+1)*ln(x))/f(fac);
  s := s + An;
  inc(n);
until An < eps;

writeln( 's = ', s:12:7 );
end.

Автор: volvo 22.10.2004 3:54

Amro


repeat
 fac:=(2*n+1);
 An := exp((2*n+1)*ln(x))/f(fac);
 s := s + An;
 inc(n);
until An < eps;
делаешь лишнее действие. Тогда уже так:


repeat
 fac:=(2*n+1);
 An := exp((fac)*ln(x))/f(fac);
 s := s + An;
 inc(n);
until An < eps;


:P

Автор: Amro 22.10.2004 3:55

volvo Да верно подмечено!!! А сам вариант как???

Автор: volvo 22.10.2004 4:02

Amro

Вообще красиво смотрится. Но рекурсия... А если число итераций увеличится?

Автор: Amro 22.10.2004 4:06

Цитата
А если число итераций увеличится?

Согласен, тагды работать не будет!!! Значит через процедуру сделаем smile.gif
Ладно пойду спать!!! Пока ....

Автор: volvo 22.10.2004 4:08

Amro

s := 0;


надо заменить на

s := x;

Автор: Amro 22.10.2004 16:52

Цитата
Код s := 0;
надо заменить на
Код s := x;
Можно и заменить, у него просто ряд интересный!!! А можно заменить и так:
вместо
n:=1;
так
n:=0;

Автор: Wert 22.10.2004 22:42

Подскажите плиз!
Как в Делфи обозначается тангенс???
Пишу cos - понимает, что это такое, пишу tg, tan или tang - выделяет как ошибку!
Подскажите, срочно надо...

Автор: Altair 22.10.2004 22:46

а слабо написать sin\cos ? smile.gif

Автор: Wert 22.10.2004 22:49

Блин, и се я сам не догадался!
СПАСИБО!