广东湘恒智能科技有限公司
主营产品: 西门子PLC,西门子模块,西门子触摸屏,西门子变频器,西门子伺服电机驱动,电缆,西门子全系列
SCL编程实例100例-119-盛最多水的容器
发布时间:2024-11-25

前言

通过该实例学习可变长一维数组的定义和使用方法和WHILE循环语句的使用方法,从而进一步了解面向对象和标准化编程的思想。


1 | 题目



给定一个长度为n的整数数组height,分布在x-y坐标系中,有n条垂直于x轴的垂线,第i条线的两个端点是(i, 0)和(i, height[i])。用西门子TIA博途SCL语言编写程序找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。求容器可以储存的最大水量。

说明:不能倾斜容器。

示例:

输入:[1,8,6,2,5,4,8,3,7]。

输出:49。

如下图:


解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。

在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。



2 | 设计分析



题目中的最大容积计算可以简单看作是求封闭图形的最大面积。遵从木桶原理,从最左侧开始,最左侧垂线和最右侧垂线比较高度,选择最矮的一条垂线进行水平封闭,求出面积并保存面积值。然后把以上选择的最矮垂线和它相邻的垂线进行比较(最左侧的和其紧邻右侧相比较,最右侧的和其紧邻左侧相比较),继续找出最矮垂线进行水平封闭,求出新的面积并和前次求得的面积进行比较,保留最大面积值。利用循环语句循环比较,直到不能得到封闭图形时结束循环,即得到计算结果。



3 | 创建功能或功能块



创建功能块FB,命名为“MaxArea”。




4 | 定义接口变量



具体接口变量定义见下图:

定义整型输入输出变量result作为计算结果输出;

定义整型可变长一维数组变量heights作为输入的不同长度垂线;

定义整型静态变量statLower作为每次比较的较短垂线;

定义长整型静态变量statLeftIndex和statRightIndex作为长短比较时的索引变量;

定义长整型临时变量tempHeightsL和tempHeightsU作为输入数组的上下脚标。


展开全文
拨打电话 微信咨询 发送询价