Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подсчет суммы ряда


Страницы:   1 2

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 получается


И что ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо