====== Examen Final - 75.41. Algoritmos y Programación II ====== **Cátedra:** Mandrafina\\ **Fecha:** Segundo Cuatrimestre 2004\\ **Día:** 24/02/2005 Esta página está incompleta; podés ayudar completando el material. ===== Enunciado ===== ==== Punto I ==== Describa diferencias conceptuales entre as variables puntero y el resto de las variables. ==== Punto II ==== En un árbol B de orden **m** = 5 se insertan las claves 1,2,3,..., n.\\ (//Cantidad máxima de claves por página: **m - 1**, Cantidad mínima de claves por página: **m / 2**//) * ¿Qué claves originan la división de un nodo? * ¿Qué claves hacen que la altura del árbol crezca? Justificar. ==== Punto III ==== Describa cuatro elementos escenciales en el diseño de un Tipo de Dato Abstracto. ==== Punto IV ==== Insertar las siguientes Claves en el orden indicado en un Árbol AVL.\\ ( K, A, I, C, U, L, T, W, O, B ) ==== Punto V ==== Escribir la implementación de la primitiva void eliminarArbol(ArbolBinario& arbol) del TDA Árbol Binario en forma **recursiva**. ==== Punto VI ==== Escribir una función que determine si un Grafo dado es Orientado o no. (Para la implementación requerida un Grafo es No Orientado Si Existe una Arista (V,W) <=> (W,V)). ==== Punto VII ==== Explicar qué representa la referencia **//this//** en un **método**. Dar ejemplos. ==== Punto VIII ==== Explique los conceptos de **Redefinición** y **Polimorfismo**. ¿Qué relación tienen entre ellos y con la **Herencia**? ==== Punto IX ==== Implementar las clases que modelen una **Línea de Producción** en una fábrica, cumpliendo las características enumeradas a continuación. Una **Línea de Producción** consta de un conjunto de **Procesos** ordenados secuencialmente, por los que cada producto debe pasar. Cada **Proceso** está identificado por un nombre y posee una duración estimada [minutos]. Un **Proceso** sólo puede ser aplicado a un producto a la vez. La clase **Línea de Producción** debe proveer métodos que permitan: *conocer el tiempo total del proceso de fabricación para un producto, *agregar y retirar **Procesos**, *obtener el nombre del **Proceso** en el que se encuentra un producto, dado el tiempo transcurrido desde que ingresó a la **Línea de Producción**. ===== Resolución ===== ==== Punto VI ==== bool noOrientado(Grafo *unGrafo) { Vertice *verticeAProcesar; Arista *arista; Arista *aristaDelHijo; bool noOrientado; IteradorConjunto *itVertGraf = nuevoIterador(getConjuntoDeVertices(unGrafo)); verticeAProcesar = obtenerElemento(itVertGraf); while (!fin(itVertGraf) && noOrientado)) { IteradorConjunto *iteradorAristas = nuevoIterador(getAristasSalientes(vericeAProcesar)); while (!fin(iteradorAristas && noOrientaado)) { arista = obtenerElemento(iteradorAristas); IteradorConjunto *iteradorAristasDelHijo = nuevoIterador(getAristasSalientes(arista->verticeDestino)); noOrientado = false; while (!fin(iteradorAristasDelHijo) && !noOrientado) { aristaDelHijo = obtenerElemento(iteradorAristasDelHijo); if (aristaDelHijo->verticeDestino == verticeAProcesar && aristaDelHijo->info == arista->info) noOrientado = true; else irAlSiguiente(iteradorAristasDelHijo); } eliminarIterador(iteradorAristasDelHijo); irAlSiguiente(iteradorAristas); } eliminarIterador(iteradorAristas); irAlSiguiente(itVertGraf); } eliminarIterador(itVertGraf); return noOrientado; } ===== Discusión ===== Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.