Cátedra: Wachenchauzer
Fecha: Primera Oportunidad - (Segundo Cuatrimestre) 2012
Día: 28/09/2012
Resolvé los siguientes problemas en forma clara y legible, respetando sangrías e incluyendo la documentación necesaria. Si te parece que los comentarios no son suficientemente explicativos, podés agregar una descripción del funcionamiento del código. Podés escribir tantas funciones auxiliares como creas necesarias.
Dado un TDA ListaEnlazada con las siguientes definiciones de tipos:
typedef struct nodo { struct nodo *siguiente; int valor; /* El dato del nodo es int */ } nodo_t; typedef struct lista { nodo_t *primero; nodo_t *ultimo: } lista_t;
a) Implementar una nueva primitiva “lista_map” que reciba como primer parámetro un puntero a una función f (que tome y devuelva un número entero), y como segundo parámetro un puntero a lista_t. lista_map debe reemplazar cada uno de los valores de la lista por el resultado de aplicar la función f a dichos valores.
b) Muestre un ejemplo de invocación a la primitiva lista_map con una función que eleve al cuadrado.
Escribir una función que reciba una pila y un parámetro n con la cantidad de elementos en la pila y la “parta” en dos: la que es recibida por parámetro contendrá la primera mitad (elementos de 0 a n/2-1), y la pila devuelta por la función tendrá los elementos de n/2 a n-1, manteniendo el orden de la pila original. (Se pueden usar las estructuras auxiliares que se crean convenientes).
Escribir una función que reciba dos números naturales, y devuelva true si los dos números son consecutivos en la sucesión de Fibonacci, o false en el caso de que no lo sean. La sucesión de Fibonacci está definida como: F(0) = 0, F(1) = 1 y F(n) = F(n-1) + F(n-2). ¿De qué orden es la solución propuesta? ¿Se puede encontrar una solución más eficiente? ¿Cómo?