计算机天才从不认输 2022-03-18 12:58 采纳率: 40%
浏览 24

我输入的坐标对了,但不是长方形它也会输出长和宽来,怎么改才能使当它不是长方形的时候就不输出长和宽,是长方形或正方形的时候才输出?最好可以贴出改之后的代码看看


#include <iostream>
#include <math.h>
using namespace std;

class Rectangle
{
 public:
  Rectangle(float *x,float *y)
  {
   setCoordinate(x,y); 
  }
  
  void setCoordinate(float *x,float *y)  //设置坐标 
  {
   for(int i=0;i<4;i++)
   {
    if((x[i]<=0.0)||(x[i]>20.0)||(y[i]<=0.0)||(y[i]>20.0)) 
    {
    cout<<"有错误,请重新输入\n"; 
    break; 
    }
    else
    X[i]=x[i];
    Y[i]=y[i];
   }
   
   if( ( (Y[0]-Y[1])*(Y[2]-Y[1])+(X[0]-X[1])*(X[2]-X[1]) )!=0)
       cout<<"该四边形不是长方形\n";
   else if
       ( ((Y[1]-Y[0])*(Y[1]-Y[0])+(X[1]-X[0])*(X[1]-X[0]))!=((Y[3]-Y[2])*(Y[3]-Y[2])+(X[3]-X[2])*(X[3]-X[2])) )
   cout<<"该四边形不是长方形\n";
   *d=0;
   }
  //获得长
  float getLength()                    
  {
   float length,temp1,temp2;
   temp1=pow((Y[1]-Y[0])*(Y[1]-Y[0])+(X[1]-X[0])*(X[1]-X[0]),0.5);
   temp2=pow((Y[2]-Y[1])*(Y[2]-Y[1])+(X[2]-X[1])*(X[2]-X[1]),0.5);
   if(temp1>temp2) 
       length=temp1;
   else
       length=temp2;
   return length;
  }
  //获得宽
  float getWidth()        
  {
    
   float width,temp1,temp2;
   temp1=pow((Y[1]-Y[0])*(Y[1]-Y[0])+(X[1]-X[0])*(X[1]-X[0]),0.5);
   temp2=pow((Y[2]-Y[1])*(Y[2]-Y[1])+(X[2]-X[1])*(X[2]-X[1]),0.5);
   if(temp1>temp2) 
       width=temp2;
   else
       width=temp1;
   return width;
  }
  //计算周长
  float getPerimeter()          
  {
   return (2*getLength()+2*getWidth());
  } 
  //计算面积 
  float getArea()           
  {
   return (getLength()*getWidth());
  } 
  //判断是否是正方形 
  void guessSquare()        
  {
   if((getWidth()==0)||(getLength()==0))
   cout<<"无法判断"; 
   
   else if(getWidth()==getLength())
   {
   cout<<"该图是正方形\n";
   }
   else  
   {
   cout<<"该图不是正方形\n";
   }  
  }
  
 private:
  float X[4],Y[4],*d; 
};

int main()
{
 int i;
 float x[4],y[4];
 float *d=a;
 float *p=x,*q=y;  //指针指向数组
 cout<<"从长方形左上角开始顺时针输入坐标(坐标在第一象限且小于等于20\n";
 for (i=0;i<4;i++)              
 {
 cin>>x[i];//输入数组
 cin>>y[i];
 }
 if(a!=0)
  Rectangle nb(p,q);//给类成员
 cout<<"长为:"<<nb.getLength()<<endl;
 cout<<"宽为:"<<nb.getWidth()<<endl;
 nb.guessSquare();
 return 0; 
}

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-03-18 13:18
    关注

    之前刚写过这个,可以参考一下

    #include <iostream>
    using namespace std;
    typedef struct _POINT
    {
        double x,y;
    }POINT;
     
    class Rectange
    {
        POINT LT;
        POINT LB;
        POINT RT;
        POINT RB;
    public:
        Rectange() {}
        bool isValid(POINT pt)
        {
            if(pt.x <= 0 || pt.x > 20)
                return false;
            if(pt.y <= 0 || pt.y > 20)
                return false;
            return true;
        }
        bool SetPoints(POINT lt,POINT lb,POINT rt,POINT rb)
        {
            if(!isValid(lt))
                return false;
            if(!isValid(lb))
                return false;
            if(!isValid(lt))
                return false;
            if(!isValid(lt))
                return false;
            //
            if(lt.x != lb.x)
                return false;
            if(lt.y != rt.y)
                return false;
            if(lb.y != rb.y)
                return false;
            if(rt.x != rb.x)
                return false;
            //
            if(rt.x - lt.x != rb.x - lb.x)
                return false;
            if(rb.y - rt.y != lb.y - lt.y)
                return false;
            LT = lt;
            LB = lb;
            RT = rt;
            RB = rb;
        }
        bool square()
        {
            if(length() == width())
                return true;
            return false;
        }
        double length() {return RT.x-LT.x > RT.y-RB.y ? RT.x-LT.x:RT.y-RB.y;}
        double width() {return RT.x-LT.x > RT.y-RB.y ? RT.y-RB.y:RT.x-LT.x;}
        double perimeter() {return length()*2+width()*2;}
        double area() {return length()*width();}
    };
    int main()
    {
        Rectange r;
        POINT pts[4];
        pts[0].x = 5;
        pts[0].y = 10;
        pts[1].x = 5;
        pts[1].y = 5;
        pts[2].x = 10;
        pts[2].y = 10;
        pts[3].x = 10;
        pts[3].y = 5;
        r.SetPoints(pts[0],pts[1],pts[2],pts[3]);
        cout<<r.perimeter()<<endl;
        cout<<r.area()<<endl;
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月18日

悬赏问题

  • ¥15 征集Python提取PDF文字属性的代码
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?