Información

Marcar pregunta

Texto informativo

La inmobiliaria de parcelas geométricas

Planteamiento

El área de un terreno desempeña un papel fundamental en la determinación de su precio. En general, a mayor área o tamaño, mayor será el valor del terreno. Sin embargo, a igualdad de precio entre diferentes terrenos, es crucial tener en cuenta el perímetro de cada uno, debido a la necesidad de vallar el terreno, lo cual implica un costo adicional: terrenos con un perímetro extenso requerirán más vallas, materiales y mano de obra. Por lo tanto, al evaluar el precio de un terreno, es importante considerar tanto el área como el perímetro, ya que ambos afectan los costos asociados con su desarrollo y cercado.

Por otra parte, en ocasiones, el factor más determinante al elegir un terreno es su proximidad a un punto específico, como el lugar de residencia del comprador interesado. La conveniencia de estar cerca de lugares de trabajo, escuelas o servicios puede tener un impacto significativo en la decisión de compra, incluso por encima del tamaño o precio del terreno.


Supongamos que tenemos una inmobiliaria y que tenemos registrados en nuestra base de datos una serie de terrenos en venta los cuales gestionamos. Supongamos que dichos terrenos tienen todos forma rectangular o circular.

Haz un programa en Java que sea capaz de ordenar los terrenos (figuras geométricas: círculos o rectángulos) atendiendo a dos posibles criterios de ordenación:

  • Criterio de ordenación 1: Ordenaremos los terrenos (figuras geométricas) por área, de mayor a menor área. En caso de que dos figuras geométricas tengan el mismo área, se ordenarán por perímetro, de menor a mayor perímetro. En caso de que dos figuras tengan el mismo área y el mismo perímetro, se respetará su orden de aparición en la entrada de datos (la que apareció primera, estará primera en la ordenación).
  • Criterio de ordenación 2: Ordenaremos los terrenos (figuras geométricas) por su proximidad a un punto de referencia dado, de menor a mayor proximidad o distancia de las figuras a dicho punto, de menor a mayor distancia. La distancia entre una figura geométrica y el punto de referencia se calculará como la distancia existente entre el punto central de la figura geométrica y dicho punto de referencia. En caso de que dos figuras geométricas estén a la misma distancia del punto referencia, entonces se ordenarán por área, de mayor a menor área. En caso de que dos figuras estén a la misma distancia del punto referencia y tengan el mismo área, se respetará su orden de aparición en la entrada de datos (la que apareció primera, estará primera en la ordenación).

Organización en paquetes del programa 

Las clases que implementan las figuras: Punto2D, Figura2D, Circulo y Rectangulo, estarán dentro de un paquete llamado figuras.

El resto de clases necesarias para el programa estarán en un paquete distinto.

Entrada y salida de datos 

En el siguiente fichero tienes un listado de los terrenos (figuras geométricas) que gestiona la inmobiliaria, los cuales deberás procesar. Dicho listado tiene la siguiente estructura:

  • En una primera línea aparece un número entero que indica el número de terrenos (figuras geométricas) que componen el listado.
  • Después aparece una línea con la información de cada una de las figuras geométricas, donde:

    • Si la figura es un rectángulo, aparecerá la palabra "Rectangulo", seguida de la palabra "Centro" o "Vertice", seguida de cuatro números reales indicando, respectivamente, las coordenadas X e Y del centro o del vértice inferior izquierdo del rectángulo, junto con la base y la altura del rectángulo.

    • Si la figura es un círculo, aparecerá la palabra "Circulo", seguida de tres números reales indicando, respectivamente, las coordenadas X e Y del centro del círculo y el radio del mismo.

ATENCIÓN: Deberás almacenar estos datos de entrada en una colección. Puedes usar la colección que estimes conveniente.

