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


#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; 
}

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

#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;
}

if( ( (Y[0]-Y[1])(Y[2]-Y[1])+(X[0]-X[1])(X[2]-X[1]) )!=0)
cout<<"该四边形不是长方形\n";
这是啥公式,凭什么不这样它就是个长方形了
长方形的特点是对边相等,其中一个角是直角,你判断的代码呢