精易论坛

标题: 数据均衡优化 [打印本页]

作者: 志权    时间: 2025-5-5 18:04
标题: 数据均衡优化
规定值:一台车 能装10斤   超出允许正负=0.5   自行维护

每个数不能大于等于3  也可自行维护

1组
A:0.3
B:  0.5
C:5
D:0.8
E:3
F:0.2
G:1

0.3+0.5+5+0.8+3+0.2+1=10.8
提示:总和10.8   已超出10+0.5

2组
A:0.3
B:  0.5
C:5
D:0.5
E:3
F:0.2
G:1

0.3+0.5+5+0.5+3+0.2+1=10.8
提示:总和10.5   可匹配
匹配逻辑,按照数据均衡匹配
超出3的数字减到2.99,多出剩余的
加到数值最低相加   只要不超出2.99就好
相加减的需要展示出来
例:C:5-2.1      F:0.2+2.1    C=2.99      F=2.3
        E:3-0.1      A:0.3+0.1       E=2.99     A=0.4


作者: lufanjingyi    时间: 2025-5-5 20:51
分割文本  然后判断  
作者: 你的猫    时间: 2025-5-5 23:07
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
原始值整数型0 
数据组文本型0 
调整记录文本型  

子程序名返回值类型公开备 注
_按钮1_被单击  
原始值 = { 0.3, 0.5, 5, 0.8, 3, 0.2, 1 }
数据组 = { “A”, “B”, “C”, “D”, “E”, “F”, “G” }
调整处理 ()
子程序名返回值类型公开备 注
调整处理  
变量名类 型静态数组备 注
总量溢出小数型 
需要分配量小数型 
最小值索引整数型 
可接受增量小数型 
实际增量小数型 
调整记录 = “【初始数据】”#换行符
显示当前状态 ()
' 第一阶段:处理超过3的值
计次循环首 (取数组成员数 (原始值), i)
如果真 (原始值 [i] ≥ 3)
总量溢出 = 总量溢出 + 原始值 [i] - 2.99
调整记录 = 调整记录 + 数据组 [i]“:”到文本 (原始值 [i])“-”到文本 (原始值 [i] - 2.99)#换行符
原始值 [i] = 2.99

计次循环尾 ()
' 第二阶段:分配溢出的量
判断循环首 (总量溢出 > 0.001)  ' 避免浮点误差
最小值索引 = 取最小值索引 ()
可接受增量 = 2.99 - 原始值 [最小值索引]
实际增量 = 取最小值 (可接受增量, 总量溢出)
原始值 [最小值索引] = 原始值 [最小值索引] + 实际增量
调整记录 = 调整记录 + 数据组 [最小值索引]“+”到文本 (实际增量)“ ”
总量溢出 = 总量溢出 - 实际增量
' 检查是否产生新的溢出
如果真 (原始值 [最小值索引] ≥ 3)
调整记录 = 调整记录 + #换行符“?发现新溢出项:” + 数据组 [最小值索引]#换行符
总量溢出 = 总量溢出 + 原始值 [最小值索引] - 2.99
调整记录 = 调整记录 + 数据组 [最小值索引]“:”到文本 (原始值 [最小值索引])“-”到文本 (原始值 [最小值索引] - 2.99)#换行符
原始值 [最小值索引] = 2.99

处理事件 ()
判断循环尾 ()
调整记录 = 调整记录 + #换行符“【最终结果】”#换行符
调试输出 (调整记录)
显示当前状态 ()
子程序名返回值类型公开备 注
显示当前状态  
变量名类 型静态数组备 注
当前总和小数型 
信息文本文本型 
i整数型 
信息文本 = “”
计次循环首 (取数组成员数 (原始值), i)
信息文本 = 信息文本 + 数据组 [i]“:”到文本 (原始值 [i])“ ”
当前总和 = 当前总和 + 原始值 [i]
计次循环尾 ()
调整记录 = 调整记录 + 信息文本 + #换行符
调整记录 = 调整记录 + “当前总和:”到文本 (当前总和)#换行符
调试输出 (调整记录)
子程序名返回值类型公开备 注
取最小值索引整数型 
变量名类 型静态数组备 注
最小值小数型 
索引整数型 
i整数型 
最小值 = 999
索引 = 1
计次循环首 (取数组成员数 (原始值), i)
如果真 (原始值 [i] < 最小值)
最小值 = 原始值 [i]
索引 = i

计次循环尾 ()
返回 (索引)


i支持库列表   支持库注释   
spec特殊功能支持库


作者: 志权    时间: 2025-5-5 23:36
你的猫 发表于 2025-5-5 23:07
[e=3].版本 2
.支持库 spec

不行哦,
其实就类似做假账,一个袋子规定只能装  10斤土豆
作者: 志权    时间: 2025-5-5 23:43
你的猫 发表于 2025-5-5 23:07
[e=3].版本 2
.支持库 spec

