CODESYS 实战:查找自恋数

引言

结构化文本(ST)语言因其类似高级编程语言的语法,在工业自动化中被广泛使用。本文通过一个查找阿姆斯特朗数(也称为自恋数)的案例,帮助读者学习和理解 ST 语言的基本结构和编程技巧。

1  问题描述

如果一个整数等于其各个数字的立方和,则该数称为“阿姆斯特朗数”(也称为自恋数)。如 153=1³+5³+3³ 就是一个“阿姆斯特朗数”。编程求 n 以内的所有“阿姆斯特朗数”,并储存。

2  程序设计思路

  1. 输入输出变量:定义输入变量 n,输出变量 Count 和 ArmstrongArray。

  2. 初始化:初始化计数器和存储数组。

  3. 主循环:遍历范围内的每个数字,计算其数字立方和,判断是否为阿姆斯特朗数。

  4. 存储结果:如果找到阿姆斯特朗数,存储在数组中并更新计数器。

3  程序代码

  • FUNCTION_BLOCK PM_ArmstrongNumbers
  • VAR_INPUT 
  •      n : INT := 1000;          // 定义最大值 n
  • END_VAR
  •      VAR_OUTPUT  
  •      Count : INT := 0;           // 阿姆斯特朗数的计数 
  •      ArmstrongArray : ARRAY[1..100] OF INT; // 存储阿姆斯特朗数的数组
  • END_VAR
  • VAR 
  •          j : INT;                        // 初始化   
  •         i : INT;                        // 循环计数器   
  •         sum : INT;                      // 用于存储各位数字的立方和   
  •         temp : INT;                     // 用于存储当前数字的临时值 
  •         digit : INT;                    // 当前位数字
  • END_VAR
  •  
  • (*
  • 版本记录:
  • 版本              日期                作者 
  • V1          2024-10-12        工控老王
  • *)
  •  
  • // 初始化数组
  • Count := 0;
  • FOR j := 1 TO 100 BY 1 DO 
  •      ArmstrongArray[j] := 0;
  • END_FOR
  •  
  • // 主循环
  • FOR i := 1 TO n DO 
  •        sum := 0;           // 重置立方和   
  •        temp := i;          // 临时存储当前数字  
  •  
  •         // 计算每个数字的立方和 
  •         WHILE temp > 0 DO     
  •                  digit := temp MOD 10;      // 获取当前数字的最后一位       
  •                  sum := sum + (digit * digit * digit); // 计算立方和       
  •                  temp := temp / 10;         // 去掉最后一位数字 
  •        END_WHILE;
  •  
  •        // 判断是否为阿姆斯特朗数 
  •        IF sum = i THEN 
  •              Count := Count + 1;        // 增加计数 
  •              ArmstrongArray[Count] := i; // 存储阿姆斯特朗数 
  •        END_IF;
  • END_FOR;

4  代码解释

变量定义与初始化:

  • n:定义最大值。

  • Count:用于计数找到的阿姆斯特朗数。

  • ArmstrongArray:存储找到的阿姆斯特朗数。

  • 循环变量 i 和 j,临时变量 temp 和 digit。

主循环逻辑:

  • 遍历从 1 到 n 的所有数字。

  • 使用 WHILE 循环计算每个数字的各位立方和。

  • 检查立方和是否等于原数字,是则存储该数字。

注意事项:

  • 数组 ArmstrongArray 的大小限制为 100,如需存储更多阿姆斯特朗数,请相应调整。

  • 输入变量 n 的范围应根据需求合理设置,以防止计算过多导致性能问题。

5  运行结果

程序运行后,ArmstrongArray 将包含所有在 1 到 n 范围内的阿姆斯特朗数,而 Count 将表示找到的数量。

图片

图片

6  开源版本说明

该程序遵循开源原则,任何人都可以使用、修改和分发此代码。在使用前应进行充分的测试,修改代码时,请秉持分享精神,将您的改进和成果进行分享,以便更多人受益。

总结

通过这个案例,读者可以学习如何使用 ST 语言编写循环、条件判断以及数组操作等基本编程技巧。该技术不仅适用于阿姆斯特朗数的查找,还可以扩展到其他类似的数值计算场景,为工业自动化编程提供了有力支持。

CASE 语句。

 

往期回顾

CODESYS 的简介及环境安装

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

介绍 CODESYS 编程软件中的变量

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

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

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

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

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

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

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

CODESYS 任务配置介绍

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

Codesys 编程软件中的 IO 控制

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

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

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

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

CODESYS 实战:查找勾股数

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

图片

2024年12月

Tags: