52214349 evidencias capitulo 8 deitel 6 deitel

25
U U n n i i v v e e r r s s i i d d a a d d P P o o l l i i t t é é c c n n i i c c a a d d e e T T u u l l a a n n c c i i n n g g o o Maestría en Ingeniería de Sistemas, especialidad en software Profesor: Carlos Enríquez Ramírez. Materia: Programación Orientada a Objetos. Alumno: Ricardo Raúl Delgadillo Avila. Tema: Evidencias de la lectura de: “JAVA Cómo Programar, Capítulo 8. Marzo del 2010.

Upload: nsa-rosas

Post on 16-Apr-2015

458 views

Category:

Documents


16 download

TRANSCRIPT

Page 1: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

UUnniivveerrssiiddaadd PPoolliittééccnniiccaa ddee

TTuullaanncciinnggoo

Maestría en Ingeniería de Sistemas, especialidad en

software

Profesor: Carlos Enríquez Ramírez.

Materia: Programación Orientada a Objetos.

Alumno: Ricardo Raúl Delgadillo Avila.

Tema: Evidencias de la lectura de: “JAVA Cómo

Programar”, Capítulo 8.

Marzo del 2010.

Page 2: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

Ejercicio de autoevaluación

8.1 Complete los siguientes enunciados:

a) Al compilar una clase en un paquete, la opción –d de línea de comandos de javac especifica en

dónde se debe almacenar el paquete, y hace que el compilador cree los directorios, en caso de que no existan.

b) El método static format de la clase String es similar al método System.out.printf, pero devuelve un objeto

String con formato en vez de mostrar un objeto String en una ventana de comandos.

c) Si un método contiene una variable local en el mismo nombre que uno de los campos de su clase, la

variable local oculta al campo en el alcance de ese método.

d) El recolector de basura llama al método finalize antes de reclamar la memoria de un objeto.

e) Una declaración import de tipo simple especifica una clase a importar.

f) Si una clase declara constructores, el compilador no creará un (a) constructor predeterminado.

g) El método to string de un objeto se llama en forma implícita cuando aparece un objeto en el código, en

donde se necesita un String.

h) A los métodos establecer se les llama comúnmente métodos de acceso o métodos de consulta.

i) Un método predicado evalúa si una condición es verdadera o falsa.

j) Para cada enum, el compilador genera un método static llamado values, que devuelve un arreglo de las

constantes de la enum en el orden en el que se declararon.

k) A la composición se le conoce algunas veces como relación tiene un.

l) Una declaración enum contiene una lista separada por comas de constantes.

m) Una variable static representa información a nivel de clase, que comparten todos los objetos de la clase.

n) Una declaración static import de tipo simple importa un miembro static.

o) El principio de menor privilegio establece que al código se le debe otorgar sólo el nivel de privilegio y de

acceso que necesita para realizar su tarea designada.

p) La palabra clave final especifica que una variable no se puede modificar.

q) Un (a) tipo de datos abstracto (ADT) consiste en una representación de datos y las operaciones que

pueden realizarse sobre esos datos.

r) Solo puede haber un (a) declaración pakage en un archivo de código fuente de java, y debe ir antes de

todas las demás declaraciones e instrucciones en el archivo.

s) Un (a) declaración import tipo sobre demanda sólo importa las clases que utiliza el programa de un

paquete específico.

t) El compilador utiliza un (a) cargador de clases para localizar las clases que necesita en la ruta de las

clases.

u) La ruta de las clases para el compilador y la JVM se puede especificar mediante la opción -classpath para

el comando javac o java, o estableciendo la variable de entorno CLASSPATH.

Page 3: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

v) A los métodos establecer se les conoce comúnmente como métodos mutadores, ya que, por lo general,

modifican un valor.

w) Un(a) declaración static import sobre demanda importa a todos los miembros static de una clase.

x) Los métodos public de una clase se conocen también como los servicios public o interfaz public de la

clase.

y) El método static gc de la clase System indica que el recolector de basura debe realizar su mejor esfuerzo

para tratar de reclamar los objetos que sean candidatos para la recolección de basura.

z) Un objeto que contiene datos consistentes tiene valores de datos que siempre se mantienen dentro del

rango.

Ejercicios

8.3 ¿ Qué ocurre cuando un tipo de valor de retornó, incluso void, se especifica para un constructor?.

Respuesta:

Marcaria un error, ya que solo podría devolver o nó un valor pero solo desde un método del constructor.

8.4 (Clase Rectángulo) Cree una clase Rectángulo. La clase debe tener atributos longitud y anchura, cada uno

con el valor predeterminado de 1. Debe tener métodos para calcular el perímetro y el área del rectángulo. Debe

tener métodos para establecer y obtener para longitud y altura. Los métodos establecer deben verificar que

longitud y anchura sean números de punto flotante mayores de 0.0, y menores de 20.0. Escriba un programa para

probar la clase Rectángulo.

Respuesta:

package RECTANGULO;

import javax.swing.*;

//CREA LA CLASE PARA CALCULAR EL ÁREA Y EL PERIMETRO *******************************