其实就类似做假账,一个袋子规定只能装  10斤土豆,但是每个土豆大小重量都不一样,每个土豆最大重量只能是1斤,客户当然不会翻开土豆一个个称,但是每个土豆重量我心里有数,超了几个我也懂。在做账的时候只能给客户做个假账,扣除超重的部分,补到未超,并有余地的土豆身上,组,代表袋子,字母,代表每个土豆,但是每个土豆都有身份,所以我需要懂我改了哪几个,是减掉重量    还是增加重量

作者: 志权    时间: 2025-5-5 23:45
我的思路是,
第一步:全部累计看看有没有超过   自行设定的值
作者: 志权    时间: 2025-5-5 23:53
我的思路是,
第一步:全部累计相加看看有没有超过   自行设定的总值
第二部:要是超过,提示超过。要是没超过,就往下一步看看,个头有没有超出,自行设置的个头值
第三步:超过的,就减维护的个头值=超出部分   继续往下看看如果有合适的补上不超重的,并筛选出来
过程一定会有几个超出,但是扣除多余的可累计,然后平分下去

作者: huayuanderen    时间: 2025-5-6 12:36
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
原始数据文本型0 

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
字母标签文本型0
字母标签 = { “A”, “B”, “C”, “D”, “E”, “F”, “G” }
按钮1.标题 = “检查第一组数据”
按钮2.标题 = “检查第二组数据”
编辑框1.内容 = “A:0.3 B:0.5 C:5 D:0.8 E:3 F:0.2 G:1”
编辑框2.内容 = “A:0.3 B:0.5 C:5 D:0.5 E:3 F:0.2 G:1”
子程序名返回值类型公开备 注
_按钮1_被单击  
原始数据 = 分割文本 (编辑框1.内容, “ ”, )
处理数据 ()
子程序名返回值类型公开备 注
_按钮2_被单击  
原始数据 = 分割文本 (编辑框2.内容, “ ”, )
处理数据 ()
子程序名返回值类型公开备 注
处理数据  
变量名类 型静态数组备 注
i整数型 
总和双精度小数型 
调整量双精度小数型 
需要调整逻辑型 
输出文本文本型 
最小索引整数型 
最小值双精度小数型 
调整后数据整数型7
j整数型 
字母标签文本型7
' 初始化数据
计次循环首 (7, i)
调整后数据 [i]取数值 (取文本右边 (原始数据 [i], 取文本长度 (原始数据 [i]) - 2))
计次循环尾 ()
' 检查是否有大于等于3的数并调整
需要调整 = 假
计次循环首 (7, i)
如果 (调整后数据 [i] ≥ 3)
需要调整 = 真
调整量 = 调整后数据 [i] - 2.99
调整后数据 [i] = 2.99
' 找到当前最小的数
最小值 = 调整后数据 [1]
最小索引 = 1
计次循环首 (7, j)
如果 (调整后数据 [j] < 最小值)
最小值 = 调整后数据 [j]
最小索引 = j



计次循环尾 ()
调整后数据 [最小索引] = 调整后数据 [最小索引] + 调整量
输出文本 = 输出文本 + 字母标签 [i]“:”到文本 (调整后数据 [i] + 调整量)“-”到文本 (调整量)“  ” + 字母标签 [最小索引]“:”到文本 (调整后数据 [最小索引] - 调整量)“+”到文本 (调整量)#换行符“调整后: ” + 字母标签 [i]“=”到文本 (调整后数据 [i])“  ” + 字母标签 [最小索引]“=”到文本 (调整后数据 [最小索引])#换行符#换行符




计次循环尾 ()
' 计算总和
总和 = 0
计次循环首 (7, i)
总和 = 总和 + 调整后数据 [i]
计次循环尾 ()
' 显示结果
输出文本 = 输出文本 + “当前总和: ”到文本 (总和)#换行符
如果 (总和 > 10.5)
输出文本 = 输出文本 + “提示: 总和”到文本 (总和)“  已超出10.5”
如果 (总和 < 9.5)
输出文本 = 输出文本 + “提示: 总和”到文本 (总和)“  低于9.5”
输出文本 = 输出文本 + “提示: 总和”到文本 (总和)“  可匹配”


信息框 (输出文本, 0, “处理结果”, )
子程序名返回值类型公开备 注
取数值双精度小数型 
参数名类 型参考可空数组备 注
文本文本型
变量名类 型静态数组备 注
i整数型 
结果文本型 
计次循环首 (取文本长度 (文本), i)
如果 (取代码 (文本, i) ≥ 48 取代码 (文本, i) ≤ 57 取代码 (文本, i) = 46)
结果 = 结果 + 取文本中间 (文本, i, 1)



计次循环尾 ()
返回 (到数值 (结果))






欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4