Pauta control 2 CC10B

Documentos relacionados
Aquí se declaran los. Aquí se declaran los métodos de la clase. *Atributos de la clase

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Clases Abstractas e Interfaces

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Construcciones del Lenguaje Java

Java Básico. Métodos estáticos

Soluciones Ejercicios Tema 3

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

Por ejemplo, considerando la jerarquía de herencia de Figuras Geométricas de la siguiente figura, es posible hacer uso del concepto de polimorfismo.

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Tema 15: Aserciones 0

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores

Tema: Clases y Objetos en C++.

Los caracteres de Java pueden agruparse en letras, dígitos, espacios en blanco, caracteres especiales, signos de puntuación y secuencias de escape.

Agenda..NET C# Laboratorio #1

PROYECTO FIGURAS DIAGRAMA DE FLUJO

Derechos de Acceso: COMPOSICION

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

EXAMEN PROGRAMACIÓN 21 de Septiembre de 2007 INGENIERÍA INFORMÁTICA Primera parte: Cuestiones 1,5 horas

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Prácticas de Programación

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Tema 7.- Fundamentos de la Programación Orientada a Objetos

INTELIGENCIA EN REDES DE COMUNICACIONES PRÁCTICA FINAL. Ignacio Ribas Ramos Miguel Flecha Lozano Ingeniería de Telecomunicaciones

Tema 2. El lenguaje de programación Java (Parte 1)

Estructura de datos tipo vector.

Introducción a Java LSUB. 30 de enero de 2013 GSYC

2) Cual modificador limita el acceso a un método de una clase pública a los miembros de la misma clase?

1.2. Es Java un lenguaje ideal para aprender a programar? 1.4. Cuáles son las versiones y distribuciones Java y cuál usar?

Examen de Prácticas de Programación Ingeniería Informática

Instrucciones de control

Programación Orientada a Objetos

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Curso Fundamentos de Informática Lección 7. Programación Orientada a Objetos

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

POO en Java IV: Herencia (Parte 1)

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet DLSI - Universidad de Alicante 1

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Tema 2. Técnicas básicas de POO. Técnicas de Programación - Curso 2007/08

Objetivo de aprendizaje del tema

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

2. Estructura de un programa en Java

Programación Orientada a Objetos en Java

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Metodología y Tecnología de la Programación

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

Repaso de las características más importantes de la programación Java y su adaptación a Android

Interrogación 3 - Secciones 2 y 4 - Bachillerato Profesoras: Claudia Navarrete y Carla Vairetti

Fundamentos del Lenguaje de Programación Java

El lenguaje de programación Java

Algoritmos de Ordenación

package uniandes.cupi2.traductor.servidor; import java.io.serializable; import java.util.arraylist;

Pruebas de unidad con JUnit

Repaso desarrollo de software Parte #1. Jorge Iván Meza Martínez

Objeto Clase Atributo / Método Encapsulamiento Mensaje Herencia Polimorfismo Encadenamiento Dinámico

INTRODUCCION A LA PROGRAMACION EN JAVA

Prof. Dr. Paul Bustamante

3.3 Conceptos Básicos del Lenguaje Java

Primer Parcial Septiembre 5 de 2009

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

