Sei sulla pagina 1di 43

ALGORITMOS Y

PROGRAMAS
Cuaderno de Ejercicios
• Clases
• Estructuras algorítmicas de control
• Arreglos unidimensionales
• Arreglos genéricos
• Arreglos bidimensionales
Introducción
En este cuaderno de ejercicios se presentan varios problemas donde se aplican
los conceptos vistos en clase. Es muy importante resolver cada uno de los
problemas para asegurar que los conceptos se entendieron y, por lo tanto,
pudieron aplicarse en la solución de un problema.

Antes de resolver cada problema, ten en cuenta que:

1- Para encontrar la solución a un problema, primero debes entenderlo. Sigue


los siguientes pasos. Dada la descripción del problema planea (lee la
información, identifica los elementos más importantes: entradas, resultados,
operaciones, etc.) cómo vas a realizar tu trabajo. Luego diseña la solución
(puede ser un diseño con las clases representadas en UML y el algoritmo
en pseudo código). Una vez que tengas una idea clara de todo el problema
y de la solución del mismo (expresada por medio de clases y algoritmos)
impleméntala utilizando el lenguaje Java. Por último, prueba tu solución.
Asegúrate que los resultados son los esperados según la descripción del
problema. Si encuentras errores debes corregirlos hasta que tu programa
quede libre de ellos.

2- Es necesario leer cuidadosamente el enunciado de cada problema.


Identifica qué parte de la descripción está haciendo referencia a un dato
que puedes generalizar y qué parte está relacionada con la solución del
problema concreto que se te presenta. Cuando tengas esto claro,
representa lo primero como una clase que podrá ser usada
posteriormente. Es decir, trata que sea general. En cambio, la segunda
parte debe ser representada por una clase que se ajusta al problema
actual. El método main podrás incluirlo en esta clase o hacer una
exclusivamente para él.

3- A medida que los problemas que analices se tornen más complejos, puede
resultar necesario crear más de una clase general, mientras que siempre
tendrás una clase con un método main.

4- En tus clases vas a incluir dos tipos de miembros: atributos (son las
características de lo que está siendo representado por medio de la clase) y
métodos (son las operaciones válidas a aplicarse sobre los miembros de la
clase).

5- Los atributos siempre se declaran privados. Cuando se use herencia se


podrán declarar protegidos, si el problema lo justifica.

6- En cada clase incluye los métodos equals(), hashCode(), compareTo() y


toString(), y los métodos get() y set() necesarios.

Algoritmos y Programas Página 2


7- En el apéndice 1 se presentan los diagramas de flujo de las estructuras
algorítmicas de control y de algunos de los algoritmos correspondientes a
operaciones básicas en arreglos (búsqueda).

8- En el apéndice 2 se presentan una serie de ejercicios para ser resueltos


algorítmicamente y cuya solución debe ser expresada por medio de
diagramas de flujo.

9- En el apéndice 3 se presentan algunos métodos de la clase String y en el


apéndice 4 de la clase Math.

Algoritmos y Programas Página 3


Problemas a resolver
1. Ejercicio: 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, se te pide:

a) Realizar el diagrama de la clase Rectángulo, usando el lenguaje UML.


b) Escribir la clase Rectángulo usando el lenguaje Java.

2. Ejercicio: 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, se te pide:

a) Realizar el diagrama de la clase Círculo, usando el lenguaje UML.


b) Escribir la clase Círculo usando el lenguaje Java.

3. Ejercicio: Considera que se necesita calcular el espacio ocupado por 3 mesas


rectangulares que se colocarán en una sala. Se sabe que la primer mesa mide 2
x1.8 metros., la segunda 1 x 1.5 metros y la tercera 3 x 2 metros. Crea la clase
MundoMesas y usando la clase del ejercicio 1 calcula el espacio ocupado por las
tres mesas.

4. Ejercicio: Considera que se tiene 1 oficina rectangular (el usuario debera darte las
medidas) que está cubierta por 3 tapetes circulares. Crea la clase MundoOficina
y usando las clases de los ejercicios 1 y 2 calcula el área de la oficina que NO esta
cubierta por tapetes.

5. Ejercicio: 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?

6. Ejercicio: Se requiere representar de manera simplificada el concepto Persona


por medio de una clase de Java. Para resolver el problema tienes que pensar
cuales son las características del concepto que estás representando con la clase
(toda persona tiene un nombre, el CURP, un domicilio, etc.). De esta forma puedes
determinar los atributos de la clase. Luego piensa cuales son las operaciones que
pueden aplicarse sobre los atributos y que pueden requerirse de manera
frecuente. Una persona puede cambiar de domicilio, de teléfono, de estado civil, se
puede necesitar su CURP, su nombre, etc.

7. Ejercicio: Realiza una clase MundoPersona para probar la funcionalidad de la


clase Persona del ejercicio anterior.

8. Ejercicio: La fábrica “La Alfombra Voladora” se dedica a la fabricación de


alfombras. Todas sus alfombras tienen forma rectangular o circular. La materia
prima que utiliza son paños de una tela especial que recibe de oriente. Cada paño
tiene un tamaño de m x n metros.

Algoritmos y Programas Página 4


a) Define la clase Fábrica utilizando un diagrama UML. Incluye los
miembros (atributos y métodos) que creas conveniente.
b) Escribe el método calculaTotalAlfombrasRect(int m, int n, double l1,
double l2): int de la clase Fábrica. El método recibe el tamaño del paño
(mxn) y el tamaño de la alfombra rectangular que se desea fabricar (l1 x
l2) y, calcula y regresa el total de alfombras de l1 x l2 que se pueden
fabricar con dicho paño.
c) Escribe el método calculaTotalAlfombrasCirc(int m, int n, double radio): int
de la clase Fábrica. El método recibe el tamaño del paño (mxn) y el
tamaño de la alfombra circular que se desea fabricar (radio) y, calcula y
regresa el total de alfombras que se pueden fabricar con dicho paño
d) Escribe la clase MundoAlfombras que contenga un método main y
permita probar tu solución.

9. Ejercicio: Un cilindro se caracteriza por el valor de su radio y de su altura.


Asimismo, se sabe que las operaciones que permiten calcular el área y el volumen
del cilindro son muy útiles. El área de un cilindro es igual a la suma de las áreas de
los dos círculos más el área del rectángulo, formado por la longitud de la
circunferencia y la altura del cilindro. El volumen se obtiene multiplicando la
superficie de la base del círculo por la altura del cilindro. De acuerdo a esta
información y, teniendo en cuenta lo mencionado en la Introducción, se te pide:

a) Realizar el diagrama de la clase Cilindro, usando el lenguaje UML.


b) Escribir la clase Cilindro usando el lenguaje Java.

10. Ejercicio: Escribe la clase CientíficoMatemático según el siguiente diagrama.

CientíficoMatemático

