jueves, 5 de junio de 2014

Ayudita TP2

Les dejo una ayuda para el punto 5 del TP2, además de los datos de prueba de biblioteca que les dejé la otra vez. Si encuentran errores pueden dejar comentarios o avisarme por mail.


a) Recuerden que nbiblioteca (definido en biblioteca_borrador.py) es un nodo de árbol. En el punto 1a se define la función dato. Usándola obtenemos el dato relacionado al nodo, que es un objeto de tipo elementoBiblioteca. La clase elementoBiblioteca es muy sencilla, se puede consultar directamente su método texto.

b) Se puede usar la siguiente función. ¿Qué parámetro le pasaría?

def contarLibros(nodo):
        if(nodo.dato().tipo()=='L'):
                c = 1
        else:
                c = 0
        p = nodo.hijoMI()
        while(p):
                c = c + contarLibros(p)
                p = nodo.hermanoDerecho(p)
        return c

c) Dado que no contamos con un método de eliminación simple (que elimine todo el subárbol), limítese a mencionar las dos operaciones que debería realizar una función mover(libro, origen, destino).

d) Podemos contar la cantidad total de capítulos con una función muy parecida a la del punto b y luego dividirla por la cantidad de libros.

e) Se puede usar la siguiente función:

def medirTextoYTitulos(nodo, enLibro=False):
        """
        Mide la longitud del texto de los parrafos y los
        titulos. El parametro enLibro debe ser True solo
        si el nodo esta dentro de un libro
        """
        if(nodo.dato().tipo()=='L'):
                enLibro = True
        if enLibro:
                c = len(nodo.dato().texto())
        else:
                c = 0
        p = nodo.hijoMI()
        while(p):
                c = c + medirTextoYTitulos(p, enLibro)
                p = nodo.hermanoDerecho(p)
        return c


y una variante de la siguiente:

def medirLibros(nodo):
        if(nodo.dato().tipo()=='L'):
                print " ", nodo.dato().texto(), medirTextoYTitulos(nodo)
        p = nodo.hijoMI()
        while(p):
                medirLibros(p)
                p = nodo.hermanoDerecho(p)
        return c


f) Intente con lo siguiente.

def buscarLibro(buscarDesde, libro, camino=''):
        nodo = buscarDesde
        if(nodo.dato().tipo()=='L'):
                if nodo.dato().texto() == libro.texto():
                        return camino
                else:
                        return None
        p = nodo.hijoMI()
        while(p):
                c = camino + '.' + buscarDesde.dato().texto()
                c = buscarLibro(p, libro, c)
                if c:
                        return c
                p = nodo.hermanoDerecho(p)
        return None


g) medirTextoYTitulos puede contar la cantidad de texto de un subárbol. Debería hacer una variante para que cuente solo los párrafos.

h) Es casi igual al punto g.

i) Usamos una estrategia similar a los anteriores, solo que no continuamos la recursión una vez encontrada una sección.

def seccionesPrimerNivel(nodo):
        if(nodo.dato().tipo()=='S'):
                return 1
        p = nodo.hijoMI()
        c = 0
        while(p):
                c = c + seccionesPrimerNivel(p)
                p = nodo.hermanoDerecho(p)
        return c

No hay comentarios.:

Publicar un comentario