Информационный портал Media Systems & Bear Corp.

Главная Новости Delphi C&C++ Tеория Графов Web-Design Математика Исходники и Проекты Лисп и Пролог Ссылки

Портал :: Математика :: ФАЛ
Преобразование ФАЛ к Импликативной Совершенно Нормальной Форме 1 (ИСНФ-1).  

 

By Bear:

Построение ИСНФ-1:

  1. В табличном представлении функции выбираем наборы, на которых функция принимает значение 0.
  2. Выписываем хитрые импликации вида X1->X2->..->Xn таким образом, что если X1=1 в этом наборе, то записываем его напрямую, а если X1=0 в этом наборе, то - с отрицанием. Для остальных переменных поступаем диаметрально противоположным способом. Затем накрываем полученный импликант двумя операциями отрицаниями: одна охватывает первые две переменные, а вторая все переменные с первой до предпоследней. В случае 3 переменных, остаётся только одно отрицание.
  3. Полученные конъюнкции объединяем операцией конъюнкции.

By d'AEON:

Ну наконец-то мы добрались до самого интересного! ИСНФ1 – наиболее занятна с точки зрения реализации.

А все из-за чего? Из-за бешеного количества отрицаний которые стоят-то черт знает как, но решение существует вот оно: Опять просто привожу кусок программы для Delphi32 . Надеюсь разберетесь… Ну а если непонятно – сожалею…

procedure TForm7.ISNF1;

var i,j:integer;

    f:textfile;

    a:integer;

begin

a:=0;

assignfile(f,'temp.io');

rewrite(f);

if stringgrid1.colcount-2=1 then WRITELN(f,function_str) else

for j:=1 to stringgrid1.rowcount-1 do begin

if a>1 then writeln(f,'&');

if stringgrid1.colcount-2=2 then begin

 if stringgrid1.cells[1,j]='0' then write(f,'_',atoms[1],'->')

 else write(f,atoms[1],'->');

 if stringgrid1.cells[2,j]='0' then write(f,atoms[2])

 else write(f,'_',atoms[2]);

end else

if stringgrid1.colcount-2>=2 then begin

 write(f,'_(');

 write(f,'_(');

 if stringgrid1.cells[1,j]='0' then write(f,'_',atoms[1],'->')

 else write(f,atoms[1],'->');

 if stringgrid1.cells[2,j]='0' then write(f,atoms[2],')')

 else write(f,'_',atoms[2],')');

 if stringgrid1.colcount-2>2 then begin

 if  stringgrid1.colcount-2>3 then write(f,'->');

 i:=2;

 if stringgrid1.colcount-3>0 then

 for i:=3 to stringgrid1.colcount-3 do

  if i<>stringgrid1.colcount-3 then

   if stringgrid1.cells[i,j]='0' then write(f,atoms[i],'->')

   else write(f,'_',atoms[i],'->')

  else

   if stringgrid1.cells[i,j]='0' then write(f,atoms[i])

   else write(f,'_',atoms[i]);

 write(f,')->');

 inc(i);

  if stringgrid1.cells[i,j]='0' then write(f,atoms[i])

  else write(f,'_',atoms[i])

 end else write(f,')');

end;

 a:=2;

end;

closefile(f);

end;

 
     
  Гостевая книга . Связь с разработчиками: Bear Corporation, Media Studio.  
  Это место для вашей рекламы  

Дизайн: Bear Corner, Inc. & Media Sudio.
Последнее обновление: 29.03.2001.

Rambler's Top100 Rambler's Top100
Hosted by uCoz