![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Доброго дня!
Суть проблеми полягає в тому, що є вже готовий додаток і мені потрібно просто розібратись в коді, а саме з тим фрагментом, де відбувається пошук мінімального покриття. Порібно написати зрозумілі коментарі (що де куди і як робиться), а потім на основі них побудувати блок-схему алгоритму. Вдячна всім, хто хоч якось спробує допомогти! Код:
//Процедура пошуку найменшого покриття 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
|
|||
|
|||
![]() Нифига не понял что надо.
На этом форуме пишут на двух языках. С остальными - на другие форумы (конкретно с польским суржиком- в зону ua). ЗЫ. Два языка этого форума - русский и английский, если кто не понял (ну Delphi Language - это само собой). |
#3
|
|||
|
|||
![]() Скорее всего тебе в роботу. Потому что писать комментарии к коду чужому, а тем более рисовать блок схему за просто так - я по крайней мере не взялся бы.
|
#4
|
|||
|
|||
![]() Это не польский суржик - а мой родной украинский язык!!!
Перевод: Суть проблемы состоит в том, что уже есть готовое приложение и мне нужно просто разобраться в коде программы, а именно с тем фрагментом, где происходит поиск минимального покрытия. Нужно написать комментарии (что, где, куда и как делается...), а потом на основании их построить блок-схему алгоритма решения задачи. Буду благодарна за любую помощь. |
#5
|
|||
|
|||
![]() m1sclick, я понимаю, что это далеко не просто... мне хотя бы коменты там, где происходит сам поиск покрытия, а дальше я уж как-то сама попробую)
|