Программирование - это просто
Advertisement
Главная
20.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Разрабатываем экспертную систему. Урок 5. Улучшаем интерфейс нашей экспертной системы. Печать E-mail
Автор megabax   
01.05.2011 г.
unit AIObj

Разрабатываем экспертную систему. Урок 5. Улучшаем интерфейс нашей экспертной системы.

Все статьи по данной теме

Исходники к уроку можно скачать здесь.

Сегодня мы немножко доработаем интерфейс нашей самообучающейся программы. Откроем проект предыдущего урока. Удалим компонент mmPrintFiled -он нам больше не понадобится. Положим на форму некоторые компоненты, согласно приведенной ниже таблицы:

Компонент Имя (свойство Name) Назначение
TEdit edVars Редактирование значение переменной vars
TStringGrid sgValues Для редактирования значений массивов
TEdit edOutcome1 Для редактирования исхода 1
TEdit edOutcome2 Для редактирования исхода 2

Положим так же на форму метки, что бы сделать поясняющие надписи, см. скриншот*: 

Разрабатываем экспертную систему. Урок 5. Улучшаем интерфейс нашей экспертной системы.

Ну, и перепишем код нашей программы, вот как он будет теперь выглядеть:

unit ESUnit;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Inputform, Spin, Grids;

 

type

  TfrmExpertSystem = class(TForm)

    btnStart: TButton;

    Label1: TLabel;

    sgValues: TStringGrid;

    Label2: TLabel;

    edOutcome1: TEdit;

    Label3: TLabel;

    edOutcome2: TEdit;

    edVars: TEdit;

    Label4: TLabel;

    procedure btnStartClick(Sender: TObject);

    procedure sgValuesSetEditText(Sender: TObject; ACol, ARow: Integer;

      const Value: String);

    procedure FormCreate(Sender: TObject);

    procedure edOutcome1Change(Sender: TObject);

    procedure edOutcome2Change(Sender: TObject);

    procedure edVarsChange(Sender: TObject);

  private

    { Private declarations }

    vars:integer;

    svars:array of string;

    values:array of integer;

    rules:array of integer;

    outcome1,outcome2:string;

    procedure ShowGrid;

  public

    { Public declarations }

    procedure print(AStr:string);

    function Input:string;

  end;

 

var

  frmExpertSystem: TfrmExpertSystem;

 

implementation

 

procedure TfrmExpertSystem.print(AStr:string);

begin

 

end;

 

function TfrmExpertSystem.Input:string;

var frm:TfrmInput;

begin

  frm:=TfrmInput.Create(self);

  frm.ShowModal;

  Result:=frm.edInput.Text;

end;

 

 

{$R *.dfm}

 

function YNBoolToInt(s:string):Integer;

begin

  if UpperCase(s)='Y' then result:=1 else result:=0;

end;

 

function IntToYNBool(s:integer):string;

begin

  if s>=1 then result:='Y' else result:='N';

end;

 

procedure TfrmExpertSystem.btnStartClick(Sender: TObject);

var  s:string;

    decision:integer;

    i:integer;

begin

 

   //поиск решения

   decision:=0;

   for i:=Low(values)to High(values) do

   begin

      decision:=decision+values[i]*rules[i];

   end;

 

   //сообщить пользователю результат решения

   if decision>0 then

     s:='Возможный исход '+outcome1

   else

     s:='Возможный исход '+outcome2;

   s:=s+'. Это верно?';

 

 

   if messageDlg(s,mtConfirmation,[mbYes,mbNo],0)=mrNo then

   begin

      //корректировка правил

      if decision>0 then

         for i:=Low(rules) to High(Rules) do Rules[i]:=rules[i]-Values[i]

      else

         for i:=Low(rules) to High(Rules) do Rules[i]:=rules[i]+Values[i];

   end;

 

   ShowGrid;

 

end;

 

procedure TfrmExpertSystem.sgValuesSetEditText(Sender: TObject; ACol,

  ARow: Integer; const Value: String);

begin

   case ACol of

     1:svars[ARow-1]:=Value;

     2:values[ARow-1]:=YNBoolToInt(Value);

     3:rules[ARow-1]:=StrToInt(Value);

   end;

end;

 

procedure TfrmExpertSystem.FormCreate(Sender: TObject);

begin

  sgValues.Cells[1,0]:='Утверждение';

  sgValues.Cells[2,0]:='Есть';

  sgValues.Cells[3,0]:='Правило';

 

    sgValues.ColWidths[0]:=25;

  sgValues.ColWidths[1]:=300;

 

   edVarsChange(nil);

end;

 

procedure TfrmExpertSystem.ShowGrid;

var i:integer;

begin

  for i:=Low(svars) to high(svars) do

  begin

     sgValues.Cells[1,i+1]:=svars[i];

     sgValues.Cells[2,i+1]:=IntToYNBool(values[i]);

     sgValues.Cells[3,i+1]:=IntToStr(rules[i]);

  end;

end;

 

procedure TfrmExpertSystem.edOutcome1Change(Sender: TObject);

begin

  outcome1:=edOutcome1.Text;

end;

 

procedure TfrmExpertSystem.edOutcome2Change(Sender: TObject);

begin

  outcome2:=edOutcome2.Text;

end;

 

procedure TfrmExpertSystem.edVarsChange(Sender: TObject);

var LastVars, i:integer;

begin

 

   LastVars:=Vars;

 

   //Установим новое количество

   vars:=StrToInt(edVars.Text);

   SetLength(values,vars);

   SetLength(rules,vars);

   SetLength(svars,vars);

 

     //реинциализация массива

   if Vars>LastVars then for i:=vars to LastVars-1 do

   begin

      values[i]:=0;

      rules[i]:=0;

   end;

 

   sgValues.RowCount:=vars+1;

 

   ShowGrid;

end;  

 

end.

Обратите внимание, что метод TfrmExpertSystem.sgValuesSetEditText является обработчиком события OnSetEditText компонента sgValues, методы TfrmExpertSystem.edOutcome1Change и TfrmExpertSystem.edOutcome2Change являются обработчиками события OnChange компонентов edOutcome1 и edOutcome2 соответственно, а метод edVarsChange - это  обработчик OnChange объекта edVars. 

А теперь скомпилируем программу и протестируем ее:

Разрабатываем экспертную систему. Урок 5. Улучшаем интерфейс нашей экспертной системы.

Как видим, интерфейс стал более удобным, при чем программа показывает нам даже сформированные правила.


Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями программного продукта "Turbo Delphi", авторское право на который принадлежит "Borland Software Corporation".


Исходники к уроку можно скачать здесь.

Все статьи по данной теме

Последнее обновление ( 22.10.2011 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги