Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задачка!

Автор: AssAssIN'KO 1.10.2009 12:56

Помогите пожалуйста составить программу к этой задаче:
Составить структурированную программу для нахождения корня уравнения: (корень(1-х))-cos(корень(1-х))=0 на отрезке [0;1) с абсолютной погрешностью Эпсила=10в -3 степени,методом Ньютона.В программе предусмотреть подсчёт и выдачу на печать колличество итераций,необходимых для вычисления значения с заданной точностью.(как я понял точность самому надо задать)
Кто знает как решить помогите плииз...очень надо

Автор: Lapp 1.10.2009 13:23

Цитата(AssAssIN'KO @ 1.10.2009 9:56) *
Кто знает как решить
Да все знают. Вот так: http://forum.pascal.net.ru/index.php?s=&showtopic=3789&view=findpost&p=17091

Автор: AssAssIN'KO 1.10.2009 21:29

я читал эту тему.....мне не понятно blink.gif ,поэтому подожду может найдётся человек который мне поможет yes2.gif

Автор: Lapp 2.10.2009 3:07

Цитата(AssAssIN'KO @ 1.10.2009 18:29) *
я читал эту тему.....мне не понятно blink.gif ,поэтому подожду может найдётся человек который мне поможет yes2.gif
Тогда спрашивай более конкретно, что именно неясно. Прождать ты можешь до бесконечности..

Автор: AssAssIN'KO 5.10.2009 22:06

ну у меня получилось чтото вроде этого

program Nuton;
uses crt;
const
Eps=0.0001;
var
a,b,c,z,f1,f2:real;
begin
clrscr;
a:=0;
b:=1;
f1:=sqr(1-a)-cos(sqrt(1-a));
f2:=(-1)/(2*(sqrt(1-a)))+(1/(2*(sqrt(1-a))))*(sin(sqrt(1-a)));
if f1*f2>0 then c:=a
else c:=b;
repeat
z:=((sqrt(1-c))-(cos(sqrt(1-a)))/((-1)/(2*(sqrt(1-a))))+(1/(2*(sqrt(1-a))))*(sin(sqrt(1-a))));
c:=c-z;
k:k+1;
until abs f(z)<Eps;
writeln c,k;
readln
end


Автор: Lapp 6.10.2009 7:33

Цитата(AssAssIN'KO @ 5.10.2009 19:06) *
ну у меня получилось чтото вроде этого

Хотьбы довел до компилирующегося состояния..
Вот, лови, разбирайся..
const
Eps=0.0001;
var
k: integer;
a,b,x,y,y1: double;

function f(x: double): double;
begin
f:=Sqrt(1-x)-Cos(Sqrt(1-x))
end;

function f1(x: double): double;
var
s: double;
begin
s:=Sqrt(x);
f1:=-0.5/s-0.5*Sin(s)/s
end;

begin
a:=0;
b:=1;
x:=(a+b)/2;
y:=f(x);
while abs(y)>Eps do begin
y:=f(x);
x:=x-y/f1(x);
k:=k+1
end;
writeln('root is: x=',x:5:8,' iterarions: ',k);
readln
end.

Автор: Гость 6.10.2009 21:36

Цитата(Lapp @ 6.10.2009 3:33) *

Хотьбы довел до компилирующегося состояния..
Вот, лови, разбирайся..
const
Eps=0.0001;
var
k: integer;
a,b,x,y,y1: double;

function f(x: double): double;
begin
f:=Sqrt(1-x)-Cos(Sqrt(1-x))
end;

function f1(x: double): double;
var
s: double;
begin
s:=Sqrt(x);
f1:=-0.5/s-0.5*Sin(s)/s
end;

begin
a:=0;
b:=1;
x:=(a+b)/2;
y:=f(x);
while abs(y)>Eps do begin
y:=f(x);
x:=x-y/f1(x);
k:=k+1
end;
writeln('root is: x=',x:5:8,' iterarions: ',k);
readln
end.


я попробовал сделать программу из этого,но почитав методички у меня получилось вот это.....
Program N20;
uses crt;
var
x,x1,e:real;
i:byte;
begin
textbackground(black);
repeat
clrscr;
textbackground(red);
window(5,5,40,15);
clrscr;
textcolor(white);
writeln('vvod x na promezutke [0;1)=');
readln(x);
until(x>=0)and(x<1);
i:=0;
e:=0.001;
x1:=Sqrt(1-x)-Cos(Sqrt(1-x));
while abs(x1-x)>e do
begin
x:=x1;
x1:=Sqrt(1-x)-Cos(Sqrt(1-x));
i:=i+1;
end;
textbackground(magenta);
window(40,20,70,30);
clrscr;
textcolor(yellow);
writeln('pechati x1=',x1:5:4);
writeln('kolichestvo interachii=',i);
readln;
end.
но он выдаёт 207 ошибку при вооде значений

Автор: AssAssIN'KO 6.10.2009 21:38

сори,забыл код в тег поместить

Автор: AssAssIN'KO 6.10.2009 23:40

точнее вот,выдаёт ошибку 207 Invalid floating operation


Program N20;
uses crt;
var
x,x1,e:real;
i:byte;
begin
textbackground(black);
repeat
clrscr;
textbackground(red);
window(5,5,40,15);
clrscr;
textcolor(white);
writeln('vvod x na promezutke [0;1)=');
readln(x);
until(x>=0)and(x<1);
i:=0;
e:=0.001;
x1:=Sqrt(1-x)-Cos(Sqrt(1-x))/(-1/2*sqrt(1-x)+sin(sqrt(1-x))*(-1/2)*(sqrt(1-x)));
while abs(x1-x)>e do
begin
x:=x1;
x1:=Sqrt(1-x)-Cos(Sqrt(1-x))/(-1/2*sqrt(1-x)+sin(sqrt(1-x))*(-1/2)*(sqrt(1-x)));
i:=i+1;
end;
textbackground(magenta);
window(40,20,70,30);
clrscr;
textcolor(yellow);
writeln('pechati x1=',x1:5:4);
writeln('kolichestvo interachii=',i);
readln;
end.


Автор: Lapp 7.10.2009 6:51

Цитата(AssAssIN'KO @ 6.10.2009 20:40) *
точнее вот,выдаёт ошибку 207 Invalid floating operation
Потому что производную надо правильно записывать. Чем тебе не понравились мои функции? Зачем все валить в одну кучу? Чтобы потом ошибки выискивать часами и сутками? Вы что ли функции не проходили?

Sqrt должен быть в знаменателе, а у тебя в числителе..

Автор: AssAssIN'KO 8.10.2009 20:43

Цитата(Lapp @ 7.10.2009 3:51) *

Потому что производную надо правильно записывать. Чем тебе не понравились мои функции? Зачем все валить в одну кучу? Чтобы потом ошибки выискивать часами и сутками? Вы что ли функции не проходили?

Sqrt должен быть в знаменателе, а у тебя в числителе..

в том то и дело что не проходили,но я уже разобрался,сделал программу,всё работает,производную не совсем точно подсчитал,спасибо огромное тебе за помощь

Автор: Lapp 9.10.2009 3:38

Цитата(AssAssIN'KO @ 8.10.2009 17:43) *
в том то и дело что не проходили,но я уже разобрался,сделал программу,всё работает,производную не совсем точно подсчитал,спасибо огромное тебе за помощь
Рад, что помогло.
Даже если не проходили, я бы советовал разбивать большие формулы на части, используя дополнительные переменные, по крайней мере на этапе отладки. Свое время дороже, чем машинное.