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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2010, 17:02   #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:16   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Так ты параметр i увеличиваешь на 1 за пределами цикла !!! Вот он и равен всегда 1 (i=0+1)...
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 19.05.2010 в 17:27.
Grag вне форума Ответить с цитированием
Старый 19.05.2010, 17:28   #3
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
 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;
ну и сами понимаете
для i выполняется при каждом вызове delpop

i:=0;
i:=i+1;

и сколько получится?

//Опоздал

Последний раз редактировалось vovk; 19.05.2010 в 17:31.
vovk вне форума Ответить с цитированием
Старый 19.05.2010, 17:36   #4
vitaly38
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 37
По умолчанию

я пробовал и перед антилом, и везде вставлял, все равно 1 равно.
vitaly38 вне форума Ответить с цитированием
Старый 19.05.2010, 17:46   #5
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

В тело цикла вставлять надо! В тело, а не за его пределами!
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 19.05.2010, 18:05   #6
vitaly38
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 37
По умолчанию

Grag
пробовал!!!
vitaly38 вне форума Ответить с цитированием
Старый 19.05.2010, 21:47   #7
vitaly38
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 37
По умолчанию

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


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработка программы. Вывести количество итераций vitaly38 Общие вопросы Delphi 2 19.05.2010 17:17
Доработка программы 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