You are on page 1of 8

PROGRAMACIÓN ORIENTADA

A OBJETOS ÚLTIMA REVISIÓN: 6-MAY-2002

EJERCICIOS

1. Cree una clase llamada Hora que tenga atributos separados de tipo entero para las horas, minutos y
segundos. Un constructor inicializará este dato a 0, y otro lo inicializará a valores fijos (y correctos).

Diseñe métodos para la clase que permitan:


- visualizar la hora en formado hh:mm:ss
- añadir a la hora que está representada en esa clase, otra hora que es pasada como parámetro en otro
objeto Hora.
- devolver el tiempo transcurrido en segundos, desde la media noche.

2. La fecha es un dato compuesto en el cual se consideran tres valores enteros: día, mes y año. Diseñe una clase
Fecha que permita manejar este tipo de dato, teniendo en cuenta las siguientes consideraciones:
- El atributo que maneje al valor del día debe tener un rango permitido (1-31, 1-30, 1-28) para el mes al
que pertenece. Además se debe considerar que en los años bisiestos, el mes 2 (febrero) tiene 29 días.
- Deben existir métodos que devuelvan cada uno de los valores (día, mes y año) y además uno que
devuelva el nombre del día al que corresponde la fecha indicada (Ej.: Si la fecha es 29/06/2000 deberá
devolver "Jueves").
- Deben existir métodos que permitan devolver la fecha en los siguientes formatos:
dd/mm/aaaa Ej.: "25/06/1998"
dia de mes literal de año Ej.: "25 de junio de 1998"
- Se debe poder cambiar los valores de la fecha mediante métodos.
- Debe poder determinarse si una fecha es anterior a otra que es pasada como parámetro
- Debe poder determinarse la cantidad de días transcurridos entre esa fecha y otra que es pasada como
parámetro.

3. Crear una clase llamada Punto que tenga dos atributos de tipo real x y y para representar las coordenadas
cartesianas del punto. Además implemente métodos que permitan:
- visualizar las coordenadas del punto, ya sea en coordenadas rectangulares como en coordenadas polares.
- devolver la distancia que existe del origen de coordenadas al punto.
- devolver la distancia que existe desde ese punto a otro punto que es pasado como parámetro (otro objeto
Punto).
- devolver el cuadrante al que pertenece el punto.
- indicar si un punto es igual a otro o no (dos puntos son iguales cuando sus coordenadas son las mismas).

4. Crear una clase llamada Recta que tenga como atributos la pendiente y la ordenada al origen y se cree a
partir de:
- dos puntos (instancias de la clase Punto) diferentes.
- la ordenada al origen y la pendiente.

Además, la clase debe tener métodos que permitan:


- mostrar la ecuación de la recta.
- hallar la distancia de un punto a la recta.
- determinar si un punto pasado como parámetro pertenece a la recta o no.
- determinar si un punto está más cerca del origen o más lejos del origen respecto a la línea.
PROGRAMACION ORIENTADA A OBJETOS UMSS
1/8 INF-SIS
- dada otra línea recta como parámetro, determinar el punto de intersección.
- dada otra línea recta como parámetro, hallar la bisectriz.
- dada otra línea recta, devolver el ángulo que las separa.

5. Crear una clase llamada Triangulo que tenga como atributos tres puntos que formen un triángulo y que
representan las esquinas de este.

La clase tendrá métodos que permitirán:


- determinar el tipo de triángulo que es (equilátero, isósceles, escaleno)
- devolver el área del triángulo
- devolver la perímetro del triángulo

6. Crear una clase llamada Rectangulo que tenga como atributos dos puntos que representen la esquina
superior izquierda y la esquina inferior derecha del rectángulo y un atributo que indica la inclinación del
rectángulo (por defecto 0 grados).

La clase tendrá métodos que permitirán:


- indicar si es un cuadrado o no.
- devolver el área del rectángulo.
- devolver el perímetro del rectángulo.
- Dado un punto determinar si este se encuentra dentro del rectángulo (incluidas las líneas fronterizas) o
fuera de él (Recuerde la inclinación del rectángulo).

7. Los números fraccionarios constan de dos números enteros: uno para el numerador y otro para el
denominador. Implemente una clase Fraccion para manejar un número fraccionario y que tenga métodos
que permitan sumar, restar, multiplicar y dividir ese número con otro, como en el ejemplo:

// n1 = 2/3, n2 = 17/6

resultado = n1.sumar(n2); // Sumar 2/3 con 17/6


resultado.mostrar(); // Debe mostrar 7/2

Note que el valor del número fraccionario siempre debe estar simplificado en su mínima expresión.

8. Un número complejo se parece a un binomio de la siguiente forma: a+bi, donde a y b son números reales. El
valor de i no es conocido, pero si se sabe que i2 es -1. Implemente una clase que permita manejar como dato
a un número complejo. La clase debe tener métodos que permita sumar, restar, multiplicar y dividir al
número con otro. También debe tener métodos que permitan devolver el valor de la parte real (a) y el valor
de la parte imaginaria (b), juntos y por separado.

9. Cree una clase llamada Persona, que permita manejar la información de una persona de la cuál SE CONOCE:
nombre, CI, edad, sexo, fecha de nacimiento (utilice la clase Fecha creada en un anterior ejercicio), lugar
de nacimiento estado civil y dirección. La clase debe manejar eficientemente la información y ocultarla
perfectamente.

10. Escriba un programa que permita manejar una lista (tamaño no mayor a 20) de personas (utilice la clase que
creó en el ejercicio anterior). La lista deberá mostrarse ordenada por nombre y luego por fecha de
nacimiento.

11. Diseñe una jerarquía de clases: Circulo, Cilindro y CilindroHueco. En esencia se puede decir que
un objeto cilindro es un objeto círculo con una altura, y un cilindro hueco es un cilindro con un espacio
hueco dentro de él. La clase Circulo debe tener un dato Radio (tipo real) y unas funciones miembro
PROGRAMACION ORIENTADA A OBJETOS UMSS
2/8 INF-SIS
setRadio, getArea y circunferencia, que obtienen el valor del radio y calculan el área del cilindro y la
longitud de la circunferencia. Para las clases Cilindro y CilindroHueco debe implementar además,
métodos que devuelvan el volumen.

Escriba un programa que permita crear objetos Circulo, Cilindro y CilindroHueco y los vaya
almacenando en un arreglo. Luego se debe recorrer el arreglo, buscando los cilindros huecos con un
volumen V.

Formulas:
Circulo: Longitud: 2π × r
Área: π × r 2
Cilindro: Área: 2π × r × h + 2π × r 2
Volumen: π × r 2 × h
Cilindro Hueco: ( )
Longitud: 2π r 2 − rint2 + 2π × r × h + 2π × h × rint
(
Volumen: π r − 2
rint2 )× h
12. Escriba una clase Menu que permita desplegar un menú de opciones, las cuales son atributos de la clase. El
diseño que presentará el menú desplegado se deja a su consideración. La clase mínimamente debe permitir:
añadir opciones al menú, visualizar el menú y permitir seleccionar una opción.

PROBLEMAS Y EJERCICIOS DE COMPRESIÓN


1. De unos estudiantes, se tiene la siguiente información: nombre, código, sexo, edad, curso y notas del curso.
Se desea obtener los siguientes reportes:

- Una lista ordenada de los alumnos por orden alfabético de sus nombres
- Una lista ordenada por notas en forma descendente.
- Una lista ordenada en orden alfabético de los estudiantes que obtuvieron notas por arriba del promedio
general de los alumnos.

Además se desea conocer todos los datos de un estudiante X y qué alumnos obtuvieron la misma nota que él
en la materia Y.

2. Se pide hacer un programa para gestionar el préstamo y devolución de libros de una biblioteca.

Se sabe que una biblioteca tiene libros de los cuales se conoce: código, autor, título y temática. Además se
sabe que de cada libro se puede tener varias copias.

Un lector busca un libro determinado; si el libro existe se debe preguntar si se lo desea prestar o no,
verificando previamente que hay ejemplares para prestar el libro. Si no hay ejemplares debe mostrar un
mensaje en este sentido.

Si se decide prestar el libro, debe almacenarse el nombre del lector, su dirección y teléfono, además del
código del libro que se prestó.

3. Existe un juego llamado "Guerritas", que se juega entre un jugador humano y una computadora, en un
tablero cuadriculado de tamaño definido (20*20).

PROGRAMACION ORIENTADA A OBJETOS UMSS


3/8 INF-SIS
Cada jugador tiene nueve fichas que distribuye a su libertad sin mostrar nunca el tablero al contrincante. El
juego consiste en que cada jugador indica una coordenada de la cuadricula del jugador contrario. Si en esa
posición está una de la fichas, entonces esta es eliminada. Se debe indicar con un mensaje si se dio o no en
el blanco.

Gana el jugador que elimine primero todas las piezas de su contrincante.

El juego se intercala entre los dos jugadores. Primero el jugador humano que indica su juego desde teclado,
y luego la computadora que lo hace generando números aleatorios.

Realice un programa OO que permita jugar "Guerritas". Resuelva el problema con por lo menos 2 clases.

Al finalizar el juego el programa debe indicar quien ganó el juego y cuantos disparos realizó.

Nota: La ubicación de las fichas del tablero de la computadora es generada aleatoriamente.

4. Un grupo de 5 chicos y 5 chicas han decidido jugar al juego de "la botella". Para ello todos se reúnen en un
círculo ordenados aleatoriamente y colocan al centro una botella. El juego consiste en hacer girar la botella
sobre su eje; al terminar de dar vueltas la boquilla de la botella termina apuntando a alguien. La persona a la
que apunta la botella tiene dos opciones: beso o verdad. Si se decide por beso, entonces debe darle un beso a
la persona que está en su enfrente y si se decide por verdad debe responder a cualquier pregunta que le haga
esta persona.

Si se decide por verdad, la siguiente vez que le toque tendrá que dar un beso. Si una persona da un beso,
todas las personas tienen que volver a reorganizarse aleatoriamente. Si una persona A se decidió por verdad
y luego las personas se vuelven a reorganizar, la persona A sigue teniendo que dar un beso.

La botella gira por derecha un numero aleatorio (entre 10 y 120) de posiciones hacia la derecha.

Se pide hacer un programa orientado a objetos que simule el juego y que al final (100 juegos) emita un
reporte para cada persona indicando: nombre, sexo, cantidad de besos dados a un hombre, cantidad de besos
dados a una mujer, cantidad de verdades dichas y el total de veces que la boquilla le apuntó.

5. Se tiene un Video Club "La Película", el cual presta videos de películas a sus socios. A los socios les gusta
sacar películas dependiendo de los actores que actúan en ella, para ello el gerente del Video Club desea
obtener los siguientes reportes:

- Listar los actores de una película X


- Mostrar la película con más y menos actores
- Indicar si en la película X actúa el actor Y

Para poder cumplir con su meta se tiene la siguiente información: De cada vídeo se tiene el código, titulo,
productora (HBO, FOX, etc.), año de producción y los actores que participan en ella. Cabe hacer notar que
una película puede tener más de una copia, pero cada copia (vídeo) tiene un código que lo identifica de
manera única.

De los actores nos interesa mantener su nombre, fecha de nacimiento, nacionalidad.

Se pide realizar un análisis, clasificación (encontrar clases), modelar (en pseudo OMT) y programar.

Como condición se tiene que por lo menos se debe realizar 3 clases que usted defina completamente de
manera que el programa cumpla totalmente con los requerimientos del problema.
PROGRAMACION ORIENTADA A OBJETOS UMSS
4/8 INF-SIS
Puede asumir, si lo considera necesario, que existe ya una clase adicional (aparte de las tres) hecha que se
llama Fecha, es decir es necesario hacerla.

6. La dirección de extensión de la UMSS administra varios proyectos, los cuales deben ser aprobados o
rechazados, para ello existe una comisión integrada por 5 personas, un presidente y 4 vocales. Para aprobar o
reprobar un proyecto, los vocales realizan una votación, a favor o en contra. En caso de haber empate, el
Presidente interviene votando para que no exista un empate.

Se desea saber si el proyecto X se aprobó o rechazó, con cuántos votos y quiénes votaron a favor, en caso de
aprobarse; o quienes votaron en contra, en caso de rechazarse.

De los integrantes de la comisión se tiene el nombre, teléfono, el voto y si es vocal o presidente. De cada
proyecto, el nombre, la descripción, y el país que respaldará el proyecto.