-nombre: String
-áreaEspecialidad: String
// Puedes agregar otros atributos
+constructores
+toString()
+setNombre(String): void
+getNombre(): String
+set ÁreaEspecialidad (String): void
+get ÁreaEspecialidad (): String

/* Agrega los métodos que creas conveniente. Considera lo enunciado en la


Introducción. */

11. Ejercicio: En la clase CientíficoMatemático agrega el método


estáOrdenCreciente(int número1, int número2): boolean que regresa true si los
números dados están en orden creciente.

12. Ejercicio: En la clase CientíficoMatemático agrega el método


ordenaCreciente(int número1, int número2): String que regresa una cadena
formada con los dos números dados, ubicados de tal manera que estén ordenados

Algoritmos y Programas Página 5


de forma creciente y separados por un guión. Es decir, si la entrada es 26 y 23, el
método deberá regresar 23–26.

13. Ejercicio: En la clase CientíficoMatemático agrega el método esImpar(int


número): boolean que regresa true si el número recibido como parámetro es impar
y false en caso contrario.

14. Ejercicio: En la clase MundoCentroInvestigación crea un objeto del tipo


CientíficoMatemático y prueba los métodos desarrollados en los ejercicios
anteriores. ¿Es necesario tener un (objeto de la clase) CientíficoMatemático para
poder probar los métodos de los ejercicios anteriores? ¿Lo podrías hacer
diferente? ¿Cómo?

15. Ejercicio: En la clase CientíficoMatemático agrega el método


calculaFunción1(double x): double que calcula y regresa el resultado de la función
que se muestra a continuación.

3 x + 36 si x ≤ 11


 x 2 − 10 si 11 < x ≤ 33

y = f ( x) = 
x + 6 si 33 < x ≤ 64



0 para los demás valores de x

16. Ejercicio: En la clase CientíficoMatemático agrega el método


calculaFunción2(int x): double que calcula y regresa el resultado de la función que
se muestra más abajo.

 x2 si x%4 = 0


 x si x%4 = 1
 6
y = f ( x) = 

 x si x%4 = 2

 3
 x + 5 si x%4 = 3

17. Ejercicio: En la clase CientíficoMatemático agrega el método


calculaFunción3(int num, int v): double que calcula y regresa el resultado de la
función que se muestra más abajo.

Algoritmos y Programas Página 6


100 * v si num = 1


100 v si num = 2

y = f (v ) = 
100 / v si num = 3


0 para cualquier otro valor de num

18. Ejercicio: Retoma la clase MundoCentroInvestigación y modifícala para probar


los métodos desarrollados en los ejercicios anteriores.

19. Ejercicio: 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).

20. Ejercicio: 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 0

21. Ejercicio: Prueba los resultados del ejercicio anterior con una clase
MundoCalculadoraComplejos. Deberás 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 deberás 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.

Algoritmos y Programas Página 7


22. Ejercicio: 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.

23. Ejercicio: Escribe la clase MundoNegocio en la cual se crean dos objetos del tipo
ventas. Usa dichos objetos para probar tu solución del problema anterior,
considerando una venta de $850 y otra de $2350.

24. Ejercicio: En la clase CientíficoMatemático 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.

25. Ejercicio: En la clase CientíficoMatemático agrega el método


generaSerieDescendente(int n): String que genera y regresa los primeros n
números naturales en forma de cadena, siendo n >1. Los elementos de la serie
deben estar en orden descendente. Es decir, deberá generar una cadena de la
forma n n-1 ... 3 2 1.

26. Ejercicio: En la clase CientíficoMatemático agrega el método encuentraPares(int


n): String que encuentra y regresa los primeros n números pares en forma de
cadena, siendo n >1. Es decir, deberá generar una cadena de la forma 2 4 6 8...

27. Ejercicio: Retoma la clase MundoCentroInvestigación y modifícala para probar


los métodos desarrollados en los ejercicios anteriores. Asegúrate de que los datos
dados sean los esperados por los métodos, y que los resultados obtenidos estén
correctos.

28. Ejercicio: 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.

29. Ejercicio: En la clase Calculadora agrega el método calculaUllman(int número):


String que genera y regresa los elementos correspondientes a la conjetura de
Ullman (en honor al matemático S. Ullman). Con el dato recibido (número > 1)
como parámetro genera los elementos según se indica a continuación:

• Empieza con el número dado.

• Si es par, divídelo entre 2; si es impar multiplícalo por 3 y agrégale 1.

• Obtén enteros sucesivamente repitiendo el proceso, hasta llegar al 1.

Siempre se llega al número 1, independientemente del entero inicial. Por ejemplo,


si el entero inicial fuera 26, la secuencia será:

Algoritmos y Programas Página 8


26 13 40 20 10 5 16 8 4 2 1

30. Ejercicio: En la clase Calculadora agrega el método generaCubosNicómano(int


n): String que genera y regresa –en forma de cadena- los primeros n cubos de
Nicómaco. Para ello, considera la siguiente propiedad descubierta por Nicómaco
de Gerasa: “Con el primer número impar, se obtiene el primer cubo. Sumando los
dos siguientes impares se obtiene el segundo cubo. Sumando los tres siguientes,
se obtiene el tercer cubo, etc.”

Es decir: 1 = 13,

3 + 5 = 23 = 8,

7 + 9 + 11 = 33 = 27,

13 + 15 + 17 + 19 = 43 = 64.

31. Ejercicio: Retoma la clase Calculadora. Agrégale el método calculaFactorial(int


n): int que calcula y regresa el factorial de n (con n ≥ 0).

32. Ejercicio: Retoma la clase Calculadora. Agrégale el método


calculaMáximoComúnDivisor(int m, int n): int que calcula y regresa el Máximo
Común Divisor de dos números enteros, aplicando el algoritmo de Euclides que
establece: si m>=n, MCD(m,n) = MCD(n, m % n). Si n=0, MCD(m,n) = m.

33. Ejercicio: Retoma la clase Calculadora. Agrégale el método


generaSerieFibonacci(int n): String que calcula y regresa –en forma de cadena- los
primeros 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.

Ejemplo: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, . . .

34. Ejercicio: Retoma la clase Calculadora. Agrégale el método calculaSerie1(int n):


int que calcula y regresa el resultado de la siguiente sumatoria (con n ≥ 0).


i = 1
i i

35. Ejercicio: Retoma la clase Calculadora. Agrégale el método calculaSerie2(int n,


int número): int que calcula y regresa el resultado de la serie que aparece más
abajo. El método recibe el número de términos, n (con n ≥ 0) y el dato número y
regresa el resultado generado.

número + número + número + número + número + ...


3 5 7 3 5

Algoritmos y Programas Página 9


36. Ejercicio: Retoma la clase Calculadora. Agrégale el método calculaSerie3(int n):
int que calcula y regresa el resultado de la siguiente sumatoria (con n ≥ 0).

n
(n − i )!

i =0 i!

Que ya desarrollada para n=5, quedaría:

