Practica 1. 
Lenguajes de programacin 3.


Objetivo:
Aplicar los conocimientos de Java basico, definicin de clases y pruebas unitarias.

Instrucciones:
+ La practica se debe resolver por equipos de 2 a 4 personas.
+ Consiste en 5 ejercicios. Para cada ejercicio, el equipo debe escribir a las clases pedidas. 
+ Cada clase debe ubicarse en la carpeta src, bajo el directorio mx/edu/ulsa/cib4122006/practica1
+ Cada clase del ejercicio debe someterse a las pruebas unitarias, proporcionada en el directorio test. El cdigo
fuente de dichas pruebas unitarias estn en el subdirectorio test/mx/edu/ulsa/cib4122006/practica1.
+ La invocacin a todas las pruebas unitarias, se proporciona en la clase TestPractica1.
USAR COMO GUIA A LAS PRUEBAS UNITARIAS, CON ELLAS EL EQUIPO PUEDE DETERMINAR EL NOMBRE DE LOS METODOS, SUS PARAMETROS
Y TIPO DE RETORNO, de las clases a codificar.
+ Para la entrega, se debe proporcionar unicamente el codigo Java contenido en la carpeta src. Entregar en un archivo
ZIP.
+ El profesor evaluara el resultado, compilando y ejecutando a las pruebas unitarias
+ Por cada clase,se debe proporcionar la documentacin JavaDoc correspondiente.
+ La practica se debe subir al sitio de WWW de del equipo.
+ La entrega se hace el dia lunes 27 de febrero, a las 07:00 am.
+ Se debe enviaral correo electronico gusdelact@yahoo.com.mx, como Asunto, Practica 1 Cib 412 2006,
indicando en el cuerpo del correo los nombres de los integrantes del equipo,
clave ulsa y la Liga de la pagina que contiene el codigo Java.
+ Cada ejercicio vale 10 puntos.
	+ Si todo la prctica compila y genera documentacin con JavaDoc, se obtienen 2.5 puntos
	+ Si las pruebas unitarias otorgadas, pasan al 100%, se obtienen 7.5 puntos
+ Practica copiada de otro equipo, implica 0 puntos para AMBOS equipos.


1. Escribir una clase que se denomine Binario.
La clase debe tener dos atributos encapsulados, que deben ser leidos con mtodos get:
	+ decimal, dato tipo long, que representa el numero en su representacin base 10
	+ bits, dato tipo String, representa al numero en binario (solo secuencia de 1 y 0)

+ Codificar al metodo convertir, que se debe calificar  como privado, y debe convertir al numero decimal a un numero 
binario. 
El algoritmo para convertir debe utilizar operadores de bits (de corrimiento).
Para concatenar la cadena debe utilizarse a la clase StringBuffer. 
El resultado debe almacenarse en la propiedad bits.

+ Codificar al  constructor de la clase Binario, que recibe como parmetro a un valor long, que indica al valor
decimal. Aplicar en el propio constructor, al metodo convertir, aplicado sobre la propiedad decimal.

+ Debe ofrecer metodos sumar, restar, multiplicar y dividir; que recibe como parametro a un objeto
de tipo Binario y aplica las correspondientes operaciones sobre la representacin decimal del objeto
binario recibido y de la propiedad decimal del propio objeto. El resultado decimal debe utilizarse
para crear al resultado que es de tipo Binario.
La prueba unitaria es TestBinario.


2. Escribir una clase que se denomina Matriz.
Las siguientes propiedades deben ser encapsuladas y proporcionar metodos de
lectura y escritura (get/set). 
+ La propiedad de tipo int, numRenglones, indica el numero de renglones de la matriz
+ La propiedad de tipo int, numColumnas, indica el numero de columnas de la matriz

La propiedad privada, arreglo, debe ser un arreglo bidimensional, de tamao 
numRenglones X numColumnas. Esta propiedad no debe ser expuesta a los clientes de la clase.

