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

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

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

 
 Ответить  Открыть новую тему 
> Задача на итерационные циклы, вроде написал, а ответы дикие...
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


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

Добавлено через 5 мин.
PS, в конце первого сообщения прикреплено условие.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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