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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2012, 18:49   #1
Alla_
Новичок
Джуниор
 
Регистрация: 27.04.2012
Сообщений: 1
Восклицание Задача про найменше покриття (Delphi)

Здравствуйте!
Суть проблемы состоит в том, что уже есть готовое приложение и мне нужно просто разобраться в коде программы, а именно с тем фрагментом, где происходит поиск минимального покрытия.
Нужно написать комментарии (что, где, куда и как делается...).
Буду благодарна за любую помощь.

Код:
//Процедура пошуку найменшого покриття
procedure TMainForm.N6Click(Sender: TObject);
var outp:tchildform;
    i,j,k,jj,SumElem,MaxSum,r,mm,pp:integer;
    E:array of byte;
    sn:string;
    o,kp:byte;
    zz,z:real;
    var bit:tbitmap;
label l1,l2;
begin
//Визначення наявності покриттів
SumElem:=0;
for j:=0 to n-1 do begin
for i:=0 to m-1 do
SumElem:=SumElem+DataTab[i,j];
if SumElem=0 then begin ShowMessage('Для '+ActiveMDichild.caption+' покриттів не існує.');
exit;  end;
SumElem:=0;
end;
//Визначення розмірів масивів P і C
SumElem:=0; MaxSum:=0;
for i:=0 to m-1 do begin
for j:=0 to n-1 do SumElem:=SumElem+DataTab[i,j];
if MaxSum<SumElem then MaxSum:=SumElem;
SumElem:=0;
end;
setlength(C,n,MaxSum);
setlength(P,n,MaxSum,n);
//Формування блоків таблиці
i:=0;j:=0;
repeat
k:=0;
repeat
if datatab[i,j]=1 then
                     begin
                     jj:=0;
                     setlength(C[j],k+1);
                     c[j][k]:=ves[i];
                     setlength(P[j],k+1,n);
                        repeat
                        p[j][k,jj]:=datatab[i,jj];
                        jj:=jj+1;
                        until jj>n-1;
                      k:=k+1;
                      end;
i:=i+1;
until i>m-1;
j:=j+1;
i:=0;
until j>n-1;

KDataTab:=DataTab;
KVes:=Ves;


//Пошук
setlength(E,n);kp:=1;
for i:=0 to n-1 do E[i]:=0;
k:=0;z:=0;zz:=1.7*power(10,38);B:=nil;
i:=0;
   while i<=n-1 do
                begin
                if E[i]=0 then
                          begin
                          j:=-1;
                       l2:repeat
                          j:=j+1;
                          if j>high(P[i]) then goto l1;
                          until z+c[i,j]<=zz;
                          K:=k+1;setlength(B,k);
                          z:=z+c[i,j];B[k-1,0]:=i;
                          B[k-1,1]:=j;
                          for r:=i to n-1 do
                          if p[i][j,r]=1 then E[r]:=1;
                          end;
                i:=i+1;
                end;
//Видаляємо в лістингу
if zz=z then kp:=kp+1;
zz:=z;BB:=B;
l1: if B=nil then begin

//Виведення результату
i:=activemdichild.Top;
j:=activemdichild.Width;
jj:=activemdichild.left;
mainform.opendialog1.Tag:=1;
outp:=tchildform.Create(application);

showwindow(outp.Handle,sw_hide);

outp.top:=i;outp.left:=j+jj;
if Ntab=0 then Ntab:=1;
outp.Caption:='Покриття '+inttostr(Ntab);
outp.StringGrid1.colcount:=high(BB)+2;
outp.StringGrid1.rowcount:=n+2;
outp.width:=(high(BB)+3)*40;
outp.height:=(n+4)*24;
{Звернути увагу!}
StatusBar1.Panels.Items[0].Text:='Знайдено покриттів:'+inttostr(kp);
StatusBar1.Panels.Items[1].Text:='Найменша вага:'+floattostr(zz);


for i:=0 to high(BB) do
              for j:=0 to n-1 do
outp.StringGrid1.cells[i+1,j+1]:=inttostr(p[bb[i,0]][bb[i,1],j]);
for i:=0 to high(BB) do outp.StringGrid1.cells[i+1,n+1]:=floattostr(c[bb[i,0]][bb[i,1]]);

for i:=1 to high(BB)+1 do

for jj:=0 to high(kves) do
if outp.StringGrid1.cells[i,n+1]=floattostr(kves[jj]) then begin
o:=0;
for j:=0 to n-1 do
if outp.StringGrid1.cells[i,j+1]=inttostr(kDatatab[jj,j])
then o:=o+1;
if o=n then  outp.StringGrid1.Cells[i,0]:='M'+inttostr(jj+1);
        end;
N6.Enabled:=false;
toolbutton5.Enabled:=false;

Последний раз редактировалось Alla_; 27.04.2012 в 19:38. Причина: не все понимают украинский язык
Alla_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача про лабиринты с использованием StringGrind в Delphi Hitory Помощь студентам 6 16.11.2011 20:23
Задача в Delphi про бильярдный стол (координаты) sanchezsuper Помощь студентам 1 26.09.2011 16:40
Интересная задача про нейронную сеть Delphi el_pluto Помощь студентам 2 12.12.2010 18:03
задача Delphi про простые числа Crysta Помощь студентам 0 07.12.2010 19:50
задача про множества любаша Общие вопросы Delphi 2 16.09.2010 19:08