Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.10.2011, 21:51
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
Плохо Метод Петрика и дельфи

Здравствуйте уважаемые форумчане. Не могли бы вы подсказать как реализовать минимизацию методом Петрика?
Исходные данные - пользователь вводит таблицу импликант в StringGrid. Ну и далее я взаимодейстую с таблицей.
В итоге должна получится минимизированная ДНФ.
Вот код:
Код:
unit Unit1;

interface

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

type
  TArr=array [1..32] of string;
  TForm1 = class(TForm)
    SG1: TStringGrid;
    LE1: TLabeledEdit;
    LE2: TLabeledEdit;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
LE1.Text:='';
LE2.Text:='';

end;


procedure TForm1.Button1Click(Sender: TObject);
var C:TArr;i,j,k,l,r,posc,posr:integer;fk,fk1:boolean;
begin
 fk:=false;
 fk1:=false;
 sg1.RowCount:=strtoint(LE2.Text)+1;
 sg1.ColCount:=strtoint(LE1.Text)+1;
 r:=0;j:=0;posc:=0;posr:=0;
 for k:=1 to form1.SG1.ColCount do
  begin
   for l:=1 to form1.SG1.RowCount do
    begin
     if (form1.SG1.Cells[k,l]='x')or(form1.SG1.Cells[k,l]='X') then
      begin
       fk1:=true;
        posc:=k;
        posr:=l;
      end;
     if (fk1) and (l<>posr) then
      begin
       fk:=true;
       j:=l;
       fk1:=false;
      end;
     if (fk) and (l<>j) then
       fk1:=true;
     if (not fk) and (l=form1.SG1.RowCount) then
      begin
       inc(r);
       c[r]:=form1.SG1.Cells[posc,posr];
      end;
    end;
  end;
  for i:=1 to r do
   form1.Edit1.Text:=form1.Edit1.Text+c[i];
end;

procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
begin
 LE1.Text:='';
 LE2.Text:='';
 for i:=0 to form1.SG1.RowCount do
  for j:=0 to form1.SG1.ColCount do
   form1.SG1.Cells[j,i]:='';
end;

end.

Всем спасибо за внимание!
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025