====== 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á.