Duraci on: 2 horas
Transcripción
Duraci on: 2 horas
Universitat Politecnica de Catalunya Facultat d'Informatica de Barcelona Apellidos, Nombre D.N.I. Titulaci on: Ing. Tec. en Informatica de Sistemas Asignatura: Programacion de Sistemas Duraci on: 2 horas Curso: Q1 2007{2008 (Parcial) Fecha: 8 de noviembre de 2007 1. (2 puntos; aprox. 20 minutos) Escribe la declaracion de la clase polinomio (el .hpp) de manera que los siguientes ejemplos de uso sean correctos: class error { ... }; polinomio p; // c r e a e l p o l i n o m i o p x // c r e a e l p o l i n o m i o q x ( )=0 ( ) = 3x2 x+8 polinomio q = polinomio (3 ,2)+ polinomio ( -1 ,1)+ polinomio (8); // ( ) = 5x3 + q (x) r x polinomio r = polinomio (5 ,3) + q; if (p. es_nulo ()) { // s i p e s e l p o l i n o m i o n u l o . . . } // e v a l u a q en x = 1:5 double z = q ( -1.5); p = q. diff (); // c a l c u l a l a d e r i v a d a : ( ) = q 0 (x) = 6x p x 1 // c a l c u l a l a s e g u n d a d e r i v a d a : // p(x) = r00 (x) = 30x + 6 p = r. diff (2); // m u l t i p l i c a r = r * polinomio (2.3 ,1); r p o r e l p o l i n o m i o 2 :3 x // r [ i ] = c o e f i c i e n t e de xi en r(x) ; // d e v u e l v e 0 . 0 s i i > g r a d o de r y l a n z a // una e x c e p c i o n de l a c l a s e ' e r r o r ' s i i < 0 if (r [2] > 0.0) { ... } // d e v u e l v e e l g r a d o d e l p o l i n o m i o int g = p. grado (); 1 Razona tu respuesta. SOLUCION: 2 Apellidos, Nombre D.N.I. 2. (2 puntos; aprox. 20 minutos) Tenemos las dos siguientes funciones: int f( int A [] , int i , int j) { if (i == j) return A[i ]; if (i > j) return - INFINITO ; int m = (i + j) / 2; int mx1 = f(A , i , m ); int mx2 = f(A , m +1 , j ); if ( mx1 > mx2 ) return mx1 ; else return mx2 ; } int g( int A [] , int i , int j) { if (i >= j) return int n = j - i + 1; int mx = f(A , i , j ); if ( mx % 2 == 0) { g(A , i , i + n /4 -1); g(A , i+n /2 , i +3* n /4 -1); } else { g(A , i+n /4 , i + n /2 -1); g(A , i +3* n /4 , j ); } } >Cual es el coste en caso peor de la funcion g cuando le damos un subvector con n = j i + 1 elementos? Razona tu respuesta. SOLUCION: 3 Apellidos, Nombre (Continuad respondiendo aqu la Pregunta 2.) 4 D.N.I. Apellidos, Nombre D.N.I. 3. (3 puntos; aprox. 40 minuts) Tenemos una clase arbol con las siguientes operaciones: class arbol { public : ... void pintar_raiz ( color c ); arbol primer_hijo () const ; arbol siguiente_hermano () const ; bool existe_primer_hijo () const ; bool existe_sig_hermano () const ; ... } y una lista encadenada simple, cuyos nodos se declaran as: struct nodo { color c; nodo * sig ; }; Implementa en C++ una funcion pinta void pinta ( arbol & a , nodo * L ); que dado un arbol y un puntero al primer nodo de una lista no vaca, recorre el arbol en preorden y pinta los nodos del arbol usando sucesivamente los colores de la lista; si la lista tiene menos nodos que el arbol se usan cclicamente. Puedes implementar funciones auxiliares si lo consideras necesario. El coste del algoritmo ha de ser O(n + m), donde n es el n umero de nodos del arbol, y m la longitud de la lista. Razona tu respuesta. Por ejemplo, si L = [R; A; A; V ] y el arbol es el que se muestra a la izquierda, el resultado es el arbol de la derecha: pinta(A, L) R A V A= A R R A A V 5 A A SOLUCION: 6 Apellidos, Nombre (Continuad respondiendo aqu la Pregunta 3.) 7 D.N.I. Apellidos, Nombre D.N.I. 4. (3 puntos; aprox. 40 minuts) Dada la siguiente declaracion: template < typename T > class lista { public : ... void shake ( int k ); ... private : struct nodo { T info ; nodo * sig ; }; nodo * primero ; // a p u n t a a l p r i m e r nodo de l a l i s t a // e n c a d e n a d a s i m p l e , s i n c e n t i n e l a // n i f a n t a s m a } implementa el metodo shake, que aplica una permutacion cclica a cada grupo de k > 0 elementos consecutivos, hasta que queden menos de k elementos en la lista. Por ejemplo, si L = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14] y k = 3, entonces L.shake(k) modica el valor de L 0 L convirtiendola en = [4; 1; 2; 3; 8; 5; 6; 7; 12; 9; 10; 11; 13; 14]: El coste del algoritmo ha de ser O(n), siendo SOLUCION: 8 n la longitud de la lista. Apellidos, Nombre (Continuad respondiendo aqu la Pregunta 4.) 9 D.N.I.