int最⼤值_西门⼦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的数认为是最⼤值
typeof array#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_VariantPut(SRC := #max_number_temp_real,
DST := #max_out); //把最⼤值输出 real
#max_index := #max_index_temp; //把最⼤值的索引输出
#avg := #sum / #arr_lengt
END_IF;
ELSE
#message := 'fault'; //如果输⼊的数组长度超过200个,那就报错
END_IF;
END_IF;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论