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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.04.2012, 18:54
Alla_ Alla_ вне форума
Прохожий
 
Регистрация: 27.04.2012
Сообщения: 3
Репутация: 10
Восклицание Задача про найменше покриття (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;
Ответить с цитированием
  #2  
Старый 27.04.2012, 19:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,090
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Нифига не понял что надо.
На этом форуме пишут на двух языках. С остальными - на другие форумы (конкретно с польским суржиком- в зону ua).

ЗЫ. Два языка этого форума - русский и английский, если кто не понял (ну Delphi Language - это само собой).
Ответить с цитированием
  #3  
Старый 27.04.2012, 19:29
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Скорее всего тебе в роботу. Потому что писать комментарии к коду чужому, а тем более рисовать блок схему за просто так - я по крайней мере не взялся бы.
Ответить с цитированием
  #4  
Старый 27.04.2012, 19:33
Alla_ Alla_ вне форума
Прохожий
 
Регистрация: 27.04.2012
Сообщения: 3
Репутация: 10
По умолчанию

Это не польский суржик - а мой родной украинский язык!!!

Перевод:
Суть проблемы состоит в том, что уже есть готовое приложение и мне нужно просто разобраться в коде программы, а именно с тем фрагментом, где происходит поиск минимального покрытия.
Нужно написать комментарии (что, где, куда и как делается...), а потом на основании их построить блок-схему алгоритма решения задачи.
Буду благодарна за любую помощь.
Ответить с цитированием
  #5  
Старый 27.04.2012, 19:35
Alla_ Alla_ вне форума
Прохожий
 
Регистрация: 27.04.2012
Сообщения: 3
Репутация: 10
По умолчанию

m1sclick, я понимаю, что это далеко не просто... мне хотя бы коменты там, где происходит сам поиск покрытия, а дальше я уж как-то сама попробую)
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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