public class OPERACIONES_RECTANGULO{

float VAR_ALTURA =1;

float VAR_ANCHO=1;

float VAR_RESULTADO;

// CREACION DE LOS METODOS PARA SU POSTERIOR LLAMADO **************************

public void CAPTURA_DATOS(){ //METODO QUE CAPTURA LOS DATOS NECESARIOS ********

String VAR_VALOR;

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el valor de la ancho: ");

Page 4: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

VAR_ANCHO=Integer.parseInt(VAR_VALOR);

if ((VAR_ANCHO<=0) || (VAR_ANCHO>=20))

JOptionPane.showMessageDialog(null,"El valor debe de ser menor mayor a cero y menor de 20");

else{

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el valor de la altura: ");

VAR_ALTURA=Integer.parseInt(VAR_VALOR);

if ((VAR_ALTURA<=0) || (VAR_ALTURA>=20))

JOptionPane.showMessageDialog(null,"El valor debe de ser menor mayor a cero y menor de 20");

}

}

//CREA METODO DONDE CALCULA EL AREA Y LA IMPRIME *****************************

public void CALCULAR_AREA()

{

VAR_RESULTADO = VAR_ANCHO*VAR_ALTURA;

System.out.println();

System.out.print("El área es: ");

System.out.print(VAR_RESULTADO);

System.out.println();

}

//CREA EL METODO DONDE CALCULA EL PERIMETRO Y LO IMPRIME **********************

public void CALCULAR_PERIMETRO(){

VAR_RESULTADO= (VAR_ANCHO*2)+(VAR_ALTURA*2);

System.out.println();

System.out.print("El perímetro es: ");

Page 5: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

System.out.print(VAR_RESULTADO);

System.out.println();

}

}

class CALCULO_OPERACIONES_RECTANGULO{

public static void main(String[] args) {

//CREA EL OBJETO PARA REALIZAR LAS AOPRACIONES DE ÁREA Y PERIMETOR

OPERACIONES_RECTANGULO OBJETO_RECTANGULO = new OPERACIONES_RECTANGULO();

//LLAMA A LOS METODOS DEL OBJETO CREADO ***************************

OBJETO_RECTANGULO.CAPTURA_DATOS();

OBJETO_RECTANGULO.CALCULAR_AREA();

OBJETO_RECTANGULO.CALCULAR_PERIMETRO();

}

}

8.5 (Modificación de la representación de datos interna de una clase) Sería perfectamente razonable para la clase

tiempo2, representar la hora internamente como el número de segundos transcurridos desde media noche, en vez

de usar los tres valores enteros hora, minuto y segundo. Los clientes podrán utilizar los mismos métodos public y

obtener los mismos resultados. Modifique la clase Tiempo2. Para implementar una clase Tiempo2 como el número

de segundos transcurridos desde media noche, y mostrar que no hay cambios visibles para los clientes de la

clase.

8.6 (Clase cuenta de ahorro) Cree una clase que se llame cuentaDeAhorros. Use una variable Static llamada

TazaDeInteresAnual para almacenar la taza de interés anual para todos los cuentahabientes. Cada objeto de la

clase debe de contener un variable de instancia prívate llamada SaldoAhorros, que indique la cantidad que al

ahorrador tiene actualmente en depósito. Proporcione el método CalcularInteresMensual para calcular el interés

mensual multiplicando el saldoAhorros por la tazaDeInteresMensual dividida entre 12; este interés debe sumarse

al saldoAhorros. Proporcione un método static llamado modificarTasaInteres para establecer la tasaInteresAnual

en un nuevo valor. Escriba un programa para probar la clase CuentaDeAhorros. Cree dos instancias de objetos

CuentaDeAhorros, ahorrador1 y ahorrador2, con saldos de $2000.000 y $3000.000, respectivamente. Establezca

la tasaInteresAnual en 4%, después calcule el interés del siguiente mes e imprima los nuevos saldos para ambos

ahorradores.

8.7 (Mejora a la clase tiempo2) Modifique la clase tiempo2 de la figura 8.5 para incluir un método tictac, que

incremente el tiempo almacenado en un objeto tiempo2 por un segundo. Proporcione el método

Page 6: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

incrementarMinuto para incrementar el minuto, y el método incrementarHora para incrementar la hora. El objeto

tiempo2 debe permanecer siempre en un estado consistente. Escriba un programa para probar los métodos tictac,

incrementarMinuto e incrementarHora, para asegurarse que funcionen correctamente, asegurarse de probar los

siguientes casos:

a) Incrementar el minuto, de manera que cambie al siguiente minuto.

b) Incrementar la hora, de manera que cambie a la siguiente hora.

c) Incrementar el tiempo de manera que cambie al siguiente día (por ejem. De 11:59:59 PM a 12:00:00 AM).

8.8 (Mejora la clase fecha) Modifiquen la clase Fecha de la figura 8.7 para realizar la comprobación de errores en

los valores inicializadores para las variables de instancia de mes, día y año (la versión actual sólo valida el mes y

el día).

Proporcione un método llamado siguienteDia para incrementar el día en uno. El objeto fecha siempre deberá

permanecer en un estado consistente. Escriba un programa que evalúe el método siguienteDia en ciclo que

imprima la fecha durante cada iteración del ciclo, para mostrar que el método siguienteDia funciona