7. La clínica "San Simón", necesita un sistema para la administración de infraestructura.

Esta clínica cuenta con un moderno edificio, atiende varias especialidades, cada especialidad es atendida en
un piso del edificio. Por ejemplo la especialidad de pediatría es atendida en el primer piso, medicina general
en la planta baja, etc.

Cada piso tiene varias salas para internar a los pacientes que lo necesitan.

Cada sala es identificada por un número, tiene un determinado número de camas, de las cuales algunas
pueden estar disponibles u ocupadas, por otro lado en cada sala sólo se permite pacientes de un mismo
género (Femenino, Masculino).

- A la clínica le interesa tener información de la disponibilidad de salas con el número de camas libres en
una especialidad X para un género Y.
- Se requiere saber en que piso están los pacientes de una especialidad X.
- Se requiere saber el número de salas de la especialidad X para el género Y.

Todos los datos que son información del problema son leídos desde teclado. (Resolver en mínimo 3 clases)

8. En las últimas olimpiadas de Sidney se presentaron distintos países, los cuales participaron en distintas
disciplinas, con atletas para cada una de ellas.

Cada país ha agrupado a sus atletas por la disciplina en la que participarán, es así que de cada país se
almacena la siguiente información: código, nombre, disciplinas en la que participará y los atletas de cada
disciplina.

Se tienen por lo menos 30 disciplinas de las cuales interesa mantener el nombre, breve descripción y
cantidad de atletas para la disciplina. De cada atleta nos interesa saber su identificador, nombre, género
(masculino, femenino), edad, estatura y peso.

Para fines estadísticos el comité organizador de las olimpiadas necesita saber:

- La cantidad de deportistas que ha llevado un país X a las Olimpiadas de Sidney.


- El porcentaje de mujeres que han participado en las olimpiadas en general.
- Cual es el deportista que tiene mayor edad en una disciplina Y (tome en cuenta todos los países).

PROGRAMACION ORIENTADA A OBJETOS UMSS


5/8 INF-SIS
Se requiere de un programa OO que resuelva el problema descrito anteriormente con mínimamente tres
clases. Si desea hacer (no es obligatorio) más interactivo el programa puede dar por supuesto que existe la
clase Menu.

9. Se desea tener un programa que administre las cartas que maneja una secretaria. De cada carta la secretaria
almacena una referencia, el cuerpo de la carta, la fecha, el destinatario, el remitente y el estado (Recibida,
Despachada).

Del destinatario y del remitente almacena el nombre, la dirección, cargo (por ejemplo Director de Carrera) y
la Institución (por ejemplo UMSS).

Es importante para la secretaria poder contar de forma rápida con:


- Las cartas que envió a una institución Y.
- Las cartas que recibió de una persona Y.
- Todas las cartas recibidas de una institución Y en una fecha X.
- Todas las cartas que tengan la palabra PAL en la referencia.

Debido a que los requerimientos son muy variados y no tienen un comportamiento establecido, es menester
proveerle de una manera interactiva de utilizar el programa.

Se pude asumir que las clases Fecha y Menu ya están hechas. Resolver utilizando POO.

10. Una gasolinera vende 3 tipos de combustible (gas, gasolina y diesel), de los cuales se lleva el siguiente
registro: código del combustible, cantidad vendida y precio por litro. La empresa, realiza una evaluación
mensual de su situación financiera para lo cual tabula la información resumen de cada día del mes.

Para efectuar toma de decisiones adecuadas y oportunas con respecto al rumbo que dará a su empresa, la
gerencia de dicha empresa quiere contar con un programa OO que efectúe la entrada de datos de todo el
combustible vendido junto con la información necesaria, indicada anteriormente. Sólo necesita hacer este
proceso para un determinado mes.

Además con la información ya obtenida y almacenada el gerente requiere de los siguientes reportes:

- Mostrar el día con más venta de combustible


- Mostrar el producto más vendido en el mes y su importe
- Mostrar el producto menos vendido durante el mes y el día
- Mostrar la cantidad promedio de litros vendido durante el mes para cada combustible
- Mostrar el importe total vendido en el mes.

Desarrolle el programa utilizando mínimamente 3 clases, incluyendo en cada segmento de programa la


documentación necesaria para su entendimiento (usar comentarios).

