当前位置: 代码迷 >> PB >> 纸圈套裁设计,该怎么解决
  详细解决方案

纸圈套裁设计,该怎么解决

热度:139   发布时间:2016-04-29 09:08:41.0
纸圈套裁设计
需要一些纸圈,数据如下:(内径/外径,数量)
1552/2616,3
2075/2423,6
2075/2423,3
2053/2423,3
1985/2423,3
1877/2039,6
1867/1905,3
1719/1855,12
1553/1855,3
1553/1855,3
1553/1689,12
1404/1538,3
1364/1470,3
1404/1468,3
1403/1469,6
1403/1469,6
我们套裁时用大圈的内径套小圈的外径,大圈的内径比小圈的外径至少大于10以上,数量对应逐级套裁,直到套不出为止.将直接下料的纸圈从大到小放到第一列,第二列空出,第三列为二次套裁的纸圈,第四列为三次套裁的纸圈,依次类推.结果如下:
1552/2616,3
2075/2423,6 1877/2039,6
2075/2423,3 1867/1905,3 1404/1538,3
2053/2423,3 1553/1855,3 1364/1470,3
1985/2423,3 1553/1855,3 1404/1468,3
1719/1855,12 1553/1689,12 1403/1469,6
1403/1469,6

请问,如何设计数据结构,每一组数据我用的是结构体数组,数量必须对应,如何相等好处理,如果不等,还要拆分,如何实现?当我判断符合套裁时,如何将它写到后面去?请高人指点迷津.


------解决方案--------------------
大约这个思路,写个函数做递归

f_find(string ls_all,int startrow)

int i,rowcount
int il_in,il_out,il_count
int il_in_c,il_out_c,il_count_c
string ls_n,ls_n_c

ls_n=this.getitemstring(startrow,"纸圈")
il_in=integer(left(ls_n,pos(ls_n,'/')-1))
il_out=integer(mid(ls_n,pos(ls_n,'/')+1,pos(ls_n,',') -1))
il_in=integer(right(ls_n),len(ls_n)-pos(ls_n,','))
for i=startrow+1 to rowcount
ls_n_c=this.getitemstring(startrow,"纸圈")
il_in_c=integer(left(ls_n_c,pos(ls_n_c,'/')-1))
il_out_c=integer(mid(ls_n_c,pos(ls_n_c,'/')+1,pos(ls_n_c,',') -1))
il_in_c=integer(right(ls_n_c),len(ls_n_c)-pos(ls_n_c,',')) 
if il_out_c+10<il_in then
ls_all=ls_n+ls_n_c
f_find(string ls_all,int i,startrow,rowcount)
end if
next

------解决方案--------------------
算出来是这个结果呢:


代码这样:
C/C++ code
int i, kfor i = 1 to dw_1.rowcount()    string ls_data    ls_data = dw_1.object.s1[i]        dw_1.object.ri[i] = integer(left(ls_data,pos(ls_data,'/')-1))        dw_1.object.ro[i] = integer(mid(ls_data,pos(ls_data,'/')+1,pos(ls_data,',') - 1 - pos(ls_data,'/') ))        dw_1.object.nu[i] = integer(right(ls_data ,len(ls_data)-pos(ls_data,',')))    nexti =1string ls_result[]int ri,ro,li_on, li_infor i = 1 to dw_1.rowcount()    if dw_1.object.nu[i] = 0 then continue        ls_result[i] = dw_1.object.s1[i]        ri = dw_1.object.ri[i]    li_on = dw_1.object.nu[i]        for k = i+1 to dw_1.rowcount()        if dw_1.object.nu[k] = 0 then continue                ro = dw_1.object.ro[k]        li_in = dw_1.object.nu[k]                if ri - ro > 10 and li_in>=li_on then            ls_result[i] = ls_result[i]+' , ' + dw_1.object.s1[k]                        ri = dw_1.object.ri[k]                        dw_1.object.nu[k] = dw_1.object.nu[k] - li_on        end if            next        dw_2.object.sr[dw_2.insertrow(0)] = ls_result[i]    next
------解决方案--------------------
你再看看代码吧.
dw_1.object.nu[k] = dw_1.object.nu[k] - li_on
是计算该行的剩余数量的.

关于结果集中数量不一样的问题,这个你只要改写一下: 
ls_result[i] = ls_result[i]+' , ' + dw_1.object.s1[k]
就可以了.
  相关解决方案