IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Приближененное вычисление значения ряда
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 212
Пол: Мужской

Репутация: -  0  +


Задание
Изображение
Мой код

uses crt;
var
zn:boolean;
s,x,st,e:double;
p_st,i,j,c:longint;
begin
clrscr;
s:=1;
zn:=false;
e:=0.1;
x:=0.9;
i:=1;
j:=2;
p_st:=1;
st:=1;
while (abs(x)<1) and (abs(1/sqrt(1+x)-s)>e) do
begin
x:=x-0.1;
for c:=1 to p_st do
st:=st*x;
if zn=false then
begin
s:=s-(i*st/j);
zn:=true;
end
else
begin
s:=s+(i*st/j);
zn:=false;
end;
j:=(i+3)*j;
i:=(i+2)*i;
{------------------------------------------}
writeln('e= ',e:5:5);
writeln('i= ',i);
writeln('j= ',j);
writeln('x= ',x:5:5);
writeln('s= ',s:5:5);
writeln('(1/sqrt(1+x))= ',(1/sqrt(1+x)):5:5);
writeln('(1/sqrt(1+x)-s)= ',abs(1/sqrt(1+x)-s):5:5);
end;
writeln('i= ',i);
writeln('j= ',j);
writeln('e= ',e:5:5);
writeln('x= ',x:5:5);
writeln('s= ',s:5:5);
writeln('(1/sqrt(1+x))= ',(1/sqrt(1+x)):5:5);
writeln('(1/sqrt(1+x)-s)= ',abs(1/sqrt(1+x)-s):5:5);
readkey;
end.

Вот с точностью 0,1 он вычисляет, если сменить поставить точность выше, при этом соответсвенно и шаг нужно уменьшить допусти 0,01 сделать его, то все программа не пашет, я так понялне хватает размераности типов данных, переменная j обнуляется, а еще заметил i выходит за пределы и становится равной -1. Правильные ли у меня вычисления и как сделать чтоб вычислить с более высокой точностью?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 212
Пол: Мужской

Репутация: -  0  +


За поправку спасибо.
Цитата
Да, кстати. Проверь задание. Ты сравниваешь результаты вычисления суммы ряда с ArcTan, а вычисляется совсем не арктангенс. У арктангенса ряд - знакопеременный, чередуются +/-/+/-, а у тебя только первый минус, потом все плюсы. Поэтому такая большая разность и выходит...


Возьму на заметку, хорошо что ты заметил, но понимаешь задание только на картинке, больше узнать не где, там вот не указана переменность знака поэтому так вычисляю. Делаю тоже не для себя. (Берусь так сказать помочь знакомым, чтоб вещество серое не засохло;).

p.s. Попробовал знак сделать переменным, действительно значение стало более близкое к арктангенсу) (но сравнивая, вроде не настолько уж большая))) разница)

Добавлено через 19 мин.
volvo
А вот в первом случае , в котором ты решение давал в самом начале разница очень большая между суммой ряда и значением с сравниваемой фунции, вот код

uses crt;
var
s,x,e:double;
i:longint;
next:double;
begin
clrscr;
write('Введмите е = ');
readln(e);
s:=1;
next:=1;
i:=1;
x:=0.9;
while abs(x)<(1.0-e/10) do
begin
repeat
next:= -next*i*x/succ(i);
s:=s+next; inc(i,2);
until abs(next)<e;
write('e= ',e:5:5);
write('| x= ',x:5:2);
write('| s= ',s:5:6);
write('| 1/sqrt(1+x)= ',(1/sqrt(1+x)):5:6);
writeln;
x:=x-0.1;
end;
readkey;
end.

функция значение которой как бы является точным значение ряда (1+x)^(-1/2)

Сообщение отредактировано: Account -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Account   Приближененное вычисление значения ряда   17.01.2009 16:58
volvo   Не надо постоянно вычислять Xn, просто домножай оч…   17.01.2009 17:08
Account   При замени уже на 0,01 вылетает ошибка операции с …   17.01.2009 17:12
volvo   Интересное кино... У меня прекрасно работает при e…   17.01.2009 17:21
Account   volvo, а как у тебя знак последующего множителя в …   17.01.2009 17:40
Account   volvo, огромное спасибо, очередной раз убеждаюсь ч…   17.01.2009 18:01
Account   Задача таже только другой ряд http://savepic.ru/3…   17.01.2009 19:28
volvo   А что, где-то указано, что она должна меняться? Пе…   17.01.2009 19:45
Account   Вот шапка задания из таблицы http://savepic.ru/40…   17.01.2009 19:58
Account   volvo Вот сделал для каждого x uses crt; var s,x,…   17.01.2009 20:44
volvo   А ты отладчиком пробегись, и посмотри, чему в дейс…   17.01.2009 20:59
Account   За поправку спасибо. Возьму на заметку, хорошо ч…   17.01.2009 21:29
volvo   Перенести s:=1; next:=1; i:=1; внутрь цикла While …   17.01.2009 22:17
Account   Блин даже стыдно за невнимательность)   17.01.2009 22:23


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 12.09.2025 2:57
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name