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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 02:08   #1
Unit1
Новичок
Джуниор
 
Регистрация: 30.10.2011
Сообщений: 1
По умолчанию Експертная система

Помогите с експертной системой.
Переписал с Basic на Delphi по книге "Нейлор - Как построить свою экспертную систему" ,а она неверно выводит ответы.
Вот код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
label pos,M2,M1;
var
 CountVar,Countoutcomes,decision,score,correct:integer;
    rules:array  [1..M,1..M] of integer;
i,j,max:integer;
  asc:string;
  svars:array [1..M] of string;
  values:array [1..M] of integer;
  scores:array [1..M] of integer;
  decisions:array [1..M] of integer;
  outcomes:array [1..M] of string;
begin
add('Введіть кількість обєктів!');
form2.ShowModal;
CountVar:=StrToInt(form2.memo1.Text);
for i:=1 to M do
 begin
   add('Введіть обєкт під номером '+IntToStr(i));
   form2.ShowModal;
   add('Обєкт тепер має значення '+ form2.Memo1.Text);
   svars[i]:=form2.Memo1.Text;
 end;
add('Введіть кількість результатів');
form2.ShowModal;
Countoutcomes:=StrToInt(form2.Memo1.Text);
add('Введіть буль-ласка ці результати');
for i:=1 to  M do
 begin
   form2.ShowModal;
   memo1.Lines.Add('Назва результату під номером '+IntToStr(i)+'.'+form2.Memo1.Text);
   outcomes[i]:=form2.Memo1.Text;
   scores[i]:=0;
   form2.memo1.clear;
 end;

for i:=1 to M do
 for j:=1 to M do
  begin
    rules[I,J]:=0;
  end;

for i:=1 to M do
 begin
  decisions[i]:=0;
 end;
pos:add('Початок сеансу навчання');
add('Вводьте будь-ласка змінні');
decision:=-10000;

for i:=1 to M do
 begin
    add('Значення правдиве для '+svars[i]);
    form2.ShowModal;
    ASC:=form2.Memo1.Text;
    if (ASC='Y')   then
      values[i]:=1
       Else
      values[i]:=0;
 end;

for i:=1 to M do
 for j:=1 to M do
  begin
    decisions[j]:=decisions[j]+values[i]*rules[i,j];
  end;

for i:=1 to M do
 begin
   if decisions[i]>decision then
    begin
      decision:=decisions[i];
      max:=I;
    end;
 end;
add('Це правильний результат? '+outcomes[MAX]);
 form2.ShowModal;
 asc:=form2.Memo1.Text;
if asc='Y' then
  begin
    scores[max]:=1;
    score:=0;
     for i:=1 to M do
      begin
        score:=score+scores[i];
         if score=countoutcomes then
         add('Система навчена')
          else
         goto pos;
      end;
  end;
memo1.lines.add('Виберіть правильний результат');
for i:=1 to M do
 begin
  memo1.Lines.Add(outcomes[i]);
 end;
add('Яка повинна бути відповідь?');
form2.ShowModal;
TRY
correct:=StrToInt(form2.Memo1.Text);
EXCEPT
correct:=1;
END;
for i:=1 to M do
 begin
  if ((decisions[i]=decision) and  (i<>correct)) then
    begin
      for j:=1 to M do
       begin
         rules[j,i]:=rules[j,i]-values[j];
       end;
    end;
 end;
for j:=1 to M do
 begin
  rules[J,correct]:=rules[J,correct]+values[j];
 end;
add('Я отримав '+IntToStr(score)+' перед помилкою');
for i:=1 to M do
 begin
   scores[i]:=0;
 end;
   goto pos;
end;

Последний раз редактировалось Unit1; 30.10.2011 в 02:15.
Unit1 вне форума Ответить с цитированием
Старый 30.10.2011, 12:32   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

0) Экспертная система.
1) Отдельное спасибо за полное отсутствие комментариев. В итоге поди пойми, где бага, а где фича. К примеру, CountVar после ввода не используется. Второе отдельное спасибо за оператор goto, очень упрощающий понимание программы.
2) При countoutcomes не 1, имеем бесконечный цикл.
3) Если пользователь будет стабильно морочить нам голову при заполнении values, мне кажется, что алгоритм не сойдётся.
Abstraction вне форума Ответить с цитированием
Старый 30.10.2011, 12:45   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

4) мейджик баттон такой мейджик баттон
отсюда совет - создайте промежуточные процедуры и функции, они и от гото помогут избавиться.
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поисковая система stratow Помощь студентам 7 21.10.2010 23:41
Система принятия решения (Экспертная система) daranton Microsoft Office Excel 4 01.05.2010 17:55
Система (Си) Defa4ka Помощь студентам 2 01.10.2009 02:22
16тиричная система 8+8=10 ????:( Tik-Tik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 21 25.02.2009 00:44
Система администрирования Deight PHP 6 10.02.2009 01:25