#include <stdio.h>
#include <stdlib.h>

typedef struct{
    int x;
    int y;
}punto;   //Se define la estructura.

int main()
{
    int i,j,n; //Variables a utilizar.
    char opcion;
    punto *p, tmp; //Puntero a la estructura y variable auxiliar.

    printf("Cantidad de puntos a ingresar:\n");
    do{
        scanf("%d", &n);  //Se ingresa la cantidad de puntos que se utilizaran
        if(n<=0){
            printf("Ingresa un n%cmero positivo:\n", 163);
        }
    }while(n<=0);
    printf("\n");
    p=(punto*)malloc(n*sizeof(punto));  //Se reserva memoria para puntos
    for(i=0;i<n;i++){
        printf("P%d:(x,y): ", i+1);
        scanf("%d %d", &p[i].x, &p[i].y);   // Observar que p[i].x es equivalente a (p+i)->x
    }
    printf("Odenar por x o y?\n"); //Se espera hasta que se pulse x o y
    while(opcion=getch(), opcion!='x'&&opcion!='X'&&opcion!='y'&&opcion!='Y');

    switch(opcion){
        case 'x':  //Se ordena dependiendo de la opcion elegida.
            for(i=0;i<n;i++)
                for(j=i+1;j<n;j++)
                {
                    if(p[i].x>p[j].x){
                        tmp=p[i];
                        p[i]=p[j];
                        p[j]=tmp;
                    }
                }
            break;
        case 'y':
            for(i=0;i<n;i++)
                for(j=i+1;j<n;j++)
                {
                    if(p[i].y>p[j].y){
                        tmp=p[i];
                        p[i]=p[j];
                        p[j]=tmp;
                    }
                }
            break;
    }
    //Se muestran los puntos ordenados
    printf("Los puntos ordenados son:\n");
    for(i=0;i<n;i++){
        printf("p%d(x,y)=(%d,%d)\n",i+1, p[i].x, p[i].y);
    }
    free(p); //Se libera la memoria apuntada por p.
    system("pause");
    return 0;

}

