![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подсчет суммы ряда
elluminate © (2010-11-28 21:43:00)необходимо посчитать и сравнить со значением функции визуально. х меняется от 0.1до 0.8.прибавляю 0.03 ибо кол-во расчетных точек должно не менее 10быть. написал код,но х при окончании больше 0.8 получается. вот код
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
eps,j,a,x,s:real;
n:integer;
implementation
{$R *.dfm}
function c(n:integer):real;
begin
result:=((sqr(n+1)+1)*x)/(2*((sqr(n))+1));
end;
function f(x:real):real;
begin
result:=(exp(x/2)*ln((sqr(x)/4)+(x/2)+1));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
x:=strtofloat(edit2.Text);
a:=strtofloat(edit1.text);
eps:=strtofloat(edit3.Text);
s:=0;
n:=1;
while x<=0.8 do begin
repeat
s:=s+a;
a:=a*c(n);
inc(n);
x:=x+0.03;
until (s-f(x))<=eps;
end;
edit4.Text:=floattostr(x);
edit5.text:=floattostr(f(x));
edit6.Text:=floattostr(s);
end;
end.
Германн (2010-11-29 01:39:00) [21]"Бредовый" алгоритм :(
while x<=0.8 do begin
repeat
s:=s+a;
a:=a*c(n);
inc(n);
x:=x+0.03;
until (s-f(x))<=eps;
end;
(Форматировал код сам. Не поленился, в отличие от автора).
В любом случае присваиваниеx:=x+0.03;нужно из внутреннего цикла перенести во внешний.
+[4] (возможны вариации в зависимости от ТЗ)
+[5] вдобавок к [4] с учетом данного сообщения.
Anatoly Podgoretsky (2010-11-29 00:31:00) [22]
> while x<=0.8 do begin
Так условие выхода если больше или равен.
Если равен почти невероятно выполнить, вот и выходит если больше. Если ты хочешь минимум ошибки, то условие надо заменить на сравнение с эпсилоном, который надо еще выбрать.
Германн (2010-11-29 00:02:00) [23]
> но х при окончании больше 0.8 получается
Цикл while надо заменить на repeat
Юрий Зотов (2010-11-28 23:21:00) [24]Так и должно быть. Математика ЭВМ немного отличается от обычной:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
elluminate (2010-11-28 22:37:00) [25]по тз 0.1<=х<=0.8
Сергей М. (2010-11-28 22:08:00) [26]
> х при окончании больше 0.8 получается
И что ?