网站首页 > 技术文章 正文
西门子SCL语言中如何求——任意长度数组的最大值和平均值(基于泛型数据类型)
本块适用于整型和浮点型或者其它类型
FC块的数据类型定义:
DB块中的原始数据:
效果展示图:
浮点数组 整型数组
如果输入的数组长度超过了FC块中定义的长度,那么,会产生错误信息 我们把数组长写成300长度
Message 错误消息展示
原码如下:
备注:本程序的数组输入索引是必须从0开始,本代码已通过测试,拷贝即可使用
IF IS_ARRAY(#in_array) THEN //判断是否是数组
#arr_length := UDINT_TO_DINT(CountOfElements(#in_array)); //找到数组的长度,函数返回值类型是UDINT,要转成DINT
IF #arr_length < #max_length THEN //如果输入的数组的长度小于设定的最大长度 则进行以下判断
//**************************判断数组是整数进行计算***************************************
IF TypeOfElements(#in_array) = Int THEN //判断输入数组的类型
VariantGet(SRC := #in_array,
DST => #arr_int_temp);
#max_number_temp_int := #arr_int_temp[0]; //把索引为0的数认为是最大值
#max_index_temp := 0; //把0索引存起来
FOR #i := 0 TO #max_length - 1 DO //循环 从最小索引开始,到最大索引结束
IF #max_number_temp_int < #arr_int_temp[#i] THEN //如果最大值小于后面索引的值
#max_number_temp_int := #arr_int_temp[#i]; //则把后面索引的值存入最大值变量里
#max_index_temp := #i; //再把索引存起来
END_IF;
#sum := #sum + #arr_int_temp[#i];
END_FOR;
VariantPut(SRC := #max_number_temp_int,
DST := #max_out); //把最大值输出 int
#max_index := #max_index_temp; //把最大值的索引输出
#avg := #sum / #arr_length;
//*******************************如果数组是浮点进行计算*********************************
ELSIF TypeOfElements(#in_array) = Real THEN //判断输入数组的类型
VariantGet(SRC := #in_array,
DST => #arr_real_temp); //把输入的数组传入到内部数组进行处理
#max_number_temp_real := #arr_real_temp[0]; //把索引为0的数认为是最大值
#max_index_temp := 0; //把0索引存起来
FOR #i := 0 TO #max_length - 1 DO //循环 从最小索引开始,到最大索引结束
IF #max_number_temp_real < #arr_real_temp[#i] THEN //如果最大值小于后面索引的值
#max_number_temp_real := #arr_real_temp[#i]; //则把后面索引的值存入最大值变量里
#max_index_temp := #i; //再把索引存起来
END_IF;
#sum := #sum + #arr_real_temp[#i];
END_FOR;
VariantPut(SRC := #max_number_temp_real,
DST := #max_out); //把最大值输出 real
#max_index := #max_index_temp; //把最大值的索引输出
#avg := #sum / #arr_length;
END_IF;
ELSE
#message := 'fault'; //如果输入的数组长度超过200个,那就报错
END_IF;
END_IF;
- 上一篇: 程序远每日一题-int类型,你不知道的坑
- 下一篇: 「算法入门笔记」卡特兰数(卡特兰公式怎么算)
猜你喜欢
- 2024-10-25 java对象在内存中如何分布 | java上锁原来就是内存占位,so easy
- 2024-10-25 size_t 这个类型的意义是什么?(size_t和size_type)
- 2024-10-25 「算法入门笔记」卡特兰数(卡特兰公式怎么算)
- 2024-10-25 程序远每日一题-int类型,你不知道的坑
- 2024-10-25 Java中int最大值引发的“血案”(java integer最大值)
- 2024-10-25 java中 整数类型总结一(java中的整数类型)
- 2024-10-25 C语言中INT数据类型的最小值和最大值
- 11-26Win7\8\10下一条cmd命令可查得笔记本电脑连接过的Wifi密码
- 11-26一文搞懂MySQL行锁、表锁、间隙锁详解
- 11-26电脑的wifi密码忘记了?一招教你如何找回密码,简单明了,快收藏
- 11-26代码解决忘记密码问题 教你用CMD命令查看所有连接过的WIFI密码
- 11-26CMD命令提示符能干嘛?这些功能你都知道吗?
- 11-26性能测试之慢sql分析
- 11-26论渗透信息收集的重要性
- 11-26如何查看电脑连接过的所有WiFi密码
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)