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.

Documentos relacionados