5-5 多边形周长计算(继承)

给出下面的多边形基类框架:

class polygon

{ protected:

   int number;//边数,最多不超过100条边

private:

   int side_length[100];//边长数组

public:

   polygon();//构造函数根据需要重载
   int perimeter();//计算多边形边长
   void display();//输出多边形边数和周长

}

建立一个派生类rectangle(矩形),增加以下数据成员:

  int height;
  int width;

增加以下成员函数:

 rectangle类的无参和参数化构造函数
 int perimeter();//计算矩形边长
 void display();//输出多边形边数和周长

建立一个派生类equal_polygon(等边多边形),增加以下数据成员:

  int side_len;

增加以下成员函数:

 equal_polygon类的无参和参数化构造函数
 int perimeter();//计算等边多边形边长
 void display();//输出多边形边数和周长

生成上述类并编写主函数,根据输入的多边形信息,相应建立一个多边形类对象或矩形类对象或等边多边形类对象,计算每一个多边形的周长并且输出其边数和周长。

输入格式: 测试输入包含一个测试用例,该测试用例的第一行输入多边形的个数n,接下来n行每一行给出一个多边形的基本信息,每行的第一个数字为当前多边形的类型,0为一般多边形,后面跟随m个数字为m条边的边长,-1为一般多边形边长输入结束标志,1为矩形,后面跟随两个数字,分别为height和width,2为等边多边形,后面跟随两个数字为等边多边形的边数和边长。

输入样例:

3

0 32 54 76 88 24 -1

1 32 54

2 3 32

输出样例:

5 274

4 172

3 96

#include<iostream>
using namespace std;
class polygon{
protected:
    int number;//边数,最多不超过100条边
private:
    int side_length[100];//边长数组
public:
    polygon(){};//构造函数根据需要重载
    polygon(int n):number(n){};
    polygon(int n,int x[]);//重载的构造函数
    int perimeter();//计算多边形边长
    void display();//输出多边形边数和周长
};
//继承格式:class 类名 :<继承方式> <基类名>
//派生rectangle(矩形)
class rectangle : public polygon{
private:
    int height;
    int width;
public:
    rectangle(){};//无参构造函数
    rectangle(int a,int b):height(a),width(b){};//有参构造函数
    int perimeter();//计算周长
    void display1();//输出边数和周长
};
//派生equal_polygon(等边多边形)
class equal_polygon : public polygon{
private:
    int side_len;
public:
    equal_polygon();//无参构造函数
    equal_polygon(int n, int x):polygon(n){side_len = x;};//有参构造函数
    void display2();
    int perimeter(){return number * side_len;}
};
//主函数
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int type;
        cin>>type;
        switch(type)
        {
        case 0://一般多边形
            {
                int n=0,lenth;
                int x[100];
                while(cin>>lenth)
                {
                    if(lenth==-1)break;
                    x[n++]=lenth;
                }
                polygon hello0( n, x );
                hello0.display();
            }
            break;
        case 1://矩形
            {
                int h,w;
                cin>>h>>w;
                rectangle hello1(h, w);
                hello1.display1();
            }
            break;
        case 2://等边多边形
            {
                int n,x;
                cin>>n>>x;
                equal_polygon hello3( n, x );
                hello3.display2();
            }
            break;
        }
    }

    return 0;
}
//equal_polygon成员函数的实现
void equal_polygon::display2()
{
    cout<< number <<" "<< perimeter()<< endl;
}
//rectangle成员函数的实现
void rectangle::display1()
{
    cout<<"4 "<<2*(height + width)<<endl;
}
//polygon成员函数的实现
int polygon::perimeter()
{
    int sum=0;
    for(int i=0;i<number;i++)
    {
        sum += side_length[i];
    }
    return sum;
}
void polygon::display()
{
    cout<<number<<" "<<perimeter()<<endl;
}
polygon::polygon(int n, int x[])
{
    number = n ;
    for(int i=0;i<n;i++)
    {
        side_length[i] = x[i];
    }
}
时间: 2024-10-25 07:47:03

5-5 多边形周长计算(继承)的相关文章

根据周长计算不同形状图形的面积?计算多种图形的面积