5! 4! 3! 2! 1! 1
+ + + + +
1 1! 2! 3! 4! 5!
Se requiere que optimices operaciones por lo que sólo debes llamar 1 vez a la
función de factorial, que ya tienes programada en la clase.

37. Ejercicio: Retoma la clase Calculadora. Agrégale el método esDivisiblePor11(int


n): boolean que determina si el número n es divisible por 11, de acuerdo a lo que
se explica más abajo. El método regresa true si el número dado es divisible por 11
y false en caso contrario.

Un número es divisible por 11 si la diferencia entre la suma de sus dígitos en


posición impar y la suma de sus dígitos en posición par, es divisible entre 11 o
viceversa. Por ejemplo: 47 679 291 es divisible entre 11, puesto que,

(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 par: 4, 6 , 9 , 9

posiciones impar: 7, 7, 2 , 1

38. Ejercicio: Se requiere una aplicación en Java para poder obtener los valores de
las funciones trigonométricas: seno, coseno, tangente y cotangente, utilizando las
siguientes formulas:

x3 x5 x7 x9
sen( x) = x − + − + − ......
3! 5! 7! 9!

x2 x4 x6 x8
cos( x) = 1 − + − + − ......
2! 4! 6! 8!

sen( x)
tan( x) =
cos( x)

Algoritmos y Programas Página 10


cos( x)
cot( x) =
sen( x)

Crea una clase llamada CalculadoraTrigonométrica 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 algoritmos necesarios, diagramas de flujo y diagramas de
clase UML antes de realizar el código.

39. Ejercicio: Elabora un programa (una clase MundoTrigonometria con método


main) que pida al usuario un número y que le presente un menú de operaciones a
realizar con ellos, lea la opción del usuario y realice la operación indicada.

El programa debe permitir al usuario ejecutar tantas operaciones como desee,


hasta que indique la opción de salida (‘s’).

40. Ejercicio: 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, en caso contrario mandar un mensaje adecuado. 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:

a) Realiza un diagrama UML de la clase CuentaBancaria, identifica los


atributos y los métodos necesarios para que tenga la funcionalidad
mínima requerida.
b) Realiza los algoritmos y diagramas de flujo necesarios.
c) Crea una clase MundoBanco 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.
d) Para la cuenta de Juana García registra un depósito de $4’000.00.
e) Para la cuenta de José Pérez registra un retiro de $10’000.00.
f) Para la cuenta de José Pérez registra un depósito de $1’000.00.

41. Ejercicio: 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.

a) Crea la clase Auto en Java con los atributos mencionados anteriormente.


Además de la funcionalidad mínima requerida la clase debe incluir

Algoritmos y Programas Página 11


diferentes métodos para poder realizar una renta del auto 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 año 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 al 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 los algoritmos necesarios, diagramas de flujo y diagramas de clase UML
antes de realizar el código.
b) Se debe generar una clase MundoAgencia donde se haga la instancia
de 5 autos que son con los que está empezando a operar.
c) Después realiza la renta de 2 autos, pidiendo al usuario que auto quiere
rentar (1 a 5), calcula el cobro respectivo a los clientes y haga el registro
de la devolución de uno de ellos. Realiza los algoritmos necesarios,
diagramas de flujo y diagramas antes de realizar el código.

ARREGLOS

42. Ejercicio: Define la clase ManejadorArreglos que contenga métodos estáticos


capaces de:

a) Correr los elementos de un arreglo de enteros k lugares a la derecha.


b) Correr los elementos de un arreglo de enteros k lugares a la izquierda.
c) Sumar los elementos de un arreglo de enteros.
d) Obtener el promedio de los elementos de un arreglo de enteros.
e) Obtener el índice donde se encuentra el elemento mayor de un arreglo de
enteros.
f) Obtener el índice donde se encuentra el elemento menor de un arreglo de
enteros.
g) Determinar cuántos elementos de un arreglo de enteros son mayores a
un cierto parámetro.
h) Determinar cuántos elementos de un arreglo de enteros son menores a
un cierto parámetro.

43. Ejercicio: Se tiene el número de habitantes de cada uno de los estados de un


país. En una oficina gubernamental se quiere procesar esa información para poder
tomar algunas decisiones. Usa un arreglo de enteros para almacenar la población
de cada estado y un arreglo (paralelo) de Strings para almacenar los nombres de
los estados. Dicha oficina está a cargo del Lic. Martín Cuenta. A partir de la
información que se tiene se quiere obtener: (a) El estado con mayor población,
(b) El promedio de habitantes por estado a nivel nacional, (c) Total de estados que
tienen una población menor al promedio. Define la clase OficinaGobierno. Decide

Algoritmos y Programas Página 12


qué atributos y métodos incluir en ella. Puedes emplear métodos que hayas
programado en la clase ManejadorArreglos.

44. Ejercicio: La compañía “Empaques S.A. de C.V.” que se encuentra localizada en


Av. Constitución 34 en la Cd. de Querétaro quiere saber cuál es el promedio de
unidades vendidas del año pasado, cuál fue el mes en el que se vendieron más
unidades, cuál fue el mes en el que se vendieron menos unidades, cuántos meses
están por arriba del promedio y el total de unidades vendidas en el año. Para lo
cual el Sr. Pérez, que es el director de la empresa, te proporciona las unidades
vendidas de cada mes del año pasado.

a) Elabora una clase Compañía que tenga como atributos nombre,


dirección, ciudad, director y ventas. Esta clase debe tener la funcionalidad
mínima requerida de toda clase.
b) Crea una clase llamada MundoCompañía para pedirle al Sr. Pérez las
ventas de los 12 meses del año anterior y que mande llamar a compañía
para que realice los cálculos necesarios de los datos que el director
requiere y los imprima en pantalla.

45. Ejercicio: En la guardería “La Casita Feliz”, especializada en niños menores de 4


años y preocupada por cuestiones ambientales, quieren conocer algunos datos
sobre el consumo diario de pañales. Luego de muchos años de experiencia, las
nanas de la guardería saben que a los niños de meses les cambian 6 veces los
pañales durante el tiempo que permanecen a su cuidado. Por su parte, a los niños
que ya cumplieron el año, pero que aún no tienen 2 le cambian los pañales 4
veces al día. Los que tienen 2 años o más, sin llegar a los 3 ocupan 3 pañales y a
los de 3 años o más sólo los cambian 2 veces al día. Para este problema sólo se
necesita conocer la edad, en años cumplidos de los niños y crear con estos datos
un arreglo de enteros. Actualmente “La Casita Feliz” recibe a 20 niños. Identifica
atributos y métodos requeridos para: (a) Calcular total diario de pañales, (b)
Calcular promedio diario de pañales y (c) Determinar en qué categoría de niños
(de acuerdo a la edad) se consumen más pañales. Define la clase Guardería.
Decide qué atributos y métodos incluir en ella.

