Cuaderno de Ejercicios - AyP - v11
Cuaderno de Ejercicios - AyP - v11
Cuaderno de Ejercicios - AyP - v11
Algoritmos y Programas
Cuaderno de ejercicios
1
1- Introducción
2
2- Expresiones aritméticas, relacionales y lógicas
En esta sección se presentan ejercicios para practicar el uso de los operadores aritméticos,
relacionales y lógicos. Recuerda que los mismos están expresados en pseudocódigo y, por
lo tanto, no se corresponden necesariamente con los de algún lenguaje de programación.
a) 6 – 3 * 4 / 4 + 5 * 2
b) (2 * 3 + 6 div (3 – 1)) ** 2
c) 6 mod 3 - 9 / 4 * 2 + 1
a) a div b * c mod e – f * g
b) a – b * c / d + e *f
c) a * (b + c) + abs(d * e / f) – g * (h + i / j)
a) ((a mod b) / c) * (d + e)
b) ((a / b) * c) – d
c) (a + (b * (c + d))) – ((e + f) / g * h)
a) (5 / 2 * 3 – 1) = 4 div 2 mod 2
b) (7 div 3) > (3 / 4) ** 2 * (2 + 10 mod 5)
c) 10 ≤ 3 + 4 – 2 * (2 + 6)
3
3- Algorítmica
Resuelve los siguientes problemas, para cada uno haz el diagrama de flujo y mapa de
memoria. Es importante que leas y analices con cuidado el enunciado, identificando los
datos de entrada, el resultado esperado y los pasos necesarios (algoritmo) para llegar a
alcanzar el resultado.
Para desarrollar tu capacidad de análisis y abstracción, luego de leer el problema, debes
buscar similitudes con problemas resueltos previamente. De esta manera, irás
encontrando ciertos patrones que se repiten y que puedes emplear en la solución de los
problemas nuevos.
Ejercicio 1: Sean los datos: x, a1, a2, a3, a4. Elabore un diagrama de flujo para calcular:
a1x3 + a2x2 + a3x + a4
Restricción: no puedes usar la operación de potencia.
4
Primero, es cuando b ≠ 0 cuya solución es.
5
Ejercicio 7: Elabora un diagrama de flujo para leer una lista de enteros positivos, calcular e
imprimir su suma y su promedio. El fin de los datos está indicado por un valor negativo.
Identifica los datos y el resultado esperado. Prueba tu solución.
Ejercicio 8: Elabora un diagrama de flujo para leer n enteros, calcular e imprimir su suma y
su promedio. Identifica los datos y el resultado esperado. Prueba tu solución.
Ejercicio 9: Una tienda desea obtener una serie de reportes diarios a partir de las ventas
realizadas en un día. Elabora un diagrama de flujo que:
6
Ejercicio 11: Dados los datos: n, a1, a2,..., an con n > 0. Elabore un diagrama de flujo para
encontrar el máximo de los ai.
Ejercicio 12: Retoma el problema anterior y modifícalo de tal manera que ahora, además
de encontrar el mayor, también identifique cuantos de los n datos son positivos, negativos
o cero.
Ejercicio 13: Una empresa que cuenta con k empleados desea realizar algunos cálculos para
la nueva nómina. Los datos con que cuenta son los sueldos de los k empleados:
k, s1, s2, s3, ..., sk.
Elabora un diagrama de flujo para leer los datos y contestar a las siguientes preguntas:
a) ¿Cuál es el aumento correspondiente a cada empleado según el siguiente criterio?
● 17% si el sueldo es inferior a $5,000
● 10% si el sueldo está entre $5,000 y $15,000
● 5% si el sueldo es superior a $15,000
b) ¿Cuál es el nuevo sueldo para cada empleado?
c) ¿Cuál es el total de la nueva nómina?
d) ¿Cuál es el incremento en la nómina?
e) ¿Cuál es el máximo sueldo nuevo?
f) ¿Cuál es el mínimo sueldo nuevo?
Resuelve los incisos progresivamente.
Ejercicio 15: Se dispone del ingreso y del número de habitantes de cada uno de los estados
de la República Mexicana. Identifica cuántos y de qué tipo serán los datos que se ingresarán,
si se necesita un diagrama de flujo para:
a) Calcular e imprimir el ingreso per cápita de cada estado que resulta de la división
entre el ingreso y el número de habitantes.
b) Calcular el ingreso per cápita total de la República Mexicana que resulta de dividir la
suma de los ingresos entre la suma de los habitantes.
7
Identifica cuáles y cuántos son los resultados esperados. Además, decide de qué manera se
deberán proporcionar los datos para poder, aplicando el algoritmo diseñado, llegar a esos
resultados.
Ejercicio 16: Dados los valores: n, p1, p2,..., pn con n ≥ 2, donde los pt (t = 1,...,n) representan
los índices de precios al consumidor de varios años. Elabora un diagrama de flujo para
calcular e imprimir:
a) La tasa de inflación entre años consecutivos:
Donde:
n es un entero positivo, no necesariamente múltiplo de tres, que indica el total de
datos que el usuario va a ingresar.
ai son los números que el usuario ingresa.
8
4- Retos Algorítmica
Ejercicio 1: Un agricultor sembró en sus parcelas 4 tipos diferentes de jitomates. Cada tipo
de jitomate puede ser sembrado en más de una parcela. Los datos referentes a la cosecha
se dan a continuación:
precioJit1, precioJit2, precioJit3, precioJit4
tipoJit1, numcajas1
tipoJit2, numcajas2
tipoJit3, numcajas3
...
-1, -1
Donde:
precioJitj precio de la caja de jitomate tipo j
tipoJiti tipo de jitomate (1, 2, 3 o 4) sembrado en la parcela i
numcajasi número de cajas cosechadas en la parcela i
-1, -1 bandera de fin de datos
No se sabe cuántas parcelas sembró el agricultor. Cada pareja de datos representa una
parcela.
Realiza un diagrama de flujo para contestar lo siguiente:
a) ¿Cuál es el número total de cajas cosechadas de cada uno de los 4 tipos de jitomate?
b) ¿En cuántas parcelas se sembró el jitomate tipo 2?
c) ¿Qué tipo de jitomate dejó más dinero por su venta, suponiendo que todas las cajas
cosechadas se vendieron?
d) ¿Cuántas parcelas produjeron más de 20 cajas?
9
Nota: el dato partido solamente se lee si la persona entrevistada ha contestado que sí
votará.
Se desea que hagas un diagrama de flujo para contestar las siguientes preguntas:
a) ¿Cuál fue el monto total (en pesos) de las ventas realizadas por el camión durante
el mes de enero?
b) ¿Cuál fue el día en el que surtió más litros de gas el camión?
c) ¿Cuántos días no trabajó el camión? (líneas que sólo contienen –1)
d) ¿Cuál fue el promedio de litros surtidos en cada día de trabajo?
Ejercicio 5: En la pasada Feria del Libro de Guadalajara se realizó una encuesta a los
asistentes con el fin de obtener algunas estadísticas acerca del público en general. Cada
asistente fue identificado con una clave en el momento de su registro y se le preguntó
cuántos libros había leído en el transcurso del año y cuántas páginas tenía cada uno de ellos,
el formato de los datos era el siguiente:
10
claveAsistente1
n1 pag1, pag2 …pagn1
claveAsistente2
n2 pag1, pag2 …pagn2
claveAsistente3
n3 pag1, pag2 …pagn3
-1
Como no se sabe cuántos asistentes habrá en total a lo largo de la Feria, el fin de datos está
señalado con un -1 en la claveAsistente de tipo numérica.
Se desea que hagas un diagrama de flujo que permita contestar las siguientes preguntas:
Ejercicio 6: Escribe un diagrama de flujo que pida primero un número (límite) y después
pida números hasta que la suma de los números introducidos supere el número límite. El
programa termina escribiendo el promedio de los números proporcionados (excepto el
número límite).
diaMes1
hora1, precipitación1, duración1
hora2, precipitación2, duración2
...
-1, -1, -1
diaMes2
hora1, precipitación1, duración1
...
-1, -1, -1
...
-1
11
Donde:
diaMesi representa el número del día del mes de agosto (cualquier número entre 1-
31) en el que hubo precipitación pluvial registrada. Cada precipitación pluvial del día
se indica con tres valores:
▪ horaj representa la hora del día (0 a 24) en la que inició la precipitación
pluvial.
▪ precipitaciónj representa la caída de lluvia en un valor numérico por m2.
▪ duraciónj representa los minutos durante los cuales llovió sin
interrupción.
No se sabe a priori cuántas precipitaciones se presentan al día por lo que cuando ya
no haya más lluvias registradas en el día, el usuario ingresará -1, -1, -1.
nombreParticipante2,
k2,
líneas2,1, líneas2,2, …, líneas2, k2
…
12
nombreParticipanten,
kn,
líneasn,1, líneasn,2, …, líneasn, kn
Donde:
● n: número de participantes (n > 0)
● nombreParticipantei: nombre del participante i
● ki: total de clases programadas por el participante i
● líneasi,j: total de líneas de código programadas por el participante i, en la clase j
Ejercicio 9: Realiza un diagrama de flujo que lea un número entero positivo y obtenga e
imprima el dígito más significativo. Por ejemplo, si el número dado es 8704, se deberá
imprimir 8 acompañado de un mensaje adecuado.
13
5- Mapas de Memoria
14
Ejercicio 2: Considera los siguientes diagramas de flujo y para cada uno: indica sobre él las
estructuras algorítmicas utilizadas, cuántas instrucciones contiene cada una de ellas y
dibuja el mapa de memoria.
a) Datos: 1 3 1 1 0
15
b) Datos: 2 5 3 0
16
c) Datos: 1 3 1 2 0
17
d) Dato: 5
18
Ejercicio 3:
19
6- Conceptos de Programación Orientada a Objetos (POO) y
diagramas UML
Esta sección incluye ejercicios para practicar los conceptos vistos de POO y la elaboración
de diagramas UML. En algunos de los problemas sólo se te pide identificar a los miembros
de una clase, mientras que, en otros, además deberás representar la clase con un
diagrama UML. En este último caso, también tendrás que incluir constructor(es), métodos
get’s/set’s necesarios y la funcionalidad mínima requerida de toda clase.
Ejercicio 1: La clase Dulce se quiere utilizar para representar los dulces en un sistema para
una tienda. Cada dulce tiene un sabor y color diferente de acuerdo a los ingredientes que
lo componen. Cada uno viene envuelto de manera individual y tiene un peso específico.
Como los dulces se venden a granel, el cliente compra los dulces que desea en bolsas de 1
Kg, 1.5 Kg o 2 Kg. Los dulces han sido, tradicionalmente, de tres tipos diferentes: caramelo,
chicloso o líquido; sin embargo, últimamente el dueño ha comenzado a fabricar dulces con
relleno, lo cual implica tener un nuevo tipo de dulce llamado relleno y hacer algunos
cambios en dulces ya existentes (por ejemplo, las paletas de caramelo ahora tienen relleno).
Se ha decidido por políticas de la tienda, que cada dulce determine su papel de envoltura,
en función de su sabor y color.
A continuación, se presenta una lista de palabras que se pueden utilizar en el diseño de esta
clase, señala en cada caso si es un atributo (propiedad), un método o una función de la
clase, si es método o función indica si necesita parámetros o no, en caso de necesitarlos
indica cuales serían, si se trata de una función indica también de qué tipo es y por qué. Es
muy importante que justifiques tu respuesta ya que la evaluación depende en gran medida
de tu justificación.
1. sabor
2. determinaEnvoltura
3. color
4. envoltura
5. cambiaTipo
6. tipo
7. peso
8. calculaDulcesPorBolsa
9. dameTipo
20
desea le ayudes a diseñar una clase Factura. Después de investigar, encuentras que los
requisitos para la factura electrónica son: folio consecutivo, fecha expedición, razón social
de quien emite la factura así como del comprador, domicilio del vendedor y domicilio del
comprador, número de identificación fiscal (otorgado por la Administración de los
Impuestos de cada país), descripción del producto con indicación del precio, cantidad,
importe total, así como los impuestos que gravan la operación separando e indicando tanto
el porcentaje como el monto, firma electrónica avanzada, sello digital y cadena original (los
cuales se conforman con la información completa de la factura). El dueño de la Compañía X
quiere manejar una factura por cada tipo de producto, añadirle además el logo de la
empresa, indicar la forma de pago y el correo electrónico del cliente, quiere también poder
reflejar los descuentos otorgados a sus clientes. El dueño de la Compañía X desea que las
operaciones de la factura como: totales por producto (cantidad * precio unitario), aplicación
del descuento (sobre total de la factura), aplicación del IVA (sobre total de la factura –
descuentos) y cálculo del monto a pagar, que ampara la factura (total factura – descuentos
+ impuestos) se calculen automáticamente. Una vez que se introduce la información
completa de la factura se deben generar la “cadena original” y el “sello digital” para poder
enviar la factura como archivo .pdf y .xml al correo electrónico del cliente.
A continuación, se presenta una lista de palabras que se pueden utilizar en el diseño de esta
clase. Determina para cada una de ellas, si es un atributo (propiedad), un método o una
función de la clase. Si es método o función indica si necesita parámetros o no, en caso de
necesitarlos indica cuales serían, si se trata de una función indica también de qué tipo es y
porqué. Es muy importante que justifiques tu respuesta ya que la evaluación depende en
gran medida de eso.
1. folio
2. calculaMontoAPagar
3. asignaCliente
4. totalFactura
5. calculaIVA
6. selloDigital
7. fecha
8. calculaDescuento
9. dameFolio
10. enviaFactura
Ejercicio 3: El ITAM desea almacenar la información de sus alumnos. De cada uno necesita
tener su nombre, edad, promedio, carrera en la que está inscrito (considere solo una), total
de créditos de las materias que actualmente está cursando y número de materias
aprobadas. Cada alumno debe ser capaz de calcular el costo del semestre actual dado el
precio de un crédito. Recuerda poner los métodos y funciones necesarias para que tu clase
21
tenga la funcionalidad mínima requerida. Diseña una clase que se ajuste a lo anterior y
represéntala por medio de un diagrama UML.
Ejercicio 4: El dueño del club deportivo “MiClub S.A. de C.V.” quiere que le ayudes a
organizar las Membresías de sus clientes, cada Membresía tiene un número, el nombre del
cliente, dirección del cliente, tipo de membresía (A, B o C), año de inscripción del cliente y
si toma clases particulares de algún deporte. Cada Membresía debe de ser capaz de indicar
el costo mensual de la misma (para lo cual debe recibir el costo base y considerando el tipo
de membresía, la antigüedad y si toma clases particulares de algún deporte, calcular el
monto a pagar mensual) así como, indicar la antigüedad en años del cliente. Si un cliente
cambia de dirección, la Membresía debe actualizarse, de igual manera debe actualizarse,
cuando decide ya no tomar clases particulares de algún deporte. De acuerdo a lo descrito
más arriba, identifica atributos, métodos o funciones específicos de la clase y funcionalidad
mínima. Representa la clase por medio de un diagrama UML.
Ejercicio 5: Considera que estás encargado de desarrollar un sistema de inventario para una
armadora de autos, la cual “arma” varios tipos de autos a partir de un grupo de partes que
compra a los respectivos fabricantes. En el sistema de inventario se requieren varias clases,
una de ellas se describe a continuación. De cada parte se debe guardar su clave, su nombre,
una breve descripción, país de origen, precio, color, número de unidades disponibles, entre
otras características. Es importante que a cada parte se le pueda cambiar su color, precio,
país de origen y descripción. También se requiere consultar la cantidad de unidades que hay
en inventario. Por último, se quiere determinar si es “momento de comprar” una parte, lo
cual depende de si la cantidad de unidades es menor a un valor que se ingresa de acuerdo
a la demanda de autos.
a) ¿Cómo debe llamarse la clase? _________________________
b) Identifica 3 atributos, indica un nombre y un tipo de dato para cada uno de ellos.
1. _________________________________________________________
2. _________________________________________________________
3. _________________________________________________________
c) Identifica 2 métodos, indica su nombre y los parámetros si fueran necesarios. Si
requiere parámetros, debes indicar también de qué tipo de dato son.
1. _________________________________________________________
2. _________________________________________________________
22
Ejercicio 6: Una fábrica de productos lácteos está interesada en actualizar sus sistemas de
información. El equipo encargado está en la etapa de analizar los procesos y los
requerimientos para posteriormente hacer el diseño de los sistemas. Uno de los ingenieros
hizo las siguientes anotaciones con respecto a los productos que se fabrican. Todos ellos se
caracterizan en que son fabricados usando leche vacuna o leche de cabra (algunos quesos).
Sin embargo, se distinguen por el nombre comercial, sabor, tipo (queso, yogur, leche, etc.),
ingrediente adicional (levadura, bacilos, frutas, etc.), color, empaque y consistencia
(líquidos o cremosos). Se necesita determinar el empaque según el tipo y la consistencia.
Se deben poder cambiar los ingredientes adicionales y el nombre comercial. También debe
permitir consultar el sabor. Otra necesidad es que se debe poder calcular “la prioridad” de
la fabricación de un producto de acuerdo a su tipo, consistencia y la estación del año en la
que se está (primavera, verano, otoño o invierno).
Una vez leído y analizado el texto anterior, señala:
a) Nombre de la clase: _________________________
b) Atributos (nombre y un tipo de dato) para cada uno de ellos
c) Métodos (nombre y los parámetros si fueran necesarios)
d) Funciones (nombre, el tipo de la función y los parámetros si fueran necesarios)
Ejercicio 8: Se están actualizando los sistemas de una galería de arte que vende obras de
pintores contemporáneos mexicanos. De cada obra se registra el nombre del autor, el
nombre de la obra, la técnica (‘O’ óleo, ‘A’ acuarela, ‘G’ gouache, ‘X’ otras), el precio base y
el tamaño (ancho y alto). Para poder llevar el registro de las obras, a medida que ingresen
a la galería se les asignará una clave de manera automática, a partir del 1001. Decide cuáles
atributos podrán ser consultados y cuáles podrán ser modificados y considera los métodos
necesarios para llevar a cabo estas operaciones. También debes tener en cuenta que las
obras deben poder compararse entre sí usando sus claves y se debe poder tener toda la
información de ellas. Por último, se necesita poder calcular el precio de venta de una obra
de la siguiente manera: precio base más 25% si es óleo, 20% si es acuarela, 18% si es
gouache y 10% para cualquier otra técnica. Además, si la obra mide más de 14,000cm2,
independientemente de la técnica usada, se deberá incrementar su precio en 10%. Todos
los meses la galería promociona la obra de un pintor dando un descuento especial a sus
obras. La galería indica el nombre del pintor y el porcentaje (%) de descuento otorgado. Por
23
lo tanto, para calcular el precio de venta se debe también considerar el posible descuento.
Realiza el diagrama UML de la clase, indicando el nombre de la clase, los atributos, su(s)
constructor(es) y los métodos que requiere. Agrega los métodos necesarios para darle la
funcionalidad mínima a la clase, de acuerdo al enunciado anterior.
Ejercicio 9: La tienda “Anda en Bici” solicita a los alumnos de Algoritmos y Programas una
aplicación en java para realizar una clase que modele las bicicletas que fabrican y venden,
ya que están personalizadas. Cada bicicleta tiene un número de identificación único
(generado automáticamente a partir del número 200), un tipo, número de accesorios extras
y material de fabricación (aluminio o fibra de carbono). Cada bicicleta se puede construir
con todos los datos o sólo con el tipo y material de fabricación. Los tipos válidos de bicicleta
son: ‘U’: urbana, ‘P’: de pista o ‘M’: de montaña. Es necesario que cada bicicleta pueda
calcular su costo.
● El costo base para la bicicleta urbana es de $ 7000 pesos.
● El costo base para la bicicleta de pista es de $ 15,000 pesos.
● El costo base para la bicicleta de montaña es de $ 27,000 pesos.
El costo final se calcula dependiendo del tipo de bicicleta, material de fabricación y número
de accesorios, de la siguiente manera: al costo base se le aumenta $2,000 pesos por ser de
aluminio o $5,000 por ser de fibra de carbono; si el número de accesorios es menor a 3, no
hay costo adicional, pero si son 3 o 4 accesorios se cobra $600.00 pesos adicionales y si son
más de 4 accesorios se cobran $1,000 pesos adicionales. Decide cuáles atributos podrán ser
consultados y cuáles podrán ser modificados y considera los métodos necesarios para llevar
a cabo estas operaciones. Las bicicletas deben poder compararse entre ellas, el criterio de
comparación será el número de identificación único.
Una vez leída y analizada la información proporcionada, realiza el diagrama UML de la clase
identificada.
24
7- Programación en Java
Existen algunos atributos de calidad que son necesarios o deseables en los productos de
software que generamos. Es importante que vayas desarrollando la disciplina necesaria
para que todos los programas que escribas puedan considerarse productos de calidad. A
continuación, se mencionan algunos de los atributos más importantes:
25
Correctitud (Correctness)
Robustez (Robustness)
Desempeño (Eficciency)
Usabilidad (Usability)
Verificabilidad (Verifiability)
Mantenibilidad (Maintainability)
o Reparabilidad (Reparability)
o Evolucionabilidad (Evolvability)
Reusabilidad (Reusability)
Comprensibilidad (Understandability)
Interoperabilidad (Interoperability)
Entrega a tiempo (Timeliness)
Ejercicio 1: Un rectángulo se caracteriza por tener cuatro lados, de los cuales hay dos pares
de lados iguales. Asimismo, se sabe que las operaciones que permiten calcular el área y el
perímetro del rectángulo son muy útiles. De acuerdo a esta información y, teniendo en
cuenta lo mencionado en la introducción:
Ejercicio 2: Un círculo se caracteriza por el valor de su radio. Asimismo, se sabe que las
operaciones que permiten calcular el área y la circunferencia del círculo son muy útiles. De
acuerdo a esta información y, teniendo en cuenta lo mencionado en la introducción:
a) Realiza el diagrama de la clase Circulo en UML.
b) Escribe la clase Circulo usando el lenguaje Java.
c) Prueba la clase Circulo en la clase PruebaGeometrico.
Ejercicio 3: Considera que se necesita calcular el espacio ocupado por 3 mesas rectangulares
que se colocarán en una sala. Se sabe que la primera mesa mide 2 x 1.8 metros, la segunda
1 x 1.5 metros y la tercera 3 x 2 metros. Crea la clase CalculaEspacio con un método main
que, usando la clase del ejercicio 1, calcule e imprima el espacio ocupado por las tres mesas.
Ejercicio 4: Considera que se tiene una oficina rectangular (el usuario deberá darte las
medidas) que está cubierta por 3 tapetes circulares. En la clase del problema anterior,
modifica el main para que pueda, además, usando las clases de los ejercicios 1 y 2, calcular
e imprimir el área de la oficina que NO está cubierta por los tapetes.
26
Ejercicio 5: Modifica el ejercicio 4 de manera que ahora tengas n oficinas rectangulares (que
pueden ser de diferente tamaño) y en cada una de ellas k tapetes circulares. ¿Cuál es el
área total descubierta considerando todas las oficinas?
CientificoMatematico
-nombre: String
-areaEspecialidad: String
…
+CientificoMatematico()
+CientificoMatematico(String,String….)
+getNombre(): String
+setAreaEspecialidad (String): void
+getAreaEspecialidad (): String
+toString():String
….
….
27
Ejercicio 11: En la clase CientificoMatematico agrega el método calculaFuncion1 (double
x): double que calcula y regresa el resultado de la función que se muestra a continuación.
28
Al terminar, prueba el método en la clase PruebaCientificoMatematico.
Ejercicio 14: Un número complejo consta de una parte real y una parte imaginaria teniendo
la forma a + bi, donde a y b son números reales. Así, en el número complejo 1.5 + 3.4i, 1.5
es la parte real, y 3.4 es la parte imaginaria; en el número complejo 2.3 - 4.8i, 2.3 es la parte
real, y -4.8 es la parte imaginaria. Considerando, además, la funcionalidad básica de una
clase en Java, escribe la clase Complejo (en UML y en Java).
Ejercicio 15: Una calculadora científica puede realizar operaciones con números complejos.
Define la clase CalculadoraCompleja de tal manera que pueda sumar, restar, multiplicar y
dividir números complejos.
Recuerda que para los números complejos a + bi y c + di, las operaciones se definen de la
siguiente manera:
● Suma: (a + bi) + (c + di) = (a + c) + (b + d)i
● Resta: (a + bi) - (c + di) = (a - c) + (b - d)i
● Multiplicación: (a + bi) * (c + di) = (ac - bd) + (ad + bc)i
● División: (a + bi) / (c +di) = ( (ac + bd) + (bc – ad)i ) / (c2 + d2) con c2+d2 diferente de
cero
Ejercicio 16: Prueba los resultados del ejercicio anterior con una clase
PruebaCalculadoraComplejos. Debes presentar al usuario un menú de operaciones a
realizar con números complejos, leer la opción del usuario, la cual será expresada a través
del símbolo correspondiente a la operación (‘+’, ‘-‘, ‘*’, ‘/’), posteriormente debes leer dos
números complejos, mandar llamar a la operación indicada y mostrar el resultado, sin
olvidar la validación pertinente en el caso de la división.
El programa debe permitir al usuario ejecutar tantas operaciones como desee, hasta que
indique la opción de salida (‘s’).
Realiza los algoritmos necesarios, diagramas de flujo y diagramas de clase UML antes de
realizar el código.
Ejercicio 17: Una venta se caracteriza (de manera muy simplificada) por el monto y el
nombre del vendedor que la realizó. En la clase, además de los atributos, se debe incluir el
método calculaComisión(): double, el cual calcula y regresa la comisión que le corresponde
al vendedor por realizar dicha venta. Si la venta es menor a $1,000, se le otorga el 3% de
comisión. Si la venta es de $1,000 o más, el vendedor recibe el 5% de comisión. De acuerdo
a esta información se te pide:
a) Realizar el diagrama de la clase Venta, usando el lenguaje UML.
b) Escribir la clase Venta usando el lenguaje Java.
c) Escribe la clase PruebaVenta en la cual se crean dos objetos del tipo ventas
considerando una venta de $850 y otra de $2350.
29
Ejercicio 18: En la clase CientificoMatematico agrega el método generaSerieAscendente(int
n): String que genera y regresa los primeros n números naturales en forma de cadena,
siendo n >1. Es decir, deberá generar una cadena de la forma 1 2 3 4 5... n. Al terminar,
prueba el método en la clase PruebaCientificoMatematico.
Persona
- nombre: String
- curp: String
- domicilio: String
- teléfono: int
- estadoCivil: String
….
+Persona()
…..
+getNombre(): String
+getCurp(): String
….
30
Ejercicio 22: Realiza una clase PruebaPersona para probar la funcionalidad de la clase
Persona del ejercicio anterior.
Ejercicio 23: Se necesita una aplicación en Java para dar de alta cuentas bancarias. Cada
cuenta bancaria tiene un número de cuenta, el nombre del cliente y el saldo. Las cuentas
deben activarse con el nombre del cliente y se les asigna automáticamente el número de
cuenta, el depósito inicial es opcional. A cada cuenta se le deben poder realizar depósitos
y retiros, verificando que estos procedan y regresando un resultado que indique si se pudo
o no. A cada cuenta se le puede preguntar su saldo en cada momento, así como toda la
información propia de la cuenta.
Las cuentas deben poder compararse entre ellas, el criterio de comparación será el número
de cuenta.
Después de analizar cuidadosamente el problema:
● Realiza un diagrama UML de la clase CuentaBancaria, identifica los atributos y los
métodos necesarios para que tenga la funcionalidad mínima requerida.
● Escribe la clase CuentaBancaria en Java.
● Crea una clase PruebaCuentaBancaria para probar tu clase CuentaBancaria, dando
de alta 2 cuentas: una para José Pérez con $3’000.00 y otra para Juana García.
● Para la cuenta de Juana García registra un depósito de $4’000.00.
● Para la cuenta de José Pérez registra un retiro de $10’000.00.
● Para la cuenta de José Pérez registra un depósito de $1’000.00.
● Compara ambas cuentas imprimiendo un mensaje adecuado.
Ejercicio 24: Una agencia de renta de automóviles desea llevar el control de los autos que
renta, para cada auto se tiene una clave única (asignada por el sistema), la marca del auto,
el año, número de kilómetros, nombre y el número de la licencia del cliente al que se le
renta el automóvil.
Crea la clase Auto en Java con los atributos mencionados anteriormente. Además de la
funcionalidad mínima requerida la clase debe incluir diferentes métodos para poder
registrar una renta y/o una devolución:
● La renta del auto incluye tomar los datos del cliente que lo renta: nombre y número
de licencia, pedir el número de días para el cálculo de la renta. Se cobra por
adelantado. Si el año del auto es anterior a 2005 la renta diaria es de $200.00 y para
automóviles de años posteriores la renta es de $300.00. Si el automóvil tiene menos
de 20,000 km se le cobra un sobreprecio de $ 20.00 por día.
● La devolución del auto incluye borrar los datos del cliente del auto y aumentar el
número de kilómetros recorridos del mismo.
● Realiza el diagrama de clase UML antes de realizar el código.
● Escribe la clase Auto en Java
31
Posteriormente define la clase PruebaAuto donde se haga la instancia de 5 autos que son
con los que está empezando a operar. Después realiza la renta de 2 autos, calcula e imprime
el cobro respectivo a los clientes y realiza la devolución de uno de ellos.
Ejercicio 25: Realiza una clase llamada Calculadora. Programa los métodos estáticos que
corresponda para que se calcule la multiplicación y la potencia sin usar operadores ni
funciones matemáticas predefinidas (biblioteca Math) en Java.
Es decir: 1 = 1 3,
3 + 5 = 23 = 8,
7 + 9 + 11 = 33 = 27,
13 + 15 + 17 + 19 = 43 = 64.
32
n números de la serie de Fibonacci. Recuerda que los dos primeros números de la serie son
0 y 1. A partir del tercero se calcula como la suma de los dos números que le preceden.
Ejercicio 31: Retoma la clase Calculadora. Agrégale el método estático calculaSerie1(int n):
int que calcula y regresa el resultado de la siguiente sumatoria (con n ≥ 0).
Ejercicio 33: Retoma la clase Calculadora. Agrégale el método estático calculaSerie3(int n):
int que calcula y regresa el resultado de la siguiente sumatoria (con n 0).
Usa el método factorial definido anteriormente. Revisa si puedes realizar tu cálculo de una
manera distinta.
33
(4+6+9+9) - (7+7+2+1) = 28 -17=11 resulta divisible entre 11.
(7+7+2+1) - (4+6+9+9) = 17 -28=-11 resulta divisible entre 11.
número 4 7 6 7 9 2 9 1
posición 0 1 2 3 4 5 6 7
posiciones pares: 4, 6, 9, 9
posiciones impares: 7, 7, 2, 1
Ejercicio 35: Crea una clase llamada CalculadoraTrigonometrica para poder trabajar con las
funciones trigonométricas. Si es necesario utiliza las funciones potencia y factorial
programadas anteriormente en la clase Calculadora. La variable x está en radianes. Realiza
los diagramas de flujo y diagramas de clase UML antes de realizar el código. Se deben de
crear las funciones utilizando las siguientes fórmulas:
34
8- Retos Programación en Java
35
Ejercicio 2: Se necesita una aplicación en Java para manejar tarjetas de crédito titular o
tarjetas de crédito adicional en un banco. Cada tarjeta tiene un número de tarjeta, un tipo
(titular o adicional), una categoría (azul = 0, oro = 1 o platinum = 2), un número de cuenta
asignada al cliente, el año de adquisición (año actual), el año de vencimiento (las tarjetas
sólo tienen 5 años de vigencia), el número secreto, el límite de crédito (azul = $20,000, oro
= $30,000 o platinum = $50,000) y el saldo.
Las tarjetas se crean mínimo con el número de tarjeta, el número de cuenta asignada al
cliente, el tipo, la categoría, y año de adquisición (año actual). El año de vencimiento y el
límite de crédito se le deben asignar automáticamente.
Cuando un cliente solicita una tarjeta, el banco crea la tarjeta y el cliente debe activarla
proporcionando el número secreto.
Las tarjetas deben poder compararse entre ellas, el criterio de comparación será el número
de tarjeta.
Después de analizar cuidadosamente el problema:
1. Realiza el diagrama UML de la clase Tarjeta como se indica a continuación:
a) Define los atributos necesarios.
b) Define constructores.
c) Define los get’s y los set’s, que consideres convenientes, justifica
brevemente tu respuesta.
d) Define las funciones compareTo y toString.
e) Define el método activaTarjeta: para activar la tarjeta. Indica parámetros si
los necesita.
f) Define el método calculaCreditoDisponible: debe calcular y regresar el
crédito disponible de la tarjeta (en base al saldo y al límite de crédito de la
tarjeta). Indica parámetros si los necesita.
g) Define el método calculaComision: debe calcular y regresar la comisión de
la tarjeta. Indica parámetros si los necesita. La comisión se calcula de la
siguiente manera:
● Si la tarjeta es titular: la comisión es el 1% del límite de crédito si su
categoría es platinum, de otro modo la comisión es del .05% del límite
de crédito.
● Si la tarjeta es adicional: la comisión es el .05% del límite de crédito
cuando su categoría es platinum, del .02% del límite de crédito si su
categoría es oro y el .01% del límite de crédito si su categoría es azul.
36
parámetros que necesitan y el tipo de resultado que regresa para el caso de las
funciones.
2. Escribe en Java la clase Tarjeta.
3. Define una clase PruebaTarjeta para probar tu clase Tarjeta
a) Crea 2 tarjetas
b) Activa una tarjeta a un cliente pidiéndole al usuario los datos pertinentes.
c) Calcula e imprime la comisión de la tarjeta activada
d) Imprime la información completa de cada tarjeta
Ejercicio 3: Se necesita una aplicación en Java para manejar las frutas en una frutería. Cada
fruta tiene un número consecutivo como clave de identificación, el nombre de la fruta, su
color, ciudad de origen y su costo por kilo. Las frutas se pueden dar de alta de dos maneras:
la primera sólo con su clave de identificación y la segunda con todas sus características antes
mencionadas. Se les asigna automáticamente una clave de identificación consecutiva que
comienza a partir del número 2000.
Las frutas deben poder compararse entre ellas, el criterio de comparación será la clave de
identificación.
Después de analizar cuidadosamente el problema:
1. Realiza el diagrama UML de la clase Fruta, indicando los atributos de la clase, su(s)
constructor(es), métodos get/set necesarios y los métodos (o funciones) para
implementar las actividades siguientes, así como los métodos y funciones que
permitan la funcionalidad mínima de la clase. Para todos los métodos indica también
los parámetros que necesita y el tipo de resultado que regresa.
2. Escribe la clase Fruta en Java, de acuerdo a lo modelado en el inciso anterior.
3. Programa la función calculaPorcentajeDescuento: esta función debe calcular y
regresar el porcentaje de descuento (use parámetros si los necesita). El porcentaje
de descuento se calcula de la siguiente manera:
● 0% de descuento si la compra es menor de $1,500.00.
● Un descuento del 0% al 10% si el monto de la compra está entre $1,500.00 y
$10,000.00. La expresión es: ((monto de compra - 1,500) / 8,500) * 10%
● 10% de descuento si la compra es mayor a $10,000.00.
4. Programa la función calculaCosto: esta función debe calcular y regresar el costo de
los kilos solicitados (use parámetros si los necesita).
5. Escribe la clase MundoFruteria para probar tu clase Fruta,
a) Construye 2 Frutas con la siguiente información:
● Fruta 1: Manzana, roja, Campeche, 14.50.
● Fruta 2: Plátano, amarillo, Veracruz, 6.85.
b) Calcula e imprima el porcentaje de descuento para $8,500.00 de inversión
en cada fruta.
c) Calcula e imprima el costo total por fruta de 122 kilos.
37
d) Imprime la información completa de cada fruta.
e) Da un mensaje adecuada para decir cuál de las dos frutas es mayor o menor
según su clave de identificación.
38
9- Cadenas de caracteres y archivos de texto
En esta sección se presentan problemas cuya solución requiere de los métodos de la clase
String. Se sugiere revisar la documentación de java para conocer los métodos de los cuales
se dispone.
(https://docs.oracle.com/javase/7/docs/api/java/lang/String.html).
Ejercicio 1: Define la clase ManejadorCadenas que contenga métodos estáticos capaces de:
a) Dada una cadena, generar y regresar otra cadena con los caracteres que ocupan
posiciones pares seguidos de todos los caracteres que ocupan las posiciones
impares. Por ejemplo, si la cadena recibida es: “flor de un día”, la cadena generada
deberá ser: “fo e u ílrdnda”.
b) Dada una cadena y un carácter, contar y regresar el número de veces que el carácter
se encuentra en la cadena.
Ejercicio 2: El teclado de una computadora está descompuesto y, cada vez que se oprime la
letra ‘s’, esta se repite tres veces. Se desea que escribas un método estático que reciba
como parámetro una cadena de caracteres y que regrese dicha cadena modificada, de tal
manera que no tenga ‘s’ de más. Considera todos los casos que puedan presentarse. Prueba
tu solución, desplegando en pantalla el texto modificado.
39
Notas:
Los números son de un sólo dígito (no hay 10,11, ...).
Puede haber tantas sucesiones de a’s y b’s como se desee.
Las letras no necesariamente vienen alternadas.
En la línea de lectura, no hay ningún espacio.
Ejercicio 5: Define la clase Persona que tenga, entre sus atributos, el CURP. Incluye los
métodos necesarios para:
a) Obtener el género de la persona. Debe regresar una cadena indicando si la persona
es del género femenino o masculino.
b) Obtener la edad de la persona. Se consideran años cumplidos, es decir: año actual
– año de nacimiento.
c) Obtener si la persona es nacida en el país o no (en el CURP aparece como NE:
Nacido en el Extranjero).
Prueba tu solución. Acompaña los resultados con mensajes adecuados.
Ejercicio 6: Retoma la clase del ejercicio 1. Agrégale un método que, dada una cadena,
regrese true si dicha cadena es un palíndromo y false en caso contrario. Una cadena se
considera un palíndromo si puede leerse el mismo contenido de izquierda a derecha, que
de derecha a izquierda. Observa los siguientes ejemplos. Tu solución debe ser general, es
decir debe servir para palabras y frases. Prueba tu solución.
1234 no es un palíndromo
1221 sí es un palíndromo
gato no es un palíndromo
reconocer sí es un palíndromo
Neuquén sí es un palíndromo
Amad a la dama sí es un palíndromo
Ella te da detalle sí es un palíndromo
Ella va a votar no es un palíndromo
Anita lava la tina sí es un palíndromo
A mamá, Roma le aviva el amor a papá y a papá, Roma le aviva el amor a Mamá sí es un
palíndromo
En los ejemplos anteriores se puede observar que se ignoraron los acentos, las mayúsculas,
los espacios en blanco y los signos de puntuación. Puedes suponer que en la cadena que se
analizará no hay palabras acentuadas ni signos de puntuación.
40
Ejercicio 7: Escribe la clase AnalizaCadena que tenga un método estático que reciba una
cadena y un ArrayList<String> que almacena palabras que deben quitarse de la cadena. El
método regresa la cadena modificada (si tenía las palabras recibidas en el ArrayList).
En la cadena, las palabras están separadas entre sí por un único espacio en blanco.
Si la palabra está en la cadena más de una vez, sólo se elimina la primera ocurrencia.
En la misma clase escribe un método main que: a) Declare e inicialice una cadena y construya
un ArrayList y b) Llame al método anterior e imprima el resultado acompañado de un mensaje
adecuado. Puedes probar tu solución con el ejemplo que aparece más abajo y con los casos
que creas conveniente. Considera todos los casos que puedan presentarse.
Ejemplo:
Cadena: valor es lo que se necesita para levantarse y hablar, pero también es lo que se requiere
para sentarse y escuchar
ArrayList: [hablar, sentarse, valor, flores]
a) Un método que, dado un mensaje (dato de tipo String) que se recibe como parámetro,
genere y regrese otra cadena que es el mensaje comprimido. La secuencia de caracteres
“se comprime” considerando los caracteres iguales entre sí que ocupan posiciones
consecutivas. Puedes suponer que el mensaje recibido no contiene dígitos, sólo letras
y símbolos.
41
Cadena de entrada: ajjjjjjkkumtbb ----> Cadena resultado: a1j6k2u1m1t1b2
Variante: modifica tu solución o escribe otro método en la misma clase, tal que se puedan
comprimir cadenas como:
42
10- Arreglos
Prueba tus soluciones leyendo de un archivo de texto los datos necesarios para generar los
arreglos. Considera todos los casos que puedan presentarse.
43
programa debe leer una frase, decodificarla e imprimirla. La codificación utilizada es la
siguiente:
a 1
e 2
i 3
o 4
u 5
Por ejemplo:
Texto codificado: T4m1 1ñ4s c4nstr53r l1 c4nf31nz1 y s4l4 m3n5t4s p1r1 d2str53rl1.
Texto decodificado: Toma años construir la confianza y solo minutos para destruirla.
a) Elabora una clase Compania que tenga como atributos nombre, dirección, ciudad,
director y ventas. Esta clase debe tener la funcionalidad mínima requerida de toda
clase.
Compania
-nombre:String
-direccion:String
-ciudad:String
-director:String
-ventas: [] double
-totalVentas: int
+ Compañía()
+ Compañía(String, String, String, String)
+getNombre(): String
….
+getUnaVenta(int):double
+promedio():double
+mesMayor():int
+mesMenor():int
+arribaPromedio():int
+…
44
b) Crea una clase llamada PruebaCompania para pedirle al Sr. Pérez las ventas de los
12 meses del año anterior y que utilice la funcionalidad de la clase Compañía para
obtener e imprimir los datos requeridos.
Ejercicio 6: Define la clase CampamentoVerano que tiene como atributos el lugar donde se
llevó a cabo, la fecha, el responsable, el total de asistentes y los datos de todas las personas
que asistieron. Para representar a los asistentes utiliza la clase del ejercicio 5, de la sección
9 (Cadenas). Considera que el campamento tiene una capacidad máxima de 100 asistentes.
La clase solicitada debe tener la siguiente funcionalidad:
a) Dar de alta/baja un asistente.
b) Modificar la fecha.
c) Obtener y regresar el total de hombres/mujeres que asistieron.
d) Generar y regresar un reporte con los datos de los asistentes, clasificados de
acuerdo a la edad de los mismos: menores a 13 años, entre 13 y 16, mayores de 16
pero menores de 21 y de 21 o más. Se consideran años cumplidos, es decir: año
actual – año de nacimiento.
e) Obtener y regresar el total de asistentes nacidos (o no) en el país.
Define la clase Guarderia. Decide qué atributos y métodos incluir en ella. También debes
escribir una clase con un método main para probar toda la funcionalidad de la clase
Guarderia. Las edades de los niños fueron almacenadas en un archivo de texto.
45
Ejercicio 8: En un casino se desea generar ciertas estadísticas sobre el juego de ruleta. Para
diseñar e implementar el programa necesario, debes recordar que la ruleta está formada
por 70 elementos: los números del 1 al 34 (rojos), los números del 1 al 34 (negros), el 0 y el
00. El total de juegos varía, no todos los días se realiza el mismo número de jugadas. Al final
de cada día se necesita conocer la siguiente información:
Cuantas veces resultó ganador cada uno de los números de la ruleta.
Todos los números que no resultaron ganadores a lo largo del día.
El número de cada color que ganó más veces. Puedes suponer que sólo hay uno.
El número que ganó en más ocasiones.
Dado un color, decir si los números pares de dicho color salieron más veces que los
números impares.
Ejercicio 9: Cerca del ITAM hay una institución que se especializa en dar clases de natación
y que requiere que le ayuden a estimar algunos costos para mejorar sus instalaciones. La
institución se caracteriza por su nombre, domicilio, total de albercas, y tamaño de las
albercas (todas son de forma rectangular). Luego de las Olimpiadas el club ha recibido
muchas solicitudes de inscripción de potenciales ganadores de medallas de oro. Para
ofrecer un mejor servicio el club decidió techar todas sus albercas, pero de manera
individual para independizar el sistema de calefacción de cada una de ellas. Se te pide que
con la ayuda de la clase Rectangulo calcules e imprimas la cantidad de dinero requerido si
el costo por m2 de techo es de $1000. Crea una clase que contenga un arreglo de clase
Rectangulo, el número de albercas y decide qué atributos y métodos son necesarios incluir
para representar a esta institución y resolver su problema.
Ejercicio 10: En una galería de arte se tienen para la venta varias pinturas de autores
modernos. De cada pintura se guarda el nombre, el nombre del pintor, la técnica usada, el
año en el cual fue terminada y el precio de venta. Analiza todo el problema y decide qué
métodos incluir en esta clase. De la galería se guarda su nombre, su teléfono y los datos de
las pinturas que tiene para la venta (máximo 100). En esta clase, además de los atributos
mencionados, constructores y funcionalidad mínima que creas conveniente, debes
programar los métodos necesarios para que tenga la siguiente funcionalidad:
46
a) Dar de alta una pintura. Se reciben como parámetros los datos de la pintura y debes
realizar las validaciones pertinentes.
b) Consulta por pintor y técnica. Dados el nombre de un pintor y el de una técnica, el
método debe generar y regresar un ArrayList<String> con todos los datos de las
obras pintadas por dicho pintor, en las que haya usado la técnica dada. Si la galería
no tiene ninguna obra que cumpla con las características solicitadas, el método
deberá regresar null.
c) Consultar por precio. Dado un precio, el método debe regresar true si existe alguna
pintura que cueste menos que ese precio. En caso contrario, deberá regresar false.
Prueba tu solución asegurándote que obtiene los resultados correctos en cada caso.
Ejercicio 13: Durante un Seminario de Ética Profesional llevado a cabo en el ITAM, el pasado
mes de febrero, se registraron los nombres de todos los asistentes. Escribe una clase que
permita almacenar la información del seminario, incluyendo la información de los
participantes. En la clase Seminario se debe contar con métodos que permitan:
a) Generar un reporte de todos los asistentes, ordenado alfabéticamente de menor a
mayor.
b) Dado el nombre de una persona decir si dicha persona asistió o no al seminario.
c) Agregar un nombre (suponiendo que hubo alguna omisión al momento de capturar
inicialmente los datos).
d) Eliminar un nombre (suponiendo que se capturó dicho nombre por error).
Ejercicio 14: Define la clase Alumno. Un alumno se caracteriza por su nombre, domicilio,
CURP, nombre de carrera, total de materias aprobadas hasta el momento y las calificaciones
obtenidas en cada una de ellas. Si consideras conveniente agregar otros atributos puedes
hacerlo. Además, debe contar con métodos para cambiar de domicilio, de carrera, obtener
el promedio, calcular la edad, etc.
47
También debes escribir la clase Universidad que tiene, entre sus atributos, una lista de
alumnos ordenados por nombre. Esta clase debe tener, además de la funcionalidad mínima,
el siguiente comportamiento:
a) Dar de alta un nuevo alumno.
b) Dar de alta una calificación para alguno de los alumnos ya registrados.
c) Cambiar el domicilio de alguno de los alumnos ya registrados.
d) Dar de baja un alumno.
e) Generar un reporte (cadena) con los datos de todos los alumnos que se mencionan
a continuación: CURP, nombre, total materias aprobadas y promedio.
f) Generar un reporte (cadena) con los datos de todos los alumnos mayores de una
cierta edad (se recibe como parámetro).
Ejercicio 15: Define la clase Fiesta, según las especificaciones que se dan más abajo.
Observa que el atributo nombresInvitados es una lista de cadenas que almacenará los
nombres de todos los invitados.
Fiesta
-fecha: String
-lugar: String
-nombresInvitados: String[]
+Fiesta()
+Fiesta(String, String)
:::
+alta(String):boolean
+toString(): String
…
48
Por último, define la clase FiestaCumpleanios que utilice la clase Fiesta y pruebe que la
misma se comporta como se espera.
Ejercicio 17: Define la clase TiendaMascotas de tal manera que quede caracterizada por su
nombre, dirección, y los datos de todos los animales. Para representar a los animales debes
usar la clase Animal (si no la tienes definida debes hacerlo, incluyendo los atributos y
métodos que consideres importantes). La clase TiendaMascotas debe tener el siguiente
comportamiento: agregar nuevos animales para la venta, vender un animal, cambiar la
dirección de la tienda, dar a conocer todos sus datos, obtener e imprimir cuántos animales
de cierto tipo (por ejemplo, perros, gatos, patos, etc.) hay para vender en la tienda y, por
último, que determine si la tienda tiene, al menos, un animal exótico para la venta.
Por último, define la clase VendeMascotas que utilice la clase TiendaMascotas y pruebe
que la misma se comporta como se espera. Crea los diagramas UML para todos los
componentes del ejercicio.
Ejercicio 18: Realiza una clase VendeMascotasArchivos que utilice la clase TiendaMascotas
del ejercicio anterior, pero que haga una carga de datos inicial, leyendo de un archivo la
información de los animales con los que cuenta la tienda.
49
11- Arreglos bidimensionales
a) Sumar dos matrices. El método recibe dos matrices y sus respectivos números de
renglones y de columnas y, si es posible, calcula otra matriz que representa la suma
de las dadas.
b) Multiplicar dos matrices. El método recibe dos matrices y sus respectivos números
de renglones y de columnas y, si es posible, calcula otra matriz que representa la
multiplicación de las dadas.
c) Genera la traspuesta. El método recibe una matriz y su total de renglones y de
columnas y, si es posible, genera otra matriz que representa la traspuesta de la
primera.
d) Determinar si una matriz es simétrica.
e) Determinar si una matriz es identidad (o unidad).
Ejercicio 3: En la clase Compañía se tiene, entre sus atributos, una matriz de double de 12x4
que representa sus ventas, a lo largo del año anterior, en sus 4 departamentos. Programa
la clase Compañía, incluyendo los métodos necesarios para tener la funcionalidad que se
pide más abajo. Considera todos los casos que pueden presentarse. Prueba tu solución.
a) Obtener, para un departamento, el mes con el mayor monto de ventas del año.
50
b) Obtener, para un mes, el promedio de ventas, considerando todos los
departamentos.
c) Obtener, para un departamento, el promedio de ventas del año.
d) Obtener, si es posible, el mes en el cual no hubo ventas en ninguno de los
departamentos.
Ejercicio 4: En la clase Serpentario se tiene, entre sus atributos, una matriz que representa
el espacio en el cual viven (y se exhiben) las serpientes. Ese espacio puede verse como una
matriz, en la cual en cada casilla vive una serpiente diferente. De acuerdo a sus principales
características, les van asignando distinto renglón. Por ejemplo, en el primer renglón se
almacenan las constrictoras, en el siguiente las venenosas, etc. Considera que puede haber
diferente número de serpientes por renglón. Para guardar los datos de cada serpiente
define una clase, llamada Serpiente, y decide qué datos son necesarios o deseables y la
funcionalidad requerida. La clase Serpentario debe tener la funcionalidad que se pide más
abajo.
i) Debes decidir cómo manejar el hecho de que en cada renglón puede haber un
número diferente de datos almacenados.
ii) La implementación de tus soluciones debe ser consistente con lo establecido en el
inciso i.
51
c) Generar y regresar una cadena con el contenido del arreglo. Agrega espacios y saltos
de línea de tal manera que se facilita la visualización de la información.
d) Encontrar y regresar la posición del elemento más grande/pequeño de un cierto
renglón/columna.
e) Determinar si dos matrices son iguales. Para ser iguales deben almacenar el mismo
número de elementos en renglones y columnas y, además, los datos que almacenen
en cada una de sus casillas deben ser iguales. El método regresa un booleano.
NOTAS:
i) Analiza el problema e identifica los requisitos funcionales.
ii) Diseña la solución: ¿clases necesarias? ¿relación entre las clases? Realiza el
diagrama UML de tu diseño.
iii) Reusa los métodos de los manejadores de arreglos genéricos (unidimensional o
bidimensional, según corresponda).
52
12- Retos Arreglos
Ejercicio 1: Realiza una función estática llamada datosPosiciones que reciba como
parámetros: un arreglo de double y un número entero x (0 a 9), y que regrese un ArrayList
con los elementos que se encuentran en todas las posiciones múltiplo de x (incluyendo la
posición x).
En el main lee los datos de un archivo de texto (Datos.txt) y prueba tu función, imprimiendo
el ArrayList resultante.
Ejercicio 2: Realiza una clase en Java PracticaArreglos y programa en ella una función
estática llamada encuentraParesImpares que reciba como argumento dos arreglos de tipo
int llamados arrePares y arreImpares y regrese un ArrayList con los números pares del
arreglo arrePares y los números impares del arreglo arreImpares.
Ejemplo:
arrePares
0 1 2 3 4 5 6 7
10 7 3 12 9 8 1 22
0 1 2 3 4 5 6 7 8
arreImpares
11 13 10 15 8 4 2 1 44
0 1 2 3 4 5 6 7
ArrayList
10 12 8 22 11 13 15 1
53
0 si su índice es múltiplo de i. El proceso debe repetirse con i= 3, 4, etc. siempre que la
correspondiente casilla almacene 1. Por último, los números primos, comprendidos entre 2
y n, serán los índices de aquellas casillas en las que haya quedado un 1. La clase debe tener
un método main para probar el método solicitado e imprimir el ArrayList resultante.
Considera todos los casos que puedan presentarse.
Ejercicio 4: Define la clase Zoologico según las especificaciones que se dan más abajo.
Observa que el atributo “animales” es un arreglo desordenado de objetos del tipo Animal
que almacenará los datos de todos los animales (por ejemplo: nombre, edad, raza). Incluye
los métodos necesarios para que puedas:
a) Dado una raza indicar cuántos animales hay de esa raza en el Zoológico.
b) Calcular el promedio de las edades de los animales del Zoológico.
Por último, define una clase en Java llamada PruebaZoologico con un main que utilice un
archivo (datos.txt) para llenar el arreglo e imprimir lo solicitado probando cada uno de los
incisos anteriores.
Zoologico
-nombre: String
-direccion: String
-animales: Animal [20]
+Zoologico()
+Zoologico(String, String)
+promedioEdad (): double
+cuantosRaza(String): int
…
54
a) Dados los datos de una inversión realice el alta ingresándola en el arreglo.
b) Dado el nombre de un fondo indique si en el PortafolioInversion existe o no
una inversión en dicho fondo.
c) Indicar cuantas inversiones son mayores a un monto de inversión
determinado.
3. Realiza el main de la clase PruebaPortafolioInversion para que:
a) Construyas un objeto tipo PortafolioInversion.
b) Des de alta 2 inversiones.
c) Muestres si se invirtió en el fondo “C”.
d) Indiques en cuántos fondos se invirtió más de $650,000 pesos.
Ejercicio 6: Un hospital desea hacer una serie de reportes de los médicos que prestan sus
servicios. Los médicos pueden ser especialistas en más de una enfermedad. El hospital tiene
como máximo 50 médicos registrados.
Debes realizar la clase Hospital considerando que el hospital cuenta, entre sus atributos,
con los datos de todos sus médicos, ordenados de manera creciente de acuerdo a una clave.
Debes hacer la clase Medico para poder utilizarla en la clase Hospital.
La clase Hospital debe tener la siguiente funcionalidad:
a) Dar de alta un médico en el hospital.
b) Dar de alta una especialidad a un médico ya registrado en el hospital.
c) Generar una cadena con las especialidades que tenga un médico. Se recibe la clave
como parámetro.
d) Determina cuántos médicos tienen cierta especialidad (dada por el usuario).
e) Dar de baja a un médico en el hospital. Se recibe la clave como parámetro.
Ejercicio 7: Define la clase ObservatorioAstronomico la cual debe tener, entre sus atributos,
la información de la luz observada en diferentes puntos del espacio, de acuerdo a una
fotografía tomada por la noche. La información se almacena en forma de tabla como se
muestra más abajo. De acuerdo a esta información, se puede determinar si hay o no una
estrella en la posición i,j. Se sabe que hay una estrella si:
55
el punto no se encuentra en las orillas de la fotografía (primero o último
renglón o columna), y
(a[i, j] + a[i - 1, j] + a[i + 1, j] + a[i, j - 1] + a[i, j + 1]) > 30
0 3 4 0 0 0 6 8
5 13 6 0 0 0 2 3
2 6 2 7 3 0 10 0
0 0 4 15 4 1 8 0
0 0 7 12 6 9 10 4
5 0 6 10 6 4 8 0
El observatorio será capaz de generar una tabla en la cual aparecerá un ‘*’ en todos los i, j
en los cuales se determinó que hay una estrella. Las demás posiciones quedarán vacías.
Siguiendo con el ejemplo anterior, se debería obtener una tabla como la que se muestra a
continuación:
1 2 3 4 5 6 7 8
2 *
3
4 *
5 * * *
6
56
Ejercicio 8: Define la clase Estacionamiento que permita representar un estacionamiento
de n pisos con m lugares (cajones de estacionamiento) por piso. Decide el tipo y la cantidad
de atributos y los métodos que se necesitan para que la clase represente el concepto
mencionado y tenga la funcionalidad requerida según lo que se describe más abajo.
Cuando un auto se estaciona debe validar su boleto indicando el piso y el cajón que está
ocupando, así como la hora a la que llegó (del 0 al 24). La máquina de validación de boletos
le indica al usuario si el piso y cajón indicados son correctos o no, luego de verificar si el
lugar estaba o no como disponible. Además, se le solicita al usuario que proporcione toda
la información referente a su automóvil (marca, año, modelo, placas, tipo, fechas de
servicios realizados durante el año (mes), y cada uno de los tipos de servicios realizados:
afinación, frenos, cambio aceite, balatas, etc…).
57
13- Interfaces gráficas de usuario (GUI)
Ejercicio 1: El ITAM está recabando fondos para las becas de manutención con una
presentación de cine. Para ayudar a la venta de los boletos, se te pide realizar un programa
con una ventana como la que se muestra a continuación y su controlador.
Dado el número de boletos de adulto, el número de boletos de niño y su clasificación, se
debe calcular y regresar el costo a pagar por la función. El pago se realiza multiplicando el
número de boletos de adulto por 120 pesos si es clasificación A, 130 pesos si es clasificación
B y 150 pesos si es clasificación C. A esto se le debe sumar el número de boletos de niño por
30 pesos, no importa la clasificación excepto que el niño no puede ver películas de
clasificación C. Para mostrar el costo, modifica la ventana muestra o abre otra ventana.
58
2. Escribe la clase DiabetesControlador donde le des la funcionalidad al sistema de tal
manera que, al recibir las respuestas de un paciente, imprima si es propenso o no a
desarrollar diabetes y, en caso afirmativo, de qué tipo.
Ejercicio 3: Escribe la clase MasaVista para crear una ventana como la que se muestra a
continuación:
El índice de masa corporal (IMC) es una medida de asociación entre el peso y la estatura de
un individuo ideada por el estadístico belga Adolphe Quetelet, por lo que también se conoce
como índice de Quetelet. Se calcula según la expresión matemática:
IMC = peso/estatura2
La clasificación de la OMS del estado nutricional de acuerdo con el IMC es:
Escribe la clase MasaControlador de tal manera que pueda informar a cada usuario en qué
categoría se encuentra, según su peso y estatura.
Ejercicio 4: Escribe una clase “vista” que permita construir una ventana como la que se
muestra más abajo. Como se puede observar, en la ventana hay algunas etiquetas, campos de
texto y un botón. Esa ventana permite ingresar el nombre de un archivo y una letra. Escribe
también una clase “controlador” que, una vez oprimido el botón Aceptar, se despliegue en el
último campo de texto todas las palabras que contiene el archivo que empiecen o terminen
con la letra dada. Considera todos los casos que puedan presentarse.
En el ejemplo se captura el nombre del archivo: frutas (el mismo se proporciona en la unidad
U) y, al ingresar la letra n, el programa despliega todas las frutas que se encuentran en el
archivo cuyos nombres empiezan o terminan con la n. En este caso: naranja, melon
NOTAS:
59
i) Se suprimieron los acentos intencionalmente.
ii) Puedes suponer que en el campo de texto usado para mostrar el resultado siempre
hay lugar. También puedes investigar e incorporar lo necesario para desplegar gran
cantidad de información.
iii) Considera que tanto el nombre del archivo como las letras pueden darse en
mayúsculas o minúsculas.
60
Apéndice A: Uso del Debugger en Eclipse
Iniciar el Debugger
Para iniciar el Debugger, selecciona el archivo de Java que será ejecutado, da clic derecho
en él y selecciona Debug As → Java Application.
61
Una vez que has iniciado la aplicación a través del menú anterior, puedes usar de nuevo la
configuración de lanzamiento creada a través del botón Debug en la barra de herramientas
de Eclipse.
Si no has definido ningún breakpoint, tu programa correrá normal. Para utilizar el Debug
necesitas definir primero los breakpoints.
Si iniciaste el Debugger, Eclipse te pregunta si quieres cambiar a la vista Debug una vez que
se alcanza un punto para detenerse. Responde que sí en el cuadro correspondiente.
62
El programa se ejecuta de inmediato y el debugger está listo para usarse. Automáticamente
se detiene en el primer breakpoint indicado para que el usuario pueda empezar su análisis.
Tecla ● Descripción
63
Continúa la ejecución del programa hasta que se tope con el
F8
siguiente breakpoint o watchpoint.
La pila de llamadas muestra las partes del programa que están siendo actualmente
ejecutadas y como están relacionadas entre ellas. La pila de llamadas es mostrada en la vista
Debug.
La pestaña Variables muestra campos y variables locales de la pila que está siendo ejecutada
actualmente. Se necesita correr el debugger para ver las variables en esta pestana. Usa el
drop-down menú para mostrar las variables estáticas. Con el drop-down menú de la
pestaña también puedes personalizar las columnas visualizadas.
Además la pestaña Variables también permite cambiar el valor asignado a tu variable en
tiempo de ejecución.
64
65
Ejemplo
66
Apéndice B: Uso de clases definidas en otros proyectos
Después de aplicado el último paso se podrán usar cualquiera de las clases del proyecto
agregado.
67