前言
通过该实例学习可变长一维数组的定义和使用方法和WHILE循环语句的使用方法,从而了解面向对象和标准化编程的思想。
1 | 题目
给定一个长度为n的整数数组height,分布在x-y坐标系中,有n条垂直于x轴的垂线,第i条线的两个端点是(i, 0)和(i,height[i])。用西门子TIA博途SCL语言编写程序找出其中的两条线,使得它们与x轴共同构成的容器可以容纳Zui多的水。求容器可以储存的Zui大水量。
说明:不能倾斜容器。
示例:
输入:[1,8,6,2,5,4,8,3,7]。
输出:49。
如下图:
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。
在此情况下,容器能够容纳水(表示为蓝色部分)的Zui大值为 49。
2 | 设计分析
题目中的Zui大容积计算可以简单看作是求封闭图形的Zui大面积。遵从木桶原理,从Zui左侧开始,Zui左侧垂线和Zui右侧垂线比较高度,选择Zui矮的一条垂线进行水平封闭,求出面积并保存面积值。把以上选择的Zui矮垂线和它相邻的垂线进行比较(Zui左侧的和其紧邻右侧相比较,Zui右侧的和其紧邻左侧相比较),继续找出Zui矮垂线进行水平封闭,求出新的面积并和前次求得的面积进行比较,保留Zui大面积值。利用循环语句循环比较,直到不能得到封闭图形时结束循环,即得到计算结果。
3 | 创建功能或功能块
创建功能块FB,命名为“MaxArea”。
4 | 定义接口变量
具体接口变量定义见下图:
定义整型输入输出变量result作为计算结果输出;
定义整型可变长一维数组变量heights作为输入的不同长度垂线;
定义整型静态变量statLower作为每次比较的较短垂线;
定义长整型静态变量statLeftIndex和statRightIndex作为长短比较时的索引变量;
定义长整型临时变量tempHeightsL和tempHeightsU作为输入数组的上下脚标。