sábado, 11 de febrero de 2017

Programa identificar cuadrado

Enunciado: Dados cuatro puntos de un plano (x,y) identificar si corresponden a los vertices de un cuadrado.

Una forma de resolver el problema puede ser la siguiente, ingresando los datos, evaluando las diferentes formas en que pueden estar ordenados los vertices.

Codigo:

//*********************************************************************
#include <stdio.h>
#include <windows.h>


void pos(short x, short y);

int main(){
    int ax,ay,bx,by,cx,cy,dx,dy;
    int cuad=0;
    puts("Ingrese el vertice x del punto A: ");
    scanf("%d",&ax);
    puts("Ingrese el vertice y del punto A: ");
    scanf("%d",&ay);
    puts("Ingrese el vertice x del punto B: ");
    scanf("%d",&bx);
    puts("Ingrese el vertice y del punto B: ");
    scanf("%d",&by);
    puts("Ingrese el vertice x del punto C: ");
    scanf("%d",&cx);
    puts("Ingrese el vertice y del punto C: ");
    scanf("%d",&cy);
    puts("Ingrese el vertice x del punto D: ");
    scanf("%d",&dx);
    puts("Ingrese el vertice y del punto D: ");
    scanf("%d",&dy);  

    system("cls");
    //EVALUANDO TODAS LAS COMBINACIONES
    //  1  Condiciones para abcd
    if( (ax==cx) && (bx==dx) && (ay==by) && (cy==dy) && (bx-ax==ay-cy) )
        cuad=1;
    //  2  condiciones para bacd
    if( (bx==cx) && (ax==dx) && (by==ay) && (cy==dy) && (ax-bx==by-cy) )
        cuad=1;
    //  3  condiciones para acbd
    if( (ax==bx) && (ay==cy) && (cx==dx) && (by==dy) && (cx-ax==ay-by) )
        cuad=1; 

    //  4  condiciones para adcb
    if( (ax==cx) && (dx==bx) && (ay==dy) && (cy==by) && (dx-ax==ay-cy) )
        cuad=1;
    //  5  condiciones para abdc
    if( (ax==dx) && (bx==cx) && (ay==by) && (cy==dy) && (bx-ax==ay-dy) )
        cuad=1;
    //  6  condiciones para adbc
    if( (ax==bx) && (dx==cx) && (ay==dy) && (by==cy) && (dx-ax==ay-by) )
        cuad=1; 

    //  7  condiciones para acdb
    if( (ax==dx) && (bx==cx) && (ay==cy) && (by==dy) && (cx-ax==ay-dy) )
        cuad=1;
    //  8  condiciones para badc
    if( (bx==dx) && (ax==cx) && (ay==by) && (cy==dy) && (ax-bx==by-dy) )
        cuad=1; 
    //  9  condiciones para bcda
    if( (bx==dx) && (ax==cx) && (ay==dy) && (cy==by) && (cx-bx==by-dy) )
        cuad=1;
    //  10  condiciones para bcad
    if( (bx==ax) && (dx==cx) && (ay==dy) && (cy==by) && (cx-bx==by-ay) )
        cuad=1;
    //  11  condiciones para bdca
    if( (bx==cx) && (ax==dx) && (ay==cy) && (dy==by) && (dx-bx==by-cy) )
        cuad=1;
    //  12  condiciones para bdca
    if( (bx==cx) && (ax==dx) && (ay==cy) && (dy==by) && (dx-bx==by-cy) )
        cuad=1;
    //  13  condiciones para bdac
    if( (bx==ax) && (ax==cx) && (ay==cy) && (dy==by) && (dx-bx==by-ay) )
        cuad=1;
    //  14  condiciones para cabd
    if( (bx==cx) && (ax==dx) && (ay==cy) && (dy==by) && (ax-cx==cy-by) )
        cuad=1;
    //  15  condiciones para cadb
    if( (cx==dx) && (ax==bx) && (cy==ay) && (dy==by) && (ax-cx==cy-dy) )
        cuad=1;
    //  16  condiciones para cbad
    if( (ax==cx) && (bx==dx) && (ay==dy) && (cy==by) && (dx-cx==cy-ay) )
        cuad=1;
    //  17  condiciones para cbda
    if( (dx==cx) && (ax==bx) && (by==cy) && (dy==ay) && (bx-cx==cy-dy) )
        cuad=1;
    //  18  condiciones para cdab
    if( (ax==cx) && (dx==bx) && (dy==cy) && (by==ay) && (dx-cx==cy-ay) )
        cuad=1;
    //  19  condiciones para cdba
    if( (dx==ax) && (cx==bx) && (dy==cy) && (by==ay) && (dx-cx==cy-by) )
        cuad=1;
    //  20  condiciones para dacb
    if( (dx==cx) && (ax==bx) && (dy==ay) && (by==cy) && (ax-dx==dy-cy) )
        cuad=1;
    //  21  condiciones para dabc
    if( (dx==bx) && (ax==cx) && (dy==ay) && (by==cy) && (ax-dx==dy-by) )
        cuad=1;
    //  22  condiciones para dcab
    if( (dx==ax) && (bx==cx) && (dy==cy) && (by==ay) && (cx-dx==dy-ay) )
        cuad=1;
    //  23  condiciones para dcba
    if( (dx==bx) && (ax==cx) && (dy==cy) && (by==ay) && (cx-dx==dy-by) )
        cuad=1;
    //  24  condiciones para dbac
    if( (dx==ax) && (bx==cx) && (dy==by) && (cy==ay) && (bx-dx==dy-ay) )
        cuad=1;
    //  25  condiciones para dbca
    if( (dx==cx) && (bx==ax) && (dy==by) && (cy==ay) && (bx-dx==dy-cy) )
        cuad=1;
    pos(ax,ay);
    printf("A");
    pos(bx,by);
    printf("B");
    pos(cx,cy);
    printf("C");
    pos(dx,dy);
    printf("D")

    if(cuad==1){
        pos(10,10);
        printf(" \tCuadrado.");

    }else{
        pos(10,10);
        printf("\tNo es cuadrado.");

    }
    return 0;
}

void pos(short x, short y){
     COORD coord= {x,y};
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);

}
//*********************************************************************


Salida:
 Al ingresar los vertices , la salida seria la siguiente:
 

 
 Pero en caso de ingresar vertices de un cuadrado que tiene forma de rombo, o cuya posición en el plano tinene modificada su  pendiente este programa no lo reconocera como un cuadrado.
 

 


No hay comentarios:

Publicar un comentario