Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Septiembre 2004
Solución:
(b) c l a s s j u g a d o r
{ unsigned c a s i l l a ;
unsigned dado ;
public :
j u g a d o r ( unsigned c =0 , unsigned d )
{ c a s i l l a =c ; dado=d ; }
void mo str a r ( )
{ cout<<” C a s i l l a : ”<<c ; cout<<” dado : ”<<d ; }
movimiento ( i nt v ) ;
};
main ( )
{
Página 1 de 7
Exámen de LP. Septiembre 2004
jugador vecto r [ 3 ] ;
cout<<” C a s i l l a d e l pr imer j u g a d o r ”<<v e c t o r [ 0 ] . c a s i l l a ;
jugador ∗ j1 (3 , 4 ) ;
j1 −>mo str a r ( ) ; }
Solución:
2. (1 punto) Implementa un programa que contenga una función (pares) a la que se le pasa una cadena de caracteres
previamente leı́da desde el teclado, y devuelva otra cadena que contenga solo los caracteres que se encuentran
en posiciones con ı́ndice par dentro de la cadena aceptada. Para realizar dicho programa no se puede usar las
funciones predefinidas para cadenas (strlen, strcmp, etc). Se supone que el tamaño máximo de la cadena de
caracteres es de 79, y que debe ser tratada como un vector de caracteres.
Solución:
3. (2 puntos) Se desea informatizar la gestión de los pedidos de un centro comercial por parte del almacén del
mismo. Concretamente de cada pedido es necesario tratar la siguiente información:
identificador del pedido-tienda (esta compuesto por el identificador de la tienda que son tres caracteres y el
identificador propio del pedido que es un número entero)
dirección del cliente (nombre y apellidos, calle y número),
Página 2 de 7
Exámen de LP. Septiembre 2004
Solución:
void a c t u a l i z a r f i c h e r o ( ) {
f s t r e a m almacen ;
almacen . open ( ” almacen . dat ” , i o s : : i n | i o s : : out | i o s : : b i n a r y ) ;
Pedido pedido ;
str ea mpo s a c t u a l ;
a c t u a l = almacen . t e l l g ( ) ;
almacen . r ea d ( ( char∗)& pedido , s i z e o f ( Pedido ) ) ;
while ( ! almacen . e o f ( ) ) {
i f ( ! ( pedido . pagado ) && ( pedido . t r a t a m i e n t o == f r a g i l | | pedido . t r a t a m i e n t o == m u y
pedido . impo r te += pedido . impo r te ∗ 0 . 1 ;
almacen . s e e k p ( a c t u a l ) ;
almacen . w r i t e ( ( char ∗)& pedido , s i z e o f ( Pedido ) ) ;
}
a c t u a l = almacen . t e l l g ( ) ;
Página 3 de 7
Exámen de LP. Septiembre 2004
almacen . c l o s e ( ) ;
}
void m o s t r a r f i c h e r o ( ) {
f s t r e a m almacen ;
almacen . open ( ” almacen . dat ” , i o s : : i n | i o s : : b i n a r y ) ;
Pedido pedido ;
str ea mpo s a c t u a l ;
almacen . r ea d ( ( char∗)& pedido , s i z e o f ( Pedido ) ) ;
while ( ! almacen . e o f ( ) ) {
Página 4 de 7
Exámen de LP. Septiembre 2004
co ut << ” t r a t a m i e n t o : ” ;
switch ( pedido . t r a t a m i e n t o ) {
case m u y f r a g i l : co ut << ”muy f r a g i l ” ; break ;
case f r a g i l : co ut << ” f r a g i l ” ; break ;
case normal : co ut << ” normal ” ; break ;
case duro : co ut << ” duro ” ; break ;
}
co ut << e n d l ;
}
i nt main ( ) {
crearfichero ();
mostrarfichero ( ) ;
actualizarfichero ();
mostrarfichero ( ) ;
}
4. (3 puntos) Implementa la clase Fecha para que la siguiente secuencia de instrucciones sea posible.
Fecha f e c h a a l t a , hoy ( 1 7 , 9 , 2 0 0 4 ) ;
o f s t r e a m f l u j o ( ” Vida La bo r a l . t x t ” ) ;
i nt n u m e r o d i a s ;
c i n >>f e c h a a l t a ;
i f ( f e c h a a l t a >hoy ) n u m e r o d i a s=f e c h a a l t a −hoy ;
f l u j o <<f e c h a a l t a <<ends<<hoy<<ends<<e n d l ;
Solución:
Página 5 de 7
Exámen de LP. Septiembre 2004
public :
Fecha ( ) ;
Fecha ( i nt dia , i nt mes , i nt anno ) ;
bool operator >(Fecha & f e c h a ) ;
i nt operator −(Fecha & f e c h a ) ;
Fecha : : Fecha ( )
: d i a ( 1 ) , mes ( 1 ) , anno ( 2 0 0 5 ) {
}
Fecha : : Fecha ( i nt dia , i nt mes , i nt anno )
: d i a ( d i a ) , mes ( mes ) , anno ( anno ) {
}
bool Fecha : : operator >(Fecha & f e c h a ) {
i f ( anno > f e c h a . anno ) return true ;
i f ( anno < f e c h a . anno ) return f a l s e ;
i f ( mes > f e c h a . mes ) return true ;
i f ( mes < f e c h a . mes ) return f a l s e ;
i f ( d i a > f e c h a . d i a ) return true ;
i f ( d i a < f e c h a . d i a ) return f a l s e ;
// e n t o n c e s son i g u a l e s
return f a l s e ;
}
i nt Fecha : : operator −(Fecha & f e c h a ) {
return ( ( Fecha : : anno − f e c h a . anno ) ∗ 365
+ ( Fecha : : mes − f e c h a . mes ) ∗ 31
+ ( Fecha : : d i a −f e c h a . d i a ) ) ;
}
Fecha & operator >>(i s t r e a m &in , Fecha &f e c h a ) {
i n >> f e c h a . d i a ;
i n >> f e c h a . mes ;
i n >> f e c h a . anno ;
return i n ;
}
o str ea m & operator << ( o str ea m &out , Fecha &f e c h a ) {
out << f e c h a . d i a << ” /” << f e c h a . mes << ” / ” << f e c h a . anno ;
return out ;
}
Añadir a la definición de la clase Tvector una función para contar cuantas veces aparece un determinado elemento
en el vector entre dos posiciones determinadas. Implementar dicha función.
Página 6 de 7
Exámen de LP. Septiembre 2004
Solución:
Página 7 de 7