materias:75:41:final_mandrafina_20050224_1
Tabla de Contenidos

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)

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:

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