Recuerde que lo principal es el análisis del problema.

11. Se desea realizar un programa que administre la información de varios departamentos, con la finalidad de
tener un conjunto de reportes en la brevedad posible.

Acerca del problema se sabe que:

Cada departamento tiene un nombre y muchos proyectos que administrar.

PROGRAMACION ORIENTADA A OBJETOS UMSS


6/8 INF-SIS
Los proyectos pueden ser de Extensión o de Investigación, de cada proyecto se tiene el nombre,
institución de contraparte y cinco personas de las cuales una es la responsable y cuatro son participantes.

Si el proyecto es de Investigación se necesita además de los anteriores datos, el área de investigación


sobre la cual se desarrolla el proyecto.

De cada persona solo necesitamos saber el nombre, su código, género y edad.

En base a la información anterior se desea obtener los siguientes reportes:

- Mostrar los proyectos de investigación que tiene el departamento X.


- Se necesita saber cuántas personas mayores de 30 años son responsables de proyectos, tomando en
cuenta todos los departamentos.
- Si un proyecto Y es desarrollado por el departamento X.

12. Se desea administrar la correspondencia de un departamento, de manera que sea fácil ubicar cualquier tipo
de correspondencia. Se sabe que el departamento entre su correspondencia maneja: Cartas, memorándums e
informes. De todos ellos se almacena la referencia que viene a ser una descripción de la carta con dos a cinco
palabras), la fecha, el documento en sí y un estado que indica <D, R> si es despachada o recibida.

En los distintos documentos de acuerdo a su categoría se mantiene distinta información adicional a la básica,
bajo el siguiente detalle.
- Si es carta, se desea tener información del remitente y el destinatario.
- Si es informe se desea tener el título.
- Si es memorándum se desea tener el motivo y el destinatario.

Realice un programa de manera que pueda satisfacer los siguientes requerimientos:


- Dada una fecha Y muestre toda la correspondencia despachada en esa fecha.
- Dada una fecha Y muestre todos los documentos administrados en esa fecha.
- Muestre todas las cartas despachadas y recibidas.
- Muestre todos los memorándums destinados al destinatario X.

De los remitentes y destinatarios solo se desea tener el nombre como una cadena simple. Por otro lado se
desea tener en forma experimental la información de un mes.

Se desea tener un programa muy interactivo que pueda controlar el flujo de la información y permite
conseguir los distintos reportes.

Se pude asumir que ya se tiene hechas las clases componentes Fecha y Menu.

13. El juego "Bingo" se juega con cartones que tiene 15 casillas con números. Cada cartón tiene números
comprendidos entre 1 y 99 (ambos inclusive) que no se repiten y son escogidos al azar. Los números de los
cartones están ordenados en forma ascendente. Cada cartón tiene un número (código) que lo identifica
unívocamente.

Para realizar el juego se tienen bolillos marcados con cada uno de los números del 1 al 99. Estos bolillos se
introducen en un ánfora y se los va retirando al azar en cada jugada. Los bolillos nunca vuelven a
introducirse al ánfora, lo cual hace suponer que los números no pueden repetirse.

En cada jugada se "canta" el número del bolillo y si este está en alguno de los cartones del juego se lo
"tacha".
Gana quien tiene todos los números de su cartón "tachados".
PROGRAMACION ORIENTADA A OBJETOS UMSS
7/8 INF-SIS
Realice un programa OO que permita generar n cartones de Bingo y permita simular un juego. El programa
debe cantar cada número e indicar el número de cartón que ganó el juego.

Se pide además mostrar un reporte sobre:


- Cuantos números fueron cantados antes de que finalice el juego.
- El orden de aparición de los números.
- Los números de jugada en las cuales se "tachó" un número en el cartón ganador.

NOTA: Debe considerar que en una misma jugada podría llenarse más de un cartón, situación en la cual
habrían varios ganadores.

Este documento fue actualizado por última vez el 6 de mayo de 2002.


Visite el sitio web: www.cs.umss.edu.bo/inf135/ para obtener una versión actualizada de este documento.

© 2000 - 2002 Departamento de Informática y Sistemas – Universidad Mayor de San Simón


Cochabamba - Bolivia

PROGRAMACION ORIENTADA A OBJETOS UMSS


8/8 INF-SIS

You might also like