CODESYS 实战:实现自守数查找

引言

自守数是其平方的末尾数字与该数本身相同的数字。这篇文章通过一个查找自守数的案例,帮助读者学习和理解 ST 语言的基本结构和编程技巧。

1  问题描述

目标是编写一个程序,遍历从 0 到给定最大值的所有整数,找到其中的自守数,并将其存储在数组中。自守数是指一个数的平方的尾数等于该数自身的自然数。例如, 5²=25,25²=625,76²=5776,9376²=87 909376。求 n 以内的自守数并储存。

2  程序设计思路

  1. 输入输出变量:定义输入变量 N,输出变量 NumberArray。

  2. 初始化:初始化存储数组。

  3. 主循环:遍历范围内的每个数字,计算其平方,并检查是否为自守数。

  4. 存储结果:如果找到自守数,存储在数组中并更新计数器。

3  程序代码

  • FUNCTION_BLOCK WG_SelfPowerNumbers
  • VAR_INPUT   
  •         N : DINT := 100000;          // 定义范围
  • END_VAR_INPUT
  •  
  • VAR_OUTPUT    
  •         NumberArray : ARRAY[1..100] 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[i] := 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[Count] := 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 语言编写循环、条件判断以及字符串操作等基本编程技巧。这种技术不仅适用于自守数的查找,还可以扩展到其他数值计算场景,为工业自动化编程提供了实用的参考。

往期回顾

CODESYS 的简介及环境安装

在 CODESYS 平台,创建你的第一个项目

介绍 CODESYS 编程软件中的变量

CODESYS 编程软件基本语法和运算符介绍

CODESYS 的ST语言实战 - 主备切换及保养提示解决方案

CODESYS 中的字符串及其基本操作

PLC 数组处理难?看这一篇就够了

CODESYS 中的特殊数据类型 - 指针

CODESYS 实战:单开关量传感器实现旋转速度计算

CODESYS 实战:实现随机数生成功能

CODESYS 任务配置介绍

CODESYS 实战:算术平均滤波器的实现

Codesys 编程软件中的 IO 控制

CODESYS 实战:爱因斯坦的数学题

在 Codesys 中创建用户自定义的功能块

CODESYS 实战:蒙特卡罗方法计算圆周率 Π

CODESYS 中的特殊数据类型 - 引用

CODESYS 实战:查找勾股数

CODESYS 实战:查找自恋数

在 Codesys 中使用 ST 语言的 IF 语句

CODESYS 实战:查找 “ 完美数 ”

在 Codesys 中使用 ST 语言的 FOR 语句

CODESYS 实战:解决马克思数学问题

在 Codesys 中使用 ST 语言的 WHILE 语句

图片

2025年03月

 

Tags: