1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
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 }
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 , хелп
А вот теперь ты мне расскажи, зачем тебе в программе нужен вот этот цикл:
for n:=1to3dobegin
? Что, нельзя точность поменьше задать? Чего ты добиваешься этим циклом? Правильности результату он никак не прибавляет, в смысле, ты задал E = 0.2, и результат с данной точностью получился уже при n = 1... Все остальное - никому не нужные вычисления...
Сначала приведи код в нормальный вид, потом напиши, ЧТО ИМЕННО ты хочешь вводить, и какой результат получить, а потом будем разговаривать...
ну кажись решил....посчитал на бумаге вроде всио оки
Код
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 непоказывало , а толко последний
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 строки выше поднять, как у меня выше.
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.
Человек просил вывести только последний результат, что я и обеспечил, за основной код я не брался, т.к. товарищ им удовлетворен, я ничего не имею против ;-)