46. Ejercicio: 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 datos de las albercas (todas son de forma rectangular). Luego de las
Olimpíadas 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
Rectángulo (problema 1) calcules e imprimas la cantidad de dinero requerido si el
costo por m2 de techo es de $1000. Decide qué atributos y métodos incluir para
representar esta institución y resolver su problema.

47. Ejercicio: Retoma la clase ManejadorArreglos y agrega métodos que permitan:

a) Ordenar los elementos de un arreglo de enteros.


b) Buscar un elemento en el arreglo de enteros y obtener el índice donde se
encuentre o el negativo del índice donde debería estar.

Algoritmos y Programas Página 13


48. Ejercicio: Convierte los métodos de tu clase ManejadorArreglos a métodos
genéricos <T> para que puedas trabajar con ellos independientemente del tipo del
arreglo que tengas. ¿Qué métodos vale la pena convertir? ¿De qué depende?

49. Ejercicio: Define la clase ListaIndexadaDesordenada<T> y la clase


ListaIndexadaOrdenada<T> de acuerdo a lo visto en clase. Asegúrate que todos
sus métodos funcionan correctamente. Agrega los métodos necesarios para:

a) Insertar un elemento en una lista.


b) Eliminar un elemento de la lista.
Realiza las validaciones pertinentes según sea el caso.

50. Ejercicio: 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 correspondiente a los participantes (haciendo uso de una
ListaIndexadaOrdenada). 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) y (d) Eliminar
un nombre (suponiendo que se capturó dicho nombre por error).

51. Ejercicio: 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, etc.

52. Ejercicio: Una escuela necesita de tu ayuda para manejar la información de un


grupo de sus alumnos. De la escuela se conoce: el nombre, la dirección, el total de
alumnos y los datos de cada uno de los alumnos. Además, en la escuela se
realizan las siguientes actividades: (a) Dar de alta un alumno (asegúrate que no
haya sido dado de alta previamente), (b) Dar de baja un alumno (asegúrate que
exista), (c) Desplegar los datos de un alumno (el usuario da la clave y, si dicho
alumno está en la escuela se muestran sus datos, en caso contrario se informa al
usuario que no fue encontrado) y (d) Desplegar los datos del alumno que tenga el
mayor promedio de la escuela (supón que sólo hay un alumno que cumpla con
esta condición). Analiza cuidadosamente el problema. Identifica las clases
involucradas en el problema, y de cada una de ellas los atributos y los métodos.

53. Ejercicio: Se tienen los datos de un grupo de personas que participan en el coro
del ITAM. El director del coro necesita que le hagas un programa que pueda
ayudarle a manejar esa información. Define la clase Coro que tiene como atributos
los datos del director, el total de personas que forman el coro y los datos de cada
una de ellas. El total máximo de personas que participan en el coro son 30.
Puedes usar la clase Persona definida en el ejercicio 4 para almacenar los datos
del director y de cada uno de los miembros. Además debes incluir métodos que
puedan (a) Cambiar al director del coro, (b) Agregar una persona al coro, (c) Dado
el nombre de uno de sus miembros, obtener todos sus datos, (d) Dar de baja a un
miembro del coro y (e) Cambiar el domicilio de uno de sus miembros o del director.

Algoritmos y Programas Página 14


En cada caso asegúrate de que las operaciones puedan llevarse a cabo con éxito.
En caso contrario informa al usuario.

54. Ejercicio: 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. Incluye los métodos necesarios
para que puedas:

Fiesta
-fecha: String
-lugar: String
-nombresInvitados: ListaGenericaOrdenada<String>
+Fiesta()
+Fiesta(String, String)
+alta(String):boolean
+toString(): String

a) Formar la lista de invitados de manera ordenada (alfabéticamente de la


“A” a la “Z”). Todos los nombres deben guardarse en mayúsculas,
independientemente de cómo los dé el usuario.
b) Quitar a uno de los invitados de la lista. El usuario da como dato el
nombre de un invitado. El método debe regresar un mensaje adecuado
indicando si se eliminó o no.
c) Agregar un invitado a la lista de invitados, sin alterar el orden que ya
tienen. El usuario da como dato el nombre del nuevo invitado. El método
debe regresar un mensaje adecuado indicando si se agregó o no (no se
aceptan dos invitados con el mismo nombre).
d) Obtener el primero de la lista.
e) Obtener el último de la lista.
f) Obtener, en forma de cadena, la lista completa de invitados.
Por último, define la clase FiestaCumpleaños que utilice la clase Fiesta y pruebe
que la misma se comporta como se espera.

55. Ejercicio: Define la clase AgenciaAutomotriz considerando que se caracteriza


por un nombre, una dirección, la cantidad de marcas que vende (en el caso de
que varias marcas pertenezcan al mismo corporativo), los nombres de todas las
marcas (ordenados alfabéticamente de la “A” a la “Z”), la cantidad de autos que
tiene para vender y los datos de cada uno de los autos. Para almacenar los
nombres de las marcas usa un ListaIndexadaOrdenada<String>; y para almacenar
los autos una ListaIndexadaOrdenada<Auto> (si no tienes la clase Auto, defínela
incluyendo los atributos y métodos que creas conveniente). Se quiere que la clase
AgenciaAutomotriz pueda agregar una nueva marca a las que ya vende, dejar de
vender alguna de las que vende, recibir nuevos autos para su venta, vender
alguno de los autos que tiene para la venta, dar a conocer todas sus
características al usuario o sólo alguna de ellas, dar los datos del auto más caro,
dada una marca (si la agencia la vende) obtener cuántos autos tiene de dicha

Algoritmos y Programas Página 15


marca. Debes definir los métodos que mejor representen el comportamiento
deseado de la clase.

Por último, define la clase VendeAutos que utilice la clase AgenciaAutomotriz y


pruebe que la misma se comporta como se espera.

56. Ejercicio: 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).
Para almacenar los datos de los animales usa una lista. 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.

Por último, define la clase VendeMascotas que utilice la clase TiendaMascotas y


pruebe que la misma se comporta como se espera.

MATRICES (arreglos bidimensionales)

57. Ejercicio: Define la clase ManejadorMatrices. Incluye métodos estáticos para:

a) Sumar dos matrices.


b) Restar dos matrices.
c) Multiplicar dos matrices.
d) Obtener la transpuesta de una matriz.
e) Sumar los elementos de una fila (el usuario proporciona la fila que
interesa).
f) Sumar los elementos de una columna (el usuario proporciona la columna
que interesa).
g) Sumar los elementos de la diagonal principal (i=j).
h) Sumar los elementos de la diagonal secundaria (i+j=n).
i) Dado un valor que identifica un renglón, regresar la columna donde se
encuentra el valor más pequeño/grande de dicho renglón.
j) Dado un valor que identifica una columna, regresar el renglón donde se
encuentra el valor más pequeño/grande de dicha columna.

58. Ejercicio: En la clase ManejadorMatrices agrega el método


