Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Primer Parcial
19 de Enero de 2009
1 (1.0 puntos) Un alumno diseña la clase Tiempo, que se muestra parcialmente a continuación,
para ası́ poder gestionar citas de un dı́a. Para representar un instante de tiempo del dı́a, se utiliza
un único valor numérico que representa la cantidad de segundos transcurridos desde las 00:00
horas de ese dı́a.
Esta clase trabaja exclusivamente con segundos, por lo que convierte previamente el tiempo en
horas, minutos y segundos, al número total de segundos.
// F i c h e r o Tiempo . h
#i n c l u d e <i o s t r e a m >
#i n c l u d e < c s t d l i b >
c l a s s Tiempo {
public :
Tiempo & Tiempo ( i n t h=0, i n t m=0, i n t s =0) ;
Tiempo ( const Tiempo & d e r ) ;
˜ Tiempo ( ) ;
Tiempo & o p e r a t o r =( const Tiempo & d e r ) ;
Tiempo o p e r a t o r +( const Tiempo & d e r ) const ;
bool operator <( const Tiempo &d e r ) ;
.....
private :
int segundos ;
};
// F i c h e r o Tiempo . c++
Tiempo & Tiempo : : Tiempo ( i n t h , i n t m, i n t s ) {
i f ( h < 0 | | h > 24 | | m < 0 | | 60 <= m | | s < 0 | | 60 <= s ) {
c e r r << " Parametros erroneos para un objeto Tiempo ." << e n d l ;
e x i t ( EXIT FAILURE ) ;
}
s e g u n d o s = h * 60 * 60 + m* 60 + s ;
}
Tiempo : : ˜ Tiempo ( ) {
d e l e t e &s e g u n d o s ;
}
1
Tiempo & Tiempo : : o p e r a t o r =( const Tiempo & d e r ) {
i f ( t h i s != &d e r ) {
segundos = der . segundos ;
}
return (* t h i s ) ;
}
En esta definición e implementación existen errores y elementos que son innecesarios. Corrige
los errores que encuentres e indica qué elementos son innecesarios para la clase Tiempo.
2 (1.0 puntos) Una matriz triangular inferior es un tipo especial de matriz cuadrada cuyos
elementos por encima de la diagonal son ceros. Recuerda que una matriz cuadrada tiene el
mismo número de filas que de columnas. Por ejemplo, para n = 4 tendrı́amos la siguiente matriz
triangular inferior:
a11 0 0 0
a21 a22 0 0
A=
a31 a32 a33 0
a41 a42 a43 a44
Para representar en C++ este tipo de estructuras se utiliza a menudo una estrategia consistente
en almacenar cada fila en un vector nativo de C dinámico de forma que los ceros del triangulo
superior no se almacenan. La matriz A del ejemplo anterior, se representarı́a ası́:
elementos
a11
Declara en C++ la clase MatrizTriangularInferior con elementos de tipo entero, de tal man-
era que se utilice dicha estrategia, y declara e implementa un constructor que admita como
parámetro la talla n de la matriz (su número de filas o de columnas). No debes declarar ni
implementar ninguna otra función de la clase.
2
3 (1.75 puntos) En algunas aplicaciones que utilizan colas para la gestión de procesos o usuarios
es necesario aplicar algunas acciones para penalizar el orden de los elementos en una cola. Por
ejemplo, los sistemas que gestionan el acceso a programas vacacionales de ciertos colectivos
utilizan colas que tienen en cuenta el orden de llegada de las peticiones, pero, además, penalizan a
aquellos usuarios que ya han disfrutado de algún programa vacacional con anterioridad colocando
su petición al final de la cola.
a) Implementa el método Penaliza de la clase ColaE vista en teorı́a, basada en una lista
enlazada de nodos y cuya declaración debe ser:
v o i d ColaE : : P e n a l i z a ( const TBCE & e l ) ;
4 (1.00 puntos) Dada una pila de enteros, desarrolla una función que separe los números positivos
(el cero incluido) de los números negativos. La función devolverá una nueva pila con los números
negativos, dejando los positivos en la pila de entrada. Además, en las dos pilas resultantes los
números deben aparecer con el mismo orden que tenı́an en la pila de entrada. El siguiente ejemplo
muestra el contenido inicial de una pila, y el contenido que tendrán las dos pilas resultantes al
finalizar el algoritmo.
Pila1: 3 4 6 8 0 3
Cima
Pila1: 3 −1 4 6 −7 −2 8 0 3
Cima
Pila2: −1 −7 −2
Cima
3
6 (2.0 puntos) Podemos definir la igualdad elástica de listas de la siguiente manera: dos listas
son iguales elásticamente si tienen el mismo conjunto de valores diferentes y estos aparecen en
el mismo orden relativo (de izquierda a derecha) aunque el número de ocurrencias de cada valor
sea distinto. Por ejemplo, las las listas L1 , L2 , L3 y L4 son iguales elásticamente entre ellas, pero
L5 y L6 no lo son entre ellas ni con las anteriores.
L1 = (7, 7, 7, 2, 2, 5, 0, 0, 0, 0, 6, 6) L2 = (7, 2, 2, 2, 2, 5, 5, 5, 0, 0, 6, 6, 6)
L3 = (7, 7, 7, 7, 2, 2, 2, 2, 2, 5, 5, 5, 0, 0, 6, 6, 6) L4 = (7, 7, 2, 5, 5, 5, 0, 0, 0, 0, 0, 6)
L5 = (7, 7, 5, 2, 2, 2, 5, 5, 0, 0, 6, 6, 6) L6 = (7, 7, 2, 5, 5, 5, 0, 0, 0, 4, 4, 6, 6)
7 (1.5 puntos) La siguiente función invierte los elementos de una lista pasada como argumento
de entrada.
void I n v i e r t e L i s t a ( L i s t a & L) {
L i s t a aux ;
f o r ( i n t i=L . T a l l a ( ) ; i >= 0 ; i −−)
aux . I n s e r t a r ( L . O b t e n e r ( i ) , aux . T a l l a ( ) +1) ;
L=aux ;
}