Manuel García
/* Este programa utiliza estructuras para saber si tres puntos del plano, dados por el usuario, están alineados o pueden formar un cuadrado o un rectángulo */
#include<iostream>
#include<stdlib.h>
using namespace std;
struct punto
{
float x;
float y;
};
typedef struct punto Punto;
int alineados (Punto a, Punto b, Punto c);
int rectangulo (Punto a, Punto b, Punto c);
int main()
{
float a1, a2, b1, b2, c1, c2;
cout << “Dame la componente x del primer punto: “;
cin >> a1;
cout << “Dame la componente y del primer punto: “;
cin >> a2;
do{cout << “Dame la componente x del segundo punto: “;
cin >> b1;
cout << “Dame la componente y del segundo punto: “;
cin >> b2;} while(a1==b1 && a2==b2);
do{cout << “Dame la componente x del tercer punto: “;
cin >> c1;
cout << “Dame la componente y del tercer punto: “;
cin >> c2;} while((a1==c1 && a2==c2) || (b1==c1 && b2==c2));
Punto a={a1,a2};
Punto b={b1,b2};
Punto c={c1,c2};
cout << endl;
if (alineados(a,b,c))
cout << “Los tres puntos estan alineados”;
else
cout << “Los tres puntos no estan alineados”;
cout << endl;
if (rectangulo(a,b,c))
cout << “Los tres puntos pueden forman un cuadrado o un rectangulo”;
else
cout << “Los tres puntos no pueden forman un cuadrado o un rectangulo”;
cout << endl << endl;
system(“pause”);
return 0;
}
int alineados (Punto a, Punto b, Punto c)
{
float m1, m2;
m1=(a.y-b.y)/(a.x-b.x);
m2=(b.y-c.y)/(b.x-c.x);
if (a.x==b.x && a.x==c.x)
return 1;
if ((a.x==b.x || a.x==c.x || b.x==c.x) && (a.x!=c.x || a.x!=b.x || b.x!=c.x))
return 0;
if (m1==m2)
return 1;
return 0;
}
int rectangulo (Punto a, Punto b, Punto c)
{
float escalar1, escalar2, escalar3;
escalar1=(a.x-b.x)*(a.x-c.x)+(a.y-b.y)*(a.y-c.y);
escalar2=(b.x-c.x)*(b.x-a.x)+(b.y-c.y)*(b.y-a.y);
escalar3=(c.x-a.x)*(c.x-b.x)+(c.y-a.y)*(c.y-b.y);
if (escalar1==0 || escalar2==0 || escalar3==0)
return 1;
return 0;
}