correctamente. Pruebe los siguientes casos:

a) Incrementar la fecha de manera que cambie al siguiente mes.

b) Incrementar la fecha de manera que cambie al siguiente siguiente año.

8.9 (Devolver indicadores de errores de los métodos) Modifique los métodos establecer en la clase tiempo2 de la

figura 8.5 para devolver valores de error apropiados si se hace un intento por establecer una de las variables de

instancia hora, minuto o segundo de un objeto de clase Tiempo, en un valor inválido. (Sugerencia: use tipos de

valores de retorno boolean en cada método). Escriba un programa que pruebe estos nuevos métodos establecer

y que imprima mensajes de error cuando se reciban valores incorrectos.

8.10 Vuelva a escribir la fig. 8.14, de manera que utilice una declaración import separada para cada miembro static

de la clase Math que se utiliza en el ejemplo.

8.11 Escriba un tipo enum llamado LuzSemaForo, cuyas constantes (ROJO, VERDE, AMARILLO) reciban un

parámetro: La duración de la luz. Escriba un programa para probar la enum LuzSemaForo, de manera que

muestre las constantes de la enum y sus duraciones.

Respuesta:

package LUZ_SEMAFORO;

import java.lang.String;

public enum LUZSEMAFORO {

CONST_ROJO("Rojo","30"),

CONST_VERDE("Verde", "40"),

CONST_AMARILLO("Amarillo", "3");

private final String VAR_ENUM_COLOR;

Page 7: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

private final String VAR_ENUM_DURACION;

//CONSTRUCTOR DE LA CLASES ENUM ***********************************

LUZSEMAFORO(String VAR_COLOR,String VAR_DURACION)

{

VAR_ENUM_COLOR = VAR_COLOR;

VAR_ENUM_DURACION = VAR_DURACION;

}

public String VALOR_COLOR()

{

return VAR_ENUM_COLOR;

}

public String VALOR_DURACION()

{

return VAR_ENUM_DURACION;

}

}

class PRUEBA_ENUM_SEMAFORO

{

public static void main(String args[])

{

for(LUZSEMAFORO VAR_OBJETO_SEMAFORO : LUZSEMAFORO.values())

{

System.out.printf("Color: "+VAR_OBJETO_SEMAFORO.VALOR_COLOR()+", Duración: "+

VAR_OBJETO_SEMAFORO.VALOR_DURACION());

System.out.println();

}

Page 8: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

}

}

8.12 (números complejos) Cree una clase llamada Complejo para realizar operaciones aritméticas con números

complejos. Estos números tienen la forma:

parteReal + parteImaginaria *i

Escriba un programa para probar su clase. Use variables de punto flotante para representar los datos private de la

clase.

Proporcione un constructor que permita que un objeto de esta clase se inicialice al declararse. Proporcione un

constructor sin argumentos con valores predeterminados, en caso de que no se proporcionen inicializadores.

Proporcione métodos public que realicen las siguientes operaciones:

a) Sumar dos números Complejo: las partes reales se suman entre si y las partes imaginarias también.

b) Restar dos números Complejo: la parte real del operando derecho se resta de la parte real del operando

izquierdo, y la parte imaginaria del operando derecho se resta de la parte imaginaria del operando

izquierdo.

c) Imprimir números Complejo en la forma (a,b) en donde a es la parte real y b es la imaginaria.

Respuesta:

package NUMEROS_COMPLEJOS;

import javax.swing.*;

