ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Documentos relacionados
Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Nombre-Apellidos:

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Leonardo DaVinci. Piccasso La Tempestad. Mona Lisa

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

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

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Entiendo los métodos de Java equals y hashcode

PROGRAMACIÓN GENÉRICA

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

Pilas. Carlos Delgado Kloos Dep. Ingeniería Telemática Univ. Carlos III de Madrid. Java: Pilas / 1

Programación de sistemas Listas enlazadas

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Práctica No. 5. Estructuras con Memoria Dinámica

Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 80M, 2014/ de Marzo de

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

Fundamentos de Programación

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática)

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Listas enlazadas. Programación de Sistemas

Programación de sistemas Pilas y Colas

UNADM. Estructura de datos. Guillermo Duran Garcia AL Actividad 2. Identificación de errores en métodos de ordenación

Práctica 3. Búsqueda

Colas Implementación con gestión estática de memoria

Examen Teórico Convocatoria de Junio de 2012

Programación de sistemas

Depto. Ingeniería de Sistemas Telemáticos Universidad Politécnica de Madrid ETSI Telecomunicación Fundamentos de Programación 15 de diciembre de 2011

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre

Pilas Motivación

PRÁCTICA 4: DISEÑO DE TIPOS Versión: 1.0.1

1. (1 punto) Dado el siguiente fragmento de programa:

Solución al Examen de Fundamentos de Computadores y Lenguajes

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Herencia Java y Servicios Web I Master en Ingeniería Matemática

CLASE 10 - ESTRUCTURAS DE DATOS DINÁMICAS

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

PRIMER EXAMEN PARCIAL. 5 de febrero de SOLUCIONES

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Programación de sistemas

Java ENTRADA ESTÁNDAR

Implementar rehashing en TablaHash. Soluciones Ejercicios Tema 13. Implementar toarray en TablaHash. Radares de Tráfico (I)

Construcciones del Lenguaje Java

Algoritmos y Estructuras de Datos: Ordenación y Colas con Prioridad. Guillermo Román Díez

FUNDAMENTOS DE PROGRAMACIÓN Curso: 2012/13

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

1. (1 punto) Dado el siguiente fragmento en Java:

Soluciones Ejercicios Tema 8

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

1. Árbol Binario de Búsqueda: Las clases Java NodoABB y ABB. 1. Definición y representación en Java 2. Operaciones y su coste estimado

Examen escrito de Programación 1

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

Instituto Tecnológico de Celaya

Computación Geométrica Colecciones en Java

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

Estructura de datos y Programación

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

