Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2010, 16:41   #1
vitaly38
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 37
По умолчанию Доработка программы. Вывести количество итераций

Добрый день, уважаемые пользователи.
Суть программы
решение нелинейного уравнения методом деления отрезка пополам.
Сама программа готова, но не могу сделать вывод количества итераций (для каждого корня)
вот сам код
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Buttons, Series,math;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Chart1: TChart;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Memo1: TMemo;
    Button1: TButton;
    BitBtn1: TBitBtn;
    Series1: TLineSeries;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type fun=function(x:extended):extended;

function f(x:extended):extended;
begin
f:=x-7*power(sin(x),2)
end;

function delpop(a,b,eps:extended; f:fun; var i:integer):extended;
var x1,x2,y1,y2,xm:extended;

begin
 i:=0;
repeat

x1:=(a+b-eps)/2; y1:=f(x1);
x2:=(a+b-eps)/2; y2:=f(x2);
if y1>y2
  then a:=x1
  else b:=x2;

   until abs(b-a)<=eps;
       i:=i+1;
 xm:=(a+b)/2;

result:=xm;

end;

procedure TForm1.Button1Click(Sender: TObject);
var a,b,h,eps,x:extended;
i,n:integer;
begin

series1.Clear;
a:=strtofloat(edit1.Text);
b:=strtofloat(edit2.Text);
h:=strtofloat(edit3.Text);
eps:=strtofloat(edit4.Text);
x:=a;
repeat
series1.AddXY(x,f(x),'',clmaroon);
x:=x+strtofloat(edit5.Text);
until x>b+0.00000001;

x:=a; n:=0; memo1.Clear;
repeat
if (f(x)<f(x-h))and(f(x)<f(x+h))then
begin inc(n);
memo1.Lines.Add(inttostr(n)+'-й минимум= '+
floattostrf(delpop(x-h,x+h,eps,f,i),fffixed,9,4)+'    '+inttostr(i));
end;
x:=x+h;
until x>b+0.0000000001;

end;

end.
количество итераций- параметр i, но почему то программа выдает значение 1 всегда для каждого корня. В чем проблема? почему счетчик не работает? заранее благодарю.
vitaly38 вне форума Ответить с цитированием
Старый 19.05.2010, 17:11   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
until abs(b-a)<=eps;
i:=i+1;
Пробуй:
Код:
   
       i:=i+1;
until abs(b-a)<=eps;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.05.2010, 17:17   #3
vitaly38
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 37
По умолчанию

тоже самое, куда только я не пробовал. все равно количество 1 равняется
vitaly38 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработка программы (за деньги) termit56 Фриланс 6 28.01.2010 14:27
Доработка программы akialex Помощь студентам 3 24.12.2009 21:09
Доработка программы Дмитрий Н. Общие вопросы Delphi 5 15.04.2009 20:17
Доработка программы!! Дмитрий Н. Компоненты Delphi 0 15.04.2009 11:26
Доработка программы... barmaJIei Фриланс 1 24.04.2008 21:23