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

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

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

 
 Ответить  Открыть новую тему 
> Задача на итерационные циклы, вроде написал, а ответы дикие...
TheKnyazz
сообщение 26.10.2008 18:01
Сообщение #1


Новичок
*

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

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


Нужна помощь в решении задачи на итерациооные циклы
в общем вот мой код
 program lab4;
uses crt;
const maxiter = 500;
var
x1,x2,dX,E:real; {x1 - Xnach, x2- Xkon, dX- shag, E -tochnost}
n:integer; {schetchik vicheslennih elementov ryada}


function getY(x,E:real):real;
var y,ch:real; {y-znachenie funcii arcctg(x), ch - element ryada}
begin
ch:= 1/x; {pervii element ryada}
y:= -pi/2;
n:=1;

while (abs(ch)>E) do
begin
y:=y+ch;
inc(n);
ch:=ch*(-1)*(2*n+1) /((2*n+3)*x*x); {vichislaem ocherednoi element ryada}
{if (n mod 2) <> 0 then ch:=-ch;}

{podschitivaem kol-vo vicheslennih elementov ryada}

if (n>maxIter) then
begin
write('ryad rashoditsa!');
break;
end;
end;
getY:=y;
end;

begin
clrscr;
writeln('vvedite x1,x2,dX,E:');
readln(x1,x2,dX,E);
if (x1>=(-pi/2)) and (x1<=(pi/2)) and (x2>=(-pi/2)) and (x2<=(pi/2)) then {sootvetvuet oblasti dop. znachenii ? stroim tablicu}
begin

writeln('arcctg(x)------------------------------');
writeln('|X |Y |N'); {shapka tablici}

while (x1<=x2) do
begin
writeln('|',x1,'|',getY(x1,e),'|',n); {postroenie tablici znachenii ot x1 do x2 s shagom dX}
x1:=x1+dX;
end;
writeln('---------------------------------------');

end
else
writeln('nevernie dannie x1<=x2,x=[-pi/2;pi/2]!!');
begin
writeln('nazmite enter');
readln;
end;
end.


помогите пожалуйста. вот условие задачи.


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.10.2008 19:15
Сообщение #2


Гость






1) отсутствует проверка на X = 0... Если уж ты пишешь, что X - из интервала -pi/2 .. +pi/2, то будь добр обрабатывать все значения, которые этот интервал попадают... При вводе 0 программа вылетает с делением на 0, что уже нехорошо...

2)

ch:=ch*(-1)*(2*n+1) /((2*n+3)*x*x); {vichislaem ocherednoi element ryada}

неправда... На картинке представлено нечто другое... Что ты здесь делаешь?
Изначально: ch = 1/x
n = 1 -> ch = -3 / (x*x*x)
n = 2 -> ch = 3*5 / (x3*x*x) = 15/x5
(красным выделены предыдущие значения ch)

И так далее... А что должно быть?

Сообщение отредактировано: volvo - 26.10.2008 19:15
 К началу страницы 
+ Ответить 
TheKnyazz
сообщение 26.10.2008 19:22
Сообщение #3


Новичок
*

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

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


1)хорошо, насчет нуля учту.
2)В общем я нашел формулу по которой можно вычислить следующий елемент ряда, посредством умножения предыдущего на постоянное выражение...то что там появляется 3 меня жутко пугает.
Я работаю в паскаль абц поэтому команды ватч у меня нету не могу пошагово разобрать.
при н=2 должно получаться 1\5х^3.

Добавлено через 5 мин.
PS, в конце первого сообщения прикреплено условие.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TheKnyazz
сообщение 26.10.2008 20:40
Сообщение #4


Новичок
*

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

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


добавил проверку 0, избавился от 3. Но числа все равно через чур..
вот доработанный исходник)
program lab4;
uses crt;
const maxiter = 500;
var
x1,x2,dX,E:real; {x1 - Xnach, x2- Xkon, dX- shag, E -tochnost}
n:integer; {schetchik vicheslennih elementov ryada}

function getY(x,E:real):real;
var y,ch:real; {y-znachenie funcii arcctg(x), ch - element ryada}
begin
ch:=1/3*x*x*x; {pervii element ryada}
y:=-pi/2;
n:=1;
y:=y+1/x+ch;
while (abs(ch)>E) do
begin
ch:=ch*(-1)*(2*n+1)/((2*n+3)*x*x);{vichislaem ocherednoi element ryada}
{if (n mod 2) <> 0 then ch:=-ch;}
y:=y+ch;
inc(n); {podschitivaem kol-vo vicheslennih elementov ryada}
if (n>maxIter) then
begin
write('ryad rashoditsa!');
break;
end;
end;
getY:=y;
end;

begin
clrscr;
writeln('vvedite x1,x2,dX,E:');
readln(x1,x2,dX,E);
if (x1>=(-pi/2)) and (x1<=(pi/2)) and (x2>=(-pi/2)) and (x2<=(pi/2)) and (x1<>0) and (x2<>0) then {sootvetvuet oblasti dop. znachenii ? stroim tablicu}
begin

writeln('arcctg(x)------------------------------');
writeln('|X |Y |N'); {shapka tablici}

while (x1<=x2) do
begin
writeln('|',x1,'|',getY(x1,e),'|',n); {postroenie tablici znachenii ot x1 do x2 s shagom dX}
x1:=x1+dX;
end;
writeln('---------------------------------------');

end
else
writeln('nevernie dannie x1<=x2,x=[-pi/2;pi/2]!!');

begin
writeln('nazmyte enter');
readln;
end;
end.

.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TheKnyazz
сообщение 26.10.2008 23:09
Сообщение #5


Новичок
*

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

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


Вот правильное вычисление арктангенса с помощью итерационнго цикла.

program lab4;
uses crt;
const maxiter = 500;
var x1,x2,dX,E,y:real; {x1 - Xnach, x2- Xkon, dX- shag, E -tochnost}
n:integer; {schetchik vicheslennih elementov ryada}
Procedure getY(x,E:real; var y:real; var n:integer);
var ch:real; {y-znachenie funcii arcctg(x), ch - element ryada}
begin
ch:=x; {pervii element ryada}
n:=0;y:=0;
while (abs(ch)>E) do
begin
y:=y+ch;
ch:=ch*((-1)*x*x)/((2*n+1)); {vichislaem ocherednoi element ryada}
inc(n); {podschitivaem kol-vo vicheslennih elementov ryada}
if (n>maxIter) then
begin
write('ryad rashoditsa!');
break;
end;
end;
end;

begin
clrscr;
repeat
writeln('vvedite x1,x2,dX,E:');
readln(x1,x2,dX,E);
until (x1>=-1) and (x1<=1) and (x2>=-1) and (x2<=1);
{sootvetvuet oblasti dop. znachenii ? stroim tablicu}
writeln;
writeln('-----------------------');
writeln('| X | ARCTG (X) | N |'); {shapka tablici}
while (x1<=x2) do
begin
getY(x1,e,y,n);
writeln('|',x1:5:2,'|',y:11:5,'|',n:2,' |'); {postroenie tablici znachenii ot x1 do x2 s shagom dX}
x1:=x1+dX;
end;
writeln('-----------------------');
writeln('nazmite enter');
readln
end.

.
Спасибо за помощь

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

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

 



- Текстовая версия 21.07.2025 9:32
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"