CODESYS 实战:实现自守数查找
引言自守数是其平方的末尾数字与该数本身相同的数字。这篇文章通过一个查找自守数的案例,帮助读者学习和理解 ST 语言的基本结构和编程技巧。1 问题描述目标是编写一个程序,遍历从 0 到给定最大值的所有整数,找到其中的自守数,并将其存储在数组中。自守数是指一个数的平方的尾数等于该数自身的自然数。例如, 5²=25,25²=625,76²=5776,9376²=87 909376。求 n 以内的自守数并储存。2 程序设计思路[*]输入输出变量:定义输入变量 N,输出变量 NumberArray。
[*]初始化:初始化存储数组。
[*]主循环:遍历范围内的每个数字,计算其平方,并检查是否为自守数。
[*]存储结果:如果找到自守数,存储在数组中并更新计数器。
3 程序代码
FUNCTION_BLOCK WG_SelfPowerNumbers
VAR_INPUT
N : DINT := 100000; // 定义范围
END_VAR_INPUT
VAR_OUTPUT
NumberArray : ARRAY OF DINT; // 用于存储自守数的数组
END_VAR_OUTPUT
VAR
i : DINT; // 循环变量
Count : DINT := 0; // 自守数计数器
Square : DINT; // 存储平方结果
Temp : STRING; // 临时字符串变量,用于比较
END_VAR
(*
版本记录:
版本 日期 作者
V1 2024-10-27 工控老王
*)
// 初始化
FOR i := 1 TO 100 BY 1 DO
NumberArray := 0;
END_FOR
// 查找自守数
FOR i := 0 TO N DO
// 计算平方
Square := i * i;
// 将数和平方转换为字符串
Temp := DINT_TO_STRING(i);
// 检查自守数的条件
IF LEN(Temp) <= LEN(DINT_TO_STRING(Square)) THEN
// 检查平方的尾数是否等于原数
IF RIGHT(DINT_TO_STRING(Square), LEN(Temp)) = Temp THEN
Count := Count + 1; // 计数自守数
NumberArray := i; // 存储自守数
END_IF
END_IF
END_FOR
END_FUNCTION_BLOCK
4 代码说明输入和输出:
[*]N: 定义搜索的上限,默认值为 100000。
[*]NumberArray: 用于存储找到的自守数。
变量定义:
[*]i: 用于循环的计数器。
[*]Count: 记录自守数的数量。
[*]Square: 存储当前数字的平方。
[*]Temp: 临时字符串,用于字符串比较。
初始化数组:
[*]使用一个 FOR 循环将 NumberArray 初始化为 0。
自守数查找:
[*]循环从 0 到 N,计算每个数字的平方,并检查它是否为自守数。
[*]如果是自守数,将其存入 NumberArray 中并更新计数。
注意事项
[*]可以根据需求调整 NumberArray 的大小。
[*]代码中已确保变量的初始化和逻辑的正确性,建议在实际项目中测试以确保符合预期。
5 运行结果运行程序后,NumberArray 中将包含所有在范围内找到的自守数。例如,输入 N = 100000 时,典型的自守数包括 0、1、5、6、25、76、376、625、9376 等。6 开源说明该程序遵循开源原则,任何人都可以使用、修改和分发此代码。在使用前应进行充分的测试,修改代码时,请秉持分享精神,将您的改进和成果进行分享,以便更多人受益。总结通过这个案例,读者可以学习如何使用 ST 语言编写循环、条件判断以及字符串操作等基本编程技巧。这种技术不仅适用于自守数的查找,还可以扩展到其他数值计算场景,为工业自动化编程提供了实用的参考。
页:
[1]