Deberás realizar tu programa de tal manera que sea capaz de controlar los errores en los datos de entrada.

  • Se garantiza que los datos de entrada serán del tipo que se espera; es decir, si para un dato se espera un valor de tipo double, en la entrada habrá un valor de tipo double. No debe controlarse este tipo de errores y se permite que el programa falle y termine abruptamente en caso de que no sea así.
  • No se garantiza que los datos de entrada cumplan las restricciones impuestas en los tipos de datos para las figuras geométricas y que se produzcan errores a la hora de crear éstas. Estos errores deben ser detectados y controlados mediante el control y la gestión de excepciones. Por ejemplo, en los datos de entrada podría haber un círculo de radio negativo, lo cual no es una entrada válida para la creación de un círculo. En estos casos, deberá imprimirse el siguiente mensaje de error y pasar al procesamiento de los datos de la siguiente figura:
Circulo/Rectangulo incorrecto --> (coordenadaXEntrada, coordenadaYEntrada)

Una vez procesados todos los datos de entrada, el programa mostrará un menú que permitirá elegir entre 4 opciones:

  1. Mostrar un listado no ordenado de los terrenos (figuras geométricas). No ordenado quiere decir que aparecerán listadas en el mismo orden en el que fueron leídos de la entrada.
  2. Mostrar un listado ordenado por el criterio 1 de ordenación especificado en el enunciado
  3. Mostrar un listado ordenado por el criterio 2 de ordenación especificado en el enunciado. En este segundo caso, se pedirán las coordenadas X y Y del punto de referencia con respecto al que hay que ordenar las figuras geométricas. Se garantiza que la introducción de datos en este punto se corresponderán con el tipo esperado, no teniéndose que controlar este tipo de errores; es decir, se permite que el programa falle y termine abruptamente en caso de que no sea así. ATENCIÓN: Recuerda que al introducir un número real por teclado (español) hay que usar la coma (y no el punto) como separador entre la parte entera y la parte decimal; ejemplo: 3,45. 
  4. Salir

Una vez elegida una opción, se mostrará el listado correspondiente y se volverá a mostrar el menú para elegir una nueva opción. Esto se estará repitiendo hasta que se elija la opción de "Salir". Si se elige una opción distinta de las 4 posibles, se mostrará el mensaje "La opción elegida no es válida" y se volverá a mostrar el menú.

ATENCIÓN: Para no perder el orden de lectura de los datos, cada una de las ordenaciones debes realizarla sobre una colección distinta a la colección en la que hiciste la lectura de datos. Esta nueva colección será una copia de la colección en la que se han recogido los datos y solo servirá para hacer la ordenación y mostrar el resultado de la misma.

A la hora de mostrar los resultados se mostrará la información de cada figura en una línea, con la siguiente información:

  • Número de la figura según su orden en el listado: Figura 1, Figura 2, Figura 3, etc.
  • Qué tipo de figura es. Para ello, usarás la información devuelta por el método getClass() que se puede ejecutar sobre cualquier objeto y que devuelve información sobre la clase a la que pertenece un objeto. Quédate solo con la información que te interesa de toda la que devuelve. Para ello puedes aplicar el método toString() y usar los métodos de la clase String para seleccionar la parte de información que quieres.
  • Las coordenadas X e Y del centro de la figura, entre paréntesis.
  • Una flecha
  • El nombre de cada uno de los parámetros por los que se hace la ordenación junto con el valor de dicho parámetro, de tal manera que se pueda comprobar que los resultados son correctos. Para el listado de figuras sin ordenar y para el primer método de ordenación se mostrará la información del área y el perímetro. Para el segundo método de ordenación se mostrará información de distancia al punto referencia y el área.
Ejemplo:

Restricciones

  • En el programa principal solo pueden crearse y usarse dos colecciones. Una para almacenar los datos de entrada, y otra para realizar las ordenaciones. Con esta segunda colección habrá que trabajar de la siguiente manera  para cada ordenación que se solicite en el menú: vaciarla, copiar los elementos de la colección de los datos de entrada, ordenarla según el criterio elegido en el menú y recorrerla para mostrar los resultados.
  • Para recorrer la colección hay que usar un iterador.

Ejemplos de ejecución