generaCuadradoMágico(int n): Matriz, el cual forma y regresa como resultado un
cuadrado mágico: “un cuadrado mágico es una matriz cuadrada de dimensión n (n
entero, positivo e impar), donde los elementos que llenan a la matriz son los
valores de 1 a n2, de tal manera que la suma de los elementos de cada una de las
filas, de cada una de las columnas y de las diagonales principales son iguales”.

El algoritmo para crear un cuadrado mágico es el siguiente:

Algoritmos y Programas Página 16


a) El número 1 se coloca en la casilla central de la primera fila.
b) El siguiente número se coloca en la casilla correspondiente a la fila anterior y
columna posterior. La fila anterior a la primera es la última y la columna
posterior a la última es la primera.
c) Si el número es un sucesor de un múltiplo de n, no aplica la regla b) sino que,
se coloca en la casilla de la fila posterior y en la misma columna.

Observa el siguiente ejemplo:

Sea n = 3
0 1 2
0 8 1 6
1 3 5 7
2 4 9 2

Donde la suma de cada renglón, columna y diagonal principal es: 15

59. Ejercicio: En la clase ManejadorMatrices agrega el método


compruebaCuadradoMágico(int[][]): boolean que determina si una matriz es o no
un cuadrado mágico. Prueba tu solución generando un cuadrado con el método
del ejercicio anterior y luego verifica que el mismo cumple con las condiciones de
ser un “cuadrado mágico”.

60. Ejercicio: En un observatorio astronómico se miden y registran las cantidades de


luz en ciertos puntos del espacio. En cada una de las observaciones se registra: la
fecha, la cantidad de luz detectada y las coordenadas del punto donde se hizo el
registro. Supón, que se representa el cielo (el espacio de él observado…) como
un arreglo bidimensional, donde los renglones corresponden al eje x y las
columnas al eje y de los puntos donde se hicieron las observaciones. Es decir, en
cada casilla del arreglo se guarda un elemento del tipo PuntoLuz. Agrega un
método en la clase ManejadorMatrices para que a partir de ahora un científico
pueda determinar cuáles de esos puntos de luz corresponden a estrellas. Para ello
se sabe que:

• Una estrella no se encuentra en las orillas del espacio (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 hay una estrella
en i,j

61. Ejercicio: Define una clase que represente a los productos que produce una cierta
industria. De cada producto se tiene clave, descripción y cantidad de unidades
producidas por mes. Por otra parte, se sabe que la industria quiere guardar las
producciones mensuales de productos a lo largo de los últimos 5 años (supón que
en un cierto mes se produce un solo tipo de producto). Si en un mes no hubo
producción, habrá null en la casilla correspondiente. Define la clase
ProduccionEmpresa que tendrá entre sus atributos una matriz. Debes incluir los
métodos necesarios para:

Algoritmos y Programas Página 17


a) Calcular y regresar el total de unidades producidas en un mes (el usuario
da como dato el mes que le interese).
b) Calcular y regresar el total de unidades producidas en un año (el usuario
da como dato el año que le interese.
c) Año con mayor producción. Supón que uno solo cumple con esta
característica.
d) Mes con la menor producción en el año 3.
e) En cuántos meses de un año dado, se produjo un cierto producto (el
usuario da como dato la clave del producto y el año que le interese).
La matriz usada para guardar productos podría representarse como se muestra
más abajo.

Año1 Año 2 Año 3 Año 4 Año 5


Mes 1
Mes 2

Mes 11
Mes 12

p1: Producto p2: Producto


-clave: String -clave: String
-descripción : String -descripción : String
-totalUnidadesProducidas: int -totalUnidadesProducidas: int
+ constructores() + constructores()
+toString(): String +toString(): String
… …

62. Ejercicio: Un Hotel lleva el control de sus reservaciones, cada mes se registra
cuántas reservaciones hace cada vendedor de cada tipo de habitación.

El Hotel se llama “Paraíso” y se encuentra en Acapulco, está estrenando sus


instalaciones, sólo lleva operando 4 meses y cuenta con tres empleados en el área
de reservaciones José, María y Lupita. Existen 3 tipos de habitaciones: las
sencillas con un costo de $750.00 por noche, la dobles con un costo de $1200.00
por noche y las suites con un costo de $2500.00 por noche. Las habitaciones
sencillas y dobles llevan incluido el desayuno.

Considera las siguientes matrices de reservaciones:

Algoritmos y Programas Página 18


Habitaciones sencillas:

1 2 3 4
José 10 9 8 8
María 4 6 2 10
Lupita 15 2 11 8

Habitaciones dobles:
1 2 3 4
José 12 8 3 5
María 6 8 12 7
Lupita 15 12 1 4

Habitaciones suites:
1 2 3 4
José 2 2 1 0
María 3 1 2 0
Lupita 1 0 2 1

Analiza cuidadosamente el problema. ¿De qué tipo y dimensiones son las


matrices? ¿Conviene tener un arreglo de cadenas para guardar los nombres de los
empleados?

a) Realiza un programa en Java que te indique:


• El total de reservaciones realizadas estos 4 meses.
• Qué tipo de habitación es la más solicitada.
• Cuánto representarán en pesos las reservaciones realizadas por
José.
• Cuántos desayunos se deben programar para el tercer mes.
• Quién tiene más reservaciones de suites en el primer mes.

63. Ejercicio: Una constructora lleva el registro de las obras que tiene en este
momento y quiere que realices un programa en Java para poder obtener
información de los datos que tiene y así poder llevar un mejor control de los
gastos.

Después de pláticas con el dueño de la constructora recabas la siguiente


información:

• De cada obra se tiene la dirección, el nombre del dueño, el número


de licencia asignado (un valor único para cada obra), el número de
obreros que asignaron a dicha obra (máximo 20) y los m2 planeados
de construcción.
• De cada balance se tiene el número de licencia, el monto pagado en
el mes por el dueño de la obra y el monto de los gastos asociados a
la obra durante el mes.

Algoritmos y Programas Página 19