public class AtaqueVoraz extends EsquemaVZ implements EstrategiaSolucion {

Elementos léxicos del lenguaje de programación Java

Text Mining: Distancia de Levenshtein

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

Introducción a la Programación Orientada a Objetos

Clases y Objetos. Informática II Ingeniería Electrónica

PROGRAMACION ORIENTADA A OBJETOS Ingenieria Informática Final Febrero 2006/07

Ejercicios de evaluación de fundamentos de programación en Java

El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad:

Estructura de Datos [Tipos de datos concretos y tipos de datos abstractos]

Programación Orientada a Objetos. Java: Excepciones

Universidad Autónoma de Tlaxcala. M.C. José Juan Hernández Mora. Primera Sesión

Lenguaje C Funciones. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

IIC1103 Capítulo 7: Ordenación y Búsqueda 1

1.1 Criba de Eratóstenes: Cómo colar números primos.

Clases en Java. Declaración de clases en Java 02/09/16. Ing. Roberto Martínez Román - public class Alumno { private int matricula;

Ejercicios de Programación Tema 7. Programación Orientada a Objetos

Tema: Métodos de Ordenamiento. Parte 1.

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

EJEMPLO DE PRUEBAS UNITARIAS Y DE INTEGRACIÓN.

ESCUELA SUPERIOR POLITECNICA DE CHIMBORAZO ESCUELA DE INGENIERIA EN SISTEMAS

Programación Orientada a Objetos. Java: Excepciones

Metodología y Tecnología de la Programación

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Elabore el diagrama de clases en UML y la codificación de un programa para resolver los siguientes problemas:

Curso Introducción JAVA Pág.: 1

Programación Orientada a Objetos en Java

Tema 7: Polimorfismo. Índice

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Transcripción:

Pauta control 2 CC10B 2007-01 Fórmula para el cálculo de la nota: Nota pts =1 pts 7 Alcance: las soluciones presentadas en esta pauta son sólo referenciales. Resumen de puntaje P1: 12.0. Jerarquía de clases 3.0, Departamento 3.0, departamento circular 3.0, departamento rectangular 3.0. P2: 24.0. Constructor 1.0, agregar 4.0, eliminardepartamentosvendidos 4.0, comprar 2.0, imprimirdepartamentos 6.0, contardepartamentos 3.0, metroscuadradospromediocirculares 4.0. P3: 8.0. Ordenar 8.0. P4: 6.0. Empresa con 500 departamentos 1.0, agregar departamento circular 1.0 y rcctangular 1.0, imprimir los departamentos con 100 m² y vista norte 1.0, comprar un departamento de los agregados 1.0 y eliminar los departamentos vendidos 1.0. Los departamentos 12 puntos Se pide: Diseñar la jerarquía de clases (sin agregar nuevos métodos). 3 ptos. Implementar los métodos especificados. 3 ptos cada departamento bien implementado. (Se espera esta respuesta, al menos en cuanto a forma) 1

abstract public class Departamento { 3 pts protected String direccion; protected int piso; protected float metros_cuadrados; protected int numero; protected String[] vistas; protected float[] metros_en_vista; protected boolean vendido; public Departamento(int numero,string direccion,int piso,float area_piso,string[] vistas,int[] metros_en_vista) { numero=numero; direccion=direccion; metros_cuadrados=area_piso; piso=piso; //aún no está vendido vendido=false; //construcción de los arreglos internos this.vistas=new String[4]; this.metros_en_vista=new int[4]; for(int i=0;i<4;i++) { this.vistas[i]=vista[i]; this.metros_en_vista[i]=metros_en_vista; public float metroscuadrados() { return metros_cuadrados; public float metros_en_vista(string vista) { //se busca la vista y se retorna inmediatamente for(int k=0;k<4;k++) { if (vistas[k].equals(vista)) { return metros_en_vista[k]; //Imprimir será escrito en las subclases abstract public void Imprimir(Console consola); 2

public class DptRectangular extends Departamento { 3 pts protected Punto[] ptos; public DptRectangular(int numero,string direccion,int piso,float area_piso,string[] vistas,int[] metros_en_vista,punto[] esquinas) { //construcción a través del padre super(numero,direccion,piso,area_piso,vistas,metros_en_vista); //construcción del arreglo de puntos ptos=new Punto[4]; for(int i=0;i<4;i++) { ptos[i]=new Punto(esquinas[i].getX(),esquinas[i].getY()); public void Imprimir(Console consola) { //La información básica del departamento consola.println( Departamento +numero+ : Direccion + dirección +, piso + piso +, metros cuadrados + metros_cuadrados +. ); //La forma del departamento y las esquinas consola.println( Forma rectangular. Esquinas: ); for(int k=0;k<3;k++) { consola.print( ( + ptos[k].getx() +, + ptos[k].gety() + ), ); consola.println( ( + ptos[3].getx() +, + ptos[3].gety() + ). ); //Se entrega la información de las vistas consola.print( Vistas: ); for(int k=0;k<4;k++) { consola.print(vistas[k] + + metros_en_vista[k] + m2 ); consola.println(); //Por último, se indica su estado de venta if (vendido) { consola.println( Este departamento ha sido vendido. ); else { consola.println( Este departamento está en venta. ); 3

public class DptCircular extends Departamento { 3 pts protected Punto centro; float radio; public DptRectangular(int numero,string direccion,int piso,float area_piso,string[] vistas,int[] metros_en_vista,punto centro,float radio) { //construcción a través del padre super(numero,direccion,piso,area_piso,vistas,metros_en_vista); //información del círculo this.centro=new Punto(centro.getX(),centro.getY()); this.radio=radio; public void Imprimir(Console consola) { //La información básica del departamento consola.println( Departamento +numero+ : Direccion + dirección +, piso + piso +, metros cuadrados + metros_cuadrados +. ); //La forma del departamento y su círculo consola.println( Forma circular. Centro: ( + centro.getx() +, + centro.gety() + ), radio: + radio + m2 ); //Se entrega la información de las vistas consola.print( Vistas: ); for(int k=0;k<4;k++) { consola.print(vistas[k] + + metros_en_vista[k] + m2 ); consola.println(); //Por último, se indica su estado de venta if (vendido) { consola.println( Este departamento ha sido vendido. ); else { consola.println( Este departamento está en venta. ); 4

Empresa constructora 24 puntos Se pide implementar la clase EmpresaConstructora, agregando los métodos necesarios en los departamentos. Primero se aumentará Departamento algunos métodos para acceder al contenido: abstract public class Departamento {... public void vender() { vendido=true; public boolean vendido() { return vendido; public String vistaprincipal() { int max=metros_en_vista[0], pos=0; for(int i=1;i<4;i++) if (metros_en_vista[i]>max) { max=metros_en_vista[i]; pos=i; return vistas[pos]; public String direccion() { return direccion; public int numero() { return numero; public int piso() { return piso; 5

Ahora se implementa EmpresaConstructora: public class EmpresaConstructora { private Departamento[] departamentos; private int numero_actual_de_departamentos; // 1.0 punto public EmpresaConstructora(int numero_maximo_departamentos) { departamentos=new Departamento[numero_maximo_departamentos]; numero_actual_de_departamentos=0; // 4.0 puntos public void agregar(int tipo, String direccion, float metros_cuadrados, int piso, int numero, String[] vistas, float[] metros_vista, Punto[] puntos, float radio) { int N=numero_actual_de_departamentos; if (tipo==0) departamentos[n]=new DptRectangular(numero, direccion, piso, metros_cuadrados, vistas, metros_vista, puntos); else departamentos[n]=new DptCircular(numero, direccion, piso, metros_cuadrados, vistas, metros_vista, puntos[0], radio); numero_actual_de_departamentos++; reordenar(); // 4.0 puntos public void eliminardepartamentosvendidos() { //la estrategia es construir un nuevo arreglo sólo con los departamentos //sin vender... es fácil ver que no es necesario reordenar Departamento[] alter=new Departamento[departamentos.length]; int k=0; for(int i=0;i<numero_actual_de_departamentos;i++) { if (!departamentos[i].vendido()) { alter[k]=departamentos[i]; k++; departamentos=alter; numero_actual_de_departamentos=k; 6

// 2.0 puntos public Departamento comprar(string direccion,int numero,int piso) { Departamento dpto; for(int i=0;i<numero_actual_de_departamentos;i++) { if ( departamentos[i].direccion().equals( direccion ) && departamentos[i].numero() == numero && departamentos[i].piso() == piso ) { dpto=departamentos[i]; break; dpto.vender(); return dpto; // 6.0 puntos public void imprimirdepartamentos(console consola, float superficie, String vista) { //Es OBLIGATORIO usar búsqueda binaria y es lo primero a realizar int p1=0, p2=numero_actual_de_departamentos 1; for(;p2>p1;) { int k=(p1+p2)/2; if (departamentos[k].metroscuadrados()>=superficie) { p1=k; if (departamentos[k].metroscuadrados()==superficie) break; else { p2=k; //Hay que retroceder para recorrer los departamentos con igual superficie for(;p1>=0 && departamentos[p1].metroscuadrados()==superficie;p1 ) ; //Corrección en caso de que departamentos[p1] no cumpla con superficie if (departamentos[p1].metroscuadrados()<superficie) p1++; //Ahora se imprimen los departamentos indicados //Si no hay departamentos que cumplan, no pasará nada for(;p1<numero_actual_de_departamentos && departamentos[p1].metroscuadrados()==superficie; p1++) { if (departamentos[p1].vistaprincipal().equals(vista)) { departamentos[p1].imprimir(consola); 7

// 3.0 puntos public int contardepartamentos(string vista,float min_metros) { //Acá no se exigía búsqueda binaria int num=0; for(int i=0;i<numero_actual_de_departamentos;i++) if (departamentos[i].vistaprincipal().equals(vista)) num++; return num; // 4.0 puntos public float metroscuadradopromediocirculares() { //Hay que sumar todas las áreas y dividirlas por los circulares float area=0; int num=0; for(int i=0;i<numero_actual_de_departamentos;i++) { if (departamentos[i] instanceof DptCircular) { area+=departamentos[i].metroscuadrados(); num++; return area/num; //lo usé en otro lado //reordenar ordena cuando un nuevo elemento es añadido //sólo es necesaria una pasada de la burbuja, de final a inicio private void reordenar() { for(int i=numero_actual_de_departamentos 1;i>0;i ) { if (departamentos[i].metroscuadrados()< departamentos[i 1].metrosCuadrados()) { Departamento D=departamentos[i]; departamentos[i]=departamentos[i 1]; departamentos[i 1]=D; 8

Ordenamiento por vista principal 8 puntos Se pide implementar un método para EmpresaConstructora que ordene por vista principal (la de más metros) por orden Este, Norte, Oeste y Sur. Y dentro de cada orden principal, ordenar por los metros. Se usará burbuja debido a que no se especifica qué algoritmo de ordenamiento usar. public class EmpresaConstructora{... public void ordenarvista() { boolean salir=false; while(!salir) { salir=true; for(int i=numero_actual_de_departamentos 1;i>0;i ) { if (vistaxmenory(departamentos[i],departamentos[i 1])) { Departamento D=departamentos[i]; departamentos[i]=departamentos[i 1]; departamentos[i 1]=D; salir=false; //if //for //while private boolean vistaxmenory(departamento X,Departamento Y) { if (X.vistaPrincipal().compareTo(Y.vistaPrincipal())<0) return true; return X.metros_en_vista(X.vistaPrincipal()) < Y.metros_en_vista(Y.vistaPrincipal()); 9

Clase Ventas 6 puntos Se pide construir una clase Ventas para probar lo implementado. En particular: Crear una EmpresaConstructora con capacidad de 500 departamentos. 1 pto. Agregar un departamento circular y uno rectangular. 2 ptos. Imprimir todos los metros que tengan 100 metros cuadrados y vista Norte. 1 pto. Comprar un departamento que agregó. 1 pto. Eliminar los departamentos vendidos. 1 pto. public class Ventas{ public static void main(string[] A) { Console C=new Console(); EmpresaConstructora ec=new EmpresaConstructora(500); String[] vistas={ Norte, Sur, Este, Oeste ; int[] mcirc={1,2,3,4, mrect={2,3,4,5; Puntos[] esq=new Puntos[4]; esq[0]=new Punto(0,0); esq[1]=new Punto(0,1); esq[2]=new Punto(1,1); esq[3]=new Punto(1,0); ec.agregar(1, Lejos,2,1,1,vistas,mcirc,esq,1); ec.agregar(0, Cerca,2,1,1,vistas,mrect,esq,1); ec.imprimirdepartamentos(c,100, Norte ); ec.comprar( Lejos,1,1); ec.eliminardepartamentosvendidos(); 10