以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  饲料配方问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=43647)

--  作者:Bin
--  发布时间:2013/12/12 11:44:00
--  
在DataColChanged事件
利用Datatable.FIND 找出表指定的行计算即可.http://www.foxtable.com/help/topics/0396.htm

我是没太看懂你是要怎么个计算法.



--  作者:Bin
--  发布时间:2013/12/12 11:46:00
--  
点击按钮计算,也可以循环所有行 利用相同的方法. FIND出另外一个表的数据,然后参与计算.
--  作者:有点甜
--  发布时间:2013/12/12 21:03:00
--  
 看了一下,需要用到组合排列的知识,好像有一个例子,建议楼主看一下。


--  作者:有点甜
--  发布时间:2013/12/13 20:49:00
--  
 我说一下笨笨的思路吧。例子里有一个自定义函数,可以获取从m个数中取出n个数的所有排列。

 1、比如 你的表有7行,也就是有7种物品,最后要得到100公斤,也就是100000克的混合饲料。
 2、那么第一步,你就有700000个数了(1-100000,每个数7个),然后从这70万个数中取出7个;
 3、得到7个数以后,判断相加是否等于100000;
 4、如果等于,把这7个数分别乘以对应值,然后看得出的值,是否符合高于营养要求;
 5、保存符合要求的数,或者比较出一个最大或者最小的值便可

[此贴子已经被作者于2013-12-13 20:50:50编辑过]

--  作者:有点甜
--  发布时间:2013/12/14 20:10:00
--  
 就是按照7楼的方法去做。

 第一步,得到所有的组合;

 第二步,遍历组合,取出值合计是否等于最后需要的100公斤;

 第三步,计算一个组合各个营养成分的值,比较最后的标准。

 因为代码较为繁琐,楼主自己编码吧。关键是得到所有的组合。
[此贴子已经被作者于2013-12-14 20:10:17编辑过]

--  作者:有点甜
--  发布时间:2013/12/14 22:09:00
--  
  
 这个算法效率不高,数越多,越慢,建议楼主先去学习一下具体的算法。我这个是穷举,很笨。

 做了个例子,你把代码放到命令窗口里去运行就行了。精确到公斤,4个物料。

Dim exactValue = 100
Dim drs As List(Of DataRow) = DataTables("原料营养").Select("")
Dim a(exactValue) As Integer
For i As Integer = 0 To exactValue
    a(i) = i
Next
Dim b(exactValue) As Integer

Functions.Execute("组合排列", a, exactValue, drs.count, b, drs.count, exactValue, drs)
msgbox("比较完成,结果写在命令窗口里")

 
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table