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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2013, 16:39   #1
student-99
 
Регистрация: 01.06.2010
Сообщений: 8
По умолчанию Посмотрите где может быть ошибка в коде

Реализация метода золотого сечения на Делфи.
a=-10; b=3; e=0,001
Вот код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Label4: TLabel;
    XPManifest1: TXPManifest;
    Edit5: TEdit;
    Label5: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var xm:real;
  Form1: TForm1;

implementation
function f(x:real):real;
begin
f:=3*sqr(x)*x-28*sqr(x)+2
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var  a,b,e,opt:real;
     y,z,fy,fz:real;
     count:Integer;
begin
  e:=strtofloat(edit3.Text);
  a:=strtofloat(edit1.Text);
  b:=strtofloat(edit2.Text);
  count:=0;
  y:=0.618*a+0.382*b;
  z:=0.382*a+0.618*b;
  fy:=f(y);
  fz:=f(z);
    while  (b-a)>e do
    begin
    if f(y)<f(z) then
    begin
    b:=z;
    z:=y;
    fz:=fy;
    y:=0.618*a+0.382*b;
    fy:=f(y);
    end
    else
    a:=y;
    y:=z;
    fy:=fz;
    z:=0.382*a+0.618*b;
    fz:=f(z);
		Inc(count);
    end;
    xm:=(b+a)/2;
  opt:=Round(xm*10000)/10000;
  edit4.Text:=FloatToStr(opt);
  edit5.Text:=IntToStr(count)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;

end.
http://vk.com/doc50596190_163304908?...404363d7f323c3
Ссылка на архив.
Должно получится в конце около -0,2635
Спасибо.

Последний раз редактировалось Stilet; 13.03.2013 в 17:43.
student-99 вне форума Ответить с цитированием
Старый 13.03.2013, 19:03   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Что-то мне подсказывает, что в этом куске кода одного бегина-энда не хватает, не?

Код:
    else
    a:=y;
    y:=z;
    fy:=fz;
    z:=0.382*a+0.618*b;
    fz:=f(z);
		Inc(count);
    end;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 13.03.2013 в 19:07.
Sciv вне форума Ответить с цитированием
Старый 13.03.2013, 20:29   #3
student-99
 
Регистрация: 01.06.2010
Сообщений: 8
По умолчанию

Я поставил после else бегина-энд, но программа все равно подсчитывает оптимум не верно. Видимо ошибка где-то в алгоритме, но где не могу найти...((((
student-99 вне форума Ответить с цитированием
Старый 13.03.2013, 20:41   #4
student-99
 
Регистрация: 01.06.2010
Сообщений: 8
По умолчанию

Вот блок схема по которой я создал программу:


Последний раз редактировалось student-99; 13.03.2013 в 20:44.
student-99 вне форума Ответить с цитированием
Старый 13.03.2013, 21:53   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Ну во-первых, покажите, какой теперь код получился (после установки бегинэнда)
А во-вторых, где у Вас на блок-схеме вот это?

Код:
opt:=Round(xm*10000)/10000;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 13.03.2013, 23:33   #6
student-99
 
Регистрация: 01.06.2010
Сообщений: 8
По умолчанию

opt:=Round(xm*10000)/10000; - это округление к 4 знаков после комы...
А бегин я поставил после else
else
begin
a:=y;
y:=z;
fy:=fz;
z:=0.382*a+0.618*b;
fz:=f(z);
end;
Inc(count);
end;
student-99 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в чем может быть ошибка? Imposters Общие вопросы .NET 4 23.11.2012 14:11
Почему не работает код, где может быть ошибка sweyle Microsoft Office Excel 9 11.01.2012 21:11
В чём может быть ошибка? Lindemann66 Qt и кроссплатформенное программирование С/С++ 1 18.08.2011 13:52
Где может быть ошибка? Tricko C# (си шарп) 3 26.06.2011 12:42
где может быть ошибка? maksim_serg Microsoft Office Excel 2 21.04.2010 10:42