arctg(X)= x-x^3/3+x^5/5-x^7/7+x^9/x+...... xe [-1;1] правелно ли я делаю ? или лутше через массив?
Код
Program first; uses crt; var xn,E,summa,p,x2:real; i:integer; begin clrscr; repeat writeln ('введите xn [-1..1]'); readln(xn); until (xn>=(-1)) and (xn<=1); write('E='); read(E); x2:=xn*xn; summa:=xn; p:=xn; i:=3; repeat p:=-p*x2/(i*(i-2)); summa:=summa+p; i:=i+2; until p<E; writeln('p=',p:5:5); writeln('summa=',summa:5:5); readln; readln; end.
так как мне надо вводить n тоесть n=1 =x n=2 = x+x^3/3 n=3 = x+x^3/3+x^5/5
volvo
15.11.2006 20:22
У тебя не совсем верно здесь:
repeat
p:=-p*x2/(i*(i-2)); { <--- }
summa:=summa+p;
i:=i+2;
until p<E;
(тебе не нужно изменять знаменатель... То, что ты делаешь, аналогично:
x-x^3/3+x^5/(3*5*3)-x^7/(7*5*3*5*3)+..., то есть знаменатель ДОМНОЖАЕТСЯ на i*(i-2), а тебе нужно:
next := xn;
repeat
p := next/i;
next := - next * x2; { next хранит изменяющийся числитель, знаменатель вычисляется уже в p }
summa:=summa + p;
i:=i+2;
until abs(p) < E; { <--- Не забывай про abs }
)
Andrej
15.11.2006 20:31
спасиба
Andrej
15.11.2006 20:47
что то не то если x=1 a e=0.2 то должна сумма быть 0 .... а у меня что-то считает
Andrej
15.11.2006 21:01
и еще с abs нелзя е=0 вечный цикл получается
volvo
15.11.2006 21:09
Ну вот расскажи мне, если у тебя X = 1, и s = X + ... то как может быть сумма равна 0 ???
Цитата
с abs нелзя е=0
E = 0 вообще нельзя... Какой смысл ты в это вкладываешь? "С точностью до НУЛЯ"???
Andrej
15.11.2006 21:30
да ты прав...понял а он считает только x+x^3/3 .... далше несчитает
Andrej
15.11.2006 22:31
Код
Program first; uses crt; var xn,p,E,summa,next,x2:real; i,n:integer; begin clrscr; repeat writeln ('iveskyte xn [-1..1]'); readln(xn); until (xn>=(-1)) and (xn<=1); repeat writeln ('iveskyte E<>0='); readln(E); until E<>0; x2:=xn*xn; summa:=xn; next:=xn; i:=3; for n:=1 to 3 do begin repeat p:=next/i; next:=next*x2; summa:=summa+p; i:=i+2;
until abs(p)<E; writeln('p=',p:5:5); writeln('summa=',summa:5:5); end; readln; end.
во..... но теперь я хотчу чтобы я вводил n а не чикл мне векидивал от 1 до 3 , хелп
volvo
15.11.2006 22:55
А вот теперь ты мне расскажи, зачем тебе в программе нужен вот этот цикл:
for n:=1to3dobegin
? Что, нельзя точность поменьше задать? Чего ты добиваешься этим циклом? Правильности результату он никак не прибавляет, в смысле, ты задал E = 0.2, и результат с данной точностью получился уже при n = 1... Все остальное - никому не нужные вычисления...
Сначала приведи код в нормальный вид, потом напиши, ЧТО ИМЕННО ты хочешь вводить, и какой результат получить, а потом будем разговаривать...
Andrej
16.11.2006 2:34
Код
for n:=1 to 3 do begin
так хоть далше считает.... а то ответ такой же самий :/
мне же надо его вводить .... цикл считает отлично , но я им немогу руководит тока от и до ввести а мне надо например чтобы n=3 ; p:=x+x^3/3-^5/5
Andrej
16.11.2006 6:33
ну кажись решил....посчитал на бумаге вроде всио оки
Код
Program first; uses crt; var xn,p,E,summa3,summa2,next,x2:real; i,n:integer; begin clrscr; repeat writeln ('iveskyte xn [-1..1]'); readln(xn); until (xn>=(-1)) and (xn<=1); repeat writeln ('iveskyte E='); readln(E); until E<>0; repeat writeln ('iveskyte n='); readln(n); until n<>0; x2:=xn*xn; summa2:=xn; next:=xn; i:=3; for n:=1 to n do begin repeat next:=next*x2; p:=next/i; summa2:=summa2+p; i:=i+2; until abs(p)<E; writeln('p=',p:5:10); writeln('summa2=',summa2:5:5); end; readln; end.
еще бы зделать чтобы все n непоказывало , а толко последний
Sozialist
16.11.2006 7:11
Код
Program first; uses crt; var xn,p,E,summa3,summa2,next,x2:real; i,n:integer; begin clrscr; repeat writeln ('iveskyte xn [-1..1]'); readln(xn); until (xn>=(-1)) and (xn<=1); repeat writeln ('iveskyte E='); readln(E); until E<>0; repeat writeln ('iveskyte n='); readln(n); until n<>0; x2:=xn*xn; summa2:=xn; next:=xn; i:=3; for n:=1 to n do begin repeat next:=next*x2; p:=next/i; summa2:=summa2+p; i:=i+2; until abs(p)<E; end; writeln('p=',p:5:10); writeln('summa2=',summa2:5:5); readln; end.
чтоб только значения при последнем n? есля я правильно понял, надо предпоследний end на 2 строки выше поднять, как у меня выше.
volvo
16.11.2006 13:14
Sozialist, ты что изменил-то в основном цикле программы??? Зачем просто так Copy/Paste-ить?
Объясните вы мне РУССКИМ языком, зачем КОМБИНИРОВАТЬ 2 цикла (For + Repeat), если можно обойтись одним Repeat-ом, только не Until abs(p)<E ...
Особенно мне понравилось вот это:
Цитата
for n:=1 to n do begin
Program first;
uses crt;
var
xn,p,E,summa3,summa2,next,x2:real;
i,n:integer;
begin
clrscr;
repeat
writeln ('iveskyte xn [-1..1]');
readln(xn);
until (xn>=(-1)) and (xn<=1);
{
!!! Этот кусок можно убрать - от него теперь никакого толка нет...
Ты НЕ можешь одновременно считать и ДО определенной точности, и
определенное число членов ряда... Или одно или другое...
}repeat
writeln ('iveskyte E=');
readln(E);
until E<>0;
{ ... !!! }repeat
writeln ('iveskyte n=');
readln(n);
until n > 0; { А если бы я при твоем условии задал -1 ? }
x2:=xn*xn;
summa2:=xn;
next:=xn;
i:=3;
if n = 1then p := 0elserepeat
next:=-next*x2; { А вот сюда посмотреть уже 10 постов никто не догадался, я забыл здесь минус }
p:=next/i;
summa2:=summa2+p;
i:=i+2;
dec(n);
until n <= 1;
writeln('p=',p:5:10);
writeln('summa2=',summa2:5:5);
readln;
end.
Теперь ясно?
Sozialist
16.11.2006 17:09
Человек просил вывести только последний результат, что я и обеспечил, за основной код я не брался, т.к. товарищ им удовлетворен, я ничего не имею против ;-)
Andrej
16.11.2006 19:32
ище мне надо так же найти cумму которая >E но наверна ана почти всегда будет 0
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.