• La constructora se llama “MiCasitaFeliz”, construye casas tipo
habitación y tiene la capacidad de atender 3 obras
simultáneamente. Por otro lado la constructora lleva un registro del
balance de cada obra en cada mes. Por el momento solo lleva
trabajando tres meses este año.
a) Define las clases necesarias, realiza tus diagramas de clase UML y define
la funcionalidad mínima requerida en cada una de ellas. Programa cada
clase en Java.
• Para la clase Obra considera que si tienen el mismo número de
licencia son iguales y que una obra es mayor a otra por el número
de metros construidos.
• Para la clase Balance considera que un balance es igual a otro si
tiene el mismo número de licencia y que un balance es mayor a
otro si el saldo es mayor (pagos – gastos), el saldo no debe ser un
atributo ya que en cualquier momento lo puedes calcular, sin
embargo vas a necesitar un método que calcule y regrese al saldo
del balance de esa obra de ese mes.
• Para la clase Constructora considera que tiene entre otros
atributos un arreglo de obras y una matriz con los balances de
cada obra de cada mes de un año. Considera que una
constructora es igual a otra si tienen el mismo nombre y que una
constructora es mayor a otra por el número de obras que tiene a
su cargo. El número máximo de obras que puede atender una
constructora simultáneamente es de 10.
b) En la clase Constructora crea una función llamada altaObra para dar de
alta a una obra verificando que no se repitan y que pueda ser llamado así:
miConstructora.altaObra("Insurgentes456", "LuisGarcía", 15, 320), como
argumentos necesita la dirección, el nombre del dueño, el número de
obreros asignados y los m2 de construcción y que regrese verdadero o
falso de acuerdo a si procede o no la alta.
c) En la clase Constructora crea una función altaBalance para dar de alta el
balance de cada obra en cada mes, el cual pueda ser llamado:
miConstructora.altaBalance (1, 1111, 1000, 6500) indicando mes,
licencia de la obra, pagos realizados por el dueño de la obra y gastos
asociados a esa obra ese mes. El método debe verificar a qué obra
pertenece dicho balance.
d) Crea tu clase MundoConstructora que incluya un método estático
llamado llenaDatos() que debes mandar llamar para que lea del archivo
DatosConstructora.txt que contiene los datos de la constructora con el
siguiente formato:
MicasitaFeliz 3 nombre de la constructora y número de obras
Calle23 JuanPérez 10 180 datos de la obra 1
Insurgentes45 LuisGarcía 5 320 datos de la obra 2
Ocotito45 AnaDíaz 9 120 datos de la obra 3
(dirección, dueño, num. obreros y m2)

Algoritmos y Programas Página 20


1, 1, 1000, 6500 datos del balance1,1
2, 1111,1000, 5000 datos del balance1,2
3,1111, 1300, 4500 datos del balance2,1
2, 1151, 7000, 18000 datos del balance2,2
3, 1151, 9300, 15000 datos del balance2,3
1, 1110, 900, 7500 datos del balance3,1
2, 1110, 700, 8000 datos del balance3,2
3, 1110, 930, 7000 datos del balance3,3
(mes, # licencia, pagos dueño y gastos)
e) Aumenta la funcionalidad de tus clases para que a través de la clase
MundoConstructora contestes las siguientes preguntas:
• Cuántos empleados en total tiene la constructora y cuántos tiene
en promedio por cada obra.
• Calcular el saldo de la constructora, como la suma de los saldos
de cada obra, que a su vez son la suma de los saldos de cada
mes. Para los saldos de cada obra en cada mes considera :
saldoObrai = monto pagado Obrai – gastos asociados Obrai –
nomina Obrai
Donde la nómina es equivalente al número de empleados por
$425.50 pesos al mes.
Cada obra debe saber cuánto paga de nómina.
• Indica si la constructora está bien (saldo positivo) o está en
números rojos (saldo negativo).
• Calcular el saldo de una obra dado el nombre de un dueño y el
mes requerido.
NOTA: en los problemas puedes usar interfaces gráficas (GUI´s) para lograr una mejor
interacción con el usuario.

Algoritmos y Programas Página 21


Apéndice 1 – Diagramas de flujo

En la tabla1 se presentan los componentes de un diagrama de flujo y en la tabla 2 se


resumen las reglas más importantes para la creación de los diagramas, ambos tomados del
libro Fundamentos de Programación. Piensa en C. de O. Cairó, Ed. Pearson-Prentice Hall
(2006). Para mayor información se sugiere consultar dicho libro.

Símbolo Explicación

Indica inicio o fin del diagrama de flujo. En todo diagrama de


flujo sólo debe haber un inicio y un fin del mismo. Se diferencian
el inicio del fin, etiquetando el óvalo con la palabra respectiva
(“Inicio” o “Fin”).

Indica entrada (lectura) de datos al proceso.

Indica proceso. En el rectángulo se escriben las operaciones


aritméticas, lógicas y de asignación que queremos que se realicen.

Las líneas con flechas indican flujo de información. Es decir, nos


sirven para indicar el orden en el cual deben efectuarse los pasos
y de donde hacia donde fluye la información.

Indica conexión dentro de una misma página. Es decir, si por su


tamaño debemos continuar con el diagrama de flujo en otra parte
de la página se usa un círculo con alguna letra o número (que
deberá seguir una secuencia) el cual se repetirá al comenzar a
escribir las demás operaciones del algoritmo.
Indica conexión a una página diferente. Es decir, si por su tamaño
debemos continuar con el diagrama de flujo en otra página,
entonces se usa este conector con una letra o un número (que
deberá seguir una secuencia), el cual se repetirá en la nueva
página.
Indica salida de resultados. Normalmente se relaciona con la
impresión de resultados. Sin embargo, también puede representar
desplegar en pantalla los resultados. Se puede imprimir/desplegar:
1) El contenido de una variable especificando el nombre de la
misma; 2) Un mensaje, en cuyo caso habrá que encerrar a éste
entre comillas.

Algoritmos y Programas Página 22


Tabla 1. Componentes de un diagrama de flujo

1. Todo diagrama de flujo tiene un único inicio y un único fin.


2. Todas las líneas utilizadas en un diagrama de flujo deben ser
rectas, verticales u horizontales y deben estar conectadas
(iniciar y terminar) a algún símbolo o línea.
3. No puede llegar más de una línea a un símbolo.
4. El diagrama de flujo debe ser construido de arriba hacia abajo
y de izquierda a derecha.

Tabla 2. Reglas para la escritura de un diagrama de flujo

Algoritmos y Programas Página 23


Estructuras algorítmicas de control

1 - Estructuras selectivas

1.1 Selección simple

falso
condición

verdadero

instrucción(es)

1.2 Selección doble

verdadero falso
condición

instrucción (es)
instrucción (es)

Algoritmos y Programas Página 24


1.3 Selección múltiple

valor 1 por omisión


selector
valor 2
instrucción(es) instrucción(es)
instrucción(es)

2 - Estructuras repetitivas

2.1 Ciclo mientras (while)

falso
condición

verdadero

instrucción(es)

Algoritmos y Programas Página 25


2.2 Ciclo hacer-mientras (do-while)

instrucción (es)

verdadero
condición

falso

2.3 Ciclo hacer n veces (for) creciente

varControl ← valorInicial

varControl < falso


valorFinal
verdadero

instrucción (es)

varControl <- varControl + increm

Algoritmos y Programas Página 26


Búsqueda en arreglos
Búsqueda secuencial en arreglo desordenado – versión explícita

índice <- 0

encontró <- falso

falso
(índice < tamaño) y
(encontró = falso)

verdadero
verdadero falso
colección[índice] = datoBuscado

encontró <- verdadero índice <- índice + 1

encontró = verdadero

posiciónDato <- índice posiciónDato <- -1

regresa posiciónDato

Algoritmos y Programas Página 27


Búsqueda secuencial en arreglo ordenado crecientemente– versión implícita

índice <- 0

(indice < tamaño) y falso


(colección[índice] < datoBuscado)


índice <- índice + 1

