Fundamentos de Programaci\u00f3n Semestre Oto\u00f1o
IPP
Instituto Profesional Providencia
Escuela de Tecnolog\u00eda e Inform\u00e1
Ejercicios Java2 Gu\u00eda para Preparar Examen Fuente: Libro Java2 Serie Schaum
Profesor: Pedro Antonio Gonz\u00e1lez T. Curso: Fundamentos de Programaci\u00f3n
gonzalezpe
P\u00e1gina 1
18/10/yyyy
Fundamentos de Programaci\u00f3n Semestre Oto\u00f1o
IPP
\u00cdndice
Introducci\u00f3n a Objetos........................................................................................................4 Ejercicio n.11......................................................................................................................4 Ejercicio n.15......................................................................................................................4 Ejercicio n.1........................................................................................................................4 Ejercicio n.12......................................................................................................................6 Ejercicio n.16......................................................................................................................6 Ejercicio n.18......................................................................................................................6 Ejercicio n.14......................................................................................................................6 Ejercicio n.13......................................................................................................................7 Ejercicio n.16......................................................................................................................7 Ejercicio n.17......................................................................................................................7 Ejercicio n.19......................................................................................................................8 Ejercicio n.19......................................................................................................................8 Ejercicio n.21......................................................................................................................8 Ejercicio n.22......................................................................................................................9 Ejercicio n.23......................................................................................................................9 Ejercicio n.24......................................................................................................................9 Ejercicio n.39....................................................................................................................10 Atributos y M\u00e9todos..........................................................................................................11 Ejercicio n.14....................................................................................................................11 Ejercicio n.12....................................................................................................................11 Ejercicio n.13....................................................................................................................11 Ejercicio n.17....................................................................................................................12 Ejercicio n.25....................................................................................................................12 Ejercicio n.26....................................................................................................................13 Ejercicio n.27....................................................................................................................13 Ejercicio n.29....................................................................................................................13 Ejercicio n.32....................................................................................................................14 Ejercicio n.39....................................................................................................................14 Ejercicio n.3......................................................................................................................15 Ejercicio n.36....................................................................................................................16 Ejercicio n.38....................................................................................................................16 Ejercicio n.37....................................................................................................................17 Estructuras de Control.......................................................................................................17 Ejercicio n.4......................................................................................................................17 Ejercicio n.19....................................................................................................................18 Ejercicio n.25....................................................................................................................18 Ejercicio n.26....................................................................................................................19 Ejercicio n.27....................................................................................................................19 Ejercicio n.27....................................................................................................................19 Ejercicio n.29....................................................................................................................20 Ejercicio n.30....................................................................................................................20 Ejercicio n.31....................................................................................................................21 Ejercicio n.31....................................................................................................................21 Ejercicio n.35....................................................................................................................21
gonzalezpe
P\u00e1gina 2
18/10/yyyy
Fundamentos de Programaci\u00f3n Semestre Oto\u00f1o
IPP
Ejercicio n.33....................................................................................................................21 Ejercicio n.34....................................................................................................................22 Ejercicio n.5......................................................................................................................22 Ejercicio n.9......................................................................................................................22 Ejercicio n.9......................................................................................................................23 ............................................................................................................................................... 25 Clases.................................................................................................................................... 26 Ejercicio n.40.................................................................................................................... 26 Ejercicio n.41.................................................................................................................... 26 Ejercicio n.42.................................................................................................................... 26 Ejercicio n.43.................................................................................................................... 27 Ejercicio n.44.................................................................................................................... 27 Ejercicio n.45.................................................................................................................... 27 Ejercicio n.46.................................................................................................................... 28 Ejercicio n.10.................................................................................................................... 28 Ejercicio n.7...................................................................................................................... 29 Ejercicio n.10.................................................................................................................... 29 Ejercicio n.8...................................................................................................................... 30 Ejercicio n.47.................................................................................................................... 30 Ejercicio n.48.................................................................................................................... 30 Ejercicio n.49.................................................................................................................... 31 Ejercicio n.2...................................................................................................................... 31
gonzalezpe
P\u00e1gina 3
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Introducción a Objetos Ejercicio n.11
Temas: 2 L Dificult 2 ad: Registr 200309-18 ado:
Escriba un programa que muestre el mensaje "Hola Mundo" por pantalla. •
•
¿Cuántas clases necesitará definir para conseguir la funcionalidad deseada? ¿Cuántos métodos habrá que definir como mínimo?
Ejercicio n.15
Temas: 2 L Dificult 4 ad: Registr 200309-28 ado:
Defina una clase libro que pueda ser utilizada para representar los libros que hay en una biblioteca. Suponga que cada libro tiene los siguientes atributos: • • • •
Título Autor Año de publicación Editorial
Escriba un método main donde creará dos objetos de la clase libro, y al final, muestre los datos de cada uno de ellos.
Ejercicio n.1
Temas: 2 L Dificult 5 ad: Registr 200209 ado:
gonzalezpe
Página 4
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
El programa Errores debería escribir por pantalla las siguientes líneas: FPRG - Ejercicio 1 Datos a operar: a=10 y b=3 La multiplicacion vale 30 La suma es 13 13 tambien es la suma O lo que es lo mismo 13 La resta es 7 La resta es tambien 7 class Errores { public static void main() { System.out.println('FPRG - Ejercicio 1'); int a = 10 int b = 3; System.out.println("Datos a operar: a=",a," y b=",b); System.out.println("La multiplicacion vale a*b"); int c = a+b; System.out.println("La suma es "+a+b); System.out.println(a+b+" tambien es la suma"); System.out.println("O lo que es lo mismo "+c); int c = a-b; System.out.println("La resta es "+c); System.out.println("La resta es tambien "+a-b); } }
Sin embargo, no funciona debido a la existencia de varios errores. Se pide que localice todos los errores existentes, indicando por qué son errores. gonzalezpe
Página 5
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Ejercicio n.12
Temas: 2 4 L Dificult 5 ad: Registr 200309-18 ado:
Escriba una clase Java que represente un círculo; el círculo queda perfectamente definido si se conoce su radio. Defina además, para esta clase, dos métodos (públicos) que permitan calcular el área del círculo y el perímetro de la circunferencia que delimita el crculo. Para probar la funcionalidad antes definida, escriba un pequeño programa que cree un círculo con un radio dado, y que calcule (y muestre por pantalla) el área y el perímetro de su circunferencia.
Ejercicio n.16
Temas: 2 3 Dificult 5 ad: Registr 200310-05 ado:
Escriba un programa que reciba como argumento el radio de una circunferencia y calcule (y muestre por pantalla) la longitud de la circunferencia y el área del círculo delimitado por la misma. Utilice 3.141592 como valor de la constante PI.
Ejercicio n.18
Temas: 2 Dificult 5 ad: Registr 200310-05 ado:
Defina un programa que reciba como argumento un valor de temperatura en grados Celsius e imprima por pantalla su valor en grados Farenheit. Recuerde la fórmula de conversión: F = 9/5 * C + 32.
Ejercicio n.14
Temas: 3 4 L Dificult 4 ad: gonzalezpe
Página 6
18/10/yyyy
Fundamentos de Programación Semestre Otoño Registr ado:
IPP
200309-28
Defina una clase que sirva para representar el estado de una bombilla (encendido o apagado). Defina, asimismo, dos métodos que permitan encender (on) y apagar (off) la luz de la bombilla. Para probarlo, cree un pequeño método main que cree un objeto de la clase definida, que haga uso de los métodos previamente definidos y vaya mostrando el estado de la bombilla.
Ejercicio n.13
Temas: 3 4 L Dificult 5 ad: Registr 200309-28 ado:
Defina una clase punto que tendrá dos atributos, de tipo real, x e y, que representarán las coordenadas del punto dentro del plano. Defina un método que tenga como argumento otro objeto de la clase punto y que calcule la distancia entre los dos puntos. Para probar esta funcionalidad, escriba un método main en el que se creen dos puntos, el primero de los cuales deberá tener las coordenadas 100.0, 200.0 y el segundo deberá tener las coordenadas 400.0, 800.0 y calcule e imprima la distancia entre ambos.
Ejercicio n.16
Temas: 2 3 Dificult 5 ad: Registr 200310-05 ado:
Escriba un programa que reciba como argumento el radio de una circunferencia y calcule (y muestre por pantalla) la longitud de la circunferencia y el área del círculo delimitado por la misma. Utilice 3.141592 como valor de la constante PI.
Ejercicio n.17
Temas: 3 4 Dificult 5 ad:
gonzalezpe
Página 7
18/10/yyyy
Fundamentos de Programación Semestre Otoño Registr ado:
IPP
200310-05
Se desea llevar un control del estado de una cuenta corriente; la cuenta corriente está caracterizada por su saldo y sobre ella se pueden realizar tres tipos de operaciones: • •
•
saldo: devuelve el saldo de la cuenta (puede ser negativo). imposición (cantidad): ingresa en la cuenta una cantidad de dinero. reintegro (cantidad): saca de la cuenta una determinada cantidad de dinero.
Suponga que la cuenta inicialmente tiene un saldo de cero. Escriba una clase CuentaCorriente que implemente la funcionalidad descrita; escriba un pequeño programa principal para probar su funcionamiento.
Ejercicio n.19
Temas: 3 5 Dificult 5 ad: Registr 200310-05 ado:
Calcule si un año, que ha recibido como argumento en la llamada al programa, es bisiesto. La regla completa para saber si un año es bisiesto, es que sea divisible por 4, excepto que si es divisible por 100 lo sea también por 400. Realice la comprobación mediante una sola operación lógica e imprima en la pantalla un mensaje con el resultado.
Ejercicio n.19
Temas: 3 5 Dificult 5 ad: Registr 200310-05 ado:
Calcule si un año, que ha recibido como argumento en la llamada al programa, es bisiesto. La regla completa para saber si un año es bisiesto, es que sea divisible por 4, excepto que si es divisible por 100 lo sea también por 400. Realice la comprobación mediante una sola operación lógica e imprima en la pantalla un mensaje con el resultado.
Ejercicio n.21
Temas: 3
gonzalezpe
Página 8
18/10/yyyy
Fundamentos de Programación Semestre Otoño Dificult ad: Registr ado:
IPP
5 200310-05
Escriba un programa que declare dos variables de tipo String con los valores "Hola" y "mundo". Comprueba si son iguales, calcule la longitud de ambas cadenas de caracteres, concaténelas y calcule la longitud del resultado.
Ejercicio n.22
Temas: 3 Dificult 5 ad: Registr 200310-05 ado:
Escriba un programa en el que se definan dos variables booleanas con los valores true y false. Con ayuda de estas variables, imprima la tabla de verdad de los operadores lógicos AND y OR.
Ejercicio n.23
Temas: 3 Dificult 5 ad: Registr 200310-05 ado:
Escriba un programa que calcule la capacidad de un disco duro de un ordenador que tiene 12000 cilindros, 16 pistas, 8 sectores por pista y sectores de 512 bytes. Exprese su tamaño en bytes, kilobytes, megabytes y gigabytes. El tamaño del disco se calcula de acuerdo con la siguiente fórmula: capacidad = cilindros * pistas * sectores * bytes Un kilobyte son 1024 byts. Un megabyte son (kilobyte * 1024) bytes. Un gigabyte es (megabyte * 1024) bytes.
Ejercicio n.24
Temas: 3 Dificult 5 ad: Registr 200310-05 ado:
Escriba un programa que calcule la distancia recorrida por un móvil que se mueve a velocidad constante de 3.2 m/s y que ha recorrido un
gonzalezpe
Página 9
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
espacion inicial de 7.3 m en un tiempo de t segundos. El valor de t se introducirá como argumento en la llamada del programa.
Ejercicio n.39
Temas: 3,4 Dificult 5 ad: Registr 200310-16 ado:
Escriba una clase que permita manejar números complejos; defina métodos para las cuatro operaciones fundamentales.
gonzalezpe
Página 10
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Atributos y Métodos Ejercicio n.14
Temas: 3 4 L Dificult 4 ad: Registr 200309-28 ado:
Defina una clase que sirva para representar el estado de una bombilla (encendido o apagado). Defina, asimismo, dos métodos que permitan encender (on) y apagar (off) la luz de la bombilla. Para probarlo, cree un pequeño método main que cree un objeto de la clase definida, que haga uso de los métodos previamente definidos y vaya mostrando el estado de la bombilla.
Ejercicio n.12
Temas: 2 4 L Dificult 5 ad: Registr 200309-18 ado:
Escriba una clase Java que represente un círculo; el círculo queda perfectamente definido si se conoce su radio. Defina además, para esta clase, dos métodos (públicos) que permitan calcular el área del círculo y el perímetro de la circunferencia que delimita el crculo. Para probar la funcionalidad antes definida, escriba un pequeño programa que cree un círculo con un radio dado, y que calcule (y muestre por pantalla) el área y el perímetro de su circunferencia.
Ejercicio n.13
Temas: 3 4 L Dificult 5 ad: Registr 200309-28 ado:
Defina una clase punto que tendrá dos atributos, de tipo real, x e y, que representarán las coordenadas del punto dentro del plano. Defina un método que tenga como argumento otro objeto de la clase punto y que calcule la distancia entre los dos puntos. gonzalezpe
Página 11
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Para probar esta funcionalidad, escriba un método main en el que se creen dos puntos, el primero de los cuales deberá tener las coordenadas 100.0, 200.0 y el segundo deberá tener las coordenadas 400.0, 800.0 y calcule e imprima la distancia entre ambos.
Ejercicio n.17
Temas: 3 4 Dificult 5 ad: Registr 200310-05 ado:
Se desea llevar un control del estado de una cuenta corriente; la cuenta corriente está caracterizada por su saldo y sobre ella se pueden realizar tres tipos de operaciones: • •
•
saldo: devuelve el saldo de la cuenta (puede ser negativo). imposición (cantidad): ingresa en la cuenta una cantidad de dinero. reintegro (cantidad): saca de la cuenta una determinada cantidad de dinero.
Suponga que la cuenta inicialmente tiene un saldo de cero. Escriba una clase CuentaCorriente que implemente la funcionalidad descrita; escriba un pequeño programa principal para probar su funcionamiento.
Ejercicio n.25
Temas: 4 5 Dificult 5 ad: Registr 200310-11 ado:
Escriba una clase que compruebe si un año es bisiesto o no. La regla completa para saber si un año es bisiesto es que sea divisible por 4, excepto que si es divisible por 100 lo sea también por 400. Realice la comprobación mediante una sola operación lógica; la clase que defina debe tener un método público que devuelva true o false, dependiendo de si el año es bisiesto o no.
gonzalezpe
Página 12
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Ejercicio n.26
Temas: 4 5 Dificult 5 ad: Registr 200310-11 ado:
Defina una clase que permita representar una serie aritmética; una serie aritmética viene caracterizada por el primer elemento de la serie y el incremento o diferencia entre dos elementos sucesivos de la serie. Implemente un método en esta clase que permita calcular la suma de los n primeros elementos de la serie (utilice un bucle para realizar esta operación).
Ejercicio n.27
Temas: 4 5 Dificult 5 ad: Registr 200310-11 ado:
Se quiere definir una clase que permita controlar un sintonizador digital de emisoras FM; concretamente, lo que se desea es dotar al controlador de una interfaz que permita subir (up) o bajar (down) la frecuencia (en saltos de 0.5 MHz) y mostrar la frecuencia sintonizada en un momento dado (display). Supondremos que el rango de frecuencias a manejar oscila entre los 80 Mhz y los 108 MHz y que al inicio, el controlador sintoniza a 80 MHz. Si durante una operación de subida o bajada se sobrepasa uno de los dos límites, la frecuencia sintonizada debe pasar a ser la del extremo contrario.
Ejercicio n.29
Temas: 4 5 Dificult 5 ad: Registr 200310-05 ado:
Queremos modelar una casa con muchas bombillas, de forma que cada bombilla se puede encender o apagar individualmente. Para ello haremos una clase Bombilla con una variable privada que indique si está encendida o apagada, así como un método que nos diga si una bombilla concreta está encendida.
gonzalezpe
Página 13
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Además queremos poner un interruptor general de la luz, tal que si saltan los fusibles, todas las bombillas quedan apagadas. Cuando el fusible se repara, las bombillas vuelven a estar encendidas o apagadas, según estuvieran antes del percance. Para modelar en Java esta característica usaremos una variable de clase (static) que nos diga si hay luz en el edificio o no. Cada objeto Bombilla se enciende y se apaga individualmente; pero sólo responde que está encendida si su interruptor particular está activado y además hay luz general. El código Java tiene esta estructura: class Bombilla { private static ...; // interruptor general private ...; // interruptor particular public static void activaGeneral () { ... } public static void desactivaGeneral () { ... } public void enciende () { ... } public void apaga () { ... } public boolean encendida () { ... } }
Ejercicio n.32
Temas: 4 5 Dificult 5 ad: Registr 200310-16 ado:
Defina una clase con un método que muestre por pantalla la tabla de multiplicar para un número (entero) dado (nx1, nx2 ... nx10). Para probar este método, defina un método main que imprima por pantalla la tabla de multiplicar del 1 al 9; separe la salida entre tabla y tabla con una línea en blanco.
Ejercicio n.39
Temas: 3,4 Dificult 5 ad: Registr 200310-16 ado:
Escriba una clase que permita manejar números complejos; defina métodos para las cuatro operaciones fundamentales.
gonzalezpe
Página 14
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Ejercicio n.3
Temas: 4 Dificult 6 ad: Registr 200209 ado:
Si (x1,y1), (x2,y2) y (x3,y3) son las coordenadas de tres puntos del plano, entonces el siguiente fragmento de programa calcula el centro (x,y) y el radio (r) de la circunferencia que pasa por ellos. double a = 2*(x2-x1); double b = 2*(y2-y1); double c = x1*x1+y1*y1-x2*x2-y2*y2; double d = 2*(x3-x1); double e = 2*(y3-y1); double f = x1*x1+y1*y1-x3*x3-y3*y3; y = (f*a-c*d)/(b*d-e*a); x = -b/a*y-c/a; r = Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
Cree una clase llamada Circunferencia, que tenga como atributos las coordenadas de su centro (x,y) y su radio (r), y con un constructor que tome como argumentos las coordenadas de tres puntos por los que pase. Redefina también el método toString para que represente las circunferencias como Strings de la forma "<(x,y),r>" Utilice el siguiente método main para probar esta clase: static public void main(String argv[]) {
gonzalezpe
Página 15
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
double x1 = 9, y1 = 0, x2 = 2, y2 = -7, x3 = -3, y3 = 5; System.out.println(" punto 1 = ("+x1+","+y1+")"); System.out.println(" punto 2 = ("+x2+","+y2+")"); System.out.println(" punto 3 = ("+x3+","+y3+")"); Circunferencia cir = new Circunferencia(x1,y1,x2,y2,x3,y3); System.out.println(" Circunferencia = "+cir); }
Ejercicio n.36
Temas: 4 Dificult 6 ad: Registr 200310-16 ado:
Defina una clase factorial, que permita calcular el factorial de un número entero; utilice un algoritmo recursivo.
Ejercicio n.38
Temas: 4 Dificult 6 ad: Registr 200310-16 ado:
Escriba una clase con un método recursivo capaz de calcular el número de fibonacci de un entero. El número de fibonacci se define así: • • •
1 para el número 1 2 para el número 2 la suma de los números de fibonacci de sus dos anteriores para el resto
gonzalezpe
Página 16
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Calcule el número de fibonacci de algunos enteros no muy grandes. Observe que la recursividad es una técnica cara en recursos de cómputo.
Ejercicio n.37
Temas: 4 Dificult 7 ad: Registr 200310-16 ado:
Escriba una clase que permita imprimir por pantalla todas las variaciones (con repetición) posibles de los números del 0 al 9, tomados de n en n. Ejemplo, para n=2: 00 01 02 03 ... 98 99
Estructuras de Control Ejercicio n.4
Temas: 5 Dificult 5 ad: Registr 200209 ado:
El programa Circunferencia.java, desarrollado en el ejercicio no. 3, falla en algunos casos, dependiendo de cuales sean las coordenadas de los puntos elegidos. En este ejercicio intentaremos detectar todas las posibles situaciones de error, y manejarlas adecuadamente.
gonzalezpe
Página 17
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
En primer lugar se pide modificar el constructor de Circunferencia, para que lance una excepción cuando detecte que algunos de los puntos son iguales entre sí, o estén demasiado alineados. También ocurre que las ecuaciones propuestas para calcular la circunferencia no funcionan cuando x1 y x2 son iguales. Modifique el constructor para que si ocurre esto, intercambie las coordenadas de los puntos (x1,y1) y (x3,y3) antes de hacer los cálculos. Compruebe primero que x1 y x3 no coincidan, ya que si lo hacen, todos los puntos estarán alineados en la misma vertical, y el contructor deberá lanzar una excepción explicando el problema. Modifique también el método main, para que los valores de las coordenadas se introduzcan por línea de comandos. Imprima los mensajes que considere oportuno cuando no se introduzcan exactamente los seis valores de las coordenadas, o estos no sean numéricos. Si se le ocurren nuevos casos problemáticos, coméntelos e intente solucionarlos.
Ejercicio n.19
Temas: 3 5 Dificult 5 ad: Registr 200310-05 ado:
Calcule si un año, que ha recibido como argumento en la llamada al programa, es bisiesto. La regla completa para saber si un año es bisiesto, es que sea divisible por 4, excepto que si es divisible por 100 lo sea también por 400. Realice la comprobación mediante una sola operación lógica e imprima en la pantalla un mensaje con el resultado.
Ejercicio n.25
Temas: 4 5 Dificult 5 ad: Registr 200310-11 ado:
Escriba una clase que compruebe si un año es bisiesto o no. La regla completa para saber si un año es bisiesto es que sea divisible por 4, excepto que si es divisible por 100 lo sea también por 400. Realice la comprobación mediante una sola operación lógica; la clase que defina debe tener un método público que devuelva true o false, dependiendo de si el año es bisiesto o no. gonzalezpe
Página 18
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Ejercicio n.26
Temas: 4 5 Dificult 5 ad: Registr 200310-11 ado:
Defina una clase que permita representar una serie aritmética; una serie aritmética viene caracterizada por el primer elemento de la serie y el incremento o diferencia entre dos elementos sucesivos de la serie. Implemente un método en esta clase que permita calcular la suma de los n primeros elementos de la serie (utilice un bucle para realizar esta operación).
Ejercicio n.27
Temas: 4 5 Dificult 5 ad: Registr 200310-11 ado:
Se quiere definir una clase que permita controlar un sintonizador digital de emisoras FM; concretamente, lo que se desea es dotar al controlador de una interfaz que permita subir (up) o bajar (down) la frecuencia (en saltos de 0.5 MHz) y mostrar la frecuencia sintonizada en un momento dado (display). Supondremos que el rango de frecuencias a manejar oscila entre los 80 Mhz y los 108 MHz y que al inicio, el controlador sintoniza a 80 MHz. Si durante una operación de subida o bajada se sobrepasa uno de los dos límites, la frecuencia sintonizada debe pasar a ser la del extremo contrario.
Ejercicio n.27
Temas: 4 5 Dificult 5 ad: Registr 200310-11 ado:
Se quiere definir una clase que permita controlar un sintonizador digital de emisoras FM; concretamente, lo que se desea es dotar al controlador de una interfaz que permita subir (up) o bajar (down) la frecuencia (en saltos de 0.5 MHz) y mostrar la frecuencia sintonizada en un momento dado (display). Supondremos que el rango de frecuencias a manejar oscila entre los 80 Mhz y los 108 MHz y que al inicio, el controlador sintoniza a 80 MHz. Si durante una operación de subida o bajada se
gonzalezpe
Página 19
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
sobrepasa uno de los dos límites, la frecuencia sintonizada debe pasar a ser la del extremo contrario.
Ejercicio n.29
Temas: 4 5 Dificult 5 ad: Registr 200310-05 ado:
Queremos modelar una casa con muchas bombillas, de forma que cada bombilla se puede encender o apagar individualmente. Para ello haremos una clase Bombilla con una variable privada que indique si está encendida o apagada, así como un método que nos diga si una bombilla concreta está encendida. Además queremos poner un interruptor general de la luz, tal que si saltan los fusibles, todas las bombillas quedan apagadas. Cuando el fusible se repara, las bombillas vuelven a estar encendidas o apagadas, según estuvieran antes del percance. Para modelar en Java esta característica usaremos una variable de clase (static) que nos diga si hay luz en el edificio o no. Cada objeto Bombilla se enciende y se apaga individualmente; pero sólo responde que está encendida si su interruptor particular está activado y además hay luz general. El código Java tiene esta estructura: class Bombilla { private static ...; // interruptor general private ...; // interruptor particular public static void activaGeneral () { ... } public static void desactivaGeneral () { ... } public void enciende () { ... } public void apaga () { ... } public boolean encendida () { ... } }
Ejercicio n.30
Temas: 5 Dificult 5 ad: Registr 200310-16 ado:
gonzalezpe
Página 20
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Defina una clase que ofrezca tres métodos para imprimir, respectivamente, las cifras del 0 al 9, las letras mayúsculas y las letras minúsculas; al lado de cada cifra o letra, deberá aparecer, entre paréntesis, su código ASCII. Escriba un método main que haga uso de los tres métodos previamente definidos.
Ejercicio n.31
Temas: 5 Dificult 5 ad: Registr 200310-16 ado:
Defina una clase que ofrezca un método que permita comprobar si un entero es par o impar.
Ejercicio n.31
Temas: 5 Dificult 5 ad: Registr 200310-16 ado:
Defina una clase que ofrezca un método que permita comprobar si un entero es par o impar.
Ejercicio n.35
Temas: 5 Dificult 5 ad: Registr 200310-16 ado:
Defina una clase factorial, que permita calcular el factorial de un número entero; utilice iteración.
Ejercicio n.33
Temas: 5 Dificult 6 ad: Registr 200310-16 ado:
Defina una clase que permita calcular la suma, media y el máximo de una lista de números enteros positivos que se introducen por teclado; la entrada acabará cuando se introduzca un número entero negativo.
gonzalezpe
Página 21
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Para leer por la entrada estándar puede utilizar el método readLine() de la clase BufferedReader y para identificar el entero leído, el método "int Integer.parseInt(String)". Pista: private static BufferedReader stdin =
new BufferedReader(new InpuStreamReader(System.in)); String entrada = stdin.readLine();
Ejercicio n.34
Temas: 5 Dificult 6 ad: Registr 200310-16 ado:
Escriba una clase que permita calcular el número PI con una precisión de "n" decimales. El parámetro "n" deberá introducirse por teclado. Puede utilizar la siguiente fórmula para aproximar el valor de PI/4: PI/4 = 1 - 1/3 + 1/5 - 1/7 + ... = Suma(n=0,infinito){(-1)^n/(2n+1)}
Ejercicio n.5
Temas: 5 Dificult 6 ad: Registr 200209 ado:
Escriba un programa que calcule todos los números primos entre 1 y un número dado. Para ello, cree el método "boolean EsPrimo(int n)" que indicará si n es primo o no. Este método comprobará si n es divisible por algún número entero entre 2 y la raíz cuadrada de n.
Ejercicio n.9
Temas: 5 Dificult 6 ad: Registr 200209 ado:
gonzalezpe
Página 22
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Escriba un método que calcule el valor de la función de Ackermann. Esta función se define para números enteros no negativos como: n + 1 si m=0 A(m,n) = A(m-1, 1) si m>0 y n=0 A(m-1, A(m, n-1)) si m>0 y n>0
Ejercicio n.9
Temas: 5 Dificult 6 ad: Registr 200209 ado:
Escriba un método que calcule el valor de la función de Ackermann. Esta función se define para números enteros no negativos como: n + 1 si m=0 A(m,n) = A(m-1, 1) si m>0 y n=0 A(m-1, A(m, n-1)) si m>0 y n>0
Temas: 5 Dificult 7 ad: Registr 200209 ado:
Escriba la clase Seno, cuyo objetivo es dibujar la función seno en pantalla. * * * * * * * * * *
gonzalezpe
Página 23
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
* * * * * * * * * * * * * * * * * * * * * * * * *
El contructor de esta clase tomará como parámetros, la amplitud y la velocidad angular de la función. Para dibujar en pantalla la función se llamará al método "void Pintar(double t0, double t1)", donde t0 y t1 son los dos instantes de tiempo entre los que se pintará la función. Use el siguiente método main para probar la clase: public static void main(String[] args) { Seno s = new Seno(15,0.25);
gonzalezpe
Página 24
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
s.Pinta(0,250); }
gonzalezpe
Página 25
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Clases
Ejercicio n.40
Temas: 6 Dificult 5 ad: Registr 200311-22 ado:
Defina una clase 'Monedero' que permita gestionar la cantidad de dinero de que una persona dispone en un momento dado. La clase deberá tener un constructor que permitirá crear un monedero con una cantidad de dinero inicial y deberá definir un método para meter dinero en el monedero, otro para sacarlo y finalmente, otro para consultar el disponible; solo podrá conocerse la cantidad de dinero del monedero a través de este último método. Por supuesto, no se podrá sacar más dinero del que haya en un momento dado en el monedero. Para probar el funcionamiento de la clase, escriba un método 'main' con una serie de instrucciones que hagan uso de los métodos definidos
Ejercicio n.41
Temas: 6 Dificult 5 ad: Registr 200311-22 ado:
Se desea representar el conjunto de bombillas que hay en una casa, así como la potencia consumida en un momento dado por todas ellas. Para ello, defina una clase 'Bombilla' que tenga al menos dos atributos: uno para identificarla y otro que indique la potencia que consume; también, deberá crear dos métodos que permitan encender y apagar la bombilla. La clase deberá disponer de un mecanismo que permita obtener la potencia consumida por el conjunto de bombillas que estén encendidas en un determinado instante.
Ejercicio n.42
Temas: 7 Dificult 5 ad: Registr 200311-22 ado:
gonzalezpe
Página 26
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Cree una clase 'AlarmaDeTemperatura' cuyos objetos activen un objeto 'Timbre' cuando la temperatura llegue a un cierto valor. Para probar la alarma cree un objeto 'Sensor' que utilice la clase 'AlarmaDeTemperatura' y simule variaciones de temperatura y cambios en la temperatura de alarma. La clase 'Timbre' mostrará un mensaje por pantalla cuando se active y otro cuando se desactive.
Ejercicio n.43
Temas: 7 Dificult 5 ad: Registr 200311-22 ado:
Se quiere definir una interfaz que especifique cómo tienen que ser todas aquellas clases que generen números aleatorios. Esta interfaz debe especificar un método 'double getAleatorio()' que deberá estar definido en todas aquellas clases que implementen esta interfaz. Haciendo uso de esta interfaz, defina una clase 'NumeroAleatorio01' que devuelve números aleatorios entre 0 y 1 y una clase 'NumeroAleatorioCte' que devuelva siempre el mismo número. Nota: el método 'random()' de la clase 'Math' de Java devuelve un número (double) mayor o igual que 0 y menor que 1.
Ejercicio n.44
Temas: 7 Dificult 5 ad: Registr 200311-22 ado:
Escriba una clase en la que se defina un método que escriba por pantalla el tipo de argumento que se le pasa como parámetro. Ejemplo: si se le pasa un carácter (char), que imprima algo del tipo "Soy un carácter". Esta clase deberá ser capaz de detectar todos los tipos primitivos de Java.
Ejercicio n.45
Temas: 7 Dificult 5 ad: Registr 200311-22 ado:
Defina una jerarquía de clases que permita almacenar datos sobre los planetas y satélites que forman parte del sistema solar (junto con el sol). Algunos atributos que puede ser interesante recoger son: la masa del gonzalezpe
Página 27
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
cuerpo, su diámetro medio, el período de rotación sobre el propio eje, período de traslación alrededor del cuerpo que orbitan, distancia media a ese cuerpo, excentricidad de la órbita, ... Defina un método, que dado un objeto del sistema solar (planeta o satelite), imprima toda la información de que se dispone sobre el mismo.
Ejercicio n.46
Temas: 7 Dificult 5 ad: Registr 200311-22 ado:
Defina una jerarquía de clases que permita representar los distintos tipos de viviendas que ofrece una inmobiliaria a sus clientes: estudios, pisos, áticos, dúplex y chalets. Algunos datos a tener en cuenta pueden ser: la localización del inmueble, el número de metros cuadrados que tiene, la planta del edificio en la que se sitúa, la superficie de la terraza, el número de plantas, el número de dormitorios y baños, el estado en el que se encuentra (para entrar a vivir, para reformar), si dispone de ascensor, portero, piscina, garaje, zonas comunes, dimensiones del jardín o parcela, etc.
Ejercicio n.10
Temas: 7 8 Dificult 6 ad: Registr 200209 ado:
Escriba una clase llamada Inventario, para almacenar referencias a todos los animales existentes en una tienda de mascotas. Esta clase debe cumplir con los siguientes requisitos: •
•
•
•
•
Los animales deben almacenarse en un array privado de tamaño 100 dentro de la clase Inventario. El tamaño del array debe definirse como una constante en la clase. En la tienda existirán diferentes tipos de animales: perros, gatos, conejos, etc. La clase debe tener un constructor que inicialice el inventario a vacío, y métodos para insertar y eliminar animales del inventario. Debe existir otro método que imprima el nombre, la raza y la edad de todos los animales de la tienda.
gonzalezpe
Página 28
18/10/yyyy
Fundamentos de Programación Semestre Otoño •
•
IPP
Cree también un método que devuelva un Enumeration con todos los perros de la tienda. Utilice siempre que pueda interfaces y polimorfismo para realizar este ejercicio.
Estructuras Indexadas de datos
Ejercicio n.7
Temas: 8 Dificult 3 ad: Registr 200209 ado:
Escriba un método que transponga matrices cuadradas de números reales. // tabla[f][c] <-> tabla[c][f] void transponer(double[][] tabla) throws Exception;
Ejercicio n.10
Temas: 7 8 Dificult 6 ad: Registr 200209 ado:
Escriba una clase llamada Inventario, para almacenar referencias a todos los animales existentes en una tienda de mascotas. Esta clase debe cumplir con los siguientes requisitos: •
•
•
•
Los animales deben almacenarse en un array privado de tamaño 100 dentro de la clase Inventario. El tamaño del array debe definirse como una constante en la clase. En la tienda existirán diferentes tipos de animales: perros, gatos, conejos, etc. La clase debe tener un constructor que inicialice el inventario a vacío, y métodos para insertar y eliminar animales del inventario.
gonzalezpe
Página 29
18/10/yyyy
Fundamentos de Programación Semestre Otoño •
•
•
IPP
Debe existir otro método que imprima el nombre, la raza y la edad de todos los animales de la tienda. Cree también un método que devuelva un Enumeration con todos los perros de la tienda. Utilice siempre que pueda interfaces y polimorfismo para realizar este ejercicio.
Ejercicio n.8
Temas: 8 Dificult 8 ad: Registr 200209 ado:
Escriba un método que ordene arrays de números enteros de menor a mayor valor. En la posición cero quedará el valor más pequeño despues de la ordenación. void ordena(int[] tabla);
Estructuras Dinámicas de Datos
Ejercicio n.47
Temas: 9 Dificult 5 ad: Registr 200401-07 ado:
Defina un método 'copia' para la clase 'ListaEncadenada' del tema 9 de teoría que permita construir una lista con tantos nodos como la original, y en la cual, la información se guarda en el mismo orden que en la lista original.
Ejercicio n.48
Temas: 9 Dificult 5 ad: Registr 200401-07 ado:
gonzalezpe
Página 30
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
Defina un método 'invertir' para la clase 'ListaEncadenada' del tema 9 de teoría que devuelva una lista de modo que el nodo que estaba en primer lugar en la lista original se sitúe al final en la nueva lista y viceversa y así sucesivamente. Haga esto sin crear nuevos nodos. Sugerencia: ir formando una nueva lista en la que se incorpora el primer nodo de la vieja, borrándolo de la vieja, y continuar hasta terminar con la lista original
Ejercicio n.49
Temas: 9 Dificult 8 ad: Registr 200401-07 ado:
Durante la rebelión judía contra Roma (unos 70 años a. de C.), 40 judíos quedaron atrapados en una cueva. Prefiriendo la muerte antes que la captura, decidieron formar un círculo, matando cada 3 de los que quedaran, hasta que quedara uno solo, quien se suicidaría. Conocemos esta historia por Flavio Josefo (historiador famoso), quien siendo el último de los sobrevivientes del círculo, no se suicidó. El problema consiste en averiguar en qué posición debió colocarse Flavio Josefo dentro del círculo para quedar como último sobreviviente. En general, supondremos un círculo de 'n' personas, numeradas de 1 a n, y se irá eliminando la 'm'-ésima comenzando desde la primera, recorriendo los círculos cada vez más pequeños siempre en el mismo sentido. Por ejemplo, si n=5 y m=3, se eliminarían sucesivamente las numeradas (de acuerdo con la numeración inicial) 3; 1; 5; 2, sobreviviendo 4. Implementar una solución a este problema usando una lista circular; es decir, el último nodo se encadena al primero, y donde cada nodo representa a una persona. La eliminación se traduce en la eliminación de un nodo de la lista circular. La solución deberá imprimir la permutación de Flavio Josefo.
Ejercicio n.2
Temas: L Dificult 5 ad: Registr 200209 ado:
gonzalezpe
Página 31
18/10/yyyy
Fundamentos de Programación Semestre Otoño
IPP
El siguiente programa traduce los grados Celsius almacenados en la variable c a grados Fahrenhait. Modifique este programa para que el valor de la variable c se introduzca por teclado. class Grados { public static void main (String[] args) { // Grados Celsius double c = 10.4; // Grados Fahrenhait double f = 9.0 / 5.0 * c + 32; System.out.println (c+" grados Celsius son "+f+" grados Fahrenhait."); } }
gonzalezpe
Página 32
18/10/yyyy