Soluciones Ejercicios Tema 7. Cambio de Signo Pila (3/3) if (!p.esvacia()) { d i l cambiasignopila(p); this.apilar(new Integer(-dato));

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

Estructuras de Datos Clase 7 Listas e Iteradores (segunda parte)

Práctica 11d. Práctica 11d. José M. Ordax

Tema 4- Representación Enlazada

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

Diseño de tipos Igualdad, representación, código, copia y relación de orden

Estructuras de Datos Clase 4 Pilas y colas

Grado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de

Introducción: una simple colección

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

Tipos abstractos de datos (TAD)

El programa P1 tiene como objetivo imprimir cada uno de los caracteres de una cadena en una línea, como por ejemplo: h o l a

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Soluciones. boolean pruebaiteraseriegeometrica () { Serie s= new SerieGeometrica (1, 2); return (s.iterator() instanceof IteraSerieGeometrica); }

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

FUNDAMENTOS DE INFORMÁTICA

Examen de Programación 1. Viernes 31/enero/2014. Problema 1 o (2.5 puntos) Disponer un documento de identificación con fotografía sobre la mesa.

PROGRAMACION I Archivos directos

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016

LISTAS CIRCULARES. // Métodos private CElemento() {} // constructor. ultimo

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot

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

Unidad 3 Programación Orientada a Objetos. Programación JAVA. Cuestiones I:

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Pauta control 2 CC10B

Tema 2.- Objetos y mensajes

INTERFACES SET Y SORTEDSET DEL API DE JAVA. CLASES HASHSET Y TREESET. EJEMPLO. DIFERENCIAS ENTRE ELLAS. (CU00924C)

Examen Teórico. Convocatoria de Febrero de 2015

Uso de Java Generics (I)

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Práctica 2. Búsqueda I

dit UPM Tema 2: Algoritmos /ordenación /java Análisis y diseño de software José A. Mañas

Estructuras de Datos Clase 6 Listas e Iteradores (primera parte)

Estructuras de datos en memoria principal

Herencia: relación es un

Programación II Arboles Binarios(AB)

Transcripción:

2. Ejercicio (3 puntos) Clases necesarias public class Empresa { LinkedList empleadospornss; LinkedListItr itrempleadospornss; public class RepartoAsignado { private String nssempleado; private String empresa; public class Empleado { private String nss; private String nombre; private int numdiastrabajados; public class LinkedListItr { LinkedList thelist; Node current; Node preceding; class Node { Object element; Node next; public class LinkedList{ Node top; a) implementación: class Empresa { public Queue crearcola RepartosAsignados(){ Queue quasignados = new Queue(); RepartoAsignado a1 = new RepartoAsignado( 1111, empresa1 ); RepartoAsignado a2 = new RepartoAsignado ( 3333, empresa1 ); RepartoAsignado a3 = new RepartoAsignado ( 5555, empresa2 ); RepartoAsignado a4 = new RepartoAsignado ( 7777, empresa3 ); quasignados.enqueue(a1); quasignados.enqueue(a2); quasignados.enqueue(a3); quasignados.enqueue(a4); return quasignados; Class RepartoAsignado { public RepartoAsignado(String nssempleado, String empresa){ this.nssempleado = nssempleado; this.empresa = empresa; b) implementación public class Empleado { public Empleado(String nss){ this.empleado(nss,, 0); public Empleado(String nss, String nombre, int numdiastrabajados){ this.nss = nss; this.nombre = nombre; this.numdiastrabajados = numdiastrabajados;

public String getnss(){ return nss; public void setnombre(string nombre){ this.nombre = nombre; public bolean equals(object obj){ if ((obj!= null) && (obj instanceof Empleado)) { Empleado emp = (Empleado) obj; return this.nss.equals(emp.nss); public void incrementardiatrabajado(){ this.numdiastrabajados++; public class Empresa { public void actualizar(queue quasignados){ Empleado emp; while (!quasignados.isempty()) { RepartoAsignado reparto = (RepartoAsignado) quasignados.dequeue(); emp = new Empleado(reparto.getNssEmpleado()); if (itrempleadospornss.find(emp)) { //requiere implementar equals() emp = (Empleado) itrempleadospornss.getcurrent(); String nombre = System.in.read(); emp.setnombre(nombre); insertarordenado(emp); emp.incrementardiatrabajado(); public void insertarordenado(empleado nuevo){ Empleado empant = null; boolean enc = false; Empleado emp = null; //buscar posición en la lista por nss, NO puede haber repetidos itrempleadospornss.gofirst(); while ( (itrempleadospornss.isonlist()) &&!enc ) { emp = (Empleado) itrempleadospornss.getcurrent(); if (emp.getnss().compareto(nuevo.getnss())<0) { empant = emp; itrempleadospornss.advance(); else enc = true; if ((enc) && (emp.getnss().compareto(nuevo.getnss())==0)) System.out.println("Error,el empleado con el NSS "+emp.getnss()+" ya esta"); // insertar el nuevo en la lista if (empant == null) itrempleadospornss.insertfirst(nuevo); itrempleadospornss.find(empant); itrempleadospornss.insert(nuevo);

3. Ejercicio. (2,5 puntos) Estrategia o diseño: Controlar para cada paréntesis de cierre, que el último paréntesis de apertura fue un paréntesis del mismo tipo. De esta forma se controlan dos cosas: las parejas de paréntesis y el anidamiento correcto. Se necesita llevar un histórico de paréntesis de apertura. Para ello la estructura más adecuada y eficiente es utilizar una pila, con la siguiente forma de utilizarlo: por cada paréntesis de apertura se almacena el carácter en la pila y por cada paréntesis de cierre se extrae de la pila el carácter de la cima para comprobar si corresponden al mismo tipo de paréntesis. Los demás caracteres no se almacenan. En caso de que todo vaya bien, el proceso finalizará cuando se haya procesado toda la secuencia de caracteres y en el caso de que no sea valido, se finalizará en cuanto se detecte el error. Implementación public static boolean cadenacorrecta(string cadena) { boolean error = false; Stack parentesis = new Stack(); int numcar = cadena.length; int i = 0; while (i<numcar-1 &&!error) { String car = cadena.substring(i, i+1); If (esparentesisapertura(car)) parentesis.push(car); else if (esparentesiscierre(car)){ try{ String apertura = (String) parentesis.pop(); error =!coincidepareja(apertura, car); catch(exception e){ error = true; i++; if (error!parentesis.isempty()) return false; else public static bolean esparentesisapertura(string car){ if (car.equals( ( ) car.equals( [ ) car.equals( { )) public static bolean esparentesiscierre(string car){ if (car.equals( ) ) car.equals( ] ) car.equals( )) public static boolean coincidepareja(string apertura, String cierre){ if (apertura.equals( ( ) && cierre.equals( ) )) else if (apertura.equals( [ ) && cierre.equals( ] )) else if (apertura.equals( { ) && cierre.equals( ))

4. Ejercicio (3,5 puntos) a) Diseñar e implementar: public static void imprimir(hashtable polinomio); Diseño Algoritmo imprimir(hashtable polinomio) 1. numeroterminos = recuperar_numero_de_terminos(polinomio); 2. exponentes = recuperar_exponentes(polinomio); 3. arrayexponentes = pasaraarray(exponentes, numeroterminos); 4. ordenararray(arrayexponentes); 5. Para cada exponente en arrayexponentes 5.1 exponente = recuperarexponente(arrayexponentes); 5.2 coeficiente = recuperarcoeficiente(polinomio, exponente); 5.3 imprimir_en_pantalla(coeficiente+ x +exponente); finpara Implementación: public static void imprimir(hashtable polinomio){ int numeroterminos = polinomio.numpos(); Enumeration exponentes = polinomio.keys(); int[] arrayexponentes = pasaraarray(exponentes, numeroterminos); ordernararray(arrayexponentes); for(int i=0;i < arrayexponentes.length; i++){ int exp = arrayexponentes[i]; int coef = ((Integer) polinomio.find(new Integer(exp))).intValue(); System.out.print(coef + x + exp); if ((i+1) < arrayexponents.length) System.out.print( + ); public static int[] pasaraarray(enumeration enum, int num){ int[] enteros = new int[num]; int i = 0; while ((i < num) && enum.hasmoreelements()) enteros[i] = ((Integer) enum.nextelement()).intvalue(); return enteros; // implementar un algoritmo de ordenación vista en clase: insertionsort, // selectionsort, MergeSort, QuickSort

b) El coste de ejecución del algoritmo imprimir será la suma del coste de ejecución de cada acción, numeradas del 1 al 5. A continuación se detalla el coste de cada acción: 1. O(1), constante: Operación sobre la tabla hash, cuyos métodos son de O(1) 2. O(1), constante: Operación sobre la tabla hash, cuyos métodos son de O(1) 3. O(n), lineal: depende del número de términos (n) guardados en la tabla hash 4. O(n 2 ), cuadrática: es el coste de ejecutar los siguientes algoritmos de ordenación: insertionsort, selectionsort o Quicksort (aunque en la mayoría de veces será O(nlogn), siempre hay que tener en cuenta el peor de los casos) O(nlog n): es el coste de ejecutar el algoritmo de ordenación MergeSort 5. O(n), lineal: depende del número de términos (n) guardados en el array arrayexponentes, ya que el coste de todas sus subacciones 5.1, 5.2 y 5.3 es de O(1), es decir, constante. Por lo tanto, el coste total se ve determinado por la acción 4, que será bien O(n 2 ) o O(nlog n), según implementación del algoritmo de ordenación. c) No aparece contigua porque las tablas hash aplican una función hash sobre la clave de la información que se va a almacenar, para posicionarlo en el array interno.