Diagrama de clases 1.- Diseñe las clases necesarias para modelar una Valida del 5 y 6, donde la valida esta compuesta por cierto número de carreras y en cada carrera participan 6 caballos. Deberá contemplar la creación de cada carrera con sus correspondientes caballos, además de dar la salida de los caballos, donde el caballo ganador se generara de forma aleatoria. 2.- Diseñe las clases necesarias para modelar una biblioteca, donde existan libros de distintos tipos. Se podrá retirar un libro en calidad de préstamo, comprar libros, incorporar nuevos libros y desincorporar libros de la biblioteca. 3.- Diseñe las clases necesarias para modelar un estacionamiento de vehículos, donde los vehículos pueden entrar y salir las 24 horas del día durante todo el año. Asuma que el estacionamiento tiene un máximo de 50 puestos. 4.- Los procesadores contienen regiones especiales para el almacenamiento denominadas registros. Existe un registro especial llamado el registro apuntador en donde se almacenan direcciones de memoria. Al momento de ejecutar un programa se cargan en memoria las instrucciones de dicho programa y este registro se inicializa con la dirección del espacio que ocupa la primera instrucción del programa en memoria. Cada vez que se ejecuta una instrucción el procesador elimina esa dirección del registro apuntador y agrega la siguiente dirección. Cuando el procesador se consigue con una llamada a un método (la cual no es mas que una orden de “saltar” a una dirección de memoria no contigua), el procesador almacena la ultima dirección del apuntador en otro registro especial denominado A5, para saber a que dirección de memoria regresar cuando culmine la ejecución de las instrucciones del método y "salta" a la dirección de memoria en donde se encuentran almacenadas las instrucciones del método. Luego ejecuta cada una de las instrucciones y si se encuentra una llamada a otro método, almacena la ultima dirección del registro apuntador en el registro A5 y "salta" a donde se encuentran las instrucciones de ese nuevo método y así sucesivamente. Cuando finaliza la ejecución del método en el que se encuentra., el procesador remueve una por una las direcciones que almacenó en el registro A5 regresando a la localidad de memoria donde se encontraba el apuntador antes de ejecutar la llamada a un método, para así poder continuar con el flujo de la ejecución. Realizar el diagrama de clases con las relaciones necesarias para poder crear dicha aplicación. Deberá especificar el tipo de relación entre las clases. 5.- Responda las siguientes preguntas en forma escrita. a.- Que es herencia? b.- Explique cual es la razón por la cual los atributos de una clase deben declararse private y los métodos public. c.- Que diferencia hay entre atributos private y atributos protected? d.- Cual es la diferencia entre clase y objeto? e.- Cual es la diferencia entre agregación y generalización f.- Cuál es la utilidad de crear un método SET en una clase? g.- Cuál es la utilidad de la sobrecarga de métodos? Escriba un ejemplo. h.- Que es agregación? i.- Que es generalización? 6.- Se desea crear una aplicación para representar la fauna de un país. Se representaran los mamíferos, peces y aves. De los mamíferos se consideraran si viven en el agua (acuáticos) o en la tierra (terrestres). Además debe proveer la flexibilidad de poder expandir dicha lista de animales para mejoras de la aplicación a futuro. Además el sistema deberá guardar un historial de los primeros 100 animales clasificados. Realizar el diagrama de clases con las relaciones necesarias para poder crear dicha aplicación. Deberá especificar el tipo de relación entre las clases. 7.- Se desea crear una aplicación para representar el funcionamiento de una Biblioteca. La biblioteca manejará libros, medios audiovisuales y publicaciones periódicas. Entre los medios audiovisuales se tiene videos y música. Además debe proveer la flexibilidad de poder expandir dicha lista de elementos de la biblioteca para mejoras de la aplicación a futuro. Por otro lado, el sistema deberá guardar un historial de los elementos almacenados en la Biblioteca (asuma un máximo de 100). Realizar el diagrama de clases con las relaciones necesarias para poder crear dicha aplicación. Deberá especificar el tipo de relación entre las clases. 8.- Se desea crear una aplicación para dibujar figuras geométricas. Con la aplicación se podrá dibujar: cuadriláteros, círculos y triángulos. Entre los cuadriláteros deberá representar cuadrados y rectángulos. Además debe proveer la flexibilidad de poder expandir dicha lista de figuras geométricas para mejoras de la aplicación a futuro. El sistema deberá guardar un historial de las primeras 50 figuras creadas. Realizar el diagrama de clases con las relaciones necesarias para poder crear dicha aplicación. Deberá especificar el tipo de relación entre las clases. 9.- Diseñe un diagrama de clases para llevar control de las solicitudes de las canciones de su preferencia, hechas por los oyentes a las estaciones de radio. Se debe contemplar en el diseño, un registro de los usuarios de la estación de radio, histórico de solicitudes hechas por ellos, registro de canciones de la estación, locutores de la estación y programación de la misma. 10.- La Universidad Metropolitana desea elaborar un sistema de reservaciones de espacio físico. La universidad esta formada por Aulas, Laboratorios, y Auditorios. Por otra parte las Aulas pueden ser Aulas Sencillas o Aulas Multimedia. El sistema debe contener información sobre: identificación, capacidad y ubicación de cada espacio físico. Igualmente se deberá tener información acerca de las reservaciones de las cuales se conocerá: fecha y hora de reservación, identificación del espacio reservado y nombre de la persona que reserva. Se quiere además mantener un registro con cada una de las reservaciones realizadas. Elabore el diagrama de clases para representar el nuevo sistema. 11.- La compañía Simco ha diseñado un nuevo disco duro con capacidad superior a los vistos hasta ahora. La programación para manipular el disco duro, ha sido diseñada en forma orientada a objetos, es decir, visualizando el disco duro como un objeto. El disco estará constituido por directorios, donde cada directorio contiene una serie de objetos archivos. Adicionalmente se está diseñando el sistema operativo que manejará el disco, la permisología del disco, se controla por usuario, los cuales se definen por grupos donde cada grupo tiene accesos a diferentes directorios. Como parte del sistema operativo, se desea mantener una historia (log) de todos los accesos realizados al disco, los directorios y los archivos. Elabore el diagrama de clase que permita representar el nuevo disco, junto con el sistema operativo que la compañía Simco desea implementar. Vectores y Matrices 1.- Elabore un programa que construya un vector de N-casillas de números enteros y busque el mayor de los números contenidos en el vector. 2.- Elabore un programa, que reciba dos objetos matriz A y B, ambas cuadradas de dimensión 4 y calcule: a.- La suma de ambas matrices. b.- La multiplicación de ambas matrices. 3.- Elabore un programa, que construya un objeto polinomio. De tal manera que al dar los valores para evaluarlo, el programa permita: Evaluar el polinomio dado un valor de X. Imprimir el polinomio de la siguiente forma: p(x)= 3X4+4X2+6X8+9 4.- Hacer programa que trabaje con una matriz MAT de números float y devuelva un vector, en el cual se almacenen las sumas de cada diagonal de la matriz. Solamente se almacenarán la diagonal principal y las que se encuentran por encima de ella. 5.- Dada dos matrices A y B cuadradas, elabore los métodos que permitan multiplicar, sumar y restar matrices, y calcular matriz transpuesta. 6.- El máximo de un arreglo de una dimensión se calcula con dos reglas: Si el arreglo tiene un sólo elemento, entonces devuelve ese elemento. b) Sino, parte el arreglo por la mitad, y devuelve el máximo de las dos mitades. Elabore un metodo que dado un arreglo de una dimensión, devuelva la posición del máximo elemento según las reglas anteriores. 7.- Una matriz persimétrica es una matriz (nxn) que es simétrica alrededor de ambas diagonales. Por ejemplo: 1 4 2 6 2 0 1 5 2 0 7 9 12 9 7 8 2 5 1 8 2 4 2 6 1 Escriba método booleano que indique si una matriz es persimétrica. 8.- Una matriz esparcida es una matriz en la cual la mayoría de los elementos son 0. Es un desperdicio almacenar estas matrices completas puesto que muy pocos elementos contienen información significativa. Una forma eficiente de representar una matriz esparcida m x n es un arreglo k x 3, donde K es el número de elementos significativos (distintos de 0). En ese arreglo se almacena el índice de la fila, el índice de la columna y el valor de los elementos distintos a cero de la matriz original. Esto se denomina una representación reducida. Escriba un método que dada una matriz esparcida de dimensión m x n, genere la representación reducida de dicha matriz. 9.- Elabore un método que dado un objeto matriz de números enteros y un valor N recibidos como parámetros, genere un objeto vector que contenga aquellos números de la matriz múltiplos de N. El vector deberá contener los números de la matriz y las posiciones (I,J) donde se encuentran. Matriz Vector 3 4 6 7 14 12 9 8 15 17 23 43 18 34 51 67 Valor de N= 2 Valor 4 Pos I 0 Pos J 1 6 0 2 14 12 1 1 0 1 8 1 3 18 34 3 3 0 1 10.- Se tiene un objeto vector, donde se encuentran almacenadas letras del alfabeto con su correspondiente valor numérico. Elabore un método que reciba una cadena de caracteres y genere la suma, de los valores numéricos de cada letra dentro de la cadena. Vector ‘A’ ‘B’ ‘C’ .... ‘Z’ ‘a’ ‘b’ ‘c’ ... ‘z’ 52 45 22 ... 36 12 28 96 ... 74 Cadena= “Casa” Suma de valores numéricos = 63 11.- Dado un objeto vector, recibido como parámetro, el cuál contiene números enteros y posiciones (I , J) de una matriz. Genere el objeto matriz correspondiente, a partir de los datos del vector. Vector Valor 4 6 15 18 7 Pos I 0 0 1 1 1 Pos J 1 2 0 1 3 1 33 3 3 0 1 La matriz resultante es 0 4 6 15 18 7 0 0 0 1 33 0 0 0 0 0 12.- Dada una matriz nxn que contenga las distancias entre n ciudades, construya un método en Java que obtenga la distancia total de un recorrido, el cual es expresado por medio de una lista Simple de ciudades a recorrer. Distancias Caracas Maracay Valencia Carac as 0 120 200 Maracay Valencia 120 0 80 200 80 0 Si su método se denomina distancia, su comportamiento sería el siguiente: (distancia lista) donde lista es una referencia a la siguiente lista: caracas valencia maracay valencia caracas debe devolver como resultado de 560 Listas 1.- Dada una lista simple, se desea crear una nueva lista con los elementos en orden inverso. Utilice los metodos vistos en clase. (InsertarPrimero, InsertarFinal) 2.- Modifique la pregunta anterior para que a medida que va creando la lista nueva vaya destruyendo la lista original. 3.- Dadas dos listas simples cuyos elementos están ordenados ascendentemente, se desea crear una nueva lista con los elementos de estas dos, tambien ordenada ascendentemente. 4.-Dadas tres listas simples, crear una nueva lista que contenga la suma de los elementos de las tres listas uno a uno, es decir los tres primeros, los tres segundos y asi sucesivamente. Las listas no necesariamente son de la misma longitud. 5.- Dada una lista simple y un numero entero, se desea crear una nueva lista solo con aquellos elementos que son multiplos de ese numero dado. 6.- Dada una lista, y un numero entero, cambiar todas las ocurrencias de ese numero por el valor -999. 7.- Dada una lista, un valor entero N y una valor entero V. Cambiar todas las ocurrencias del valor V en la lista por el valor N. No debe crear una nueva lista solo trabajar sobre la misma lista original 8.- Dado el código de lista simple visto en clase. Escriba un método que permita Insertar un nuevo nodo dos posiciones después de una posición dada. 9.- Dada una lista doble ordenada ascendentemente, escriba un método que permita insertar un nuevo nodo manteniendo el orden. 10.- El servicio de reparación de aire acondicionado Acme, tiene una lista circular doble enlace, de los técnicos que reparan los equipos en las oficinas, cada técnico puede tener hasta un máximo de ocho servicios al día. Adicionalmente, se tiene una lista de las llamadas que han realizado las compañías durante el día, solicitando la reparación de equipos. De los datos de la reparación, se conoce, el nombre de la compañía, tipo de equipo y dirección. Se desea asignar a cada técnico las visitas que deberá realizar en un día, si un técnico llega a su máximo de visitas, se deberá pasar al siguiente técnico a asignarle visitas. Se desea implementar un programa en Java, que dada las dos listas, asigne a cada reparación un técnico. Implemente los métodos adicionales que usted considere necesarios en las estructuras de datos, así como el programa principal en Java. 11.- Responda las siguientes preguntas: a. ¿Cuáles operaciones de una lista enlazada están negadas en una pila y por qué? b. Cuales son las operaciones básicas de una cola. Explíquelas. Explique en forma grafica la operación de eliminar un nodo de una posición X en una lista doble. 12.- En el Teatro Nacional nos piden un sistema que permita llevar el control para la venta de entradas de las diferentes funciones de un espectáculo determinado. Las funciones se diferencian por la fecha (solo hay una función diaria). Para cada función se debe llevar el control de los asientos comprados. Se debe poder listar en cualquier momento los nombres de las personas que han comprado entrada para una función determinada. Igualmente se debe poder calcular el numero de asientos disponibles en cada función. Usted deberá diseñar las Estructuras de Datos necesarias para resolver este problema. Deberá expresar su solución en forma grafica. Así mismo deberá explicar la estructura de los diferentes nodos que formen las estructuras a utilizar. 13.- El departamento de atención al cliente de la compañía de software MICROEVILSOFT posee una lista circular doblemente enlazada con todos los técnicos que trabajan en atención al cliente. El departamento de atención al cliente está dividido en grupos según los diferentes programas a los cuales se le presta soporte técnico, estos grupos son: Procesador de Palabras, Hoja de Calculo, Presentación, Base de Datos, Sistema Operativo y Juegos. Cada grupo posee un mínimo de dos empleados. Cada soporte técnico de MICROEVILSOFT está obligado a atender un máximo de 8 clientes diarios. Si un técnico no está disponible al momento, este está en la obligación de devolver la llamada al cliente para prestarle sus servicios. La compañía posee una lista ordenada por hora de todas las llamadas que se han hecho al departamento de atención al cliente durante el día. De estas llamadas, se conocen los siguientes datos: el nombre de la persona, el número de teléfono donde encontrarlo, el programa de software con problemas y el problema que tiene con dicho software. Se desea implementar un programa en Java el cual dada las dos listas, le asigne llamadas a los técnicos correspondientes, tomando en cuenta la cantidad de clientes diarios que puede atender cada técnico. 14.- La compañía 3COM, que produce dispositivos y accesorios para computadoras, ha diseñado un nuevo disco duro con capacidad superior a los vistos hasta ahora. La programación para manipular el disco duro, ha sido diseñada en forma orientada a objetos, es decir, visualizando el disco duro como un objeto con su capacidad total y directorios que lo componen. Además, dicho disco duro esta constituido por objetos directorios los cuales a su vez contienen un registro de los archivos y directorios que los componen, cada uno con su capacidad donde cada directorio contendrá una serie de objetos archivos. Diseñe y dibuje en forma gráfica la estructura de datos necesaria para resolver el problema en forma eficiente, justifique su respuesta. 15.- El Museo López y Toro, permite una visita diaria hasta un máximo de 8 personas. Diariamente se hacen reservaciones para la visita al museo. Los días de visita del museo, se encuentran en una lista circular de días y las personas que solicitan visitar al museo, se encuentran en otra lista de solicitud con los datos nombre, cedula y teléfono. Se desea implementar un programa en Java, que dada las dos listas, asigne a cada día, las personas que podrán visitar el museo. Implemente los métodos adicionales que usted considere necesarios en las estructuras de datos vistas, así como el programa principal en Java. 16.- La siguiente estructura es una forma de representar matrices NxM Se desea que usted: a.- Escriba la clase CNodo para este tipo de estructura (3 puntos). b.- Escriba la definición de la nueva clase Cmatriz y programe únicamente el método matrizView. 17.- El profesor de estructura de datos desea elaborar un quiz, donde cada estudiante tenga una pregunta diferente, para ello a creado una lista con la información de los estudiantes y una pila de preguntas a realizar, las cuales pueden estar repetidas. Se desea formar una estructura nueva donde aparezcan los estudiantes con una pregunta asignada, cada estudiante deberá tener una pregunta diferente. Pilas y Colas 1.- Se tienen dos pilas (stacks) que contienen números enteros; la primera ordenada ascendentemente desde el tope hacia el fondo, y la segunda ordenada descendentemente desde el tope hacia el fondo. Si se cuenta con la clase CPila que contiene las operaciones básicas definidas para pilas, elabore un programa que fusione ambas pilas en una tercera ordenada descendentemente desde el tope hacia el fondo. NOTA: no debe utilizar pilas auxiliares. 2.- Decimos que una pila P es un sombrero de otra pila Q, si todos los elementos de P están en Q, en el mismo orden, y en las posiciones más próximas a la cima. La pila nula se considera un sombrero de cualquier pila. Por ejemplo, en la siguiente figura, la pila A es un sombrero de la pila B, pero no de la pila C. Escribir una función recursiva que dado dos pilas de números enteros, verifique si la primera es sombrero de la segunda. 3.- Simular una pila utilizando dos colas. 4.- Simular una cola usando dos pilas. 5.- Simule dos pilas usando un arreglo. La primera pila se llena de la posición 0 hacia tamanoMax y la segunda pila se llena de la posición tamanoMax hacia 0. Donde tamanoMax es el numero de elementos que puede contener el arreglo. Usted debe controlar que el arreglo no se llene es decir que no haya ?overflow?. 6.- Crear el codigo necesario para trabajar las estructuras de dato Pila y Cola como extensión de un vector en lugar de una lista simple 7.- Se tiene una lista con los datos de los clientes de una compañía de telefonía celular, los cuales pueden aparecer repetidos en la lista, si tienen registrado más de un número telefónico. La compañía para su próximo aniversario desea enviar un regalo a sus clientes, sin repetir regalos a un mismo cliente. Los regalos se encuentran almacenados en una pila de regalos. Se desea elaborar un programa en Java que permita generar una nueva estructura donde los clientes aparezcan sólo una vez con sus regalos asignados. 8.- Hacer un método que reciba una lista y una pila, el método deberá modificar la lista original, eliminando las posiciones indicadas por cada nodo de la pila. 9.- Una matriz de M-columnas puede ser vista como M-pilas consecutivas, donde la operación push de colocar un elemento en la pila, debería recibir el elemento a colocar y la identificación de la pila j donde se desea introducir el elemento. Elabore la clase Pila en java que permita implementar la operación push de una sucesión de Mpilas en un objeto matriz NxM. 10.- Responda las siguientes preguntas: ¿Cuáles operaciones de una lista enlazada están negadas en una pila y por qué? b. Cuales son las operaciones básicas de una cola. Explíquelas. a. 11.- Escribir un programa que invierta el contenido de una cola. Usted puede utilizar estructuras de datos auxiliares para hacerlo. 12.- Se tiene una almacén donde se encuentran las neveras fabricadas por una planta, las primeras neveras que fueron fabricadas están de últimas, dentro del almacén y las últimas neveras fabricadas, aparecen de primeras dentro del almacén. Los datos de cada nevera son código y descripción. El almacén dispone de una sola puerta, por donde entran las neveras a ser almacenadas y salen las neveras que se van a distribuir a las tiendas. Adicionalmente, se tiene una cola de solicitudes de neveras realizadas por las tiendas, donde aparece el nombre de la tienda y la cantidad solicitada de neveras, elabore un método que permita asignar a cada tienda las neveras, generando una nueva estructura que contenga la tienda y el código de las neveras asignadas. 13.- Responda las siguientes preguntas brevemente su respuesta en cada caso: y justifique a. De las siguientes estructuras cuál es mas eficiente para almacenar la información del último censo de cada estado de Venezuela. i. Una pila ii. Una cola iii. Una lista simple iv. Un vector b. ¿En que casos utilizaría la estructura de tipo cola, de un ejemplo? 14.- Una matriz de N-filas puede ser vista como N-colas consecutivas, donde la operación encolar de introducir un elemento en la cola, debería recibir el elemento a introducir y el identificador de la cola i de donde se desea meter el elemento. Elabore un método que permita implementar la operación encolar de una sucesión de Ncolas en un objeto matriz NxM. 15. Implementar un método que simule la calculadora HP para las operaciones matemáticas. Utilizando una pila (stack) 16. Implemente el objeto Cola en Java de manera que reciba los datos de personas en una cola de un banco, esto es, nombre y conjunto de transacciones a realizar. Se requiere conocer el tiempo estimado de permanencia de cualquier persona el la cola, si se conocen los tiempos estimados para cada tipo de transacción: Retiro 4 min Depósito 2 min Consulta 3.5 min Actualización 5 min Pagos 2 min 17. Hacer un método que reciba una lista y una pila, el método deberá modificar la lista original, eliminando las posiciones indicadas por cada nodo de la pila. Lista -> 2 ->4 ->6 ->8 ->9 ->3 Pila -> 2 6 Lista nueva-> 2 ->6 ->8 ->9 18. Dada una PILA y una COLA que contienen Letras almacenadas, las cuales se pueden repetir, elabore un método en Java, que genere una lista con la información de ambas, pero sin repetir las letras. 19. Elabore un método en Java que verifique si una pila A está contenida en una pila B. Una pila A está contenida en una pila B, si todos los elementos de la pila A están en la pila B. 20. Los compiladores generalmente usan pilas para facilitar el proceso de evaluar expresiones y generar código en lenguaje de maquina. Las expresiones aritméticas generalmente se escriben en notación infija, es decir operando operador operando Por ejemplo: 2 + 7 ; 16 / 4 ; 2 * 3 etc. Los computadores prefieren la notación postfija, es decir operando operando… operador Ejemplo: 2 7 + ; 16 4 / ; 2 3 * etc. Para evaluar una expresión aritmética el computador deberá primero convertir la expresión de infija a postfija y luego proceder a evaluar la expresión. En ambos procesos utilizara una pila para hacerlo. Escriba un programa en Java que reciba una expresión como un String, y luego utilizando la estructura de datos Pila, primero convierta la expresión a postfija y la muestre por pantalla, y luego proceda a evaluar la expresión mostrando el resultado final. Nota: para hacer mas fácil la evaluación, considere solo los cuatro operadores básicos (+,-,*,/) y solo operandos de un solo digito. La separación entre ellos será de un solo espacio en blanco. Conjuntos (se pueden realizar con cualquier otra estructura dinámica) 1.- Se desea simular el juego del amigo secreto, se conocen los nombres de las personas que desean jugar . Se deberá colocar los nombres de las personas, en una bolsa, de la cuál se irán sacando uno a uno. Explique la estructura de datos que utilizaría para implementa el juego. Usted deberá leer los datos necesarios desde el teclado. Implemente el juego en un programa, donde, usted deberá crear la bolsa de las personas que participarán en el juego y asignar a cada persona un papelito, por supuesto, que deberá controlar que no le salga a una persona su nombre. Al final tendrá almacenada los nombres de cada persona y su amigo en una Estructura adecuada. Escriba el programa en Java para implementar esta asignación. Asuma la implementación de las estructuras vistas en las clases. 2.- Los profesores del departamento, han considerado crear una nueva forma de asignar las preguntas para el examen. Las preguntas del examen a realizar se encuentran en un conjunto donde aparece la descripción de la pregunta y la cantidad de estudiantes que la deberán contestar. Adicionalmente, antes de entrar al salón de clases, colocan a los estudiantes en un circulo y van sacando cada pregunta y asignándosela a los estudiantes. El proceso se termina cuando todas las preguntas son asignadas a los estudiantes. Programe el método necesario para asignar las preguntas a los estudiantes. Asuma la existencia de los constructores y selectores de las estructuras vistas en clase. 3.- Se desea simular la asignación de profesores a las materias, que se realiza cada inicio de semestre. Se deberán colocar en una bolsa las materias leídas por pantalla, y en otra bolsa los profesores que dictarán clases en el semestre, leídos de igual forma por pantalla, no podrá haber profesores ni materias repetidos. Luego se deberá asignar por cada profesor una materia y guardar dicha información en una estructura. Explique la estructura de datos que utilizaría para implementa la asignación e Implemente un programa en Java. Asuma la implementación de las estructuras vistas en clase. Arboles 1. Escriba un procedimiento llamado crecer que tome como argumento un árbol de número (representado por una lista) y devuelva el árbol original pero sustituyendo las hojas(n) por nodos que tengan como hoja izquierda n/2 (división entera) y como hoja derecha n/2 si n es par y (n mod 2) si n es impar. Debe retornar #f si el argumento no es un árbol o es un árbol, de un sólo nodo. 2. Elabore un método de que reciba una matriz de números y genere un árbol binario de búsqueda a partir de los elementos de la matriz. 3. Dos árboles binarios de búsquedas son similares, si ambos son vacíos ó si ambos no vacíos, tienen subárboles izquierdo y derecho similares. Elabore un método que permita indicar si dos árboles binarios de búsquedas son similares. 4. Dos árboles son isomórficos, si T1 puede ser transformado en T2, por el intercambio de algunos de los hijos de los dos árboles (no todos). Elabore un método que indique si dos árboles T1 y T2 son isomórficos.} 5. Escriba los métodos necesarios para determinar: La cantidad de nodos de un árbol binario La suma del contenido de todos los nodos en un árbol binario c. La profundidad del un árbol binario. a. b. 6. Escriba los métodos para determinar si un árbol binario es: a. b. c. Estrictamente binario Completo Incompleto 7. Elabore un método que dado un árbol binario de números y un número recibido como parámetro, permita podar el árbol, utilizando el siguiente criterio: Para aquellos nodos que son padre de hojas : · Si su contenido sea igual a número recibido como parámetro, se eliminan todos los hijos de éste. · de lo contrario, se evalúa si el nodo es par, en cuyo caso se elimina el hijo izquierdo y si es impar, el hijo derecho. Indique además, el orden de crecimiento en tiempo del método escrito por usted. 8. Elabore un método que reciba un árbol binario y una pila, de números (ambas estructuras se encuentran desordenadas) y genere un vector con los elementos de ambas estructuras en forma ordenada. Justifique el método de ordenamiento que utilizó e indique el orden de crecimiento en tiempo del mismo. 9. Elabore un método en Java que dado dos árboles binarios, permita determinar, si son similares. Es decir, si ambos están vacíos ó en caso de que no estén vacíos, si sus subárboles izquierdos son similares y sus subárboles derechos son similares. 10. Elabore un método en Java que dado un árbol binario de búsqueda, permita determinar si el árbol están correctamente formado. 11. Dado un árbol binario, elabore un método en java que permita calcular la cantidad de nodos hojas que contiene el árbol. Algoritmos de ordenamiento y búsqueda 1.- Escriba el algoritmo de Seleccion Sort recursivamente. 2.- Modifique el algoritmo de Inserción para que ordene el arreglo indirectamente. Esto requiere una arreglo que contiene los indices del arreglo que se desea ordenar. El algoritmo hace los cambios en el arreglo de indices y deja los datos originales sin modificar. 3.- Escriba el algoritmo de Inserción recursivamente. 4.- Modifique cada uno de los algoritmos vistos para que ejecuten el ordenamiento en orden decreciente (de mayor a menor) 5.- Modifique el algoritmo de la Burbuja para que se detenga en cuanto el arreglo esté completamente ordenado. 6.- Modifique el algoritmo QuickSort para que tome como pivote el ultimo elemento en lugar del primer elemento de la secuencia. 7.- Modifique el algoritmo QuickSort para que tome como pivote la mediana entre el primer, el del medio y el ultimo elemento en lugar del primer elemento de la susecuencia. 8.- Dado un vector cualquiera, que contiene objetos con distintos atributos, defina un método que implemente el Mergesort sobre el vector, para cualquiera de los atributos del mismo. El método debe aceptar como parámetros el vector, el número del atributo por el cual se quiere ordenar (clave) y el orden que se desea (ascendente o descendente). 9.- En cada una de las siguientes preguntas marque con una X la respuesta correcta. (4 ptos) A.- Los siguientes algoritmos se ejecutan con un orden O(n2) a.- BubbleSort, MergeSort e InsertionSort. b.- MergeSort, SelectionSort e InsertionSort c.- SelectionSort, BubbleSort e InsertionSort. d.- Todas las anteriores e.- Ninguna de las anteriores. B.- Los siguientes algoritmos se ejecutan con un orden O(nlogn) a.- MergeSort y ShellSort. b.- MergeSort y SelectionSort. c.- QuickSort e InsertioSort. d.- Todas las anteriores. e..- Ninguna de las anteriores. C.- Dada el siguiente arreglo: { 47 3 21 32 56 92} después de dos pasadas del algoritmo de ordenamiento, el arreglo ha quedado asi: { 3 21 47 32 56 92} ¿Qué algoritmo de ordenamiento se está utilizando? a.- BubbleSort b.- SelectionSort c.- InsertionSort. d.- Ninguno de los anteriores D.- Se tiene un arreglo con los siguientes elementos {3 13 7 26 44 } ¿Cuántas comparaciones y cuantos intercambios se requieren si se aplica el algoritmo BubbleSort? a.- 12 comparaciones y un intercambio b.- 11 comparaciones y un intercambio c.- 10 comparaciones y un intercambio d.- Ninguna de las anteriores. E.- Los siguientes algoritmos son naturalmente recursivos a.- SelectionSort y MergeSort b.- InsertionSort y QuickSort c.- QuickSort y MergeSort d.- Todas las anteriores e.- Ninguna de las anteriores F.- De los seis algoritmos de ordenamiento vistos cual es el mas lento? a.- InsertionSort b.- QuickSort c.- SelectionSort d.- Ninguno de los anteriores 10.- Escriba un método en Java para ejecutar el algoritmo de búsqueda binaria en forma recursiva . Escriba un método en Java para ejecutar el algoritmo de búsqueda binaria en forma no-recursiva. 11.- El algoritmo ShakerSort es el mismo que el de la Burbuja pero este alterna el proceso de “hacer flotar la burbuja” y o “hundirla”…. Escriba un método en Java para representar este algoritmo de manera que el arreglo al cual se le aplique quede ordenado en forma descendente (de mayor a menor). 12.- Explique el comportamiento de cada uno de los algoritmos Quicksort, Inserción, Selección, Burbuja, para los siguientes casos: Vector completamente desordenado. Vector ordenado con un solo elemento fuera de su lugar. Vector ordenado. 13.- Se tiene una matriz NxN de números y se desean ordenar las filas de la matriz, elabore un método que reciba la matriz y permita ordenar sus filas. ¿Cuál algoritmo utilizó y porque? Indique el orden de crecimiento del algoritmo programado. 14.- Responda las siguientes preguntas y justifique brevemente su respuesta en cada caso: a.- ¿Cuáles son las consideraciones mas importantes para seleccionar un método de ordenamiento? b.- ¿Cuáles son las ventajas y desventajas del Método de la Inserción? c.- Indique las acciones necesarias para ordenar la secuencia 20 52 45 35 15 80 76 25 utilizando el método de Selección. 15.- Se tienen tres listas doble enlace de los estudiantes de las tres secciones de estructura de datos, las tres listas se encuentran ordenadas por carnet. Elabore un método en Java que permita, crear una nueva lista de todos los estudiantes en las tres secciones, que se encuentre ordenada por carnet, deberá aplicar mergesort para crear la nueva lista ordenada. RETOS el método de 1.- Un triangulo rectangulo puede tener lados que sean enteros. El conjunto de tres valores enteros para los lados de un triangulo rectangulo(cateto1, cateto2, hipotenusa) es una tripleta pitagorica. Estos tres lados deben satisfacer la relacion de que la suma de los cuadrados de los dos catetos debe ser igual al cuadrado de la hipotenusa. Escriba un programa en Java que descubra todas las tripletas pitagoricas posibles de numeros entre 1 y 500. 2.- Escriba una aplicacion en Java que permita escribir la canción inglesa "Los doce dias de Navidad" ("The Twelve days of Christmas"). Esta cancion comienza con las palabras "En el primer dia de Navidad mi amada me regaló:......", en las estrofas 2 hasta la doce se deberá cambiar la palabra primero por segundo, tercero y asi sucesivamente.. Los regalos son en orden de aparicion: 1) Una perdiz en un peral 2) Dos tortolas 3) tres gallinas francesas 4) cuatro aves cantoras 5) cinco anillos de oro 6) seis gansos empollando 7) siete cisnes nadando 8) ocho campesinas ordeñando 9)nueves damas bailando 10)diez nobles brincando 11) once gaiteros tocando 12) doce tambores tamborileando. En la primera estrofa solo se agrega el regalo numero 1, en la segunda se agrega el regalo 2 y el 1; y asi sucesivamente. cabe destacar que en todas las estrofas menos la primera debe agregarse la conjuncion "y" de modo que diga "y una perdiz en un peral". 3.- La compañía Evencro, acaba de contratar para 8 funciones a un cantante de fama internacional, cada función la tiene almacenada en un vector, donde las casillas del vector contienen la cantidad de entradas a vender, la cantidad de entradas vendidas y una pila de asientos, con la fila y número del asiento. Las personas que desean comprar entradas, se encuentran almacenadas en una cola de personas, con su cedula, nombre, función a adquirir las entradas y cantidad de entradas. Las clases para el desarrollo del programa en Java se encuentran definidas con los siguientes atributos y métodos: class CVector <<atributos>> - CCasilla Vec[] <<métodos>> +CVector(int n) +getVector( ):CCasilla +setVector(CCasilla obj) +getLength( ):int class CCasilla <<atributos>> - int totalBoletos - int totalVendidos - CPilal pilaBoletos << métodos >> class CPilal <<atributos>> - CnodoP cabeza - CnodoP cola << métodos >> +CPilal( ) Class CnodoP <<atributos>> -int numeroFila -int numeroAsiento <<métodos>> +CnodoP( ) +CCasilla( ) +push(obj CnodoP) +pop( ): CnodoP +top( ) : CnodoP +getFila( ):int +getBoletos( ):int +getVendidos( ):int +getPilaBoletos( ): CPilal +pilaVacia( ):boolean class CColal <<atributos>> - CnodoC cabeza - CnodoC cola << métodos >> +CColal( ) Class CnodoC <<atributos>> -int cedula -String nombre -int cantEntradas -int numFunción class CListaSimple <<atributos>> - CnodoL cabeza - CnodoL cola << métodos >> +CListaSimple( ) +encolar(obj CnodoC) <<método>> +desencolar( ): CnodoC +primeroCola( ) : CnodoC +colaVacia( ): boolean +CnodoC( ) +insertarInicio(obj CnodoL) +eliminarInicio( ): CnodoL +insertarFinal(obj CnodoL) +eliminarFinal( ): CnodoL +eliminarPos( ): CnodoL +getCedula( ):int +getNombre( ):String +getEntradas( ):int +getFuncion( ):int +getAsiento( ):int Class CnodoL <<atributos>> -int cedula -String nombre -int numeroFila -int numeroAsiento -int numFunción <<métodos>> +CnodoL( ) +getCedula( ):int +getNombre( ):String +getFila( ):int +getAsiento( ):int +getFuncion( ):int class CSet <<atributos>> - CnodoS cabeza << métodos >> +CSet( ) +adjoin(obj CnodoS):boolean +empty( ): boolean +pick( ) : CnodoS Class CnodoS <<atributos>> -int numeroPremio -String DesPremio <<métodos>> +CnodoS( ) +getNumero( ):int +getPremio( ):String +residue( ):CnodoS +member(CnodoS):boolean Usted deberá realizar los métodos para: a.- Sacar a las personas de la cola y asignarles la cantidad de boletos que solicitan, esto se logra, sacando de la pila de la función correspondiente, tantos boletos como desean las personas y creando en una lista simple un nodo por cada boleto vendido, a una persona. b.- Elaborar un, método que elimine a todas las personas que se encuentran en la cola, solicitando boletos para una función agotada. El número de la función que se encuentra agotada es conocido. c.- Indicar la cantidad promedio de boletos vendidos para todas las funciones. d.- Si se tiene un conjunto de premios, donde sne encuentran almacenados un número de premio y la descripción del mismo. Elabore un método para sacar del conjunto todos los premios y asignarlos a las personas que ya han comprado boletos (las cuales se encuentra en la lista de boletos vendidos). Las personas que ganan el premio son buscadas con el número del premio que representa la posición dentro de la lista.