+ Se debe codificar al constructor de la clase, Matriz, que recibe dos parmetros, el
numero de renglones y el numero de columnas, y debern ser asignados a las propiedades
numRenglones y numColumnas; y debe crear al arreglo bidimensional,de numRenglones X numColumnas.
+ El metodos setRenglon debe recibir dos parametros, el numero de renglon y un arreglo
de una dimensin, con los valores del renglon.
+ El metodo setCelda se deben usar para llenar a la matriz en un renglon y columna especificado.
Recibe tres parmetros, renglon, columna (ambos tipo int) y valor (tipo double)
+ El metodo sumar y restar debe validar que se sumen dos objetos Matriz de las mismas 
dimensiones. De lo contrario debe retornar una referencia null
+ El metodo multiplicar, que realiza el producto cruz de dos matrices, debe validar que se 
multipliquen dos objetos tipo Matriz de dimensiones n X m y mi X p, y retorna a un objeto de 
tipo Matriz de dimensiones n X p.  De lo contrario debe retornar una referencia null.
+ El metodo transpuesta, hace la operacion de transposicion de un objeto de tipo
Matriz de dimensiones n X m, y retorna a un objeto de m X n
La prueba unitaria es TestMatriz. 

3. El Triangulo de Pascal permite calcular los coeficientes de un polinomio
de la forma (x+y)^n, donde n es un numero entero no negativo.
Se debe consturir una clase TrianguloPascal que construya dicho triangulo.
Usar como estructura de datos la propieda arregloTriangular, de dimension 2, 
la cual debe ser un arreglo triangular. 
Esto implica que:
  +) En la celda arregloTriangular[0], se almacena una referencia a un 
arreglo de dimension 1 de longitud 1
  +) En la celda arregloTriangular[1], se almacena una referencia a un 
arreglo de dimension 1 de longitud 2
  +) En la celda arregloTriangular[i], se almacena una referencia a un 
arreglo de dimension 1 de longitud i+1

Se debe calcular con el siguiente algoritmo
a) Si n=0, tiene un solo coeficiente e igual a 1
b) Si n=1, tiene dos coeficiente, ambos igual a 1
c) Si n>1, el numero de coficientes es n+1
    + coeficiente[0] y coeficiente[n] son igual a 1
    + Para el coeficiente i, entre 1 y n-1 
       coeficiente[i] = arregloTriangular[n-1][i-1] + arregloTriangular[n-1][i]
    implicando que el triangulo se calculo previamente para la potencia n-1

El algoritmo codificarlo en un metodo que se llame potenciar, que recibe como parmetro
a un nmero entero, que representa a la potencia del polinomio, y debe regresar un 
arreglo unidimensional, con los coeficientes del polinomio (x+y)^n.
La prueba unitaria es TestTrianguloPascal. 
	
4. La clase Inversion, permite calcular el valor de una inversion a n periodos
(donde periodos puede ser mes, trimestre, semestre, anual)
Todas las propiedades deben ser encapsuladas y proporcionar metodos de
lectura y escritura (get/set).
Las propiedades son:
+ dinero, es una propiedad de tipo double, y representa el monto invertido
+ tasaInteres, es una propiedad de tipo double, y representa la tasa de inters (53% se
representa como 0.53)
+ Deben  exisir dos constructores. El constructor por omision, debe iniciar a 0 las 
propiedades de la clase. El segundo constructor debe recibir dos parmetros, el primer parmetro
indica el monto a invertir, y el segundo parmetro indica la tase de inters; asignar dichos
parmetros a las propiedades de la clase
+ El mtodo calcular, debe aplicar la siguiente formula
dinero*((1+tasaInteres)^periodo)
El metodo debe recibir al parametro periodo, que es de tipo int.
La prueba unitaria es TestInversion.

5. La clase Palindromo, evalua si una cadena de caracteres es igual a si misma, pero en orden inverso.

Escribir un metodo verficar , que debe ser declarado como estatico, y que recibe como parmetro una cadena de
caracteres, y valida que dicha cadena de caracteres es un palindromo. Si es as, regresar un valor true. 
En caso contrario, un valor false
La prueba unitaria es TestPalindromo