class COMPLEJO {

int VAR_REAL_A;

int VAR_REAL_B;

int VAR_IMAGINARIO_A;

int VAR_IMAGINARIO_B;

int VAR_SUMA_REAL;

int VAR_SUMA_IMAGINARIO;

int VAR_RESTA_REAL;

int VAR_RESTA_IMAGINARIO;

//SE DECLARA EL CONSTRUCTOR QUE INICIALIZE LAS VARIABLE *************

COMPLEJO()

{

VAR_REAL_A=0;

Page 9: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

VAR_REAL_B=0;

VAR_IMAGINARIO_A=0;

VAR_IMAGINARIO_B=0;

VAR_SUMA_REAL=0;

VAR_SUMA_IMAGINARIO=0;

VAR_RESTA_REAL=0;

VAR_RESTA_IMAGINARIO=0;

}

//METODO QUE SE UTILIZA PARA LA SUMA DE REALES **************************

public void SUMA_REALES(int VAR_REAL_A, int VAR_REAL_B)

{

VAR_SUMA_REAL=VAR_REAL_A+VAR_REAL_B;

}

//METODO QUE SE UTILIZA PARA LA SUMA DE IMAGINARIOS **********************

public void SUMA_IMAGINARIOS(int VAR_IMAGINARIO_A, int VAR_IMAGINARIO_B)

{

VAR_SUMA_IMAGINARIO=VAR_IMAGINARIO_A+VAR_IMAGINARIO_B;

}

//METODO QUE SE UTILIZA PARA LA SUMA DE REALES **************************

public void RESTA_REALES(int VAR_REAL_A, int VAR_REAL_B)

{

VAR_RESTA_REAL=VAR_REAL_A-VAR_REAL_B;

}

//METODO QUE SE UTILIZA PARA LA SUMA DE IMAGINARIOS **********************

public void RESTA_IMAGINARIOS(int VAR_IMAGINARIO_A, int VAR_IMAGINARIO_B)

{

Page 10: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

VAR_RESTA_IMAGINARIO=VAR_IMAGINARIO_A-VAR_IMAGINARIO_B;

}

public void IMPRIME_RESULTADO_SUMA()

{

System.out.println();

System.out.print("El resultado de la suma real es: "+VAR_SUMA_REAL+", la imaginaria es:

"+VAR_SUMA_IMAGINARIO+"i ");

System.out.println();

}

public void IMPRIME_RESULTADO_RESTA()

{

System.out.println();

System.out.print("El resultado de la resta real es: "+VAR_RESTA_REAL+", la imaginaria es:

"+VAR_RESTA_IMAGINARIO+"i ");

System.out.println();

}

}

class OperacionesMatrices

{

public static void main(String args[])

{

COMPLEJO VAR_OBJETO_COMPLEJO= new COMPLEJO();

String VAR_VALOR;

int VAR_CAPTURA_REAL_A=0;

int VAR_CAPTURA_IMAGINARIO_A=0;

int VAR_CAPTURA_REAL_B=0;

int VAR_CAPTURA_IMAGINARIO_B=0;

Page 11: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

System.out.print("*********OPERACIONES CON COMPLEJOS ************************");

System.out.println();

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el valor de la parte real R1: ");

VAR_CAPTURA_REAL_A=Integer.parseInt(VAR_VALOR);

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el valor de la parte imaginaria I1: ");

VAR_CAPTURA_IMAGINARIO_A=Integer.parseInt(VAR_VALOR);

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el valor de la parte real R2: ");

VAR_CAPTURA_REAL_B=Integer.parseInt(VAR_VALOR);

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el valor de la parte imaginaria I2: ");

VAR_CAPTURA_IMAGINARIO_B=Integer.parseInt(VAR_VALOR);

VAR_OBJETO_COMPLEJO.SUMA_REALES(VAR_CAPTURA_REAL_A, VAR_CAPTURA_REAL_B);

VAR_OBJETO_COMPLEJO.SUMA_IMAGINARIOS(VAR_CAPTURA_IMAGINARIO_A,

VAR_CAPTURA_IMAGINARIO_B);

VAR_OBJETO_COMPLEJO.IMPRIME_RESULTADO_SUMA();

VAR_OBJETO_COMPLEJO.RESTA_REALES(VAR_CAPTURA_REAL_A, VAR_CAPTURA_REAL_B);

VAR_OBJETO_COMPLEJO.RESTA_IMAGINARIOS(VAR_CAPTURA_IMAGINARIO_A,

VAR_CAPTURA_IMAGINARIO_B);

VAR_OBJETO_COMPLEJO.IMPRIME_RESULTADO_RESTA();

}

}

8.13 (Clase Fecha y tiempo) cree una clase llamada FechaYTiempo, que combine la clase tiempo2 modificada del

ejercicio 8.7 y la clase Fecha modificada del ejercicio 8.8. Modifique el método incrementarHora para llamar al

método siguienteDia si el tiempo se incrementa hasta el siguiente día. Modifique los métodos a StringEstandar y a

StringUniversal para imprimir la fecha, junto con la hora. Escriba un programa para evaluar nueva clase

FechaYTiempo. En específico, pruebe incrementando la hora para que cambie al siguiente día.

8.14 (Clase Rectángulo mejorada) Cree una clase rectángulo más sofisticada que la que creó en el ejercicio 8.4.

Esta clase debe guardar solamente las coordenadas Cartesianas de las cuatro esquinas del rectángulo. El

constructor debe llamar a un método establecer que acepte cuatro conjuntos de coordenadas y verifique que cada

una de éstas se encuentre en el primer cuadrante, en donde ninguna coordenada x o y debe ser mayor de 20.0. El

método establecer debe también verificar que las coordenadas especifiquen un rectángulo. Proporcione métodos

Page 12: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

para calcular la longitud, anchura, perímetro y área. La longitud será la mayor de las dos dimensiones. Incluya un

método predicado llamado esCuadrado, el cual determine si el rectángulo es un cuadrado. Escriba un programa

para probar la clase rectángulo.

Respuesta:

package RECTANGULO_MEJORADO;

import javax.swing.*;

//CREA LA CLASE PARA CALCULAR EL ÁREA Y EL PERIMETRO *******************************

public class RECTANGULO_CARTESIANO{

int VAR_SUP_IZQ_X =0;

int VAR_SUP_IZQ_Y =0;

int VAR_SUP_DER_X =0;

int VAR_SUP_DER_Y =0;

int VAR_INF_IZQ_X =0;

int VAR_INF_IZQ_Y =0;

int VAR_INF_DER_X =0;

int VAR_INF_DER_Y =0;

//ESTABLECE LOS LIMITES DE DONDE DEBE DE SER LAS COORDENAS DEL ERCTANGULO ******

int VAR_LIMITE_MINIMO=1;

int VAR_LIMITE_MAXIMO=20;

int VAR_ANCHO=0;

int VAR_ALTURA=0;

int VAR_RESULTADO=0;

boolean VAR_CERRAR_CICLO=false;

// CREACION DE LOS METODOS PARA SU POSTERIOR LLAMADO **************************

public void ESTABLECER(){ //METODO QUE CAPTURA LOS DATOS NECESARIOS ********

Page 13: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

String VAR_VALOR;

while (VAR_CERRAR_CICLO==false)

{

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el valor de X de la esquina superior izquierda: ");

VAR_SUP_IZQ_X=Integer.parseInt(VAR_VALOR);

if ((VAR_SUP_IZQ_X<VAR_LIMITE_MAXIMO)&&(VAR_SUP_IZQ_X>VAR_LIMITE_MINIMO))

{

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el valor de Y de la esquina superior izquierda:

");

VAR_SUP_IZQ_Y=Integer.parseInt(VAR_VALOR);

if ((VAR_SUP_IZQ_Y<VAR_LIMITE_MAXIMO)&&(VAR_SUP_IZQ_X>VAR_LIMITE_MINIMO))

{

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el valor de X de la esquina inferior derecha,

debe ser mayor a: "+VAR_SUP_IZQ_X+" y menor que: "+VAR_LIMITE_MAXIMO);

VAR_INF_DER_X=Integer.parseInt(VAR_VALOR);

if ((VAR_INF_DER_X<VAR_LIMITE_MAXIMO)&&(VAR_SUP_IZQ_X>VAR_LIMITE_MINIMO))

{

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el valor de Y de la esquina inferior

derecha, debe ser mayor a: "+VAR_SUP_IZQ_Y+" y menor que: "+VAR_LIMITE_MAXIMO);

VAR_INF_DER_Y=Integer.parseInt(VAR_VALOR);

if ((VAR_INF_DER_Y<VAR_LIMITE_MAXIMO)&&(VAR_SUP_IZQ_X>VAR_LIMITE_MINIMO))

{

VAR_CERRAR_CICLO=true;

}else{

JOptionPane.showMessageDialog(null,"La coordenada Y ser mayor a cero y menor de 20");

VAR_CERRAR_CICLO=false;

}

}else{

JOptionPane.showMessageDialog(null,"La coordenada X ser mayor a cero y menor de 20");

VAR_CERRAR_CICLO=false;

Page 14: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

}

}else{

JOptionPane.showMessageDialog(null,"La coordenada Y ser mayor a cero y menor de 20");

VAR_CERRAR_CICLO=false;

}

}else{

JOptionPane.showMessageDialog(null,"La coordenada X ser mayor a cero y menor de 20");

VAR_CERRAR_CICLO=false;

}

}

//COMIENZA A EXTRAER LA LONGITUD Y LA ALTURA PARA PODER CALCULAR EL AREA Y LE

PERÍMETRO ****************

VAR_ALTURA=(VAR_SUP_IZQ_Y - VAR_INF_DER_Y);

VAR_ANCHO=(VAR_INF_DER_X- VAR_SUP_IZQ_X);

JOptionPane.showMessageDialog(null,VAR_ALTURA);

JOptionPane.showMessageDialog(null,VAR_ANCHO);

}

//CREA METODO DONDE CALCULA EL AREA Y LA IMPRIME *****************************

public void CALCULAR_AREA()

{

VAR_RESULTADO = VAR_ANCHO*VAR_ALTURA;

System.out.println();

System.out.print("El área es: ");

System.out.print(VAR_RESULTADO);

System.out.println();

}

//CREA EL METODO DONDE CALCULA EL PERIMETRO Y LO IMPRIME **********************

public void CALCULAR_PERIMETRO(){

Page 15: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

VAR_RESULTADO= (VAR_ANCHO*2)+(VAR_ALTURA*2);

System.out.println();

System.out.print("El perímetro es: ");

System.out.print(VAR_RESULTADO);

System.out.println();

}

}

class CALCULO_OPERACIONES_RECTANGULO{

public static void main(String[] args) {

//CREA EL OBJETO PARA REALIZAR LAS AOPRACIONES DE ÁREA Y PERIMETOR

RECTANGULO_CARTESIANO OBJETO_RECTANGULO = new RECTANGULO_CARTESIANO();

//LLAMA A LOS METODOS DEL OBJETO CREADO ***************************

OBJETO_RECTANGULO.ESTABLECER();

OBJETO_RECTANGULO.CALCULAR_AREA();

OBJETO_RECTANGULO.CALCULAR_PERIMETRO();

}

}

8.15 (Conjunto de enteros) Cree la clase ConjuntoEnteros. Cada objeto ConjuntoEnteros puede almacenar

enteros en el rango de 0 a 100. El conjunto se representa mediante un arreglo de valores boolean. El elemento del

arreglo a( i ) es true si el entero i se encuentra en el conjunto. El elemento del arreglo a ( j ) es false si el entero j

no se encuentra dentro del conjunto. El constructor sin argumentos inicializa el arreglo de java con el “conjunto

vacio” (es decir, un conjunto cuya representación de arreglo contiene solo valores false).

Proporcione los siguiente métodos: el método unión debe crear un tercer conjunto que sea la unión teórica de

conjuntos para los dos conjuntos existentes (es decir, un elemento del tercer arreglo se establece en true si ese

elemento es true en cualquiera o en ambos de los conjuntos existentes; en caso contrario, el elemento del tercer

conjunto se establece en false). El método intersección debe crear un tercer conjunto que sea la intersección

teórica de conjuntos para los dos conjuntos existentes (es decir, un elemento del arreglo del tercer conjunto se

establece en false si ese elemento es false en uno o ambos de los conjuntos existentes; en caso contrario el

elemento del tercer conjunto se establece en true). El método InsertarElemento debe insertar un nuevo elemento k

en un conjunto (estableciendo a ( k ) en true. El método eliminarElemento debe eliminar el entero m

(estableciendo a (m) en false. El método aStringConjunto debe devolver una cadena que contenga un conjunto

como una lista de números separados por espacios. Incluya sólo aquellos elementos que estén presentes en el

Page 16: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

conjunto. Use - - - para representar un conjunto vacío. El método es IgualA debe determinar si dos conjuntos son

iguales. Escriba un programa para probar la clase ConjuntoEnteros. Cree instancias de varios objetos

ConjuntoEnteros. Pruebe que todos sus métodos funcionen correctamente.

8.16 (Clase Fecha) cree la clase fecha con las siguientes capacidades:

a) Imprimir la fecha en varios formatos, como

MM/DD/AAA

Junio 15, 1992

DDD AAA

b) Usar constructores sobrecargados para crear objetos Fecha inicializados con fechas de los formatos en la

parte (a). En el primer caso el constructor debe recibir tres valores enteros. En el segundo caso debe recibir un

objeto String y dos valores enteros. En el tercer caso debe recibir dos valores enteros, en el primero de los cuales

representa el número de día en el año. (Sugerencia: para convertir la representación de cadena del mes a un valor

numérico, compare las cadenas usando el método equals. Por ejemplo, si s1 y s2 son cadenas, la llamada al

método s1. Equals(s2) devuelve true si las cadenas son idénticas y devuelve false en cualquier otro caso).

RESPUESTA:

package FECHA_FORMATOS;

import javax.swing.*;

public class FECHA

{

private int VAR_DIA_A;

private int VAR_MES_A;

private int VAR_AÑO_A;

private String VAR_MES_B;

//FORMATO FECHA 2 *****************************************************

public FECHA(int VAR_DIA_A, int VAR_MES_A, int VAR_AÑO_A)

{

String VAR_MES_CADENA="";

switch (VAR_MES_A){

//CONVIERTE EL NUMERO DEL EMES EN EL MES QUE EQUIVALE **************

case 1:{

Page 17: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

VAR_MES_CADENA="ENERO";

}

case 2:{

VAR_MES_CADENA="FEBRERO";

}

case 3:{

VAR_MES_CADENA="MARZO";

}

case 4:{

VAR_MES_CADENA="ABRIL";

}

case 5:{

VAR_MES_CADENA="MAYO";

}

case 6:{

VAR_MES_CADENA="JUNIO";

}

case 7:{

VAR_MES_CADENA="JULIO";

}

case 8:{

VAR_MES_CADENA="AGOSTO";

}

case 9:{

VAR_MES_CADENA="SEPTIEMBRE";

}

case 10:{

VAR_MES_CADENA="OCTUBRE";

}

case 11:{

Page 18: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

VAR_MES_CADENA="NOVIEMBRE";

}

case 12:{

VAR_MES_CADENA="DICIEMBRE";

}

}

this.VAR_DIA_A=VAR_DIA_A;

this.VAR_MES_B=VAR_MES_CADENA;

this.VAR_MES_A=VAR_MES_A;

this.VAR_AÑO_A=VAR_AÑO_A;

}

//FORMATO FECHA 3 *****************************************************

public FECHA(int VAR_DIA_A,int VAR_AÑO_A)

{

this.VAR_DIA_A=VAR_DIA_A;

this.VAR_AÑO_A=VAR_AÑO_A;

}

//IMPRIME LOS FORMATOS *****************************************************

public void IMPRIME_FORMATO()

{

System.out.println();

System.out.print("Fecha 1: "+VAR_DIA_A+"/"+VAR_MES_A+"/"+VAR_AÑO_A);

System.out.println();

System.out.print("Fecha 2: "+VAR_DIA_A+"/"+VAR_MES_B+"/"+VAR_AÑO_A);

System.out.println();

System.out.print("Fecha 3: "+VAR_DIA_A+"/"+VAR_AÑO_A);

System.out.println();

Page 19: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

}

}

class IMPRESION_FORMATO_FECHA

{

public static void main(String args[])

{

String VAR_VALOR;

int VAR_DIA;

int VAR_MES;

int VAR_AÑO;

//COMIENZ ALA INTRODUCCIOND E LSO DATOS D ELA FECHA A IMPRIMIR ******

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el DIA: ");

VAR_DIA=Integer.parseInt(VAR_VALOR);

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el MES: ");

VAR_MES=Integer.parseInt(VAR_VALOR);

VAR_VALOR=JOptionPane.showInputDialog("Introduzca el AÑO: ");

VAR_AÑO=Integer.parseInt(VAR_VALOR);

//LLAMA A LA CLASE CONSTRUIDA PARA HACERLE EL PASOD EPARAMETROS

FECHA VAR_OBJETO_FECHA1 = new FECHA(VAR_DIA, VAR_MES, VAR_AÑO);

//LLAMA AL METODO ****************************************************

VAR_OBJETO_FECHA1.IMPRIME_FORMATO();

Page 20: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

}

8.17 (Números racionales ) Cree una clase llamada racional para realizar operaciones aritméticas con fracciones.

Escriba un programa para probar su clase. Use variables enteras para representar las variables de instancia

prívate de la clase: el numerador y el denominador. Proporcione un constructor que permita a un objeto de esta

clase inicializarse al ser declarado. El constructor debe almacenar la fracción en forma reducida. La fracción 2/4 es

equivalente a ½ y debe guardarse en el objeto como 1 en el numerador y 2 en el denominador. Proporcione un

constructor sin argumentos con valores predeterminados, en caso de que no se proporcionen inicializadores.

Proporcione métodos public que realicen cada una de las siguientes operaciones:

a) Sumar dos números Racional: el resultado de la suma debe almacenarse en forma reducida.

b) Restar dos números Racional: el resultado de la resta debe almacenarse en forma reducida.

c) Multiplicar dos números Racional: el resultado de la multiplicación debe almacenarse en forma reducida.