/** *  根据周长计算不同形状图形的面积?计算多种图形的面积, *  并比较各种图形面积的最大值.正方形的面积公式为:0.0625*c*c. *  圆形的面积公式为:0.0796*c*c,其中,c表示图形的周长. */ /** * 根据周长计算不同形状图形的面积?计算多种图形的面积, * 并比较各种图形面积的最大值.正方形的面积公式为:0.0625*c*c. * 圆形的面积公式为:0.0796*c*c,其中,c表示图形的周长. */ public class AreaTest { publi

POJ 1177/HDU 1828 picture 线段树+离散化+扫描线 轮廓周长计算

求n个图矩形放下来,有的重合有些重合一部分有些没重合,求最后总的不规则图型的轮廓长度. 我的做法是对x进行一遍扫描线,再对y做一遍同样的扫描线,相加即可.因为最后的轮廓必定是由不重合的线段长度组成的,这样理论上是对的 要注意处理高度相同的线段,把底边优先处理(在代码里就是f标记为1的线段),因为若是一个矩形的底边和另一个矩形的上边重合,则这个轮廓肯定不能算 不过POJ和HDU的数据好像都比较弱,我没进行上面的细节处理也AC了,不过一个很简单的数据就会不对,所以还是要处理一下才是真正正确的代码 我

(hdu 7.1.4)Surround the Trees(求图报的周长——计算将所有点都包围起来的最小凸多边形的周长)

题意: Surround the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 209 Accepted Submission(s): 104   Problem Description There are a lot of trees in an area. A peasant wants to buy a rope to s

dtIntersectSegmentPoly2D 2D上的线段与多边形相交计算 产生结果:是否相交,线段跨越的开始和结束百分比,相交的边

dtIntersectSegmentPoly2D(startPos, endPos, verts, nv, tmin, tmax, segMin, segMax): http://geomalgorithms.com/vector_products.html perp product也就是 2D外积 inline float dtVperp2D(const float* u, const float* v) { return u[2]*v[0] - u[0]*v[2]; } 所有的都是映射到xz

JVM —— Java 对象占用空间大小计算

零. 为什么要知道 Java 对象占用空间大小 缓存的实现: 在设计 JVM 内缓存时(不是借助 Memcached. Redis 等), 需要知道缓存的对象是否会超过 JVM 最大堆限制, 如果会超过要设置相应算法如 LRU 来丢弃一部分缓存数据以满足后续内容的缓存 JVM 参数设置: 如果知道对象会被创建, 可以帮助判断 -Xmx 需要设置多少 只是为了好玩 一. 对象的内存布局 HotSpot 虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instan

多边形游戏(DP)

Description 多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形.每个顶点被赋予一个整数值,每条边被赋予一个运算符 "+" 或 "*".所有边依次用整数从1到n编号. 游戏第1步,将一条边删除. 随后的n-1步按以下方式操作: (1)选择一条边E以及由E连接着的两个顶点V1和V2: (2)用一个新的顶点取代边E以及由E连接着的两个顶点V1和V2.将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新顶点. 最后,所有边都被删除,游戏结束.

Hzoi 2018.2.11多边形 区间DP

给定一个由N个顶点构成的多边形,每个顶点被赋予一个整数值,而每条边则被赋予一个符号:+(加法运算)或者*(乘法运算),所有边依次用整数1到N标识. 一个多边形的图形表示 首次移动,允许将某条边删除: 接下来的每次顺序移动包括下面步骤: 1.选出一条边E,以及由E联接的顶点V1和V2: 2.用一个新的顶点,取代边E及其所联接的两个顶点V1和V2.新顶点要赋予新的值,这个值是对V1和V2,做由E所指定的运算,所得到的结果. 所有边都被删除后,只剩下一个顶点,游戏结束.游戏的得分就是该顶点的数值. 任

算法设计与分析——多边形游戏(动态规划)

一.问题描述 多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形.每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”.所有边依次用整数从1到n编号. 游戏第1步,将一条边删除. 随后n-1步按以下方式操作: (1)选择一条边E以及由E连接着的2个顶点V1和V2: (2)用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2.将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新顶点. 最后,所有边都被删除,游戏结束.游戏的得分就是所剩顶点上的整数值. 问题:对于给

关于ArcGIS常用功能的实现

关于ArcGIS中常见的一些功能的总结,一般首先在前台中放置地图,<esri:Map Grid.Row="0" Grid.Column="0" Grid.RowSpan="5" Grid.ColumnSpan="6"  x:Name="MyMap" WrapAround="True"  MouseClick="MyMap_MouseClick" ExtentCh