Ejemplo de entrada de datos sin errores en la construcción de las figuras:

6
Rectangulo Centro 0,0 0,0 5,0 4,5
Rectangulo Centro 1,0 1,0 9,0 3,1416
Circulo 0,0 0,0 2,5
Rectangulo Centro 0,0 3,0 1,5708 18,0
Circulo 4,0 0,0 3,0
Circulo 0,0 4,0 3,0






Ejemplo de entrada de datos con errores en la construcción de las figuras:

5
Rectangulo Centro 0,0 0,0 -5,0 4,5
Rectangulo Centro 1,0 1,0 9,0 -3,1416
Circulo 0,0 0,0 -2,5
Rectangulo Centro 0,0 3,0 1,5708 18,0
Circulo 4,0 0,0 3,0

Criterios de Corrección

  • Procesamiento de los datos y uso de una estructura polimórfica, capaz de almacenar objetos de cualquier tipo de Figura2D para trabajar sobre los elementos comunes a todas ellas:
    • Si la creación, uso y recorrido de la estructura polimórfica es correcta, pero errores en el procesamiento de datos hacen que no se pueda ejecutar el programa, se penalizará con hasta un 40% la puntuación correspondiente.
    • Si no se ha controlado correctamente la posibilidad de que haya datos incorrectos en la entrada tal y como se pide en el enunciado, se penalizará con hasta un 20% de la puntuación correspondiente.
    • Si no se ha realizado correctamente el funcionamiento del menú, se penalizará con hasta un 25% de la puntuación.

  • Ordenación según el criterio 1
    • Para puntuar, la ordenación tiene que estar correctamente hecha, el algoritmo de ordenación tiene que ser correcto y deben mostrarse los resultados correctos de la ordenación.
    • Para puntuar, se debe haber utilizado el artefacto Java adecuado para el tipo de ordenación que se está haciendo (una ordenación circunstancial para un contexto concreto).
    • Si se ha usado correctamente el artefacto y la arquitectura de programa para realizar la ordenación y se ha programado correctamente el algoritmo de ordenación, pero falla por errores de programación en los métodos por los que se está ordenando, se penalizará con hasta un 25% de la puntuación.

  • Ordenación según el criterio 2
    • Para puntuar, la ordenación tiene que estar correctamente hecha, el algoritmo de ordenación tiene que ser correcto y deben mostrarse los resultados correctos de la ordenación. 
    • Para puntuar, se debe haber utilizado el artefacto Java adecuado para el tipo de ordenación que se está haciendo (una ordenación circunstancial para un contexto concreto).
    • Para puntuar, se debe haber resuelto correctamente desde el punto de vista de la orientación a objetos la gestión del punto de referencia con respecto al que hay que hacer la ordenación.
    • Si se ha usado correctamente el artefacto y la arquitectura de programa para realizar la ordenación y se ha programado correctamente el algoritmo de ordenación, pero falla por errores de programación en los métodos por los que se está ordenando, se penalizará con hasta un 25% de la puntuación.

Tiempo estimado de realización

110 minutos

Pregunta 1

Sin responder aún
Puntúa como 10,00
Marcar pregunta

Enunciado de la pregunta

La inmobiliaria de parcelas geométricas - Entrega y calificación

¿Qué entregar?

Entrega aquí el proyecto NetBeans con la resolución del ejercicio completo: Programa principal, clases y subclases y ficheros de testing.

Criterio de Calificación

  • Clase Punto2D (1 pto.)
  • Clase Figura2D (1 pto.).
  • Clase Circulo (1'5 ptos)
  • Clase Rectangulo (1'5 ptos)
  • Programa principal: lectura de datos, definición, uso y recorrido de una colección polimórfica, independientemente de que se sepa resolver la ordenación de la misma según el criterio especificado, y control y gestión de errores en la creación de figuras (1'5 ptos.)
  • Resolución del problema de ordenación por el criterio 1.  (1'5 ptos)
  • Resolución del problema de ordenación por el criterio 2 . (2 ptos.)