d) Dividir dos números Racional: el resultado de la división debe almacenarse en forma reducida.

e) Imprimir números Racional en forma a/b, en donde a es el numerador y b es el denominador.

f) Imprimir números Racional en formato de punto flotante. (considere proporcionar capacidades de formato, que

permitan al usuario de la clase especificar el número de dígitos de precisión a la derecha del punto decimal).

8.18 (Clase Entero Enorme) Cree una clase llamada EnteroEnorme que utilice un arreglo de 40 elementos de

dígitos, para guardar enteros de hasta 40 dígitos de longitud cada uno. Proporcione los métodos entrada, salida,

sumar y restar. Para comparar objetos EnteroEnorme, proporcione los siguientes métodos: es IgualA, no EsIgualA,

es MayorQue, esMenorQue, esMayorOIgualA, y esMenorOIgualA. Cada uno de estos métodos deberá ser un

método predicado que devuelva true si la relación aplica entre los dos objetos EnteroEnorme, y false si no se

aplica. Proporcione un método predicado llamado esCero. Si desea hacer algo mas, proporcione también los

métodos multiplicar, dividir y residuo. (Nota: los valores boolean primitivos pueden imprimirse como la palabra

“true” o la palabra “false”, con el especificador de formato.

8.19 (Tres en Raya) Cree una clase llamada TresEnRaya que le permita escribir un programa para jugar al “tres

en raya” (o tres en línea). La clase debe contener un arreglo privado bidimensional de enteros, con un tamaño e 3

por 3. El constructor debe inicializar el tablero vacio en ceros. Permita dos jugadores humanos. Siempre que el

primer jugador realice un movimiento, coloque un 1 en el cuadro especificado; coloque un 2 siempre que el

segundo jugador realice un movimiento. Cada movimiento debe hacerse en un cuadro vacio. Después de cada

movimiento determine si el juego se ha ganado o si hay un empate. Si desea hacer algo mas, modifique su

programa de manera que su computadora realice los movimientos para uno de los jugadores. Además, permita

que el jugador especifique si desea el primero o segundo turno. Si se siente todavía más motivado, desarrolle un

programa que reproduzca un juego de tres en raya tridimensional, en un tablero de 4 por 4 por 4 (Nota: ¡éste es un

proyecto retador que podría requerir de muchas semanas de esfuerzo!).

Respuesta:

package TRES_EN_LINEA;

import javax.swing.*;

public class JUEGO_TRES_EN_LINEA {

int VAR_MATRIZ_TABLERO[][];

Page 21: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

//SE CRE AUN CONSTRUCTOR QUE SE DEBE DE LLMARA IGUAL QUE LA CLASE DEL TRABLERO

JUEGO_TRES_EN_LINEA()

{

VAR_MATRIZ_TABLERO = new int[3][3];

}

//INTRDUCE LOS DATOS DE LAS MATRICES PARA LLENAR SU CONETNIDO

public void CAPTURAR_DATOS()

{

String VAR_RESULTADO;

int VAR_FILA=0;

int VAR_COL=0;

int VAR_JUGADOR=1;

int VAR_CONTADOR_FILAS_UNO=0;

int VAR_CONTADOR_FILAS_DOS=0;

int VAR_CONTADOR_COL_UNO=0;

int VAR_CONTADOR_COL_DOS=0;

boolean VAR_FINALIZAR = false;

while (VAR_FINALIZAR == false){

JOptionPane.showMessageDialog(null,"El jugador; "+VAR_JUGADOR+", es el que va a tirar: ");

VAR_RESULTADO =JOptionPane.showInputDialog("Qué fila elige : ");

VAR_FILA=Integer.parseInt(VAR_RESULTADO);

VAR_RESULTADO =JOptionPane.showInputDialog("Qué columna elige : ");

VAR_COL=Integer.parseInt(VAR_RESULTADO);

Page 22: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

if ((VAR_MATRIZ_TABLERO[VAR_FILA-1][VAR_COL-1]!=1)||(VAR_MATRIZ_TABLERO[VAR_FILA-

1][VAR_COL-1]!=2)){

VAR_MATRIZ_TABLERO[VAR_FILA-1][VAR_COL-1]=VAR_JUGADOR;

IMPRIME_ESTADO(VAR_MATRIZ_TABLERO, VAR_JUGADOR);

//REVIZA QUE EL HAYA UN GANADOR ***************************************************

for(int VAR_RECORRE_FILA=0;

VAR_RECORRE_FILA<VAR_MATRIZ_TABLERO.length;VAR_RECORRE_FILA++)

{

VAR_CONTADOR_FILAS_UNO=0;

VAR_CONTADOR_FILAS_DOS=0;

VAR_CONTADOR_COL_UNO=0;

VAR_CONTADOR_COL_DOS=0;

for(int VAR_RECORRE_COL=0;

VAR_RECORRE_COL<VAR_MATRIZ_TABLERO.length;VAR_RECORRE_COL++)

{

if (VAR_MATRIZ_TABLERO[VAR_RECORRE_FILA][VAR_RECORRE_COL]==1)

{

VAR_CONTADOR_FILAS_UNO++;

if (VAR_CONTADOR_FILAS_UNO==3){

JOptionPane.showMessageDialog(null,"GANADOR UNO:

"+VAR_CONTADOR_FILAS_UNO);

VAR_RECORRE_FILA=VAR_MATRIZ_TABLERO.length;

VAR_RECORRE_COL=VAR_MATRIZ_TABLERO.length;

VAR_FINALIZAR = true;

}

}

if (VAR_MATRIZ_TABLERO[VAR_RECORRE_FILA][VAR_RECORRE_COL]==2)

{

Page 23: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

VAR_CONTADOR_FILAS_DOS++;

if (VAR_CONTADOR_FILAS_DOS==3){

JOptionPane.showMessageDialog(null,"GANADOR DOS:

"+VAR_CONTADOR_FILAS_DOS);

VAR_RECORRE_FILA=VAR_MATRIZ_TABLERO.length;

VAR_RECORRE_COL=VAR_MATRIZ_TABLERO.length;

VAR_FINALIZAR = true;

}

}

if (VAR_MATRIZ_TABLERO[VAR_RECORRE_COL][VAR_RECORRE_FILA]==1)

{

VAR_CONTADOR_COL_UNO++;

if (VAR_CONTADOR_COL_UNO==3){

JOptionPane.showMessageDialog(null,"GANADOR UNO:

"+VAR_CONTADOR_FILAS_UNO);

VAR_RECORRE_FILA=VAR_MATRIZ_TABLERO.length;

VAR_RECORRE_COL=VAR_MATRIZ_TABLERO.length;

VAR_FINALIZAR = true;

}

}

if (VAR_MATRIZ_TABLERO[VAR_RECORRE_COL][VAR_RECORRE_FILA]==2)

{

VAR_CONTADOR_COL_DOS++;

if (VAR_CONTADOR_COL_DOS==3){

JOptionPane.showMessageDialog(null,"COL DOS: "+VAR_CONTADOR_FILAS_DOS);

VAR_RECORRE_FILA=VAR_MATRIZ_TABLERO.length;

VAR_RECORRE_COL=VAR_MATRIZ_TABLERO.length;

VAR_FINALIZAR = true;

}

}

}

Page 24: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

}

if (VAR_JUGADOR==1)

VAR_JUGADOR=2;

else

VAR_JUGADOR=1;

}

}

}

// IMPRIME LOS RESULTADOS DE LA MATRIZ RESULTADO ****************************

public void IMPRIME_ESTADO(int VAR_MATRIZ_AUXILIAR[][], int VAR_JUGADOR_AUXILIAR)

{

System.out.println("Tirada del jugador: "+ VAR_JUGADOR_AUXILIAR +" **************************");

for(int VAR_FILA=0; VAR_FILA<VAR_MATRIZ_AUXILIAR.length;VAR_FILA++)

{

for(int VAR_COL=0; VAR_COL<VAR_MATRIZ_AUXILIAR[VAR_FILA].length;VAR_COL++)

{

System.out.print(" "+VAR_MATRIZ_AUXILIAR[VAR_FILA][VAR_COL]);

}

System.out.println();

}

}

}

//SE CREA LA CLASE PRINCIPAL ************************************************************************************

class TRES_EN_LINEA

Page 25: 52214349 Evidencias Capitulo 8 Deitel 6 Deitel

{

public static void main(String args[])

{

JUEGO_TRES_EN_LINEA VAR_OBJETO_TABLERO = new JUEGO_TRES_EN_LINEA(); // SE CREA EL

OBJETO APARTIR DE LA CLASE BASE

//SE HACE REFERENCIA CON EL OBJETO CREADO A LOS METODOS CREADOS DENTRO DE LA CLASE

BASE

VAR_OBJETO_TABLERO.CAPTURAR_DATOS();

}

}