Você está na página 1de 71

Facultad de Ciencias Exactas, Ingeniera y Agrimensura

Departamento de Sistemas e Informtica


Escuela de Electrnica
Informtica II
Prctica N 4 Programacin orientada a objetos en C++
Problema 1:
Disee e implemente una clase Point3D para representar puntos del espacio y prubela
en una funcin main.
Point3D:
Campos:
Tres campos privados representando sus coordenadas: x, y, y z.
Constructores:
Point3D(): Asigna los valores (0, 0, 0) al punto.
Point3D(int x1, int y1, int z1).
Point3D(int low, int high): enera aleatoriamente las coordenadas en el
rango dado por los argumentos.
Acceso y actualiacin: !" en total#
!"todos de utilidad #p$blicos%:
boolean equals(Point3D q).
boolean equals(int x1, int y1, int z1).
void shiftX(int tx): despla$a coordenada x en tx.
void shift(int ty): despla$a la coordenada y en ty.
void shift!(int tz): %dem para la z.
Point3D t"anslate(int tx, int ty, int tz): despla$a el punto.
double distan#e$"igin(): retorna la distancia al origen.
double distan#e%oPoint(Point3D q): retorna la distancia al punto q.
int s#ala"P"odu#t(Point3D q): retorna el producto escalar del vector del
origen al punto q con el vector formado por el punto actual: (x1&x' ( y1&y' (
z1&z').
st"ing whi#h)*a#e(): &etorna un string 'ue indica si el punto est( en el
semiplano derec)o o i$'uierdo, arriba o aba*o y adelante o atr(s o si es el origen. +i
una coordenada es , puede pertenecer a cual'uiera de los dos semiespacios.
boolean in+ox (int xbox, int ybox, int zbox, int width, int
height, int de*th): retorna verdadero si el punto est( contenido en una ca*a
definida por el por el vrtice superior, i$'uierdo al frente (xbox, ybox, zbox) y
de un anc)o, altura y profundidad.
boolean in)*he"e (Point3D #ente", int "adius): retorna true si el punto
actual se encuentra contenido en la esfera determinada por su centro y radio.
Informtica II Programacin orientada a objetos en C++
Pg. 1
Debe definir cual'uier constante, variable o mtodo 'ue necesite para )acer lo siguiente en
main():
Declare referencias Point3D (*t1, *t', *t3).
-nstancie cada punto as%: *t1 iniciali$ado con el primer constructor, *t'
con el segundo y par(metros !.,, /0, 1#, pt3 iniciali$ado con el tercero y par(metros
(,, 1,).
2uestre los 3 puntos con un breve mensa*e.
3ambie las coordenadas del punto *t' a (-, ., /0) y muestre por
pantalla.
Desplace *t1 en 3, /3, 1 usando los s)ifts separados para cada coordenada,
muestre por pantalla y vea si el punto actuali$ado es igual a *t', usando el primer
mtodo de igualdad.
Desplace el *t1 en 0, 11, /13 usando t"anslate(2) y generando un
nuevo punto *t3 , muestre el nuevo *t3, c)e'uee si *t3 es igual a *t', usando el
segundo mtodo de igualdad.
3alcule y muestre la distancia de *t3 al origen.
3alcule y muestre la distancia entre *t1 y *t3.
3alcule y muestre el producto escalar de *t1 y *t'.
2uestre en 'u parte del espacio est(n *t1, *t' y *t3.
3)e'uee e imprima si *t' est( contenido en una ca*a de vrtice (/1', '0,
.) y anc)o, alto y profundidad de '3, 30 y 3, respectivamente.
3)e'uee e imprima si *t1 est( en una esfera con centro (1, ', ,) y radio
,0.
-mprima todos los campos de los tres puntos.
Solucin:
// archivo Point3D.h
using std::string;
class Point3D {
int x;
int y;
int z;
public:
Point3D (int x1, int y1, int z1: x(x1, y(y1, z(z1 {!
Point3D (: x(", y(", z(" {!
Point3D (int lo#, int high;
int g$t%( const;
int g$t&( const;
int g$t'( const;
void s$t% (int tx;
void s$t& (int ty;
void s$t' (int tz;
//string to(tring( const;
bool $)uals(Point3D ) const;
bool $)uals(int x1, int y1, int z1 const;
void shi*t%(int tx;
void shi*t&(int ty;
Informtica II Programacin orientada a objetos en C++
Pg. 2
void shi*t'(int tz;
void translat$ (int tx, int ty, int tz;
doubl$ distanc$+rigin( const;
doubl$ distanc$,oPoint(Point3D ) const;
int scalarProduct(Point3D ) const;
string Point3D::#hich(pac$( const;
bool Point3D::in-ox (int xbox, int ybox, int zbox,
int #idth, int h$ight, int d$pth const;
bool in(ph$r$(Point3D c$nt$r, int radius const;
!;
// archivo Point3D.cpp
.includ$ /iostr$a01
.includ$ /sstr$a01
.includ$ 2Point3D.h2
using std::cout;
using std::$ndl;
using std::stringstr$a0
;
Point3D::Point3D (int lo#, int high {
x 3 lo# 4 int((rand( / 567D896% : (high ; lo#;
y 3 lo# 4 int((rand( / 567D896% : (high ; lo#;
z 3 lo# 4 int((rand( / 567D896% : (high ; lo#;
!
int Point3D::g$t%( const { r$turn x; !
int Point3D::g$t&( const { r$turn y; !
int Point3D::g$t'( const { r$turn z; !
void Point3D::s$t% (int tx { x 3 tx; !
void Point3D::s$t& (int ty { y 3 ty; !
void Point3D::s$t' (int tz { z 3 tz; !
bool Point3D::$)uals(Point3D ) const {
r$turn (x 33 ).x << y 33 ).y << z 33 ).z;
!
bool Point3D::$)uals(int x1, int y1, int z1 const {
r$turn (x 33 x1 << y 33 y1 << z 33 z1;
!
void Point3D::shi*t%(int tx { x 43 tx; !
void Point3D::shi*t&(int ty { y 43 ty; !
void Point3D::shi*t'(int tz { z 43 tz; !
void Point3D::translat$ (int tx, int ty, int tz {
x 43 tx;
y 43 ty;
z 43 tz;
!
doubl$ Point3D::distanc$+rigin( const {
r$turn s)rt(po#((doubl$x, = 4 po#((doubl$y, = 4 po#((doubl$z, =;
!
doubl$ Point3D::distanc$,oPoint(Point3D ) const {
r$turn s)rt(po#(doubl$(x ; ).x, = 4 po#(doubl$(y ; ).y, = 4 po#(doubl$(z ; ).z,
=;
!
Informtica II Programacin orientada a objetos en C++
Pg. 3
int Point3D::scalarProduct(Point3D ) const {
r$turn x : ).x 4 y : ).y 4 z : ).z;
!
string Point3D::#hich(pac$( const { // > ?$spacios?: l$*t/right, up/lo#, *ar/bac@
// si $stA $n $l bord$ cual)ui$r lado $stA bi$n
string 0$ssag$ 3 2Bst$ punto $sta: 2;
i* ($)uals(", ", " // orig$n
0$ssag$ 3 2Bl punto $s $l orig$nC2;
$ls$ {
0$ssag$ 43 2$n $l 2;
i* (x 13 " // d$r$cha
0$ssag$ 43 2s$0iplano d$r$cho, 2;
$ls$
0$ssag$ 43 2s$0iplano iz)ui$rdo, 2;
i* (y 13 " // arriba
0$ssag$ 43 2sup$rior, 2;
$ls$
0$ssag$ 43 2in*$rior, 2;
i* (z 13 " // d$lant$
0$ssag$ 43 2y d$lant$.2;
$ls$
0$ssag$ 43 2y d$trAs.2;
!
r$turn 0$ssag$;
!
bool Point3D::in-ox (int xbox, int ybox, int zbox,
int #idth, int h$ight, int d$pth const {
// xbox,ybox,zbox: bord$ sup$rior iz)ui$rdo d$ la caDa
r$turn (x 13 xbox << (x /3 xbox 4 #idth // rango d$ x
<< (y /3 ybox << (y 13 ybox ; h$ight // rango d$ y
<< (z /3 zbox << (z 13 zbox ; d$pth; // rango d$ z
!
bool Point3D::in(ph$r$(Point3D c$nt$r, int radius const {
// ch$)u$a si $st$ punto $stA d$ntro d$ una $s*$ra d$
// c$ntro (cx,cy,czy radio3radius
r$turn distanc$,oPoint(c$nt$r /3 radius;
!
int 0ain( {
int a1 3 1", b1 3 ;E, c1 3 F; // para constructor
int a= 3 G, b= 3 >, c= 3 ;H; // para actualizar coord$nadas
int shi*t1% 3 3,
shi*t1& 3 ;3,
shi*t1' 3 I,
shi*t=% 3 H,
shi*t=& 3 11,
shi*t=' 3 ;13;
// para 0ov$r
int lo# 3 E, high 3 1E; // para constructor
int x-ox 3 ;1=, y-ox 3 =", z-ox 3 >;
// bord$ sup$rior iz)ui$rdo y d$lant$ d$ una caDa
int #idth 3 =F, h$ight 3 F", d$pth 3 3E; // d$ la caDa
int xJ$nt$r(ph$r$ 3 1, yJ$nt$r(ph$r$ 3 =, zJ$nt$r(ph$r$ 3 E;
// c$ntro d$ $s*$ra
Informtica II Programacin orientada a objetos en C++
Pg. 4
int radius 3 E"; // radio d$ $s*$ra
// d$clara r$*$r$ncia a puntos 3D
Point3D pt1, pt=(a1, b1, c1, pt3(lo#, high;
// i0pri0$
cout // 2Punto 1 $s: (2 // pt1.g$t%( // 2, 2 // pt1.g$t&( // 2, 2 // pt1.g$t'( //
22 // $ndl;
cout // 2Punto = $s: (2 // pt=.g$t%( // 2, 2 // pt=.g$t&( // 2, 2 // pt=.g$t'( //
22 // $ndl;
cout // 2Punto 3 $s: (2 // pt3.g$t%( // 2, 2 // pt3.g$t&( // 2, 2 // pt3.g$t'( //
22 // $ndl;
// i0pri0$ coord$nadas d$ punto 3
print*(2KnKnLas coord$nadas d$l punto 3 son: Md, Md, Md2, pt3.g$t%(, pt3.g$t&(,
pt3.g$t'(;
// ca0bia coord$nadas d$ pt=
pt=.s$t%(a=;
pt=.s$t&(b=;
pt=.s$t'(c=;
cout // $ndl // 2Punto = ahora $s: ( 2 // pt=.g$t%( // 2, 2 // pt=.g$t&( // 2, 2 //
pt=.g$t'( // 22 // $ndl;
// 0u$v$ pt1 y ch$)u$a si $s igual a pt=
pt1.shi*t%(shi*t1%;
pt1.shi*t&(shi*t1&;
pt1.shi*t'(shi*t1';
cout // 2Punto 1 ahora $s: ( 2// pt1.g$t%( // 2, 2 // pt1.g$t&( // 2, 2 //
pt1.g$t'( // 22 // $ndl;
cout // 2Bs pt1 igual a pt=N ;;1 2// pt1.$)uals(pt= // $ndl;
// 0u$v$ pt1 d$ nu$vo y ch$)u$a si $s igual a pt=
pt1.translat$(shi*t=%, shi*t=&, shi*t=';
Point3D ptF(pt1;
cout // $ndl // 2Punto 1 trasladado, ahora ptF $s: ( 2 // pt1.g$t%( // 2, 2 //
pt1.g$t&( // 2, 2 // pt1.g$t'( // 22 // $ndl;
cout // 2Bs $st$ nu$vo punto transladado ptF igual a pt=N ;;1 2 //
ptF.$)uals(pt=.g$t%(, pt=.g$t&(, pt=.g$t'( // $ndl;
// distancia d$ pt3 al orig$n
cout // 2Distancia d$ pt3 al orig$n $s: 2 // pt3.distanc$+rigin( // $ndl;
// distancia pt1 ; pt3
cout // 2Distancia $ntr$ pt1 y pt3 $s: 2 // pt1.distanc$,oPoint(pt3 // $ndl;
// producto $scalar d$ v$ctor$s pt1 , pt=
cout // 2Producto $scalar d$ pt1, pt= $s: 2 // pt1.scalarProduct(pt= // $ndl;
// $n )uO $spacios $stAn pt1, pt=, pt3N
cout // 2Para pt1 ;;1 2 // pt1.#hich(pac$( // $ndl;
cout // 2Para pt= ;;1 2 // pt=.#hich(pac$( // $ndl;
cout // 2Para pt3 ;;1 2 // pt3.#hich(pac$( // $ndl;
// $stA pt= $n una caDaN
cout // 2BstA pt= $n la caDa dadaN ;;1 2 // pt=.in-ox(x-ox, y-ox, z-ox, #idth, h$ight,
d$pth // $ndl;
// $stA pt1 $n la $s*$raN
Point3D c$nt$r(xJ$nt$r(ph$r$, yJ$nt$r(ph$r$, zJ$nt$r(ph$r$;
cout // 2BstA pt1 d$ntro d$ la $s*$raN ;;;1 2 // pt1.in(ph$r$(c$nt$r, radius // $ndl;
Informtica II Programacin orientada a objetos en C++
Pg. 5
// P0pri0ir todos los puntos
cout // $ndl // 2Punto 1 $s ( 2 // pt1.g$t%( // 2, 2 // pt1.g$t&( // 2, 2 //
pt1.g$t'( // 22 // $ndl;
cout // $ndl // 2Punto = $s ( 2 // pt=.g$t%( // 2, 2 // pt=.g$t&( // 2, 2 //
pt=.g$t'( // 22 // $ndl;
cout // $ndl // 2Punto 3 $s ( 2 // pt3.g$t%( // 2, 2 // pt3.g$t&( // 2, 2 //
pt3.g$t'( // 22 // $ndl;
!
Problema &:
+e tiene la siguiente definicin de la clase %anque:
class ,an)u$ {
doubl$ cont$nido;
public:
static const int capacidad 3 E""".";
,an)u$(;
doubl$ g$tJont$nido( const;
void agr$gar(doubl$ cantidad; // no sup$rar la capacidad
void sacar(doubl$ cantidad; // no sacar 0As d$ lo )u$ hay
!;
a# 3omplete escribiendo el cdigo de mtodos y constructor.
b) Aada un mtodo sa#a4itad() 'ue elimina la mitad del contenido del tan'ue. +i el
tan'ue est( vac%o no )ace nada.
#) 4scriba una funcin main 'ue instancie y utilice un ob*eto t de la clase %anque.
Agregue .,, unidades al tan'ue. Aada cdigo 'ue contenga un bucle de tipo while,
con sentencias 'ue utilicen repetidamente el mtodo sa#a4itad() para reducir el
contenido del tan'ue. 5a iteracin deber( detenerse cuando el contenido del tan'ue
sea menor a ..,.
'olucin:
//archivo ,an)u$.h
.prag0a onc$
class ,an)u$
{privat$:
doubl$ cont$nido;
public:
static const int capacidad3E""".";
,an)u$(void;
doubl$ g$tJont$nido(void const;
void agr$gar(doubl$ cantidad;
void sacar(doubl$ cantidad;
void saca9itad(void;
Q,an)u$(void;
!;
//6rchivo ,an)u$.cpp
.includ$ 2,an)u$.h2
.includ$ /iostr$a01
using std::cout;
Informtica II Programacin orientada a objetos en C++
Pg. 6
,an)u$::,an)u$(void
{
cont$nido3"; //inicializo tan)u$ vacRo
!
doubl$ ,an)u$::g$tJont$nido(voidconst
{
r$turn cont$nido;
!
void ,an)u$::agr$gar(doubl$ cantidad
{
doubl$ aux3cantidad4cont$nido;
i*(aux/3capacidad
cont$nido3aux;
$ls$
cout//2(i agr$ga 2//cantidad//2 sup$ra la capacidadKn2;
!
void ,an)u$::sacar(doubl$ cantidad
{
doubl$ aux3cont$nido;cantidad;
i*(aux13"
cont$nido3aux;
$ls$
cout//2(i saca 2//cantidad//2 $xtra$ 0as d$l cont$nido y )u$da un niv$l
n$gativoKn2;
!
void ,an)u$::saca9itad(void
{
i*(cont$nido33"
cout//27o pu$d$ sacar la 0itad pu$s $l tan)u$ $sta vacio2;
$ls$
cont$nido3cont$nido/=;
!
,an)u$::Q,an)u$(void
{
!
//archivo ,$st,an)u$
.includ$ /iostr$a01
.includ$ 2,an)u$.h2
using std::cout;
int 0ain(void
{
,an)u$ t;
t.agr$gar(1"".";
#hil$(t.g$tJont$nido(131."
t.saca9itad(;
cout//2Bl cont$nido *inal $s: 2//t.g$tJont$nido(//2Kn2;
r$turn ";
!
Problema (:
a) 4n una carrera de velocidad participan un cierto n6mero de atletas, cada uno de ellos
tiene un nombre, n6mero, nacionalidad y el tiempo 'ue le tom correr la carrera. 3ree
Informtica II Programacin orientada a objetos en C++
Pg. 7
una clase 5tleta 'ue represente a un atleta. Para ensayar esta clase, una funcin
main(), 'ue )aga lo siguiente: provea informacin acerca de dos atletas, cree dos
ob*etos 5tleta e imprima el nombre del m(s r(pido.
) 7na carrera cubre una cierta distancia y cada carrera tiene un ganador. 3ree una clase
6a""e"a 'ue mane*e esta informacin. A*uste la funcin main para crear un ob*eto
de tipo 6a""e"a y registre el nombre del atleta m(s r(pido de la carrera.
c) +uponga 'ue desea tener acceso a m(s informacin acerca del ganador de la carrera
!por e*emplo, el tiempo 'ue tard o su nacionalidad#. 8o podemos )acer esto desde el
ob*eto #a""e"a directamente. 8ecesitamos cambiar la definicin de la clase tal 'ue en
lugar de almacenar el nombre del ganador, almacene un ob*eto 5tleta. 9aga este
cambio muestre todos los detalles del ganador de una carrera.
d) A)ora deseamos registrar la informacin de todos los participantes en la carrera,
podemos podemos )acer esto aadiendo un atributo #om*etido"es a la clase
6a""e"a) 'ue ser( un array de atletas. 4dite la funcin 'ue determina el ganador de
tal forma 'ue a)ora lo )aga mirando los tiempos de cada competidor. Pruebe estos
cambios.
'olucin:
//archivo 6tl$ta.h
.prag0a onc$
.includ$ /iostr$a01
class 6tl$ta
{
privat$:
char: no0br$;
int nu0$ro;
char: nacionalidad;
doubl$ ti$0po;
public:
6tl$ta(char: n37SLL, int nro3", char: p37SLL, doubl$ t3".";//para array
char: g$t7o0br$(void const;
int g$t7u0$ro(void const;
char: g$t7acionalidad(void const;
doubl$ g$t,i$0po(void const;
void s$t7o0br$(char: n;
void s$t7u0$ro(int n;
void s$t7acionalidad(char: n;
void s$t,i$0po(doubl$ t;
void 0ostrarDatos(void const;
Q6tl$ta(void;
!;
//6tl$ta.cpp
.includ$ 26tl$ta.h2
.includ$ /string.h1
.includ$ /iostr$a01
using std::cout;
Informtica II Programacin orientada a objetos en C++
Pg. 8
6tl$ta::6tl$ta(char: n, int nro, char: p, doubl$ t
{
no0br$3n$# charTstrl$n(n 4 1U;
strcpy(no0br$, n;
nu0$ro3nro;
nacionalidad3n$# charTstrl$n(p41U;
strcpy(nacionalidad, p;
ti$0po3t;
!
char: 6tl$ta::g$t7o0br$(void const
{
r$turn no0br$;
!
int 6tl$ta::g$t7u0$ro(void const
{
r$turn nu0$ro;
!
char: 6tl$ta::g$t7acionalidad(void const
{
r$turn nacionalidad;
!
doubl$ 6tl$ta::g$t,i$0po(voidconst
{
r$turn ti$0po;
!
void 6tl$ta::0ostrarDatos(void const
{
cout//27o0br$ atl$ta: 2//no0br$//2Kn7u0$ro: 2//nu0$ro//2Kn7acionalidad:
2//nacionalidad//2Kn,i$0po: 2//ti$0po//2Kn2;
!
void 6tl$ta::s$t7o0br$(char :n
{
i*(no0br$337SLL{
no0br$3n$# charTstrl$n(n 4 1U;
strcpy(no0br$, n;
!
!
void 6tl$ta::s$t7u0$ro(int n
{
nu0$ro3n;
!
void 6tl$ta::s$t,i$0po(doubl$ t
{
ti$0po3t;
!
void 6tl$ta::s$t7acionalidad(char :p
{
i*(nacionalidad337SLL{
nacionalidad3n$# charTstrl$n(p41U;
strcpy(nacionalidad, p;
!
!
6tl$ta::Q6tl$ta(void
{
d$l$t$TU no0br$;
d$l$t$TU nacionalidad;
Informtica II Programacin orientada a objetos en C++
Pg.
cout//2($ invoca al d$structor d$ atl$taKn2;!
//archivo Jarr$ra.h
.prag0a onc$
class Jarr$ra
{
privat$:
int distancia;
char: ganador;
public:
Jarr$ra(int d, char: g;
int g$tDistancia(voidconst;
char: g$tVanador(void const;
QJarr$ra(void;
!;
//archivo Jarr$ra.cpp
.includ$ 2Jarr$ra.h2
.includ$ /string.h1
Jarr$ra::Jarr$ra(int d, char: g
{
distancia3d;
ganador3n$# charTstrl$n(g 4 1U;
strcpy(ganador, g;
!
int Jarr$ra::g$tDistancia(void const
{
r$turn distancia;
!
char: Jarr$ra::g$tVanador(void const
{
r$turn ganador;
!
Jarr$ra::QJarr$ra(void
{
d$l$t$TU ganador;
!
//Jarr$ra1.h
.prag0a onc$
.includ$ 26tl$ta.h2
class Jarr$ra1
{
privat$:
int distancia;
6tl$ta :ganador;
public:
Jarr$ra1(int d, 6tl$ta :g;
int g$tDistancia(voidconst;
6tl$ta : g$tVanador(void const;
QJarr$ra1(void;
!;
Informtica II Programacin orientada a objetos en C++
Pg. 1!
//Jarr$ra1.cpp
.includ$ 2Jarr$ra1.h2
.includ$ /iostr$a01
Jarr$ra1::Jarr$ra1(int d, 6tl$ta :g
{
distancia3d;
ganador3g;
!
int Jarr$ra1::g$tDistancia(void const
{
r$turn distancia;
!
6tl$ta : Jarr$ra1::g$tVanador(void const
{
r$turn ganador;
!
Jarr$ra1::QJarr$ra1(void
{
ganador37SLL;
!
//Jarr$ra=.h
.prag0a onc$
.includ$ 26tl$ta.h2
class Jarr$ra=
{
privat$:
int distancia;
6tl$ta:: co0p$tidor$s;
int cant6tl$tas;
int indic$;
public:
Jarr$ra=(int d, int cantidad;
int g$tDistancia(void const;
6tl$ta :g$tVanador(void const;
int g$tJant6tl$tas(void const;
void agr$gar6tl$ta(6tl$ta: p;
QJarr$ra=(void;
!;
//Jarr$ra=.cpp
.includ$ 2Jarr$ra=.h2
Jarr$ra=::Jarr$ra=(int d, int cantidad
{
distancia3d;
cant6tl$tas3cantidad;
co0p$tidor$s3n$# 6tl$ta: TcantidadU;
indic$3";
!
Informtica II Programacin orientada a objetos en C++
Pg. 11
int Jarr$ra=::g$tDistancia(void const
{
r$turn distancia;
!
int Jarr$ra=::g$tJant6tl$tas(void const
{
r$turn cant6tl$tas;
!
6tl$ta: Jarr$ra=::g$tVanador(void const
{
doubl$ t3co0p$tidor$sT"U;1g$t,i$0po(;//Sso d$ ;1
doubl$ taux;
int iaux;
*or(int i31;i/cant6tl$tas;i44{
taux3co0p$tidor$sTiU;1g$t,i$0po(;
i*(taux/t{
t3taux;
iaux3i;
!
!
r$turn co0p$tidor$sTiauxU;
!
void Jarr$ra=::agr$gar6tl$ta(6tl$ta: p
{
i*(indic$/cant6tl$tas{
co0p$tidor$sTindic$U3p;
indic$44;
!
!
Jarr$ra=::QJarr$ra=(void
{
d$l$t$TU co0p$tidor$s;
!
//pru$ba6tl$ta.cpp
.includ$ 26tl$ta.h2
.includ$ 2Jarr$ra.h2
.includ$ 2Jarr$ra1.h2
.includ$ 2Jarr$ra=.h2
.includ$ /iostr$a01
using std::cout;
int 0ain(void
{
6tl$ta a1(2Wuan P$r$z2,1, 26rg$ntina2, 1".1;
6tl$ta a=(2Wohn Xord2,=,2S(62, G.1;
i*(a1.g$t,i$0po(/a=.g$t,i$0po(
cout//2Bl atl$ta 2//a1.g$t7o0br$(//2 $s $l 0as rapidoKn2;
$ls$
cout//2Bl atl$ta 2//a=.g$t7o0br$(//2 $s $l 0as rapidoKn2;
Jarr$ra c1(1"", 2Wohn Xord2;
cout//2Bl ganador d$ la carr$ra $s: 2//c1.g$tVanador(//2Kn2;
Informtica II Programacin orientada a objetos en C++
Pg. 12
6tl$ta :p3n$# 6tl$ta(2Wuan Jastro2, 3, 29$xico2, I.3;
Jarr$ra1 c=(="",p;
6tl$ta :)3c=.g$tVanador(;
);10ostrarDatos(;
Jarr$ra= c3(3"",3;
c3.agr$gar6tl$ta(<a1;
c3.agr$gar6tl$ta(<a=;
c3.agr$gar6tl$ta(p;
6tl$ta :r3c3.g$tVanador(;
r;10ostrarDatos(;
d$l$t$ p;
r$turn ";
!
Problema 4:
a) 7n vagn de un tren tiene 1, asientos, cada uno de ellos puede estar ocupado o
vacante. 4l vagn puede ser de primera o segunda clase. 3ree una clase 6a""iage
para representar esta informacin. 4n el constructor se supondr( 'ue todos los asientos
inicialmente est(n vacantes. 4scriba los mtodos apropiados de acceso y actuali$acin
y un mtodo 'ue vaya ocupando los asientos de la siguiente forma: si el vagn es de
primera )ay un .,: de probabilidad 'ue los asientos sean ocupados; si es de segunda
clase )ay un 1,: de probabilidad 'ue los asientos sean ocupados. 4scriba una funcin
main() 'ue contenga un ob*eto 6a""iage, llnelo aleatoriamente e imprima el estado
de cada asiento.
) 7n tren consta de un cierto n6mero de vagones, tiene una estacin de partida y una de
llegada, un cierto precio para los tic<ets de primera y otro para los de segunda. 3ree
una clase %"ain 'ue contenga esta informacin. Aada una funcin 'ue llene los
asientos de los vagones aleatoriamiente. 3ree un mtodo 'ue calcule el total de ventas
de tic<ets. A*uste su funcin main para probar lo )ec)o.
'olucin:
.includ$ /iostr$a01
using std::cout;
using std::$ndl;
class Jarriag$ {
bool asi$ntos TF"U;
bool pri0$ra;
public:
Jarriag$( {!;
Jarriag$(bool pri0;
bool g$t6si$nto(int ind { r$turn asi$ntosTindU; !
bool g$tPri0$ra( { r$turn pri0$ra; !
void s$tPri0$ra(bool p { pri0$ra 3 p; !
void ocupar(;
!;
Jarriag$::Jarriag$(bool pri0 {
pri0$ra 3 pri0;
*or(int i 3 "; i / F"; i44 asi$ntosTiU 3 ";
!
Informtica II Programacin orientada a objetos en C++
Pg. 13
void Jarriag$::ocupar( {
doubl$ probabilidad 3 pri0$ra N ".1 : ".F;
*or(int i 3 "; i / F"; i44 asi$ntosTiU 3 doubl$(rand(/567D896% / probabilidad;
!
class ,rain {
Jarriag$ : carriag$s;
int nu0Pri;
int nu0($g;
char : salida;
char : d$stino;
int pr$cioPri0$ra;
int pr$cio($gunda;
public: //lista inicializador$s
,rain(int nP, int n(, char : sal, char : d$st, int pP, int p(:
nu0Pri(nP, nu0($g(n(, salida(sal, d$stino(d$st, pr$cioPri0$ra(pP,
pr$cio($gunda(p( {
carriag$s 3 n$# Jarriag$TnP 4 n(U;
*or(int i 3 "; i / nP 4 n(; i44 carriag$sTiU.s$tPri0$ra(i / nP;
!;
Q,rain( { d$l$t$ TU carriag$s; !
Jarriag$ g$tJarriag$(int i { r$turn carriag$sTiU; !
void ll$nar(;
int totalY$ntas(;
!;
int ,rain::totalY$ntas( {
int acu0 3 ";
*or(int i 3 "; i / nu0Pri 4 nu0($g; i44
i* (carriag$sTiU.g$tPri0$ra(
*or(int D 3 "; D / F"; D44
acu0 43 carriag$sTiU.g$t6si$nto(D : pr$cioPri0$ra;
$ls$ *or(int D 3 "; D / F"; D44
acu0 43 carriag$sTiU.g$t6si$nto(D : pr$cio($gunda;
r$turn acu0;
!
void ,rain::ll$nar( {
*or(int i 3 "; i / nu0Pri 4 nu0($g; i44
carriag$sTiU.ocupar(;
!
int 0ain( {
,rain t(F, I, 25osario2, 2,ucu0an2, =", 1";
t.ll$nar(;
cout // $ndl // $ndl // t.totalY$ntas( // $ndl;
!
Informtica II Programacin orientada a objetos en C++
Pg. 14
Problema *:
+uponga 'ue se desea simular el uso de un sube/ba*a como el mostrado en la figura.

5a idea es 'ue cada una de las personas al empu*ar a la otra )acia arriba est( 'uemando
calor%as. +uponga 'ue la simulacin comien$a con la posicin del sube y ba*a en la
posicin de aba*o del lado derec)o !como se ve en la figura#. 7n ciclo completo !tabla
arriba y nuevamente aba*o# se supone )ace 'ue cada persona 'ueme ., calor%as. 5as
personas reali$ar(n =0 ciclos a menos 'ue una de las dos 'ue est(n *ugando se aburra
antes de finali$ar los =0 ciclos completos, lo cual ocurre el 0: !probabilidad: ,,,0# de las
veces 'ue se simula el *uego.
>b*etivo: Determinar e informar cu(ntas calor%as )an 'uemado las personas en una
sesin de simulacin.
Desarrolle la clase Persona para 'ue la siguiente funcim main funcione
correctamente. ?erifi'ue la posibilidad de finali$acin de la simulacin debido al
aburrimiento de cual'uiera de las = personas, al comien$o de cada ciclo incluyendo el
comien$o de la sesin de simulacin.
int main() 7
#onst int 45X8696:$) ; ',<
Pe"sona *1, *'<
int #i#los ; 0<
while (=*1>de#idePa"a"() ?? =*'>de#idePa"a"() ?? #i#los @ 45X8696:$)) 7
*1>ag"ega"6alo"ias()<
*'>ag"ega"6alo"ias()<
#i#los((<
A
#out @@ endl @@ B6alo"ias *e"sona 1C B @@ *1>get6alo"ias() @@ endl<
#out @@ endl @@ B6alo"ias *e"sona 'C B @@ *'>get6alo"ias() @@ endl<
A
Problema +:
3omplete dos clases: %"iangle y Point. +e suministra un main para probar el cdigo de
ambas, en la cual comparar( la posicin de ob*etos %"iangle, definidos por sus vrtices:
p., p= y p3 e@presados en trminos de coordenadas !@, y#. 4n la figura, puede apreciarse
'ue el ob*eto %"iangle 5 est( a la i$'uierda del ob*eto %"iangle +. +uponga 'ue las
Informtica II Programacin orientada a objetos en C++
Pg. 15
bases de los tri(ngulos est(n siempre alineadas con el e*e @ y 'ue los vrtices son
especificados siempre en el mismo orden: p. !coordenada superior#, p= !coordenada
inferior i$'uierda#, p3 !coordenada inferior derec)a#. Debe suponer tambin 'ue p= estar(
siempre a la i$'uierda de p..
7se los principios de programacin orientada a ob*etos !en especial el encapsulamiento#
cuando utilice yAo complete las siguientes clases:
Buncin main() 'ue crea dos ob*etos %"iangle, muestra por pantalla el (rea
del ob*eto %"iangle creado en primer lugar y determina cu(l es el ob*eto
%"iangle 'ue est( m(s a la i$'uierda.
Point: 4sta clase representa un vrtice e@presado en forma de coordenadas !@, y#
%"iangle: 4sta clase representa un tri(ngulo cuyos tres vrtices !p., p=, p3# son
ob*etos de la clase Point.
4l mtodo leftmost compara el %"iangle con el cual se invoca este mtodo
con otro ob*eto %"iangle c)e'ueando la coordenada @ del vrtice 'ue est( m(s a
la i$'uierda de cada tri(ngulo. &etorna una referencia al ob*eto de tipo %"iangle
'ue est( m(s a la i$'uierda.
4l mtodo area calcula el (rea del ob*eto %"iangle con el cual se invoca, usando
esta frmula: (rea C !base @ altura# A =.
>tros mtodos: necesita completar el constructor.
int main() 7
%"iangle t1(B5B, Point(1, '), Point(0, 0), Point(', 0))<
%"iangle t'(B+B, Point(', 3), Point(1, 0), Point(3, 0))<
#out @@ endl @@ B5"eaC B @@ t1>a"ea() @@ endl<
#out @@ endl @@ t'>leftmost(t1)>getDame() @@ endl<
A
Problema ,:
4scriba una clase 'ue represente un pa'uete de informacin enviado a travs de una red.
5os pa'uetes tienen las siguientes caracter%sticas 'ue )an sido simplificadas para esta
aplicacin:
5a direccin -P del emisor
5a direccin -P del receptor.
5as direcciones -P son n6meros de .= d%gitos
7n n6mero identificador !-D# del pa'uete 'ue puede estar entre , y =.,,,.,,,.,,,
Informtica II Programacin orientada a objetos en C++
Pg. 16
4l dato enviado representado por un array de bytes. Para este problema se supone
'ue cada pa'uete tiene una longitud fi*a de .,,, bytes. +i la informacin a enviar
ocupa menos espacio se rellena con bytes 'ue van alternando ente valores iguales
a /. y ,.
4scriba la clase 'ue represente a uno de estos pa'uetes. Dic)a clase deber( proveer la
siguiente funcionalidad:
Defina un constructor con par(metros para las direcciones de -P del emisor y
receptor, el -D del pa'uete, y un array de tipo byte.
-mplemente el mtodo de acceso para la direccin -P del receptor.
4scriba un mtodo de modificacin para especificar un elemento en el array de
datos.
+obrecargue el operador DCCD. Dos pa'uetes se consideran iguales si las direcciones
-P del destinatario y receptor coinciden al igual 'ue los -D de los pa'uetes
comparados.
Problema -:
+e desea modelar informacin acerca de salas para eventos. 5a capacidad de los salones
depende de la superficie y el costo del al'uiler depende de la superficie y si est(n
e'uipados o no.
a. Defina la clase +ala con campos miembro nombre, anc)o, largo y e'uipado. -ncluir
constructores.
! Desarrolle una funcin 'ue permita obtener la capacidad de la sala. +e considera
necesario ..0 m
=
para cada asistente.
c! Desarrolle un mtodo 'ue calcule el valor del al'uiler: E10 el m
=
si la sala est(
e'uipada y E3=

el m
=
si no lo est(.

d. -nstancie tres ob*etos de la clase +ala, con las siguientes caracter%sticas:
.. +ala.: .= m de largo por F m de anc)o, e'uipada.
=. +ala=: =, m de largo por .F m de anc)o, sin e'uipar.
3. +ala3: .0 m de largo por .= m de anc)o, e'uipada.
e. -mprima en pantalla los datos de la primera sala !campos miembro, superficie,
capacidad y costo#.
f. Para los pr@imos 1 eventos se esperan =,,, 0,, .,, y .0, asistentes
respectivamente. Para ello instancie un arreglo y recrralo con un bucle for
imprimiendo en cada iteracin el nombre de las posibles salas para reali$ar el
evento seg6n su capacidad, independientemente de 'ue si est(n e'uipadas o no.
'olucin:
//(ala.h
.prag0a onc$
class (ala
{
privat$:
char: no0br$;
int ancho;
int largo;
bool $)uipado;
Informtica II Programacin orientada a objetos en C++
Pg. 17
public:
(ala(char: n, int a, int l, bool $;
char : g$t7o0br$(void const{r$turn no0br$;!
int g$t6ncho(voidconst {r$turn ancho;!
int g$tLargo(voidconst{r$turn largo;!
bool g$tB)uipado(voidconst{r$turn $)uipado;!
int calcula6r$a(voidconst{r$turn ancho:largo;!
int calculaJapacidad(const;
int calcula6l)uil$r(voidconst;
void 0ostrarDatos(voidconst;
Q(ala(void;
!;
//(ala.cpp
.includ$ 2(ala.h2
.includ$ /string.h1
.includ$ /iostr$a01
.includ$ /0ath.h1
using std::cout;
(ala::(ala(char: n, int a, int l, bool $
{
no0br$3n$# charTstrl$n(n 4 1U;
strcpy(no0br$, n;
ancho3a;
largo3l;
$)uipado3$;
!
int (ala::calculaJapacidad(const
{
int sup$r*ici$3calcula6r$a(;
doubl$ cap3sup$r*ici$/1.E;
//cout//2Japacidad: 2//cap//2Kn2;
r$turn *loor(cap;
!
int (ala::calcula6l)uil$r(void const
{
i*($)uipado
r$turn FE:calcula6r$a(;
$ls$
r$turn 3=:calcula6r$a(;
!
void (ala::0ostrarDatos(void const
{ i*($)uipado{
cout//2La sala s$ lla0a: 2//no0br$//2 y 0id$: 2//ancho//2 d$ ancho y 2//largo//2
d$ largo; $sta $)uipadaKn2;
cout//2La sup$r*ici$ $s d$: 2//calcula6r$a(//2 0$tros cuadrados, ti$n$ una
capacidad para 2//calculaJapacidad(//2 p$rsonas y $l costo d$ su al)uil$r $s d$: 2
//calcula6l)uil$r(//2 ZKn2;
!
$ls${
cout//2La sala s$ lla0a: 2//no0br$//2 y 0id$: 2//ancho//2 d$ ancho y 2//largo//2
d$ largo; no $sta $)uipadaKn2;
cout//2La sup$r*ici$ $s d$: 2//calcula6r$a(//2 0$tros cuadrados, ti$n$ una
capacidad para 2//calculaJapacidad(//2 p$rsonas y $l costo d$ su al)uil$r $s d$: 2
//calcula6l)uil$r(//2 ZKn2;
!!
Informtica II Programacin orientada a objetos en C++
Pg. 18
(ala::Q(ala(void
{
!
//pru$ba(ala.cpp
.includ$ 2(ala.h2
.includ$ /iostr$a01
using std::cout;
int 0ain(void
{
(ala s1(2(ala 12, >,1=,tru$;
(ala s=(2(ala =2, 1>,=",*als$;
(ala s3(2(ala 32, 1=,1E,tru$;
(ala sTU3{s1,s=,s3!;
s1.0ostrarDatos(;
int $v$ntosTFU3{="",E",1"",1E"!;
*or(int i3";i/F;i44
*or(int D3";D/3;D44
i*(sTDU.calculaJapacidad(13$v$ntosTiU
cout//2La sala 2//sTDU.g$t7o0br$(//2 ti$n$ capacidad para
2//$v$ntosTiU//2 p$rsonasKnKn2;
r$turn ";
!
Problema .:
4scriba el cdigo de una clase 6andado 'ue modele un candado con combinacin
numrica !como los usados para e'uipa*e de via*e#. Al utili$ar por primera ve$ dic)o
candado, puede program(rsele un n6mero de 3 d%gitos del , al G !deber( almacenarlos en
un array# 'ue, ser( la combinacin de seguridad.
5a clase 6andado deber( almacenar tambin informacin !en forma de array# del estado
actual de los tres d%gitos de la combinacin !'ue en un dado instante podr( o no coincidir
con los 3 d%gitos programados#.
Agregar un constructor 'ue inicialice ambos arrays.
Deber( aadir adem(s los siguientes mtodos:
7n mtodo 'ue permita alterar alguno de los 3 d%gitos !indicar posicin# de la
combinacin actual.
7n mtodo, *uede5b"i", 'ue retornar( una variable booleana de valor t"ue en
caso 'ue la cerradura pueda abrirse y, false en caso contrario.
7n mtodo misma6ombina#ion5#tual 'ue retornar( una variable booleana de
valor t"ue en el caso 'ue la combinacin actual del ob*eto con el cual se invoca
este mtodo coincida con la combinacin actual de otro 6andado !deber( pasarlo
como argumento al invocarlo#.
Deber( escribir una funcin main donde crear( dos ob*etos de tipo 6andado, c. y c=.
Deber( cambiar uno de los tres d%gitos de la combinacin actual de c., mostrar por
pantalla: un mensa*e 'ue indi'ue si con la combinacin actual de c= 'ue program se
puede abrir o no y otro indicando si c. y c= tienen !o no# programados las mismas
combinaciones actuales.
Informtica II Programacin orientada a objetos en C++
Pg. 1
'olucin:
//Jandado.h
.prag0a onc$
class Jandado
{
public:
Jandado(int TU;
void alt$rardigito(int i, int nro;
bool pu$d$6brir(const;
bool 0is0aJo0binacion6ctual(const Jandado <cconst;
QJandado(void;
privat$:
int progra0adoT3U;
int actualT3U;
!;
//Jandado.cpp
.includ$ 2Jandado.h2
Jandado::Jandado(int cTU
{
*or(int i3";i/3;i44{
progra0adoTiU3cTiU;
actualTiU3";
!
!
void Jandado::alt$rardigito(int i, int nro
{
actualTiU3nro;
!
bool Jandado::pu$d$6brir(const
{
*or(int i3";i/3;i44
i*(progra0adoTiUC3actualTiU
r$turn *als$;
r$turn tru$;
!
bool Jandado::0is0aJo0binacion6ctual(const Jandado <cconst
{
*or(int i3";i/3;i44
i*(actualTiUC3c.actualTiU
r$turn *als$;
r$turn tru$;
!
Jandado::QJandado(void
{
!
//pru$baJandado.cpp
.includ$ /iostr$a01
.includ$ 2Jandado.h2
using std::cout;
Informtica II Programacin orientada a objetos en C++
Pg. 2!
int 0ain(void{
int p1TU3{3,=,1!;
int p=TU3{1,=,3!;
Jandado c13Jandado(p1;
Jandado c=3Jandado(p=;
c1.alt$rardigito(",1;
i*(c1.pu$d$6brir(
cout//2Bl candado s$ pu$d$ abrirKn2;
$ls$
cout//2Bl candado no s$ pu$d$ abrirKn2;
i*(c1.0is0aJo0binacion6ctual(c=
cout//2Los dos candados ti$n$n la 0is0a co0binacion actualKn2;
$ls$
cout//2Los dos candados no ti$n$n la 0is0a co0binacion actualKn2;
r$turn ";
!
Problema 1/:
7n polinomio es una e@presin matem(tica en forma de suma de potencias de una o m(s
variables multiplicadas por coeficientes. 7n polinomio en una variable con coeficientes
constantes est( dado por:
a
n
@
n
H a
n/.
@
n/.
H .. H a
=
@
=
H a
.
@ H a
,
4l grado u orden del polinomio est( dado por la potencia m(s elevada del mismo.
4scribir el cdigo de una clase Polinomio 'ue modele un polinomio monovariable. Dic)a
clase deber( almacenar informacin sobre el orden del polinomio !mayor o igual a ,# y
sobre los coeficientes !usar array de flotantes de doble precisin con de nH. elementos
para el caso de polinomio de orden n# de cada potencia.
Aadir a la clase un constructor donde se le pase como informacin un array con los
coeficientes del polinomio!de , a n#. Deber( escribir = mtodos de acceso 'ue permitan:
uno de ellos, leer el orden del polinomio y el otro, leer el coeficiente 'ue corresponda a una
determinada potencia, informacin 'ue deber( pasar como argumento al invocar el
mtodo; un mtodo, calcular, 'ue retorne un array de flotantes de doble precisin donde
almacenar( el c(lculo del polinomio para los valores enteros desde , )asta un l%mite
!mayor o igual a cero# 'ue deber( pasar como argumento al invocarlo. Por e*emplo: en el
caso de un polinomio de orden 3 !1 elementos# y coeficientes: I/=, 3.3, /..0, 3J o sea,
3@
3
K ..0@
=
H 3.3@
.
K =,@
,
si se invoca el mtodo calcular pas(ndole como argumento el entero =, deber( retornar un
array de 3 flotantes de doble precisin 'ue contendr( I/=, =.F, ==."J 'ue resulta de calcular
Polinomio para los valores: ,, ., =, o sea:
3L,
3
K ..0L,
=
H 3.3L, K =L,
,
H,C /=.,
3L.
3
K ..0L.
=
H 3.3L. K =L.
,
H,C =.F
3L=
3
K ..0L=
=
H 3.3L= K =L=
,
H, C ==."
Informtica II Programacin orientada a objetos en C++
Pg. 21
3rear adem(s una funcin main() donde deber( crear un polinomio, mostrar por pantalla
informacin de alguno de sus coeficientes e invocar el mtodo calcular para un valor l%mite
=.
'olucin:
//Polino0io.h
.prag0a onc$
class Polino0io
{
public:
Polino0io(int n, doubl$ TU;
int g$t+rd$n(const;
doubl$ g$tJo$*(int pconst;
doubl$: calcular(int li0it$;
QPolino0io(void;
privat$:
int ord$n;
doubl$ :co$*;
!;
//Polino0io.cpp
.includ$ 2Polino0io.h2
.includ$ /0ath.h1
Polino0io::Polino0io(int n, doubl$ vTU
{
ord$n3n;
co$*3n$# doubl$Tn41U;
*or(int i3";i/(n41;i44
co$*TiU3vTiU;
!
int Polino0io::g$t+rd$n(const
{
r$turn ord$n;
!
doubl$ Polino0io::g$tJo$*(int n const
{
r$turn co$*TnU;
!
doubl$: Polino0io::calcular(int li0it$//no pu$do r$tornar array
{
doubl$ :p3n$# doubl$Tli0it$41U;
doubl$ su0a;
*or(int i3";i/3li0it$;i44{
su0a3";
*or(int D3";D/3ord$n;D44
su0a43po#((doubl$i,D:co$*TDU;
pTiU3su0a;
!
r$turn p;
!
Polino0io::QPolino0io(void
{
d$l$t$TU co$*;
!
Informtica II Programacin orientada a objetos en C++
Pg. 22
//pru$baPolino0io.cpp
.includ$ /iostr$a01
.includ$ 2Polino0io.h2
using std::cout;
int 0ain(void
{
doubl$ vTU3{;=, 3.3, ;1.E, 3!;
Polino0io p(3,v;
cout//2KBl co$*ici$nt$ " d$l polino0io $s: 2//p.g$tJo$*("//2Kn2;
doubl$ :v13p.calcular(=;
*or(int i3";i/3=;i44
cout//2Bl polino0io calculado $n 2//i//2 $s: 2//v1TiU//2Kn2;
r$turn ";
!
Problema 11:
+e llama Mcuadrado m(gicoN a una matri$ cuadrada cuyos elementos tienen la propiedad
de estar dispuestos de forma tal 'ue, al sumar cada una de sus filas, cada una de sus
columnas y cada una de las dos diagonales se obtiene el mismo resultado.
7n e*emplo de cuadrado m(gico es la matri$ 'ue se encuentra en cada una de las
fac)adas de la +agrada Bamilia en Oarcelona:
. .1 .1 1
.. P " G
F ., ., 0
.3 = 3 .0
4n este caso la suma de todas sus filas, columnas y dos diagonales es 33, la edad a la
'ue muri Qesucristo.
a./ 4scriba el cdigo de una clase EsoDo4agi#a 'ue representen matrices de cual'uier
cantidad de filas y columnas y se verifi'ue si son o no cuadradas y si son o no m(gicas.
Deber( usar campos privados.

Dic)a clase debe tener un constructor 'ue reciba como argumentos: una matri$ de enteros
y dos argumentos 'ue indi'uen n6mero de filas y n6mero de columnas de la matri$ 'ue se
pasa como primer argumento. +uponer 'ue las matrices pasadas como primer argumento
tienen todas sus filas con la misma cantidad de columnas.
Deber( aadir adem(s los siguientes mtodos:
7n mtodo 'ue retorne una variable cuyo valor indi'ue si la matri$ representada por
esta clase, es cuadrada o no !es decir, si el n6mero de filas es igual al de columnas, o
no#.
7n mtodo 'ue retorne una variable cuyo valor indi'ue la suma de una fila i de la
matri$ representada por esta clase. +uponga 'ue se pasa como argumento un valor
correcto.
Informtica II Programacin orientada a objetos en C++
Pg. 23
7n mtodo 'ue retorne una variable cuyo valor indi'ue la suma de columna fila i de la
matri$ representada por esta clase. +uponga 'ue se pasa como argumento un valor
correcto.
7n mtodo 'ue retorne una variable cuyo valor indi'ue la suma de la diagonal principal
!es decir, los elementos aii# de la matri$ representada por esta clase. +uponer 'ue este
mtodo se va a invocar para una matri$ cuadrada.
7n mtodo 'ue retorne una variable cuyo valor indi'ue la suma de la diagonal
secundaria de la matri$ representada por esta clase !es decir, los elementos ai(n-1-i), con
iC, )asta !n/.#, siendo n el n6mero de filas o columnas de la matri$#. +uponer 'ue este
mtodo se va a invocar para una matri$ cuadrada.
7n mtodo 'ue retorne una variable cuyo valor indi'ue si la matri$ representada por
esta clase es un cuadrado m(gico o no. +uponer 'ue este mtodo se va a invocar para
una matri$ cuadrada. 8ota: +e recomienda sumar cual'uiera de sus filas, columnas o
diagonales y luego comparar este valor con las sumas del resto de las filas, columnas y
diagonales. +i se encuentra cual'uier filaAcolumna o diagonal cuya suma tenga un valor
distinto al de comparacin, se puede decir 'ue la matri$ no es cuadrado m(gico.
b./ 4scribir el cdigo de una funcin main donde crear( un ob*eto de tipo EsoNoMagica.
Deber( invocar el mtodo 'ue determine si la matri$ representada por dic)a clase es
cuadrada o no y, en caso de serlo, deber( invocar al mtodo 'ue determina si es un
cuadrado m(gico o no. 4n caso de serlo deber( mostrar por pantalla un mensa*e indicando
el valor de la suma de sus filasAcolumnasAdiagonales. 4n caso contrario deber( mostrar un
mensa*e por pantalla indicando 'ue no es cuadrado m(gico.
'olucin:
//Bs+7o9agica.h
F*"agma on#e
#lass Es$Do4agi#a
7
*ubli#C
Es$Do4agi#a(int &&m, int f, int #)<
bool es6uad"ada()#onst<GGt"ue es #uad"ada, false no es #uad"ada
int sumafilai(int i)#onst<
int suma#olumnai(int i)#onst<
int sumadiag*#i*al()#onst<
int sumadiagse#()#onst<
bool es4agi#a()#onst<
HEs$Do4agi#a(void)<
*"ivateC
int&& mat"iz<
int filas<
int #olumnas<
A<
//Bs+7o9agica.cpp
Fin#lude BEs$Do4agi#a>hB
Es$Do4agi#aCCEs$Do4agi#a(int &&m, int f, int #)
7
filas;f<
#olumnas;#<
GG"ese"vo es*a#io *a"a el ve#to" que a*unta a las filas
mat"iz;new int&IfJ<
Informtica II Programacin orientada a objetos en C++
Pg. 24
GG"ese"vo memo"ia *a"a las #olumnas de #ada fila
fo"(int i;0<i@#<i(()
mat"izIiJ;new intI#J<
GGllena #on datos
fo"(int i;0<i@filas<i(()
fo"(int K;0<K@#olumnas<K(()
mat"izIiJIKJ;mIiJIKJ<
A
bool Es$Do4agi#aCCes6uad"ada()#onst
7
if(filas;;#olumnas)"etu"n t"ue<
else "etu"n false<
A
int Es$Do4agi#aCCsumafilai(int i)#onst
7 int suma;0<
fo"(int K;0<K@#olumnas<K(()
suma(;mat"izIiJIKJ<
"etu"n suma<
A
int Es$Do4agi#aCCsuma#olumnai(int i)#onst
7
int suma;0<
fo"(int K;0<K@filas<K(()
suma(;mat"izIKJIiJ<
"etu"n suma<
A
int Es$Do4agi#aCCsumadiag*#i*al()#onst
7
int suma;0<
fo"(int i;0<i@filas<i(()
suma(;mat"izIiJIiJ<
"etu"n suma<
A
int Es$Do4agi#aCCsumadiagse#()#onst
7
int suma;0<
fo"(int i;0<i@filas<i(()
suma(;mat"izI0JIfilas/1/iJ<
"etu"n suma<
A
bool Es$Do4agi#aCCes4agi#a()#onst
7
int suma;0<
fo"(int i;0<i@#olumnas<i(()
suma(;mat"izI0JIiJ<
int i<
fo"(i;1<i@filas<i(()
if(suma=;sumafilai(i))"etu"n false<
fo"(i;0<i@#olumnas<i(()
if(suma=;suma#olumnai(i))"etu"n false<
if(suma=;sumadiag*#i*al())"etu"n false<
if(suma=;sumadiagse#())"etu"n false<
"etu"n t"ue<
A
Es$Do4agi#aCCHEs$Do4agi#a(void)
7
GGlibe"a la memo"ia de la mat"iz
fo"(int i;0<i@filas<i(()
Informtica II Programacin orientada a objetos en C++
Pg. 25
deleteIJmat"izIiJ<GGlibe"a #olumnas
deleteIJmat"iz<GGlibe"a filas
A
//pru$ba9agica.cpp
Fin#lude @iost"eamL
Fin#lude BEs$Do4agi#a>hB
using stdCC#out<
int main(void)
7
int mat"izI3JI3J;771,13,13,3A,711,1,0,-A,7.,10,10,,A,713,',3,1,AA<
int &&*<
*;new int&I3J<
fo"(int i;0<i@3<i(()
*IiJ;new intI3J<
fo"(int i;0<i@3<i(()
fo"(int K;0<K@3<K(()
*IiJIKJ;mat"izIiJIKJ<
Es$Do4agi#a #(*, 3,3)<
if(#>es6uad"ada())#out@@B:a mat"iz es #uad"adaMnB<
else #out@@B:a mat"iz no es #uad"adaMnB<
if(#>es6uad"ada())7
if(#>es4agi#a())
#out@@B:a suma de #ualquie" fila, #olumna o diagonal esC
B@@#>sumadiag*#i*al()@@BMnB<
else
#out@@B:a mat"iz no es magi#aMnB<
A
"etu"n 0<
A
Problema 1&
7n anillo !representado por la clase 5nillo# es un par de c%rculos !representados por la
clase 6i"#ulo# concntricos especificado por un centro !e@iste una clase Punto para
representar cual'uier punto del plano# el radio del c%rculo interior y el anc)o del anillo
!diferencia entre el radio del c%rculo e@terior y el radio del c%rculo interior#. Dado el cdigo
del arc)ivo de cabecera de la clase 5nillo !y de las clases Punto y 6i"#ulo# deber(
completar el arc)ivo #** asociado. 4l (rea del anillo es la diferencia entre el (rea del
c%rculo e@terno y el (rea del c%rculo interno. Para mover un anillo, se deben mover los dos
c%rculos.
.prag0a onc$
class Punto{
public:
Punto(doubl$ cx3".", doubl$ cy3".";
QPunto(void;
doubl$ g$t%(void;
doubl$ g$t&(void;
void s$t%(doubl$ cx;
void s$t&(doubl$ cy;
void 0ov$r(doubl$ dx, doubl$ dy;
void 0ostrarPunto(void;
privat$:
doubl$ x;
doubl$ y;!;
Informtica II Programacin orientada a objetos en C++
Pg. 26
.prag0a onc$
.includ$ 2Punto.h2
class Jirculo
{
public:
Jirculo(doubl$ r31.", doubl$ x3".", doubl$ y3".";
doubl$ g$t5adio(void;
void s$t5adio(doubl$ r;
doubl$ ar$a(void;
void 0ostrarJirculo(void;
void 0ov$r (doubl$ dx, doubl$ dy;
QJirculo(void;
privat$:
doubl$ radio;
Punto c$ntro;
!;
.prag0a onc$
.includ$ 2Jirculo.h2
class 6nillo
{
public:
6nillo(doubl$ x3".", doubl$ y3".", doubl$ radio31.", doubl$ a31.";
doubl$ g$t6ncho(void;
void s$t6ncho(doubl$ a;
doubl$ ar$a(void;
void 0ov$r(doubl$ dx, doubl$ dy;
void 0ostrar6nillo(void;
Q6nillo(void;
privat$:
Jirculo int$rior;
Jirculo $xt$rior;
doubl$ ancho;
!;
'olucin:
//Punto.cpp
.includ$ 2Punto.h2
.includ$ /iostr$a01
using std::cout;
Punto::Punto(doubl$ cx, doubl$ cy
{
x3cx;
y3cy;
!
doubl$ Punto::g$t%(void
{
r$turn x;
!
doubl$ Punto::g$t&(void
{
r$turn y;
!
Informtica II Programacin orientada a objetos en C++
Pg. 27
void Punto::s$t%(doubl$ cx
{
x3cx;
!
void Punto::s$t&(doubl$ cy
{
y3cy;
!
void Punto::0ov$r(doubl$ dx, doubl$ dy
{
x3dx;
y3dy;
!
void Punto::0ostrarPunto(void
{
cout//2T2//x//2, 2//y//2UKn2;
!
Punto::QPunto(void
{
!
//Jirculo.cpp
.includ$ 2Jirculo.h2
.includ$ 2Punto.h2
.includ$ /iostr$a01
using std::cout;
const doubl$ PP 3 std::atan(1.":F;
Jirculo::Jirculo(doubl$ r, doubl$ x, doubl$ y:c$ntro(x,y
{
radio3r;
!
doubl$ Jirculo::g$t5adio(void
{
r$turn radio;
!
void Jirculo::s$t5adio(doubl$ r
{
radio3r;
!
doubl$ Jirculo::ar$a(void
{
r$turn PP:radio:radio;
!
void Jirculo::0ostrarJirculo(void
{
cout//2J$ntro: 2;
c$ntro.0ostrarPunto(;
cout//25adio: 2//radio//2Kn2;
!
void Jirculo::0ov$r(doubl$ dx, doubl$ dy
{
c$ntro.0ov$r(dx, dy;
!
Informtica II Programacin orientada a objetos en C++
Pg. 28
Jirculo::QJirculo(void
{
!
//6nillo.cpp
.includ$ 26nillo.h2
6nillo::6nillo(doubl$ x3".", doubl$ y3".", doubl$ radio31.", doubl$
a31.":int$rior(x,y,radio, $xt$rior(x,y,radio4ancho
{
ancho3a;
!
doubl$ 6nillo::g$t6ncho(void
{
r$turn ancho;
!
void 6nillo::s$t6ncho(doubl$ a
{
ancho3a;
!
doubl$ 6nillo::ar$a(void
{
r$turn ($xt$rior.ar$a(;int$rior.ar$a(;
!
void 6nillo::0ov$r(doubl$ dx, doubl$ dy
{
int$rior.0ov$r(dx, dy;
$xt$rior.0ov$r(dx,dy;
!
//v$r *uncion$s )u$ r$tornan obD$tos o r$*$r$ncias hac$r una )r$torn$ c$ntro
//otra )u$ r$torn$ cada una d$ los circulos
6nillo::Q6nillo(void
{
!
Problema 1(
Definir una clase para representar una pila de enteros. 7na pila es una lista de items 'ue
permite agregar !pus)# o sacar !pop# slo de un e@tremo, operando con el principio 5-B>
!last/in, first out#. Por e*emplo, si la pila contiene I., 1 ." =,J, pop!# debe retornar .,, y
luego la pila 'ueda I1 ." =,J. 7n subsecuente pus)!.3# debe de*ar la pila en I.3 1 ." =,J.
8o se puede obtener un item 'ue no est en el top, salvo 'ue se 'uiten todos los items 'ue
est(n sobre l. 5a clase debe implementar las funciones pus)!#, pop!# y una funcin print!#
para mostrar el estado de la pila. uardar la lista internamente como un arreglo. 4scribir un
programa de test para verificar el correcto funcionamiento de la clase.
'olucin:
.includ$ /iostr$a01
using std::cout;
using std::$ndl;
Informtica II Programacin orientada a objetos en C++
Pg. 2
class J(tac@{
public:
J(tac@( : n$xt(" {!
void push(int i;
int pop(;
void print(;
privat$:
int listT1""U;
int n$xt;
!;
// Push a valu$ on to th$ stac@
void J(tac@::push(int i
{
i* (n$xt / GG
listTn$xt44U 3 i;
!
// Pop a valu$ o** th$ stac@
int J(tac@::pop(
{
r$turn listT;;n$xtU;
!
// +utput th$ cont$nts o* th$ stac@
void J(tac@::print(
{
cout // ?T?;
*or(int i3n$xt;1 ; i13" ; i;;
cout // ? ?// listTiU;
cout // 2 UKn2;
!
int 0ain(
{
J(tac@ s;
s.print(;
s.push(E;
s.push(1";
s.push(>;
s.print(;
cout // 2top o* stac@32 // s.pop( // $ndl;
s.print(;
r$turn ";
!
Problema 14
a0 -mplementar una clase 3+imple+tring 'ue contenga un c)arL y un entero !longitud#
como campos miembro privados. Proveer un constructor 'ue tome un argumento de tipo
const c)arL. -mplementar adem(s las funciones constructor de copia, destructor y
Informtica II Programacin orientada a objetos en C++
Pg. 3!
sobrecarga del operador de asignacin. ?erificar 'ue la clase funciona. Ayuda: 7tili$ar
funciones del arc)ivo de cabecera RcstringS.
b0 TUu otros constructores se pueden definir para la clase 3+imple+tringV 3odificarlos!
Solucin 14 a)
.includ$ /iostr$a01 // Xor str$a0 input/output
.includ$ /cstring1
using std::cout;
using std::$ndl;
class J(i0pl$(tring
{
privat$:
siz$8t l$n;
char: bu**;
public:
J(i0pl$(tring(const char: p 3 ";
J(i0pl$(tring(const J(i0pl$(tring< s;//uso d$ r$*$r$ncias, constructor copia
QJ(i0pl$(tring(;
J(i0pl$(tring< op$rator3(const J(i0pl$(tring< rhs;//sobr$carga op$rador$s
void print(;
!;
// Jonstructor
J(i0pl$(tring::J(i0pl$(tring(const char: p : l$n(", bu**("
{
i* (p C3 "
{
l$n 3 strl$n(p;
i* (l$n 1 "
{
bu** 3 n$# charTl$n41U;
strcpy8s(bu**, l$n41, p;
!
!
!
// Jopy constructor
J(i0pl$(tring::J(i0pl$(tring(const J(i0pl$(tring< s
{
l$n 3 s.l$n;
bu** 3 n$# charTl$n41U;
strcpy8s(bu**, l$n41, s.bu**;
!
// D$structor
J(i0pl$(tring::QJ(i0pl$(tring(
{
d$l$t$ bu**;
!
// 6ssign0$nt op$rator ; do$s not d$al #ith str 3 str
J(i0pl$(tring< J(i0pl$(tring::op$rator3(const J(i0pl$(tring< rhs
{
l$n 3 rhs.l$n;
d$l$t$ bu**;
bu** 3 n$# charTl$n41U;
Informtica II Programacin orientada a objetos en C++
Pg. 31
strcpy8s(bu**, l$n41, rhs.bu**;
r$turn :this;
!
void J(i0pl$(tring::print(
{
cout // bu**;
!
int 0ain(
{
J(i0pl$(tring s1 3 2h$llo2;
J(i0pl$(tring s= 3 2goodby$2;
cout // 2s1: K22;
s1.print(;
cout // 2K22 // $ndl;
cout // 2s=: K22;
s=.print(;
cout // 2K22 // $ndl;
cout // 2 6*t$r $x$cuting s= 3 s1:2 // $ndl;
s= 3 s1;
cout // 2s1 3 K22;
s1.print(;
cout // 2K22 // $ndl;
cout // 2s= 3 K22;
s=.print(;
cout // 2K22 // $ndl;
r$turn ";
!
Solucin 14 b)
.includ$ /iostr$a01
.includ$ /cstring1
using std::cout;
using std::$ndl;
class J(i0pl$(tring
{
privat$:
siz$8t l$n;
char: bu**;
public:
J(i0pl$(tring(const char: p 3 ";//argu0$nto por d$*$cto
J(i0pl$(tring(const J(i0pl$(tring< s;
J(i0pl$(tring(char c, int count31;
J(i0pl$(tring(int i;
QJ(i0pl$(tring(;
J(i0pl$(tring< op$rator3(const J(i0pl$(tring< rhs;
void print(;
!;
Informtica II Programacin orientada a objetos en C++
Pg. 32
// Jontructor ; r$p$at$d giv$n charact$r
J(i0pl$(tring::J(i0pl$(tring(char c, int count : l$n(", bu**("
{
l$n 3 count;
i* (l$n 1 "
{
bu** 3 n$# charTl$n41U;
0$0s$t(bu**, c, l$n;
bu**Tl$nU 3 ?K"?;
!
!
// Jonstructor ; *ro0 an int$g$r
J(i0pl$(tring::J(i0pl$(tring(int i : l$n(", bu**("
{
char s,0pT="U;
8itoa8s(i, s,0p, =", 1";
l$n 3 strl$n(s,0p;
i* (l$n 1 "
{
bu** 3 n$# charTl$n41U;
strcpy8s(bu**, l$n41, s,0p;
!
!
// Jonstructor
J(i0pl$(tring::J(i0pl$(tring(const char: p : l$n(", bu**("
{
i* (p C3 "
{
l$n 3 strl$n(p;
i* (l$n 1 "
{
bu** 3 n$# charTl$n41U;
strcpy8s(bu**, l$n41, p;
!
!
!
// Jopy constructor
J(i0pl$(tring::J(i0pl$(tring(const J(i0pl$(tring< s
{
l$n 3 s.l$n;
bu** 3 n$# charTl$n41U;
strcpy8s(bu**, l$n41, s.bu**;
!
// D$structor
J(i0pl$(tring::QJ(i0pl$(tring(
{
d$l$t$ bu**;
!
// 6ssign0$nt op$rator ; do$s not d$al #ith str 3 str
J(i0pl$(tring< J(i0pl$(tring::op$rator3(const J(i0pl$(tring< rhs
{
l$n 3 rhs.l$n;
d$l$t$ bu**;
Informtica II Programacin orientada a objetos en C++
Pg. 33
bu** 3 n$# charTl$n41U;
strcpy8s(bu**, l$n41, rhs.bu**;
r$turn :this;
!
void J(i0pl$(tring::print(
{
cout // bu**;
!
int 0ain(
{
J(i0pl$(tring s1 3 2h$llo2;
J(i0pl$(tring s=;
s= 3 s1;
J(i0pl$(tring 0ar@$r 3 J(i0pl$(tring(?:?, 3";
0ar@$r.print(;
cout // $ndl;
cout // 2s1 3 K22;
s1.print(;
cout // 2K22 // $ndl;
cout // 2s= 3 K22;
s=.print(;
cout // 2K22 // $ndl;
int n 3 I>G";
J(i0pl$(tring n(tr 3 J(i0pl$(tring(n;
cout // n // 2 as a string is K22;
n(tr.print(;
cout // 2K22 // $ndl;
0ar@$r.print(;
cout // $ndl;
r$turn ";
!
Problema 1*
+obrecargar los operadores H y HC para la clase del e*ercicio anterior para concatenar
strings.
'olucin:
.includ$ /iostr$a01 // Xor str$a0 input/output
.includ$ /cstring1
using std::cout;
using std::$ndl;
class J(i0pl$(tring{
privat$:
siz$8t l$n;
char: bu**;
Informtica II Programacin orientada a objetos en C++
Pg. 34
public:
J(i0pl$(tring(const char: p 3 ";
J(i0pl$(tring(const J(i0pl$(tring< s;
J(i0pl$(tring(char c, int count31;
J(i0pl$(tring(int i;
QJ(i0pl$(tring(;
J(i0pl$(tring< op$rator3(const J(i0pl$(tring< rhs;
J(i0pl$(tring< op$rator43(const J(i0pl$(tring< rhs;
J(i0pl$(tring op$rator4(const J(i0pl$(tring< s;
J(i0pl$(tring op$rator4(const char: s;
void print(;
!;
J(i0pl$(tring::J(i0pl$(tring(char c, int count : l$n(", bu**("
{
l$n 3 count;
i* (l$n 1 "
{
bu** 3 n$# charTl$n41U;
0$0s$t(bu**, c, l$n;
bu**Tl$nU 3 ?K"?;
!
!
J(i0pl$(tring::J(i0pl$(tring(int i : l$n(", bu**("
{
char s,0pT="U;
8itoa8s(i, s,0p, =", 1";
l$n 3 strl$n(s,0p;
i* (l$n 1 "
{
bu** 3 n$# charTl$n41U;
strcpy8s(bu**, l$n41, s,0p;
!
!
J(i0pl$(tring::J(i0pl$(tring(const char: p : l$n(", bu**("
{
i* (p C3 "
{
l$n 3 strl$n(p;
i* (l$n 1 "
{
bu** 3 n$# charTl$n41U;
strcpy8s(bu**, l$n41, p;
!
!
!
J(i0pl$(tring::J(i0pl$(tring(const J(i0pl$(tring< s
{
l$n 3 s.l$n;
bu** 3 n$# charTl$n41U;
strcpy8s(bu**, l$n41, s.bu**;
!
Informtica II Programacin orientada a objetos en C++
Pg. 35
J(i0pl$(tring::QJ(i0pl$(tring(
{
d$l$t$ bu**;
!
// 6ssign0$nt op$rator ; do$s d$al #ith str 3 str
J(i0pl$(tring< J(i0pl$(tring::op$rator3(const J(i0pl$(tring< rhs
{
i* (<rhs C3 this
{
l$n 3 rhs.l$n;
d$l$t$ bu**;
bu** 3 n$# charTl$n41U;
strcpy8s(bu**, l$n41, rhs.bu**;
!
r$turn :this;
!
// 6ddition op$rator: add t#o J(i0pl$(tring obD$cts
J(i0pl$(tring J(i0pl$(tring::op$rator4(const J(i0pl$(tring< s
{
siz$8t l$ngth 3 l$n 4 s.l$n 4 1;
char: t0p 3 n$# charTl$ngthU;
strcpy8s(t0p, l$ngth, bu**;
strcat8s(t0p, l$ngth, s.bu**;
r$turn J(i0pl$(tring(t0p;
!
// 6ddition op$rator: J(i0pl$(tring obD$ct 4 string constant
J(i0pl$(tring J(i0pl$(tring::op$rator4(const char: s
{
r$turn :this 4 J(i0pl$(tring(s;
!
// 43 op$rator
J(i0pl$(tring< J(i0pl$(tring::op$rator43(const J(i0pl$(tring< rhs
{
:this 3 :this 4 rhs;
r$turn :this;
!
void J(i0pl$(tring::print(
{
cout // bu**;
!
int 0ain(
{
J(i0pl$(tring s1 3 2h$llo2;
J(i0pl$(tring s=;
s= 3 s1;
J(i0pl$(tring 0ar@$r 3 J(i0pl$(tring(?:?, 3";
0ar@$r.print(;
cout // $ndl;
cout // 2s1 3 K22;
s1.print(;
Informtica II Programacin orientada a objetos en C++
Pg. 36
cout // 2K22 // $ndl;
cout // 2s= 3 K22;
s=.print(;
cout // 2K22 // $ndl;
int n 3 I>G";
J(i0pl$(tring n(tr 3 J(i0pl$(tring(n;
cout // n // 2 as a string is K22;
n(tr.print(;
cout // 2K22 // $ndl;
J(i0pl$(tring: p(tr 3 <s=;
s= 3 :p(tr; // s= 3 s=
cout // 2s= 3 K22;
s=.print(;
cout // 2K22 // $ndl;
s1 43 2 #orldC2;
cout // 2s1 3 K22;
s1.print(;
cout // 2K22 // $ndl;
0ar@$r.print(;
cout // $ndl;
r$turn ";
!
Problema 1+
2odificar la clase pila del e*ercicio .3 de forma 'ue el tamao de la misma sea
especificado mediante un constructor con reserva de memoria. Agregar lo 'ue sea
necesario. Probar el funcionamiento.
'olucin:
.includ$ /iostr$a01
using std::cout;
using std::$ndl;
class J(tac@
{
public:
J(tac@(int n 3 1";
QJ(tac@(;
void push(int i;
int pop(;
void print(;
privat$:
int: pList;
int siz$;
int n$xt;
!;
Informtica II Programacin orientada a objetos en C++
Pg. 37
J(tac@::J(tac@(int n : n$xt(", siz$(n
{
pList 3 n$# intTsiz$U;
!
J(tac@::QJ(tac@(
{
d$l$t$ TU pList;
!
void J(tac@::push(int i
{
i* (n$xt / GG
pListTn$xt44U 3 i;
!
int J(tac@::pop(
{
r$turn pListT;;n$xtU;
!
void J(tac@::print(
{
cout // ?T?;
*or(int i3n$xt;1 ; i13" ; i;;
cout // ? ?// pListTiU;
cout // 2 UKn2;
!
int 0ain(
{
J(tac@ s(=";
s.print(;
s.push(E;
s.push(1";
s.push(>;
s.print(;
cout // 2top o* stac@32 // s.pop( // $ndl;
s.print(;
r$turn ";
!
Problema 1,
3ree una clase 5viNn 'ue almacene el nombre del vuelo 'ue reali$a y el destino !aadir
mtodos de acceso y modificacin de dic)os datos miembros# y permita mostrar por
pantalla los datos asociados al mismo. 5uego cree dos clases derivadas:
5vionPasaKe"os y 5vionOid"ante, con los miembros necesarios para 'ue el siguiente
programa funcione correctamente:
Informtica II Programacin orientada a objetos en C++
Pg. 38
.includ$ 26vion[idrant$.h2
.includ$ 26vionPasaD$ros.h2
.includ$ /iostr$a01
using std::cout;
int 0ain(void
{
6vionPasaD$ros ap(26'1G-=2, 2Londr$s2, =F"", =I".E;
6vion[idrant$ ah(2-,3E33P>2, 2-ariloch$2, E"";
ap.0ostrarDatos(;
ah.0ostrarDatos(;
ah.d$scargar6gua(3"";
ah.0ostrarDatos(;
ah.d$scargar6gua(;
ah.0ostrarDatos(;
r$turn ";
!
De los aviones de pasa*eros !adem(s de los datos miembros del avin# debe almacenar
informacin sobre la cantidad de <ilos de e'uipa*e 'ue transporta y la duracin prevista del
vuelo !en minutos#. De los aviones )idrantes interesa almacenar la cantidad de agua 'ue
transportan !en litros# y la cantidad de litros de agua actuales. 5a funcin des#a"ga"5gua
() debe permitir disminuir la cantidad de agua 'ue se le pase como argumento, sino se le
pasa argumento deber( soltar todo el agua restante.
'olucin:
//6vion.h
.prag0a onc$
class 6vion
{
public:
6vion(char: nv, char: d;
void 0ostrarDatos(void;
char: g$t7o0br$Yu$lo(void;
char: g$tD$stino(void;
void s$tD$stino(char: d;
void s$t7o0br$Yu$lo(char: nv;
Q6vion(void;
privat$:
char: no0br$vu$lo;
char: d$stino;
!;
//6vion.cpp
.includ$ 26vion.h2
.includ$ /string.h1
.includ$ /iostr$a01
using std::cout;
6vion::6vion(char: nv, char: d
{
no0br$vu$lo3n$# charTstrl$n(nv41U;
strcpy8s(no0br$vu$lo, strl$n(nv41,nv;
d$stino3n$# charTstrl$n(d41U;
strcpy8s(d$stino, strl$n(d41,d;
!
Informtica II Programacin orientada a objetos en C++
Pg. 3
char: 6vion::g$tD$stino(void{
r$turn d$stino;
!
char: 6vion::g$t7o0br$Yu$lo(void
{
r$turn no0br$vu$lo;
!
void 6vion::s$tD$stino(char: d
{
d$l$t$ TU d$stino;
d$stino3n$# charTstrl$n(d41U;
strcpy8s(d$stino, strl$n(d41,d;
!
void 6vion::s$t7o0br$Yu$lo(char: nv
{
d$l$t$ TU no0br$vu$lo;
no0br$vu$lo3n$# charTstrl$n(nv41U;
strcpy8s(no0br$vu$lo, strl$n(nv41,nv;
!
void 6vion::0ostrarDatos(void
{
cout//2Bl vu$lo s$ lla0a: 2//no0br$vu$lo//2 y ti$n$ d$stino: 2//d$stino//2Kn2;
!
6vion::Q6vion(void
{
!
//6vion[idrant$.h
.prag0a onc$
.includ$ 2avion.h2
class 6vion[idrant$ :
public 6vion
{
public:
6vion[idrant$(char: nv, char: d, int l;
void d$scargar6gua(int l;
void d$scargar6gua(;
void 0ostrarDatos(void;
Q6vion[idrant$(void;
privat$:
int litros6gua;
int capacidad;
!;
//6vion[idrant$.cpp
.includ$ 26vion[idrant$.h2
.includ$ /iostr$a01
using std::cout;
6vion[idrant$::6vion[idrant$(char: nv, char: d, int c:6vion(nv, d
{
capacidad3c;
litros6gua3c;
!
Informtica II Programacin orientada a objetos en C++
Pg. 4!
void 6vion[idrant$::d$scargar6gua(int l{
litros6gua ;3l;
!
void 6vion[idrant$::d$scargar6gua(
{
litros6gua3";
!
void 6vion[idrant$::0ostrarDatos(
{
6vion::0ostrarDatos(;
cout//2La capacidad $n litros d$ agua $s: 2//capacidad
//2. 6ctual0$nt$ l$ )u$dan: 2//litros6gua//2litros d$ aguaKn2;
!
6vion[idrant$::Q6vion[idrant$(void
{
!
//6vionPasaD$ros
.prag0a onc$
.includ$ 2avion.h2
class 6vionPasaD$ros :
public 6vion
{
public:
6vionPasaD$ros(char: nv, char: d, int du, doubl$ p;
void 0ostrarDatos(void;
Q6vionPasaD$ros(void;
privat$:
int duracionYu$lo; //$n 0inutos
doubl$ p$soB)uipaD$;
!;
//6vionPasaD$ros.cpp
.includ$ 26vionPasaD$ros.h2
.includ$ /iostr$a01
using std::cout;
6vionPasaD$ros::6vionPasaD$ros(char: nv, char: d, int du, doubl$ p:6vion(nv,d
{
duracionYu$lo3du;
p$soB)uipaD$3p;
!
void 6vionPasaD$ros::0ostrarDatos(void
{
6vion::0ostrarDatos(;//r$utilizo c\digo
cout//2La duracion d$l 0is0o: 2//duracionYu$lo//2 0inutos, con capacidad 0axi0a
para $)uipaD$: 2//
p$soB)uipaD$//2Kn2;
!
6vionPasaD$ros::Q6vionPasaD$ros(void
{
!
//pru$ba6vion.cpp
.includ$ 26vion[idrant$.h2
.includ$ 26vionPasaD$ros.h2
.includ$ /iostr$a01
using std::cout;
Informtica II Programacin orientada a objetos en C++
Pg. 41
int 0ain(void
{
6vionPasaD$ros ap(26'1G-=2, 2Londr$s2, =F"", =I".E;
6vion[idrant$ ah(2-,3E33P>2, 2-ariloch$2, E"";
ap.0ostrarDatos(;
ah.0ostrarDatos(;
ah.d$scargar6gua(3"";
ah.0ostrarDatos(;
ah.d$scargar6gua(;
ah.0ostrarDatos(;
r$turn ";
!
Problema 1-
Dado el arc)ivo de cabecera de la clase abstracta Pigu"a:
.prag0a onc$
class Xigura
{
public:
virtual doubl$ ar$a(void3";//*uncion virtual pura
virtual void 0ostrar(void3";//0u$stra datos d$ las *iguras
bool 0ayor6r$a(Xigura: *;
//si this ti$n$ 0ayor ar$a )u$ * r$torna tru$
!;
defina las clases Qe#tangulo, 6i"#ulo y %"iangulo derivadas de Pigu"a.
-mplemente en las clases todas las funciones y datos miembros necesarios para ello.
Arme una aplicacin %est 'ue tenga una funcin main 'ue instancie ob*etos
Qe#tangulo, 6i"#ulo y %"iangulo !usando punteros de tipo Pigu"a#, y muestre un
mensa*e por pantalla indicando cu(l es la de mayor tamao, mostrando tambin sus
caracter%sticas !anc)o, alto, etc.#.
'olucin:
AABigura.)
.prag0a onc$
class Xigura
{
public:
virtual doubl$ ar$a(void3";
virtual void 0ostrar(void3";
bool 0ayor6r$a(Xigura: *;
bool 0ayor6r$a1(Xigura< *;
!;
//Xigura.cpp
.includ$ 2Xigura.h2
bool Xigura::0ayor6r$a(Xigura: *
{
r$turn this;1ar$a(1*;1ar$a(;
!
bool Xigura::0ayor6r$a1(Xigura< *
{
r$turn this;1ar$a(1*.ar$a(;!
Informtica II Programacin orientada a objetos en C++
Pg. 42
//Jirculo.h
.prag0a onc$
.includ$ 2*igura.h2
class Jirculo :
public Xigura
{
public:
Jirculo(doubl$ r;
virtual doubl$ ar$a(void;
virtual void 0ostrar(void;
QJirculo(void;
privat$:
doubl$ radio;
!;
//Jirculo.cpp
.includ$ 2Jirculo.h2
.includ$ /iostr$a01
using std::cout;
const doubl$ PP 3 std::atan(1.":F;
Jirculo::Jirculo(doubl$ r
{
radio3r;
!
doubl$ Jirculo::ar$a(void
{
r$turn PP:radio:radio;
!
void Jirculo::0ostrar(void
{
cout//2Bl Jirculo ti$n$ radio: 2//radio//2Kn2;
!
Jirculo::QJirculo(void
{
!
//5$ctangulo.h
.prag0a onc$
.includ$ 2Xigura.h2
class 5$ctangulo: public Xigura
{
public:
5$ctangulo(doubl$ l, doubl$ a;
virtual doubl$ ar$a(void;
virtual void 0ostrar(void;
Q5$ctangulo(void;
privat$:
doubl$ largo;
doubl$ ancho;
!;
//5$ctangulo.cpp
.includ$ 25$ctangulo.h2
.includ$ /iostr$a01
using std::cout;
5$ctangulo::5$ctangulo(doubl$ l, doubl$ a
{
largo3l;
ancho3a;!
Informtica II Programacin orientada a objetos en C++
Pg. 43
doubl$ 5$ctangulo::ar$a(void
{
r$turn largo:ancho;
!
void 5$ctangulo::0ostrar(void
{
cout//2Bl 5$ctangulo ti$n$ largo: 2//largo//2 y ancho: 2//ancho//2Kn2;
!
5$ctangulo::Q5$ctangulo(void
{
!
//,riangulo.h
.prag0a onc$
.includ$ 2Xigura.h2
class ,riangulo: public Xigura
{
public:
,riangulo(doubl$ b, doubl$ a;
virtual doubl$ ar$a(void;
virtual void 0ostrar(void;
Q,riangulo(void;
privat$:
doubl$ bas$;
doubl$ altura;
!;
//,riangulo.cpp
.includ$ 2,riangulo.h2
.includ$ /iostr$a01
using std::cout;
,riangulo::,riangulo(doubl$ b, doubl$ a
{
bas$3b;
altura3a;
!
doubl$ ,riangulo::ar$a(void
{
r$turn bas$:altura/=;
!
void ,riangulo::0ostrar(void
{
cout//2Bl triangulo ti$n$ bas$: 2//bas$//2 y altura: 2//altura//2Kn2;
!
,riangulo::Q,riangulo(void
{
!
//Pru$baXiguras.cpp
.includ$ /iostr$a01
.includ$ 2,riangulo.h2
.includ$ 25$ctangulo.h2
.includ$ 2Jirculo.h2
using std::cout;
int 0ain(void
{
Xigura: p13n$# ,riangulo(1,=;
Xigura: p=3n$# 5$ctangulo(=,1;
Informtica II Programacin orientada a objetos en C++
Pg. 44
Xigura: p33n$# Jirculo(1;
Xigura: *;
bool b3p3;10ayor6r$a1(:p=;
i*(b
cout//2Bl circulo $s $l 0as grand$2//2Kn2;
i*(p1;10ayor6r$a(p=
*3p1;
$ls$ *3p=;
i*(p3;10ayor6r$a(*
*3p3;
*;10ostrar(;
cout//2& ti$n$ un ar$a: 2//*;1ar$a(//2Kn2;
r$turn ";
!
Problema 1.
+e desea desarrollar una aplicacin para reali$ar operaciones aritmticas binarias simples
con n6meros reales !)uma, Qesta, P"odu#to, Division#. +e proporciona el arc)ivo
de cabecera de $*e"a#ion+ina"ia:
.prag0a onc$
class +p$racion-inaria
{
public:
+p$racion-inaria(doubl$ op1, doubl$ op=;
virtual doubl$ op$ra(3";//r$torna r$sultado op$raci\n binaria
doubl$ g$t+p$ra1(void;//r$torna op$rando 1
doubl$ g$t+p$ra=(void;//r$torna op$rando =
void 0ostrar(void;//0u$stra r$sultado op$raci\n
Q+p$racion-inaria(void;
privat$:
doubl$ op$rando1;
doubl$ op$rando=;
!;
.includ$ /iostr$a01
.includ$ 25$sta.h2
.includ$ 2Division.h2
using std::cout;
int 0ain(void
{
+p$racion-inaria: p13n$# (u0a(F,3;
+p$racion-inaria: p=3n$# 5$sta(F,3;
+p$racion-inaria: p33n$# Producto(F,3;
+p$racion-inaria: pF3n$# Division(F,3;
(u0a: pE3n$# 5$sta(3,F;
Producto: pH3n$# Division(3,F;
+p$racion-inaria: vTU3{p1, p=, p3,pF, pE,pH!;
*or(int i3";i/H;i44
vTiU;10ostrar(;
r$turn ";
!
3ompletar con el cdigo de las clases 'ue considere necesarias de forma tal 'ue
4atemati#as pueda ser compilada y e*ecutada sin errores.
Informtica II Programacin orientada a objetos en C++
Pg. 45
'olucin:
//+p$raci\n-inaria.h
.prag0a onc$
class +p$racion-inaria
{
public:
+p$racion-inaria(doubl$ op1, doubl$ op=;
virtual doubl$ op$ra(3";
doubl$ g$t+p$ra1(void;
doubl$ g$t+p$ra=(void;
void 0ostrar(void;
Q+p$racion-inaria(void;
privat$:
doubl$ op$rando1;
doubl$ op$rando=;
!;
//+p$racion-inaria.cpp
.includ$ 2+p$racion-inaria.h2
.includ$ /iostr$a01
using std::cout;
+p$racion-inaria::+p$racion-inaria(doubl$ op1,doubl$ op=
{
op$rando13op1;
op$rando=3op=;
!
doubl$ +p$racion-inaria::g$t+p$ra1(void
{
r$turn op$rando1;
!
doubl$ +p$racion-inaria::g$t+p$ra=(void
{
r$turn op$rando=;
!
void +p$racion-inaria::0ostrar(void
{
cout//2Bl r$sultado d$ la op$racion binaria $s: 2//op$ra(//2Kn2;
!
+p$racion-inaria::Q+p$racion-inaria(void
{
!
""Suma!#
.prag0a onc$
.includ$ 2op$racionbinaria.h2
class (u0a :
public +p$racion-inaria
{
public:
(u0a(doubl$ op1, doubl$ op=;
virtual doubl$ op$ra(void;
Q(u0a(void;
!;
""Suma!cpp
.includ$ 2(u0a.h2
(u0a::(u0a(doubl$ op1, doubl$ op=:+p$racion-inaria(op1, op=
{
!
Informtica II Programacin orientada a objetos en C++
Pg. 46
doubl$ (u0a::op$ra(void{
r$turn (g$t+p$ra1(4g$t+p$ra=(;
!
(u0a::Q(u0a(void
{
!
""$esta!#
.prag0a onc$
.includ$ 2su0a.h2
class 5$sta :
public (u0a
{
public:
5$sta(doubl$ op1, doubl$ op=;
Q5$sta(void;
!;
.includ$ 25$sta.h2
5$sta::5$sta(doubl$ op1, doubl$ op=:(u0a(op1, ;op=
{
!
5$sta::Q5$sta(void
{
!
""%roducto!#
.prag0a onc$
.includ$ 2op$racionbinaria.h2
class Producto :
public +p$racion-inaria
{
public:
Producto(doubl$ op1, doubl$ op=;
virtual doubl$ op$ra(void;
QProducto(void;
!;
//Producto.cpp
.includ$ 2Producto.h2
Producto::Producto(doubl$ op1, doubl$ op=:+p$racion-inaria(op1, op=
{
!
doubl$ Producto::op$ra(void
{
r$turn (g$t+p$ra1(:g$t+p$ra=(;
!
Producto::QProducto(void
{
!
""Di&ision!#
.prag0a onc$
.includ$ 2producto.h2
class Division :
Informtica II Programacin orientada a objetos en C++
Pg. 47
public Producto{
public:
Division(doubl$ op1, doubl$ op=;
QDivision(void;
!;
""Di&ision!cpp
.includ$ 2Division.h2
Division::Division(doubl$ op1, doubl$ op=:Producto(op1, (1/op=
{
!
Division::QDivision(void
{
!
""'atematicas!cpp
.includ$ /iostr$a01
.includ$ 25$sta.h2
.includ$ 2Division.h2
using std::cout;
int 0ain(void
{
+p$racion-inaria: p13n$# (u0a(F,3;
+p$racion-inaria: p=3n$# 5$sta(F,3;
+p$racion-inaria: p33n$# Producto(F,3;
+p$racion-inaria: pF3n$# Division(F,3;
(u0a: pE3n$# 5$sta(3,F;
Producto: pH3n$# Division(3,F;
+p$racion-inaria: vTU3{p1, p=, p3,pF, pE,pH!;
*or(int i3";i/H;i44
vTiU;10ostrar(;
r$turn ";
!
Problema &/
Dado el arc)ivo de cabecera de la clase abstracta 6om*ue"ta:
.prag0a onc$
class Jo0pu$rta
{
public:
Jo0pu$rta(int nro;
int g$t7ro$ntradas(void;//r$torna nro.$ntradas
int g$tBntrada7ro(int nro;//r$torna la $ntrada nro.
void s$tBntrada7ro(int nro, int val;//ca0bia la $ntrada nro con val
virtual int $val(void3";//$valua la salida d$ la co0pu$rta
static const int X6L(B3";
static const int ,5SB31;
static const int S7]7+^73=;
QJo0pu$rta(void;
privat$:
int nro$ntradas;//n_0$ro d$ $ntradas d$ la co0pu$rta
int: $ntradas;//v$ctor con los valor$s pr$s$nt$s $n todas las $ntradas d$ la co0pu$rta
!;
Informtica II Programacin orientada a objetos en C++
Pg. 48
complete el arc)ivo #** de dic)a clase. 4scriba el cdigo de la clase concreta
6om*ue"ta5DD 'ue represente al tipo de compuertas 'ue reali$an la funcin lgica 5DD
de todas sus entradas. -mplemente la aplicacin P"ueba con una funcin main donde se
cree una instancia de 6om*ue"ta5DD !usando un puntero de tipo 6om*ue"ta# para
evaluar el resultado.
8ota: si cual'uier entrada de esta compuerta tiene un valor RDSD$TD, el producto lgico
'ue reali$a la compuerta tendr( este valor.
'olucin:
//Jo0pu$rta.h
.prag0a onc$
class Jo0pu$rta
{
public:
Jo0pu$rta(int nro;
int g$t7ro$ntradas(void;
int g$tBntrada7ro(int nro;
void s$tBntrada7ro(int nro, int val;
virtual int $val(void3";
static const int X6L(B3";
static const int ,5SB31;
static const int S7]7+^73=;
QJo0pu$rta(void;
privat$:
int nro$ntradas;
int: $ntradas;
!;
""Compuerta!cpp
.includ$ 2Jo0pu$rta.h2
Jo0pu$rta::Jo0pu$rta(int nro
{
nro$ntradas3nro;
$ntradas3n$# intTnroU;
*or(int i3";i/nro$ntradas;i44
$ntradasTiU3S7]7+^7;
!
int Jo0pu$rta::g$t7ro$ntradas(void
{
r$turn nro$ntradas;
!
int Jo0pu$rta::g$tBntrada7ro(int nro
{
r$turn $ntradasTnroU;
!
void Jo0pu$rta::s$tBntrada7ro(int nro, int val
{
$ntradasTnroU3val;
!
Jo0pu$rta::QJo0pu$rta(void
{
!
""CompuertaA(D!#
.prag0a onc$
Informtica II Programacin orientada a objetos en C++
Pg. 4
.includ$ 2co0pu$rta.h2
class Jo0pu$rta67D :
public Jo0pu$rta
{
public:
Jo0pu$rta67D(int nro;
virtual int $val(void;
QJo0pu$rta67D(void;
!;
""CompuertaA(D!cpp
.includ$ 2Jo0pu$rta67D.h2
Jo0pu$rta67D::Jo0pu$rta67D(int nro:Jo0pu$rta(nro
{
!
int Jo0pu$rta67D::$val(void
{
*or(int i3";i/g$t7ro$ntradas(;i44
i*(g$tBntrada7ro(i33S7]7+^7r$turn S7]7+^7;
*or(int i3";i/g$t7ro$ntradas(;i44
i*(g$tBntrada7ro(i33X6L(Br$turn X6L(B;
r$turn ,5SB;
!
Jo0pu$rta67D::QJo0pu$rta67D(void
{
!
""prueaCompuerta!cpp
.includ$ 2Jo0pu$rta67D.h2
.includ$ /iostr$a01
using std::cout;
int 0ain(void
{
Jo0pu$rta: p3n$# Jo0pu$rta67D(F;
p;1s$tBntrada7ro(",Jo0pu$rta::,5SB;
p;1s$tBntrada7ro(1,Jo0pu$rta::,5SB;
p;1s$tBntrada7ro(=,Jo0pu$rta::X6L(B;
p;1s$tBntrada7ro(3,Jo0pu$rta::S7]7+^7;
i*((p;1$val(33Jo0pu$rta::,5SB
cout//2La salida d$ la co0pu$rta $stA $n niv$l: ,5SBKn2;
$ls$ i*((p;1$val(33Jo0pu$rta::X6L(B
cout//2La salida d$ la co0pu$rta $stA $n niv$l: X6L(BKn2;
$ls$
cout//2La salida d$ la co0pu$rta $stA $n niv$l: S7]7+^7Kn2;
r$turn ";
!
Problema &1
Dado el arc)ivo de cabecera de la clase ?olumen:
.prag0a onc$
class Yolu0$n
{
public:
Yolu0$n(char: t322, char: i322, int n31;
Yolu0$n (const Yolu0$n< v;
char: g$t,itulo(void;
Informtica II Programacin orientada a objetos en C++
Pg. 5!
char: g$tPsbn(void;
int g$t7roBD$0plar$s(void;
virtual void 0ostrarDatos(void;
void s$tDatos(char: t, char:i, int n;//s$t$o d$ los datos d$l libro
QYolu0$n(void;
privat$:
char: titulo;
char: isbn;
int nro$D$0plar$s;//cant.d$ $D$0plar$s d$ cada volu0$n
!;
3rear dos clases 'ue deriven de Uolumen: :ib"o y Qevista. De la clase :ib"o
!adem(s de tVtulo e 9)+D# interesa almacenar el auto" y edito"ial del mismo. De la
clase Qevista interesa !adem(s de tVtulo e 9)+D# almacenar el aWo de
*ubli#a#iNn y nXme"o de la misma.
Adem(s deber( crear una clase +ibliote#a como un array de punteros a Uolumen de
un m(@imo a determinar por el alumno !capacidad de almacenamiento de la biblioteca#
aadir una funcin miembro para mostrar todos los vol6menes !libros y revistas# 'ue tenga
la biblioteca y otra bool aWadi"Uolumen(Uolumen& v)< 'ue aada el volumen a 'ue
apunta v (:ib"o o Qevista) y retorne t"ue si pudo aadir el volumen !a6n no se
alcan$ la capacidad m(@ima de la biblioteca# y false en caso contrario.
3ree una aplicacin P"ueba con una funcin main() 'ue cree algunos libros y revistas
!como punteros a Uolumen# y los aada en una +ibliote#a previamente creada.
2ostrar los datos de los vol6menes disponibles en dic)a +ibliote#a.
'olucin:
AA?olumen.)
.prag0a onc$
class Yolu0$n
{
public:
Yolu0$n(char: t322, char: i322, int n31;
Yolu0$n (const Yolu0$n< v;
char: g$t,itulo(void;
char: g$tPsbn(void;
int g$t7roBD$0plar$s(void;
virtual void 0ostrarDatos(void;
void s$tDatos(char: t, char:i, int n;
QYolu0$n(void;
privat$:
char: titulo;
char: isbn;
int nro$D$0plar$s;
!;
"")olumen!cpp
.includ$ 2Yolu0$n.h2
.includ$ /iostr$a01
using std::cout;
Yolu0$n::Yolu0$n(char: t, char: i, int n//oDo ocurr$ $*$cto division $n porcion$s (1=.=.3
{
titulo3n$# charTstrl$n(t41U;
strcpy8s(titulo, strl$n(t41,t;
isbn3n$# charTstrl$n(i41U;
strcpy8s(isbn, strl$n(i41,i;
nro$D$0plar$s3n;
Informtica II Programacin orientada a objetos en C++
Pg. 51
!
Yolu0$n::Yolu0$n(const Yolu0$n< v
{
titulo3n$# charTstrl$n(v.titulo41U;
strcpy8s(titulo, strl$n(v.titulo41,v.titulo;
isbn3n$# charTstrl$n(v.isbn41U;
strcpy8s(isbn, strl$n(v.isbn41,v.isbn;
nro$D$0plar$s3v.nro$D$0plar$s;
cout//2($ lla0a al constructor por copia d$ Yolu0$n2;
!
char: Yolu0$n::g$t,itulo(void
{
r$turn titulo;
!
char: Yolu0$n::g$tPsbn(void
{
r$turn isbn;
!
void Yolu0$n::0ostrarDatos(void
{
cout//2Bl tRtulo d$l volu0$n $s: 2//titulo// 2 y $l P(-7: 2//isbn
//2Kn2;
!
int Yolu0$n::g$t7roBD$0plar$s(void
{
r$turn nro$D$0plar$s;
!
void Yolu0$n::s$tDatos(char: t, char: i, int n
{
titulo3n$# charTstrl$n(t41U;
strcpy8s(titulo, strl$n(t41,t;
isbn3n$# charTstrl$n(i41U;
strcpy8s(isbn, strl$n(i41,i;
nro$D$0plar$s3n;
!
Yolu0$n::QYolu0$n(void
{
!
""$e&ista!#
.prag0a onc$
.includ$ 2volu0$n.h2
class 5$vista :
public Yolu0$n
{
public:
5$vista(char: t322, char: i322, int a3", int nror3", int n31;
int g$ta`o(void;
int g$tnror$vista(void;
virtual void 0ostrarDatos(void;
void s$tDatos(char: t, char: i, int a, int nror, int n;
Q5$vista(void;
privat$:
int a`o;
int nror$vista;
!;
""$e&ista!cpp
.includ$ 25$vista.h2
.includ$ /iostr$a01
using std::cout;
Informtica II Programacin orientada a objetos en C++
Pg. 52
5$vista::5$vista(char: t, char: i, int a, int nror, int n:Yolu0$n(t,i,n
{
a`o3a;
nror$vista3nror;
!
int 5$vista::g$ta`o(void
{
r$turn a`o;
!
int 5$vista::g$tnror$vista(void
{
r$turn nror$vista;
!
void 5$vista::0ostrarDatos(void
{
Yolu0$n::0ostrarDatos(;
cout//2Bl a`o d$ la r$vista $s: 2//a`o// 2, $l nu0$ro $s: 2//nror$vista
//2 y la cantidad d$ $D$0plar$s )u$ hay $s: 2//g$t7roBD$0plar$s(
//2Kn2;
!
void 5$vista::s$tDatos(char: t, char: i, int a, int nror, int n
{
Yolu0$n::s$tDatos(t,i,n;
a`o3a;
nror$vista3nror;
!
5$vista::Q5$vista(void
{
!
""*iro!#
.prag0a onc$
.includ$ 2volu0$n.h2
class Libro :
public Yolu0$n
{
public:
Libro(char: t322, char: i322, char: a322, char: $322,int n31;
Libro(const Libro< otro;
char: g$tautor(;
char: g$t$ditorial(;
virtual void 0ostrarDatos(void;
void s$tDatos(char: t, char: i, char: a, char: $,int n;
QLibro(void;
privat$:
char: autor;
char: $ditorial;
!;
""*iro!cpp
.includ$ 2Libro.h2
.includ$ /iostr$a01
using std::cout;
Libro::Libro(char: t, char: i, char: a, char: $,int n:Yolu0$n(t,i,n
{
autor3n$# charTstrl$n(a41U;
strcpy8s(autor, strl$n(a41,a;
$ditorial3n$# charTstrl$n($41U;
strcpy8s($ditorial, strl$n($41,$;
Informtica II Programacin orientada a objetos en C++
Pg. 53
!
Libro::Libro(const Libro< l:Yolu0$n(l
{
autor3n$# charTstrl$n(l.autor41U;
strcpy8s(autor, strl$n(l.autor41,l.autor;
$ditorial3n$# charTstrl$n(l.$ditorial41U;
strcpy8s($ditorial, strl$n(l.$ditorial41,l.$ditorial;
cout//2($ lla0a al constructor por copia d$ Libro2;
!
char: Libro::g$tautor(void
{
r$turn autor;
!
char: Libro::g$t$ditorial(void
{
r$turn $ditorial;
!
void Libro::0ostrarDatos(void
{
Yolu0$n::0ostrarDatos(;
cout//2Bl autor d$l libro $s: 2//autor// 2, la $ditorial: 2//$ditorial//2 y la
cantidad d$ vol_0$n$s: 2
//g$t7roBD$0plar$s(
//2Kn2;
!
void Libro::s$tDatos(char: t, char: i, char: a, char: $,int n
{
Yolu0$n::s$tDatos(t,i,n;
autor3n$# charTstrl$n(a41U;
strcpy8s(autor, strl$n(a41,a;
$ditorial3n$# charTstrl$n($41U;
strcpy8s($ditorial, strl$n($41,$;
!
Libro::QLibro(void
{
!
""+ilioteca!#
.prag0a onc$
.includ$ 2volu0$n.h2
class -ibliot$ca
{
public:
-ibliot$ca(void;
void 0ostrarDatos(void;
bool a`adirYolu0$n(Yolu0$n: v;
Q-ibliot$ca(void;
privat$:
static const int 96%31"";
Yolu0$n: volu0$n$sT96%U;
int i;
!;
""+ilioteca!cpp
.includ$ 2-ibliot$ca.h2
-ibliot$ca::-ibliot$ca(void
{
i3";
!
Informtica II Programacin orientada a objetos en C++
Pg. 54
void -ibliot$ca::0ostrarDatos(void
{
*or(int D3";D/i;D44
volu0$n$sTDU;10ostrarDatos(;
!
bool -ibliot$ca::a`adirYolu0$n(Yolu0$n: v{
bool agr$gado3*als$;
i*(i/96%{
volu0$n$sTiU3v;
i44;//)u$da apuntando al sigui$nt$
agr$gado3tru$;
!
r$turn agr$gado;
!
-ibliot$ca::Q-ibliot$ca(void
{
!
""+ilioteca!cpp
.includ$ /iostr$a01
.includ$ 2-ibliot$ca.h2
.includ$ 25$vista.h2
.includ$ 2Libro.h2
using std::cout;
using std::$ndl;
int 0ain(
{
Libro l(2Progra0acion $n l$nguaD$s $structurados2, 2GI";1E;11HE;F2,29a.6suncion Jriado
Jlav$ro2, 26l*ao0$ga2, 1;
5$vista r(2Lugar$s2, 2GI>>F3E"H1EGG2, ="11,1>G,=;
-ibliot$ca b;
b.a`adirYolu0$n(<l;
b.a`adirYolu0$n(<r;
b.0ostrarDatos(;
r$turn ";
!
Problema &&
7n tren de carga lleva dos clases de vagones: Uagon6aKa 'ue tienen forma de prisma
rectangular y Uagon%anque 'ue tienen forma cil%ndrica.
Deber( disear tres clases para representar vagones de tren, una clase base !Uagon#
abstracta con un dato miembro 'ue represente la longitud de los vagones y dos clases
derivadas !Uagon6aKa y Uagon%anque# para representar los dos tipos de vagones. Para
el vagn de tipo Uagon6aKa deber( almacenar su alto, an#ho !aparte de la
longitud#. Para el vagn de tipo Uagon%anque deber( almacenar su "adio !aparte de
su longitud#. 5as tres clases deben poseer un mtodo volumen() 'ue retorna un valor
de tipo double 'ue representa la capacidad en metros c6bicos del vagn. Parte de su
traba*o ser( decidir si el mtodo volumen() en cada una de las clases es declarado
abstracto o no.
&ecordar 'ue el volumen de un prisma rectangular es: alto & an#ho & longitud y el
del cilindro es P9 & "
'
& longitud.
Informtica II Programacin orientada a objetos en C++
Pg. 55
3ree una clase %"en 'ue represente a un tren de carga con sus vagones. 7tilice un array
de punteros de tipo Uagon. 5a clase debe tener una funcin miembro bool
aWadi"Uagon(Uagon& v)< 'ue permita aadir un vagn de alg6n tipo al %"en !si es 'ue
no supera la cantidad de vagones l%mite del tren# y otra 'ue retorne el volumen total del
tren.
3ree una aplicacin de prueba 'ue permita crear trenes y calcular la capacidad total de
carga de cada tren.
'olucin:
AA?agon.)
.prag0a onc$
class Yagon
{
public:
Yagon(doubl$ l31;
virtual doubl$ volu0$n(void3";
doubl$ g$tLongitud(;
QYagon(void;
privat$:
doubl$ longitud;
!;
"")agon!cpp
.includ$ 2Yagon.h2
Yagon::Yagon(doubl$ l
{
longitud3l;
!
doubl$ Yagon::g$tLongitud(void
{
r$turn longitud;
!
Yagon::QYagon(void
{
!
"")agonCa,a!#
.prag0a onc$
.includ$ 2vagon.h2
class YagonJaDa :
public Yagon
{
public:
YagonJaDa(doubl$ l31, doubl$ an31, doubl$ al31;
virtual doubl$ volu0$n(void;
QYagonJaDa(void;
privat$:
doubl$ ancho;
doubl$ alto;
!;
"")agonCa,a!cpp
.includ$ 2YagonJaDa.h2
YagonJaDa::YagonJaDa(doubl$ l, doubl$ an, doubl$ al:Yagon(l
{
ancho3an;
Informtica II Programacin orientada a objetos en C++
Pg. 56
alto3al;
!
doubl$ YagonJaDa::volu0$n(void
{
r$turn alto:ancho:g$tLongitud(;
!
YagonJaDa::QYagonJaDa(void
{
!
"")agon-an.ue!#
.prag0a onc$
.includ$ 2Yagon.h2
class Yagon,an)u$: public Yagon
{
public:
Yagon,an)u$(doubl$ l31, doubl$ r31;
virtual doubl$ volu0$n(void;
QYagon,an)u$(void;
privat$:
doubl$ radio;
!;
"")agon-an.ue!cpp
.includ$ 2Yagon,an)u$.h2
.includ$ /iostr$a01
.d$*in$ PP std::atan(1.":F
Yagon,an)u$::Yagon,an)u$(doubl$ l, doubl$ r:Yagon(l
{
radio3r;
!
doubl$ Yagon,an)u$::volu0$n(void
{
r$turn PP:radio:radio:g$tLongitud(;
!
Yagon,an)u$::QYagon,an)u$(void
{
!
.includ$ 2Yagon,an)u$.h2
.includ$ /iostr$a01
.d$*in$ PP std::atan(1.":F
Yagon,an)u$::Yagon,an)u$(doubl$ l, doubl$ r:Yagon(l
{
radio3r;
!
doubl$ Yagon,an)u$::volu0$n(void
{
r$turn PP:radio:radio:g$tLongitud(;
!
Yagon,an)u$::QYagon,an)u$(void
{
!
Informtica II Programacin orientada a objetos en C++
Pg. 57
""-ren!#
.prag0a onc$
.includ$ 2Yagon.h2
class ,r$n
{
public:
,r$n(int n;
doubl$ volu0$n,otal(void;
bool a`adirYagon(Yagon: v;
Q,r$n(void;
privat$:
int nrovagon$s;
int i;
Yagon: vagon$sT1""U;
!;
""-ren!cpp
.includ$ 2,r$n.h2
,r$n::,r$n(int n
{
nrovagon$s3n;
i3";
!
bool ,r$n::a`adirYagon(Yagon: v
{
bool agr$gado3*als$;
i*(i/1""{
vagon$sTiU3v;
i44;
agr$gado3tru$;
!
r$turn agr$gado;
!
doubl$ ,r$n::volu0$n,otal(void
{
doubl$ vt3";
*or(int D3";D/i;D44
vt43vagon$sTDU;1volu0$n(;
r$turn vt;
!
,r$n::Q,r$n(void
{
!
""%ruea-ren!cpp
.includ$ /iostr$a01
.includ$ 2,r$n.h2
.includ$ 2YagonJaDa.h2
.includ$ 2Yagon,an)u$.h2
.d$*in$ PP std::atan(1.":F
using std::cout;
int 0ain(
{
Yagon :v13n$# YagonJaDa(1.",1.",PP;
Yagon :v=3n$# Yagon,an)u$(;
,r$n t(=;
t.a`adirYagon(v1;
t.a`adirYagon(v=;
cout//2Bl volu0$n total transportado por $l tr$n $s: 2//t.volu0$n,otal(//2Kn2;
Informtica II Programacin orientada a objetos en C++
Pg. 58
r$turn ";
!
Problema &(
2i programa de actividades )ogareas diarias incluye una variedad de tareas tales como:
tareas escolares, gimnasia y comidas. +e trata de modelar estas tareas usando clases en
3HH.
Defina la clase base abstracta %a"ea de acuerdo al siguiente arc)ivo de cabecera:
.prag0a onc$
class ,ar$a
{
public:
,ar$a(void;
virtual doubl$ cuanto,i$0po(void3";
void s$t,i$0po(doubl$ t;
Q,ar$a(void;
privat$:
doubl$ ti$0po;
!;
y defina las siguientes tres clases derivadas concretas:
.# %a"eaEs#ola" 'ue tiene un campo: el n6mero de problemas a resolver.
=# Yimnasia 'ue tiene un campo: si estoy )aciendo o no bicicleta fi*a.
3# 6omida 'ue no tiene campos.
Debe definir adem(s en cada clase un mtodo #uantotiem*o() , 'ue retorne la cantidad
de minutos 'ue toma reali$ar una tarea:
.# 7na tarea escolar toma ., minutos por problema.
=# imnasia ocupa ", minutos, m(s un e@tra de =, minutos si estoy usando la bicicleta
fi*a
3# 4n comer ocupo siempre 3, minutos.
Binalmente usando las definiciones de las 1 clases deber( crear un array de 0 punteros a
Tareas en una funcion main() de una aplicacin P"ueba, donde calcular( el tiempo
necesario para reali$ar todas estas tareas y lo mostrar( por pantalla
Problema &4
Dada la siguiente clase abstracta, cuyo arc)ivo de cabecera es el siguiente:
.prag0a onc$
class P$rsona
{
public:
P$rsona(char: n, doubl$ $, doubl$ p;
char: g$t7o0br$(void;
doubl$ g$tBstatura(void;
doubl$ g$tP$so(void;
doubl$ P9J(void;
virtual doubl$ p$sot$orico(void3";
virtual char: $stado+9((void3";
virtual void 0ostrardatos(;
Informtica II Programacin orientada a objetos en C++
Pg. 5
QP$rsona(void;
privat$:
char: no0br$;
doubl$ $statura;
doubl$ p$so;
!;
donde el -ndice de 2asa 3orporal !946# se calcula dividiendo los <ilogramos de peso por el
cuadrado de la estatura en metros. 3ompletar el arc)ivo #** de dic)a clase
W dados los siguientes arc)ivos de cabecera !incompletos# de las clases derivadas:
Oomb"e y 4uKe" !completarlo y lo mismo para los #** correspondientes#:
.prag0a onc$
.includ$ 2p$rsona.h2
class [o0br$ : public P$rsona
{
public:
[o0br$(char: n, doubl$ $, doubl$ p, bool c;
//co0pl$tar
privat$:
bool corpul$nto;
!;
.prag0a onc$
.includ$ 2p$rsona.h2
class 9uD$r : public P$rsona
{
public:
9uD$r(char: n, doubl$ $, doubl$ p, int nh;
//co0pl$tar
privat$:
int nrohiDos;
!;
Debe tenerse en cuenta 'ue:
a# 4l peso terico se calcula como:
2u*eres: 0, <g para los primeros ..0 m de altura m(s =.0 <g por cada =.0 cm
adicionales, mas ,."0 Xg por un )i*o ..3 Xg por = )i*os o mas.
9ombres: 03 <g para los primeros ..0 m de altura m(s 3 <g para cada =.0 cm
adicionales, mas .,: si el )ombre es corpulento.
b# 4l -ndice de 2asa 3orporal !-23# da origen a la siguiente clasificacin acorde a la
>2+:
R .F,0: Peso Oa*o !-ndica delgade$, desnutricin o alg6n problema de salud#
)asta =1,G !)ombres# o =3,G !mu*eres#. Peso normal !4st( catalogado como
saludable#
)asta =G.G )ombres =F.G mu*eres: +obrepeso !u >besidad leve#
)asta 1, )ombres 3P mu*eres: >besidad grado =.
S 1, )ombres S 3P mu*eres: >besidad severa o grado 3.
4l cdigo a completar debe ser tal 'ue )aga compilar y e*ecutar la siguiente aplicacin:
.includ$ 2[o0br$.h2
.includ$ 29uD$r.h2
.includ$ /iostr$a01
using std::cout;
Informtica II Programacin orientada a objetos en C++
Pg. 6!
int 0ain(void{
P$rsona: p$rsonasTFU;
p$rsonasT"U3n$# [o0br$(2Wavi$r2,1.IE,>3.",*als$;
p$rsonasT1U3n$# 9uD$r(29arisa2,1.>",I=.",";
p$rsonasT=U3n$# [o0br$(2Wuan2,1.I",G=.",*als$;
p$rsonasT3U3n$# [o0br$(2P$dro2,1.GE,11".",tru$;
*or(int i3";i/F;i44
p$rsonasTiU;10ostrardatos(;
r$turn ";
!
'olucin:
//P$rsona.h
.prag0a onc$
class P$rsona
{
public:
P$rsona(char: n, doubl$ $, doubl$ p;
char: g$t7o0br$(void;
doubl$ g$tBstatura(void;
doubl$ g$tP$so(void;
doubl$ P9J(void;
virtual doubl$ p$sot$orico(void3";
virtual char: $stado+9((void3";
virtual void 0ostrardatos(;
QP$rsona(void;
privat$:
char: no0br$;
doubl$ $statura;
doubl$ p$so;
!;
""%ersona!cpp
.includ$ 2P$rsona.h2
.includ$ /iostr$a01
using std::cout;
P$rsona::P$rsona(char: n, doubl$ $, doubl$ p
{
no0br$3n$# charTstrl$n(n41U;
strcpy8s(no0br$, strl$n(n41,n;
$statura3$;
p$so3p;
!
char: P$rsona::g$t7o0br$(void
{
r$turn no0br$;
!
doubl$ P$rsona::g$tBstatura(void
{
r$turn $statura;
!
doubl$ P$rsona::g$tP$so(void
{
r$turn p$so;
!
doubl$ P$rsona::P9J(void
{
Informtica II Programacin orientada a objetos en C++
Pg. 61
r$turn p$so/($statura:$statura;
!
void P$rsona::0ostrardatos(void{
cout//27o0br$: 2//no0br$//2, Bstatura: 2//$statura//2, P$so: 2//p$so//2Kn2//
2P$so t$\rico: 2//p$sot$orico(//2, Pndic$ d$ 0asa 0uscular: 2//P9J(//2,
Bstado s$g_n +9(: 2
//$stado+9((//2Kn2;
!
P$rsona::QP$rsona(void
{
!
""'u,er!#
.prag0a onc$
.includ$ 2p$rsona.h2
class 9uD$r :
public P$rsona
{
public:
9uD$r(char: n, doubl$ $, doubl$ p, int nh;
virtual doubl$ p$sot$orico(void;
virtual char: $stado+9((void;
virtual void 0ostrardatos(void;
Q9uD$r(void;
privat$:
int nrohiDos;
!;
""'u,er!cpp
.includ$ 29uD$r.h2
.includ$ /iostr$a01
using std::cout;
9uD$r::9uD$r(char: n, doubl$ $, doubl$ p, int nh:P$rsona(n, $, p
{
nrohiDos3nh;
!
doubl$ 9uD$r::p$sot$orico(void
{
doubl$ pt3";
doubl$ pt13(g$tBstatura(;1.E/"."=E;
i*(g$tBstatura(/31.E
pt3E";
$ls$
pt3E"4pt1:=.E;
i*(nrohiDos331
pt43".HE;
$ls$ i*(nrohiDos11
pt431.3;
r$turn pt;
!
char: 9uD$r::$stado+9((void
{
doubl$ i0c3P9J(;
i*(i0c/1>.E
r$turn 2P$so baDo2;
$ls$ i*(i0c/3=3.G
r$turn 2P$so nor0al2;
$ls$ i*(i0c/3=>.G
Informtica II Programacin orientada a objetos en C++
Pg. 62
r$turn 2(obr$p$so2;
$ls$ i*(i0c/33I
r$turn 2+b$sidad grado =2;
$ls$
r$turn 2+b$sidad s$v$ra o grado 32;
!
void 9uD$r::0ostrardatos(void
{
P$rsona::0ostrardatos(;
cout//27ro. d$ hiDos: 2//nrohiDos//2Kn2;
!
9uD$r::Q9uD$r(void
{
!
""/omre!#
.prag0a onc$
.includ$ 2p$rsona.h2
class [o0br$ : public P$rsona
{
public:
[o0br$(char: n, doubl$ $, doubl$ p, bool c;
virtual doubl$ p$sot$orico(void;
virtual char: $stado+9((void;
virtual void 0ostrardatos(void;
Q[o0br$(void;
privat$:
bool corpul$nto;
!;
.includ$ 2[o0br$.h2
.includ$ /iostr$a01
using std::cout;
[o0br$::[o0br$(char: n, doubl$ $, doubl$ p, bool c:P$rsona(n,$,p
{
corpul$nto3c;
!
doubl$ [o0br$::p$sot$orico(void
{
doubl$ pt3";
doubl$ pt13(g$tBstatura(;1.E/"."=E;
i*(g$tBstatura(/31.E
pt3E3;
$ls$
pt3E"4pt1:3;
i*(corpul$nto33tru$
pt:31.1;
r$turn pt;
!
char: [o0br$::$stado+9((void{
doubl$ i0c3P9J(;
i*(i0c/1>.E
r$turn 2P$so baDo2;
$ls$ i*(i0c/3=F.G
r$turn 2P$so nor0al2;
$ls$ i*(i0c/3=G.G
r$turn 2(obr$p$so2;
$ls$ i*(i0c/3F"
r$turn 2+b$sidad grado =2;
Informtica II Programacin orientada a objetos en C++
Pg. 63
$ls$
r$turn 2+b$sidad s$v$ra o grado 32;
!
void [o0br$::0ostrardatos(void
{
P$rsona::0ostrardatos(;
cout//2Bs corpul$ntoN: 2//corpul$nto//2Kn2;
!
[o0br$::Q[o0br$(void
{
!
""%ruea%ersona!cpp
.includ$ 2[o0br$.h2
.includ$ 29uD$r.h2
.includ$ /iostr$a01
using std::cout;
int 0ain(void
{
P$rsona: p$rsonasTFU;
p$rsonasT"U3n$# [o0br$(2Wavi$r2,1.IE,>3.",*als$;
p$rsonasT1U3n$# 9uD$r(29arisa2,1.>",I=.",";
p$rsonasT=U3n$# [o0br$(2Wuan2,1.I",G=.",*als$;
p$rsonasT3U3n$# [o0br$(2P$dro2,1.GE,11".",tru$;
*or(int i3";i/F;i44
p$rsonasTiU;10ostrardatos(;
r$turn ";
!
Problema &*
3ree las siguientes clases:
Uehi#ulo !una clase abstracta#
Y UehV#ulo tiene un constructor 'ue se usa para determinar dos propiedades:
nombre !cadena de caracteres# y precio !double#.
Y 3ree dos funciones miembros de acceso para retornar cada una de las propiedades
mencionadas.
Y 3ree una funcin miembro 'ue permita modificar el nombre del ve)%culo.
Y 3ree un mtodo abstracto: #al#ula"%asa() 'ue retorne un valor 'ue indi'ue el
monto de un impuesto anual sobre el ve)%culo.
6amion !una clase concreta#
Y 4l constructor invoca al de la clase base para establecer el valor de las propiedades
nombre y precio. 4l constructor de 6amion acepta nombre y precio como par(metro.
Y 6amion tiene una propiedad n"oQuedas !entero#. 3ree funciones miembros de
acceso y modificacin de esta propiedad.
Y #al#ula"%asa() calcular( el impuesto multiplicando el n6mero de ruedas del
camin por .,,.
Y 6amion tiene una funcin miembro stati#C int nume"o6amiones() 'ue
retorna un n6mero 'ue indica cu(ntas instancias de tipo 6amion se )an creado en un
programa. Declare cual'uier variable 'ue necesite para ello y aseg6rese 'ue la clase
actualice esta variable cuando sea necesario.
Informtica II Programacin orientada a objetos en C++
Pg. 64
5e"o*lano !una clase concreta#
Y 4l constructor llama al de la clase base para establecer el valor de las propiedades
nombre y precio. 4l constructor de 5e"o*lano acepta nombre y precio como par(metros.
Y 5e"o*lano tiene una propiedad n"o5sientos !entero#. 3ree funciones miembros
de acceso y modificacin para esta propiedad.
Y #al#ula"%asa() calcula la tasa multiplicando el n6mero de asientos por =,,.
Y Aeroplano tiene un mtodo stati#C int nume"o5e"o*lanos() 'ue retorna un
n6mero 'ue indica cu(ntas instancias de tipo 5e"o*lano se )an creado en un programa.
Declare cual'uier variable 'ue necesite para ello y aseg6rese 'ue la clase actualice esta
variable cuando sea necesario.
3ree una aplicacin con una funcin main donde instancie ob*etos de tipo 6amion y
5e"o*lano y escriba una l%nea de cdigo donde muestre cmo invoca el mtodo stati#
n"o6amiones() y muestre por pantalla el resultado de esta invocacin.
'olucin1
//Y$hiculo.h
.prag0a onc$
class Y$hiculo
{
public:
Y$hiculo(char: n, doubl$ p;
char: g$t7o0br$(void;
doubl$ g$tPr$cio(void;
virtual doubl$ calcular,asa(void3";
QY$hiculo(void;
privat$:
char: no0br$;
doubl$ pr$cio;
!;
"")e#iculo!cpp
.includ$ 2Y$hiculo.h2
.includ$ /iostr$a01
Y$hiculo::Y$hiculo(char: n, doubl$ p
{
no0br$3n$# charTstrl$n(n41U;
strcpy8s(no0br$, strl$n(n41,n;
pr$cio3p;
!
char: Y$hiculo::g$t7o0br$(void
{
r$turn no0br$;
!
doubl$ Y$hiculo::g$tPr$cio(void
{
r$turn pr$cio;
!
Y$hiculo::QY$hiculo(void
{
!
""Camion!#
.prag0a onc$
.includ$ 2v$hiculo.h2
Informtica II Programacin orientada a objetos en C++
Pg. 65
class Ja0ion :
public Y$hiculo{
public:
Ja0ion(char: n, doubl$ p, int nror;
virtual doubl$ calcular,asa(void;
static int nroJa0ion$s(void;
QJa0ion(void;
privat$:
int nroru$das;
static int nroca0ion$s;
!;
//Ja0ion.cpp
.includ$ 2Ja0ion.h2
Ja0ion::Ja0ion(char: n, doubl$ p, int nror:Y$hiculo(n,p
{
nroru$das3nror;
nroca0ion$s44;
!
doubl$ Ja0ion::calcular,asa(void
{
r$turn 1"":nroru$das;
!
int Ja0ion::nroJa0ion$s(void
{
r$turn nroca0ion$s;
!
Ja0ion::QJa0ion(void
{
!
int Ja0ion::nroca0ion$s3";
""Aeroplano!#
.prag0a onc$
.includ$ 2v$hiculo.h2
class 6$roplano :
public Y$hiculo
{
public:
6$roplano(char: n, doubl$ p, int nroa;
virtual doubl$ calcular,asa(void;
static int nro6$roplanos(void;
Q6$roplano(void;
privat$:
int nroasi$ntos;
static int nroa$roplanos;
!;
//6$roplano.cpp
.includ$ 26$roplano.h2
6$roplano::6$roplano(char: n, doubl$ p, int nroa:Y$hiculo(n,p
{
nroasi$ntos3nroa;
nroa$roplanos44;
!
doubl$ 6$roplano::calcular,asa(void
{
r$turn ="":nroasi$ntos;
Informtica II Programacin orientada a objetos en C++
Pg. 66
!
int 6$roplano::nro6$roplanos(void
{
r$turn nroa$roplanos;!
6$roplano::Q6$roplano(void
{
!
int 6$roplano::nroa$roplanos3";
""%rueaA&iones!cpp
.includ$ /iostr$a01
.includ$ 2Ja0ion.h2
.includ$ 26$roplano.h2
using std::cout;
int 0ain(void
{
Ja0ion c(29$rc$d$s -$nz2, 1=3""",H;
Ja0ion d(2(cania2, 1=E""", >;
cout//2Bl nro. d$ ca0ion$s cr$ados $s: 2//Ja0ion::nroJa0ion$s(//2Kn2;
r$turn ";
!
Problema &+
Dada la siguiente clase 'ue representa una cone@in a -nternet brindada por alg6n
proveedor de dic)o servicio:
//65J[PY+ J6-BJB56 Jon$xion.h
.prag0a onc$
class Jon$xion
{
public:
Jon$xion(char: n, long b, doubl$ t;
char: g$t7o0br$usuario(void;
long g$t-yt$sacu0ulados(void;
doubl$ g$t,i$0poacu0ulado(void;
virtual doubl$ pago(void3";
void 0ostrar(void;//invoca a pago(
QJon$xion(void;
privat$:
char : no0br$usuario;
prot$ct$d:
long byt$sacu0ulados;
doubl$ ti$0poacu0ulado;
!;
//archivo Jon$xi\n.cpp
.includ$ 2Jon$xion.h2
.includ$ /iostr$a01
using std::cout;
Jon$xion::Jon$xion(char: n, long b, doubl$ t
{
no0br$usuario3n$# charTstrl$n(n41U;
strcpy8s(no0br$usuario, strl$n(n41,n;
byt$sacu0ulados3b;
ti$0poacu0ulado3t;
!
char: Jon$xion::g$t7o0br$usuario(void
Informtica II Programacin orientada a objetos en C++
Pg. 67
{
r$turn no0br$usuario;
!
long Jon$xion::g$t-yt$sacu0ulados(void{
r$turn byt$sacu0ulados;
!
doubl$ Jon$xion::g$t,i$0poacu0ulado(void
{
r$turn ti$0poacu0ulado;
!
void Jon$xion::0ostrar(void
{
//co0pl$tar con no0br$usuario, byt$sacu0ulados, ti$0poacu0ulado $ i0port$ pagado
!
Jon$xion::QJon$xion(void
{
!
3rear las clases +anda5n#ha y DialR*, derivadas de cone@in. Agregar a +anda5n#ha
como atributo una cadena de caracteres para indicar el tipo de cone@in, la cual puede ser
PQE49R4 o )%5DD5QD. Para DialR* aadir como atributo un entero 'ue represente el
n6mero de telfono autori$ado a travs del cual se reali$ar( la cone@in.
Para calcular el monto mensual pagado por el usuario, debe tenerse en cuenta:
Para cone@iones de tipo dialu* !discadas# el pago se calcula:
/si se transfirieron mas de .,,2b: E0,./ !no importa cuanto se transfiri#
/si se transfirieron entre 0,2b y R.,, 2b: E,," @ 2b transferido
/si se transfirieron menos de 0, 2b: E,,,. @ minuto de uso
Para cone@iones de banda anc)a el pago se calcula:
/cone@in PQE49R4: E.=,./
/cone@in )%5DD5QD: E,,3 @ 2b
!nota: para calcular por 2b divida los bytesa#umulados por .,,,,,,#.
3ree una aplicacin de prueba de las distintas cone@iones con una funcin main( ) y
cree all% un array de punteros a las distintas cone@iones iniciali$ados con = cone@iones de
cada tipo. 2uestre por pantalla los datos correspondientes a cada una de ellas.
'olucin:
AA3one@in.)
.prag0a onc$
class Jon$xion
{
public:
Jon$xion(char: n, long b, doubl$ t;
char: g$t7o0br$usuario(void;
long g$t-yt$sacu0ulados(void;
doubl$ g$t,i$0poacu0ulado(void;
virtual doubl$ pago(void3";
void 0ostrar(void;//invoca a pago(
QJon$xion(void;
privat$:
char : no0br$usuario;
prot$ct$d:
long byt$sacu0ulados;
doubl$ ti$0poacu0ulado;
Informtica II Programacin orientada a objetos en C++
Pg. 68
!;
//Jon$xi\n.cpp
.includ$ 2Jon$xion.h2
.includ$ /iostr$a01
using std::cout;
Jon$xion::Jon$xion(char: n, long b, doubl$ t
{
no0br$usuario3n$# charTstrl$n(n41U;
strcpy8s(no0br$usuario, strl$n(n41,n;
byt$sacu0ulados3b;
ti$0poacu0ulado3t;
!
char: Jon$xion::g$t7o0br$usuario(void
{
r$turn no0br$usuario;
!
long Jon$xion::g$t-yt$sacu0ulados(void
{
r$turn byt$sacu0ulados;
!
doubl$ Jon$xion::g$t,i$0poacu0ulado(void
{
r$turn ti$0poacu0ulado;
!
void Jon$xion::0ostrar(void
{
cout//27o0br$ usuario: 2//no0br$usuario//2, -yt$s acu0ulados: 2//byt$sacu0ulados//
2, ,i$0po acu0ulado: 2//ti$0poacu0ulado//2, Pago total2//pago(;
!
Jon$xion::QJon$xion(void
{
!
//DialSp.h
.prag0a onc$
.includ$ 2Jon$xion.h2
class Dialup:public Jon$xion
{
public:
Dialup(char: n, long b, doubl$ t, int t$;
virtual doubl$ pago(void;
QDialup(void;
privat$:
int t$l$*ono6utorizado;
!;
""Dial0p!cpp
.includ$ 2Dialup.h2
Dialup::Dialup(char: n, long b, doubl$ t, int t$:Jon$xion(n,b,t
{
t$l$*ono6utorizado3t$;
!
doubl$ Dialup::pago(void
{
i*(byt$sacu0ulados/E"""""""
r$turn "."1:ti$0poacu0ulado;
$ls$ i*(byt$sacu0ulados/1""""""""
r$turn ".H:(byt$sacu0ulados/1"""""";
$ls$ r$turn E";
!
Informtica II Programacin orientada a objetos en C++
Pg. 6
Dialup::QDialup(void
{
!
//-anda6ncha.h
.prag0a onc$
.includ$ 2con$xion.h2
class -anda6ncha :
public Jon$xion
{
public:
-anda6ncha(char: n, long b, doubl$ t, char:ti;
doubl$ pago(void;
Q-anda6ncha(void;
privat$:
char: tipo;
!;
//-anda6ncha.cpp
.includ$ 2-anda6ncha.h2
.includ$ /iostr$a01
-anda6ncha::-anda6ncha(char: n, long b, doubl$ t, char:ti:Jon$xion(n,b,t
{
tipo3n$# charTstrl$n(ti41U;
strcpy8s(tipo, strl$n(ti41,n;
!
doubl$ -anda6ncha::pago(void
{
i*(strc0p(tipo,2P5B9PS9233"
r$turn 1=";
$ls$ //standard
r$turn ".3:(byt$sacu0ulados/1"""""";
!
-anda6ncha::Q-anda6ncha(void
{
!
""completar la aplicacin
Problema &,
Dada el siguiente arc)ivo de cabecera de una clase 'ue representa un acondicionador de
aire:
.prag0a onc$
class Lin$aXrio
{
public:
Lin$aXrio(doubl$ *, doubl$ p, bool t, char: c;
const doubl$ costo-asicoPnstalacion3E";
doubl$ g$tXrigorias(void;
virtual doubl$ g$tJonsu0o(void3";
doubl$ g$tPr$cio(void;
virtual doubl$ g$tJostoPnstalacion(void3";
bool g$t,i$n$Jontrol5$0oto(void;
virtual void 0ostrar(void;//0u$stra *rigorias, pr$cio, consu0o, costoinstalacion,
ti$n$controlr$0oto, color
QLin$aXrio(void;
Informtica II Programacin orientada a objetos en C++
Pg. 7!
privat$:
doubl$ *rigorias;
doubl$ pr$cio;
char: color;
prot$ct$d:
bool ti$n$controlr$0oto; //*als$37+, tru$3(P
doubl$ consu0o;
doubl$ costoinstalacion;
!;
y los arc)ivos de cabecera, a completar !al igual 'ue los arc)ivos cpp asociados#,
correspondientes a dos clases concretas de acondicionadores de aire:
.prag0a onc$
.includ$ 2lin$a*rio.h2
class 6condicionador(plit :
public Lin$aXrio
{
public:
//a`adir constructor
//a`adir 0Otodos para )u$ la clas$ s$a concr$ta
//0ostrar datos Lin$aXrio y propios
Q6condicionador(plit(void;
privat$:
doubl$ dia0$tro6guD$ro;
doubl$ costo9at$rial$sPnstalacion;
!;
.prag0a onc$
.includ$ 2lin$a*rio.h2
class 6condicionadorD$Par$d :
public Lin$aXrio
{
public:
//a`adir constructor
//a`adir 0Otodos para )u$ la clas$ s$a concr$ta
//0ostrar datos Lin$aXrio y propios
Q6condicionadorD$Par$d(void;
privat$:
doubl$ alto6guD$ro;
doubl$ ancho6guD$ro;
!;
Tener en cuenta 'ue el consumo de un e'uipo de pared se calcula como: ,.1. vatios por
frigor%a y el de un splits como: ,.10 vatios por frigor%a. 4l costo de instalacin final se
calcula como el costo b(sico de instalacin m(s los materiales 'ue, en el caso particular de
un e'uipo de pared son siempre de E3,./
3rear una clase de prueba con una funcin main!# donde define un array de punteros de
tipo 5ineaBrio 'ue deber( llenar con ob*etos de diferentes tipos concretos de la *erar'u%a
de acondicionadores de aire, usando los constructores con los datos adecuados. 2ostrar
por pantalla los datos de todos los elementos de dic)o array.
Informtica II Programacin orientada a objetos en C++
Pg. 71

Você também pode gostar