falso
(índice = tamaño) o
(colección[dato] > datoBuscado)

verdadero

índice <- (índice + 1) * (-1)

regresa índice

Algoritmos y Programas Página 28


Ordenación de arreglos
Método de Selección Directa

(Arreglo desordenado)

i=0

falso
i<n-1

v
menor = arre[i]

posic = i

j=i+1

falso
j<n

v
er
f
arre[j] <
menor
v

menor = arre[j]

posic = j

j=j+1

arre[posic] = arre[i]

arre[i] = menor

i=i+1

(Arreglo ordenado)

Algoritmos y Programas Página 29


Apéndice 2 – Solución algorítmica de
problemas - Ejercicios

1) Sean los datos: x, a1, a2, a3, a4. Elabore un diagrama de flujo para calcular:

a1x3 + a2x2 + a3x + a4

Sin usar la operación de potencia.

f) ¿Cuántas operaciones de multiplicación y cuántas de suma utilizó?


g) ¿Puede reducir ambas cantidades? En caso afirmativo, hágalo.

2) El precio de un boleto de viaje redondo en tren se calcula tomando en cuenta el


número de kilómetros que se van a recorrer, siendo el precio $60.00 por km. Este
precio puede tener un descuento del 30% si el viaje de regreso se hace después
de 7 días del viaje de ida, o si el recorrido supera los 800 km.

Elabore un diagrama de flujo para calcular cuánto se debe pagar por un boleto de
tren dando como datos el total de km recorridos y el número de días entre el viaje
de ida y el viaje de vuelta.

Pruebe su diagrama con los siguientes grupos de datos:

a) 850 km y 10 días.
b) 356 km y 8 días

3) Elabore un diagrama de flujo para resolver ax2 + bx + c = 0 en el caso de raíces


reales. Los datos son: a, b, c. Puede usar las operaciones que necesite.
Asegúrese que el resultado sea válido.
Análisis del problema:
Si a ≠ 0 se presentan tres casos:
 Primero con dos soluciones dadas con la fórmula que da la solución de la
ecuación de segundo grado cuando el discriminante es positivo.
 Segundo con una solución dada por la fórmula cuando el discriminante es
cero.
 Tercero con dos soluciones complejas, dadas por la fórmula cuando el
discriminante es negativo.

Si a = 0 se presentan a su vez tres casos:


c
 Primero es cuando b ≠ 0, cuya solución es − .
b
 Segundo es cuando b = 0 y c = 0, que es evidente una identidad.
 Tercero cuando b = 0 y c ≠ 0 que no puede tener solución.

Algoritmos y Programas Página 30


4) Una tienda desea obtener una serie de reportes diarios a partir de las ventas
realizadas en un día. Elabore un diagrama de flujo que:

h) solicite el monto de cada venta sin IVA,


i) para cada venta, calcule e imprima el IVA y el total con IVA,
j) al terminar el día, imprima un reporte con los totales de:
• ventas sin IVA,
• IVA,
• ventas con IVA,
• promedio de las ventas con IVA.

Se desconoce el número de ventas que se realizan en un día, por lo que el final


de los datos se indica con un –1. Suponga que el IVA es del 15%.

5) Elabore un diagrama de flujo para leer n enteros, calcular e imprimir su suma y su


promedio.

6) Una tabla de estadísticas muestra la producción de barriles de petróleo de 5


países petroleros (México, Venezuela, Arabia Saudita, Libia y Argelia), durante el
primer semestre de 2001. La tabla tiene el siguiente formato:

bm, bv, bas, bl, ba: No de barriles/país en enero.


bm, bv, bas, bl, ba: No de barriles/país en febrero.
...
bm, bv, bas, bl, ba: No. de barriles/país en junio.

Elabore un diagrama de flujo que calcule la producción total de barriles en el semestre y la


de cada uno de los países involucrados.

7) Dados los datos: n, a1, a2,..., an con n > 0, Elabore un diagrama de flujo para
encontrar el máximo de los ai.

8) 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.

Elabore 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

Algoritmos y Programas Página 31


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?

Resuelva los incisos progresivamente.

9) Una carrera profesional consta de 40 materias, repartidas en 8 semestres a razón


de 5 materias por semestre. Como datos se dan las 40 calificaciones
correspondientes a un alumno, en grupos de 5 según el semestre:

c1, c2,..., c5 <- primer semestre


c6, c7,..., c10 <- segundo semestre
.....
c36, c37,..., c40 <- octavo semestre

Elabore un diagrama de flujo para leer los datos y contestar a las siguientes
preguntas:
a. ¿Cuál es el promedio del alumno por semestre? Indique tanto el promedio
como el semestre.
b. ¿Cuál es el promedio que obtuvo en la carrera?

10) Dados los datos:

a1, b1, a2, b2,...., a32, b32


con n: entero, ≥ 1
ai: reales
bi: enteros
i = 1, 2, ..., 32

donde ai representa el ingreso del estado i de la República Mexicana y bi


representa el número de habitantes que hay en ese mismo estado; Elabore un solo
diagrama de flujo para:

a. Calcular el ingreso per cápita de cada estado:


ai
IPC i = para i = 1, 2, ...,32
bi

b. Calcular el ingreso per cápita total de la República Mexicana:


n

∑a i
IPCT = i =1
n

∑b
i =1
i

Algoritmos y Programas Página 32


11) 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. Elabore un diagrama de flujo
para calcular y escribir:

a. La tasa de inflación entre años consecutivos:


Pt
TI t = -1 , t = 2,3..., n
Pt −1

b. La tasa media inflacionaria:


n

∑ TI t
TM = t=2

n −1

12) Sean los datos:


n, a1, a2,..., an
donde:

n n es un entero positivo, no necesariamente múltiplo de tres, que


indica el número de elementos que el usuario va a ingresar, a continuación.
ai números que el usuario ingresa.

Haga un diagrama de flujo para calcular la siguiente suma:

a +a +a +a +a +a +a
1 2 3 4 5 6 7
+ ...
3 5 7 3 5 7 3

13) Dados los datos:

n, x, a0, a1, a2, ..., an

con: n: entero, ≥ 0
x: real
ai: reales

Elabore un diagrama de flujo que, sin utilizar la operación de potencia y


minimizando el número de multiplicaciones, (y observando los signos), calcule:

a0 – a1*x + a2* x2 – a3 * x3 + . . . ± an * xn

14) 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

Algoritmos y Programas Página 33


tipoJit3, numcajas3
...
-1, -1

Donde:

precioJitj precio de la caja de jitomate tipo j


tipoJiti tipo de jitomate (1, 2, 3 ó 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.

Realice 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?

15) Las elecciones presidenciales están próximas a realizarse en México. Como es el


segundo turno, solamente hay tres partidos diferentes (1, 2 y 3). Uno de los
partidos desea realizar una encuesta a n personas para saber la estrategia a
seguir.

A cada persona entrevistada se le pregunta:

si va a votar,
en caso de que vote, por qué partido votará.

Elabore un diagrama de flujo para procesar esta encuesta. Los datos son:

n
resp1 (partido1)
resp2 (partido2)
...
respn (partidon)

Donde:

n es el número de personas a entrevistar


resp indica si la persona votará o no (0 = no votara, 1 = si votara)
partido indica la clave del partido por el que votará (1=PAN, 2=PRD,
3=PRI)

Nota: el dato partido solamente se lee si la persona entrevistada ha contestado


que sí votará.

Algoritmos y Programas Página 34


Se desea contestar las siguientes preguntas:

a. ¿Cuál es el porcentaje de abstenciones?


b. ¿Cuál es el porcentaje de votos a favor de cada partido en base al total de
personas que van a votar?
c. ¿Cuál es el partido favorito?

16) Se cuenta con la siguiente información de ventas de un camión repartidor de gas


estacionario durante el mes de enero:

precio

surtido1,1 , surtido1,2 , … , -1
surtido2,1 , surtido2,2 , … , -1

surtido31,1 , surtido31,2 , … , -1

donde: precio es el precio de un litro de gas


surtidoi,j es el número de litros de gas surtidos por el
camión en su parada j del día i

Realiza un diagrama de flujo que permita calcular:

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 trabajo 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?

17. El siguiente diagrama de flujo tiene un fin específico:

a) Interprételo, es decir, diga qué hace en forma breve y concisa. Pruébelo primero
con n = 10 y posteriormente con n = 456.
b) Marque en el diagrama las estructuras algorítmicas usadas, indicando cuáles son.

Algoritmos y Programas Página 35


inicio

x 0
Nota:
x, n y k son enteros
n
falso
n>0

verdadero

k n mod 10

x x * 10 + k

n n div 10

fin

18. Considere los siguientes diagramas de flujo y para cada uno: indique sobre él las
estructuras de control utilizadas, cuántas instrucciones contiene cada una de ellas
y dibuja el mapa de memoria.

Algoritmos y Programas Página 36


a) Datos: 1 3 1 1 0
P

falso
v≠0

verdadero

verdadero
n<1
falso

verdadero n=1 falso

“f = 1” f←1

i←2

falso
i≤n

verdadero
f←f*i

i←i+1

“n = “, n, “f = “, f

F
Algoritmos y Programas Página 37
b) Datos: 2 5 3 0
P

verdadero n<1

falso
a, d

i←0

i<n falso

verdadero
s←a+d*i

verdadero falso
i=n-1

s s, “ – “

i←i+1

verdadero
n<0
falso
verdadero n>0
falso
Algoritmos y Programas F Página 38
c) Datos: 1 3 1 2 0
P

falso
v≠0

verdadero

verdadero
n<2
falso
verdadero falso
n=2

a←0
0 1
d←1

i←2

falso
i≤n
verdadero

m←d
a← d
d←a+m

i←i+1

Algoritmos y Programas Página 39


d) Dato: 5

verdadero n>0 falso

i←0
“Error”
falso
i≤n
verdadero
p1 ← n – 2 * i
p2 ← i

p2 + i ≤ n falso
y
p1 ≥ p2

verdadero

p1, p2, i

p1 ← p1 -1
p2← p2 + 1

i←i+1

Algoritmos y Programas Página 40


Apéndice 3 – Métodos de la clase String

A continuación se presentan algunos de los métodos que provee


Java para el manejo de datos tipo cadenas de caracteres (String).

/* Ejemplo de declaraciones de cadenas. Se usa la palabra reservada String (es el


nombre de una clase de Java). */

String nombreCompleto, cad1, cad2;

/* Declaración de variables auxiliares que se usarán para ejemplificar el empleo de


los métodos provistos por Java para las cadenas de caracteres. */

char letra;
int n;
boolean band;

// Concatenar o unir cadenas


cad1 = cad1.concat(nombreCompleto);
cad1 = cad1 + "algo más \n";

//Cálculo de la longitud de una cadena. Si está vacía regresa 0.


n = cad1.length();

/* Regresa el caracter de la posición i.


* En Java, el primer carácter ocupa la posición 0. */
letra = cad1.charAt(i);

// Determina si el parámetro está al inicio de la cadena.


band = cad1.startsWith("gato");

// Determina si el parámetro está al final de la cadena.


band = cad1.endsWith(cad2);

/* Obtiene la subcadena formada desde la posición i hasta la j-1. Si j es mayor


que la longitud marca error. */
cad2 = cad1.substring(i, j);
cad2 = cad1.substring(0, 3); //Caracteres de las posiciones 0, 1 y 2

// Determina si dos cadenas son iguales.


band = cad1.equals(nombreCompleto);

// Determina si dos cadenas son iguales sin importar las mayúsculas.

Algoritmos y Programas Página 41


band = cad1.equalsIgnoreCase("gato");

/* Si el parámetro está en la cadena regresa la posición de la primer ocurrencia. Si


no lo encuentra regresa -1. */
n = cad1.indexOf("algo");

/* Si el parámetro está en la cadena regresa el índice de la última ocurrencia. Si no


lo encuentra regresa -1. */
n = cad1.lastIndexOf("tos");

// Convierte un entero a una cadena.


cad2 = Integer.toString(9);

/* Regresa el número entero de la cadena -si ésta tuviera algún valor entero. Si no
hay marca error. */
n = Integer.valueOf("90");

// Se asigna el contenido de una cadena a otra.


cad2 = cad1;

/* Compara las 2 cadenas: si cad1 < cad2 da negativo, si son iguales da 0 y sino
positivo. */
n = cad1.compareTo(cad2);

// Regresa la cadena con minúsculas -si tenía mayúsculas.


cad2 = cad2.toLowerCase();

// Regresa la cadena con mayúsculas -si tenía minúsculas.


cad1 = cad1.toUpperCase();

cad1= "Suerte en el examen";


// Reemplaza el primer caracter-parámetro por el segundo caracter-parámetro.
cad1 = cad1.replace(" ", "");

Algoritmos y Programas Página 42


Apéndice 4 – Métodos de la clase Math

A continuación se presentan algunos de los métodos que provee


Java en la clase Math y que nos ayudan a escribir expresiones
matemáticas complejas.

double valor;

valor = Math.PI; // Valor de la constante PI

valor = 90;
System.out.println("\nEl seno es " + Math.sin(valor)); // Calcula seno de “valor”

valor = Math.max(19, 8); // Regresa el máximo de los 2 valores dados.

valor = Math.min(19, 8); // Regresa el mínimo de los 2 valores dados.

valor = Math.pow(19,3); // Regresa el resultado de hacer 19 al cubo.

valor = Math.round(9.3); // Redondea el número dado.

valor = Math.sqrt(9); // Regresa la raíz cuadrada del valor dado.

valor = Math. abs(-15.3); // Regresa el valor absoluto del valor dado.

Algoritmos y Programas Página 43

Potrebbero piacerti anche