Diferencia entre revisiones de «Usuario:ManuelRomero/practica 1»

De WikiEducator
Saltar a: navegación, buscar
(Página creada con '{{:Usuario:ManuelRomero/CursoJavaUml/Practicas/nav}} <br>')
 
Línea 1: Línea 1:
 
{{:Usuario:ManuelRomero/CursoJavaUml/Practicas/nav}}
 
{{:Usuario:ManuelRomero/CursoJavaUml/Practicas/nav}}
<br>
+
<br>
 +
=Práctica 1: Calculadora usando números Racionales=
 +
*El enunciado de esta práctica se ha impartido en clase
 +
*Se facilitan los fuentes comentados
 +
*Conviene revisar y comprender la solución
 +
*Tanto la solución algorítmica ç
 +
** hay muchas alternativas y seguro que mejores, pero en clase hemos realizado ''ésta''
 +
*A nivel de sintaxis
 +
** comprender los comandos y las clases utilizadas
 +
** comprender el usao de objetos de clases del api '''Scanner leer'''
 +
** Comprender el uso de métodos directamente de clases de java.lang
 +
System.out.println Integer.pareInt(String)
 +
**Métodos de la clase String
 +
indexOf(char) substring(posicionInicial, posicionFinal)
 +
Conviene revisarlo y plantear cualquier duda
 +
{{Pregunta|si revisas este código anótate cualquier duda o anótala en discusion
 +
*El próximo día la planteamos :)}}
 +
==Clase Racional==
 +
*Revisar constructores sobrecargados
 +
<source lang=java>
 +
 
 +
public class Racional {
 +
//Defino atributos
 +
private int num;
 +
private int den;
 +
 +
//Definimos los constructor sobrecargados
 +
 +
/**
 +
* A partir de la cadena "a/b" construyo el racional
 +
* num=a
 +
* den=b
 +
* @param numero es una cadena de caracteres de la forma a/b
 +
*/
 +
Racional (String numero){
 +
int pos;
 +
pos = numero.indexOf('/');
 +
if (pos==-1){
 +
System.out.println("Error "+numero+"No es racional. " +"\n Crearemos el racional 1/1");
 +
this.num=1;
 +
this.den=1;
 +
}
 +
else{
 +
String n;
 +
n=numero.substring(0,pos);
 +
this.num=Integer.parseInt(n);
 +
n=numero.substring(pos+1);
 +
this.den=Integer.parseInt(n);
 +
}
 +
}
 +
 
 +
/**
 +
* A partir de los enteros pasados construyo el racional
 +
* @param num
 +
* @param den
 +
*/
 +
Racional(int num, int den){
 +
this.num=num;
 +
this.den = den;
 +
}
 +
/**
 +
* Me pasan solo el numerador
 +
* el denominador = 1
 +
* @param num
 +
*/
 +
Racional(int num){
 +
this.num=num;
 +
this.den = 1;
 +
}
 +
/**
 +
* No me pasan nada, construyo 1/1
 +
*/
 +
Racional(){
 +
this.num=1;
 +
this.den =1;
 +
}
 +
/**
 +
* simplemento visualizo "num/den" 
 +
*/
 +
public void visualizar(){
 +
System.out.print(this.num+"/"+this.den);
 +
}
 +
/**
 +
* @return la cadena de caracteres num/den
 +
*/
 +
public String toString() {
 +
return (this.num + "/" + this.den );
 +
}
 +
/**
 +
*
 +
* @return el float de num/den
 +
*/
 +
public float diValor(){
 +
return ((float)this.num/(float)this.den);
 +
}
 +
 +
/**
 +
* suma al racional actual el racional que le paso por parámetro
 +
* Retorna el racional suma
 +
* @param r Racianal 2º sumndo
 +
* @return Un racional suma del objeto actual y r
 +
*/
 +
public Racional sumar(Racional r){
 +
    Racional resultado = new Racional();
 +
    resultado.den=this.den*r.den;
 +
    resultado.num=this.num*r.den+this.den*r.num;
 +
    return resultado;
 +
    /*Posible en una sóla instruccion
 +
    * return (this.den*r.den,this.num*r.den+this.den*r.num);
 +
    */
 +
}
 +
public Racional restar(Racional r){
 +
    Racional resultado = new Racional();
 +
    resultado.den=this.den*r.den;
 +
    resultado.num=this.num*r.den-this.den*r.num;
 +
    return resultado;
 +
    /*Posible en una sóla instruccion
 +
    * return (this.den*r.den,this.num*r.den-this.den*r.num);
 +
    */
 +
   
 +
}
 +
public Racional multiplicar(Racional r){
 +
    Racional resultado = new Racional();
 +
    resultado.den=this.den*r.den;
 +
    resultado.num=this.num*r.num;
 +
    return resultado;
 +
    /*Posible en una sóla instruccion
 +
    * return (this.den*r.den,this.num*r.num);
 +
    */
 +
   
 +
}
 +
public Racional dividir(Racional r){
 +
    Racional resultado = new Racional();
 +
    resultado.num=this.num*r.den;
 +
    resultado.den=this.den*r.num;    
 +
    return resultado;
 +
    /*Posible en una sóla instruccion
 +
          return (this.num*r.den,this.den*r.num);
 +
    */
 +
   
 +
}
 +
/**
 +
* Modifica el objeto actual simplificandolo
 +
        * si num y den no son primos entre ellos
 +
*/
 +
public void simplificar(){
 +
int n = mcd();
 +
this.num= this.num/n;
 +
this.den= this.den/n;
 +
 +
}
 +
/**
 +
*
 +
* @return el máximo común divisor de num y den
 +
*/
 +
private int mcd(){
 +
int mayor = this.num;
 +
int menor = this.den;
 +
int resto=1;
 +
if (mayor< menor){
 +
resto = menor;
 +
    menor = mayor;
 +
    mayor = resto;
 +
    }
 +
 +
while (mayor!=menor){
 +
resto= mayor-menor;
 +
if (resto > menor){
 +
  mayor = resto;
 +
}
 +
else{
 +
  mayor=menor;
 +
  menor=resto;
 +
}
 +
}
 +
return menor;
 +
}
 +
 +
 
 +
}
 +
</source>
 +
 
 +
=Clase Principal=
 +
*Revisar el concepto de '''static''' (lo trataremos con más detalle)
 +
<source lang=java>
 +
import java.util.Scanner;
 +
public class Principal {
 +
/**
 +
* @param args
 +
*/
 +
static Scanner leer = new Scanner(System.in);
 +
static Racional r1 =null;
 +
/**
 +
*
 +
* @param operacion Es la operacion que se quiere realizar '''a/b op d/e''' donde
 +
*  '''op''' una de las siguientes operaciones +,-,*,:
 +
* a/b es el primer operando (Racional)
 +
* d/e es el segundo operando (Racional)
 +
* @return un caracter que representa la operación o 0 si no hay ninguna
 +
*/
 +
public static char sacaOperando(String operacion){
 +
int pos;
 +
pos = operacion.indexOf('+');
 +
if (pos != -1)
 +
return '+';
 +
pos = operacion.indexOf('-');
 +
if (pos != -1)
 +
return '-';
 +
pos = operacion.indexOf('*');
 +
if (pos != -1)
 +
return '*';
 +
pos = operacion.indexOf(':');
 +
if (pos != -1)
 +
return ':';
 +
else {
 +
    System.out.println("Operadores permitidos ('+,-,*,:) no presente en "+operacion);
 +
return 0;
 +
}
 +
}
 +
/**
 +
*
 +
* @param operacion Es la operacion que se quiere realizar '''a/b op d/e''' donde
 +
*  '''op''' una de las siguientes operaciones +,-,*,:
 +
* a/b es el primer operando (Racional)
 +
* d/e es el segundo operando (Racional
 +
* @return Un Racional con el resultado de la operacion a/b+c/d p.e
 +
*/
 +
 +
public static Racional opera (String operacion){
 +
char operando = sacaOperando(operacion);
 +
int pos;
 +
String  op;
 +
pos = operacion.indexOf(operando);
 +
op = operacion.substring(0,pos);
 +
Racional op1 = new Racional(op);
 +
op = operacion.substring(pos+1);
 +
Racional op2 = new Racional(op);
 +
switch (operando){
 +
case '+':
 +
return (op1.sumar(op2));
 +
case'-':
 +
return (op1.restar(op2));
 +
case '*':
 +
return (op1.multiplicar(op2));
 +
case ':':
 +
return(op1.dividir(op2));
 +
default:
 +
System.out.println("Operacion no permitida");
 +
return(new Racional());
 +
}
 +
 +
}
 +
 +
 +
/** Visualiza opciones
 +
* valida que la opcion introducida es número
 +
* valida que la opcion introducida está en rango permitido
 +
*retornar  la opción seleccionada (1-6)
 +
*/
 +
public static int menu(){
 +
  int opcion;
 +
  do{
 +
    System.out.println("Menu princial");
 +
System.out.println("1.-Insertar Racional");
 +
System.out.println("2.-Visualizar");
 +
System.out.println("3.-Simplificar");
 +
System.out.println("4.-Visualiza valor");
 +
System.out.println("5.-Calculadora");
 +
System.out.println("6.-Salir");
 +
System.out.println("Elija una opción: ");
 +
while (leer.hasNextInt()==false){
 +
      System.out.println("Solo número por favor");
 +
      leer.nextLine();
 +
}//End do...
 +
opcion=leer.nextInt();
 +
  }while((opcion<1)|| (opcion >6));
 +
      //Para dejar el buffer limpio
 +
      //(después de leer entero se queda en intro)
 +
  leer.nextLine();
 +
  return opcion;
 +
}//End método menú()
 +
 
 +
 
 +
/**
 +
*
 +
* @param opcion es la opión seleccionada 1-6
 +
* En función de la opción seleccionada
 +
* realiza las acciones correspondientes
 +
* Hacer notar que hay acciones que si el racional
 +
* no se ha instanciado, no se pueden realizar (visualizar, simplificar y diValor)
 +
*/
 +
public static void accion (int opcion){
 +
  String num;
 +
  switch (opcion){
 +
case 1:  System.out.println("Inserta el racional a/b");
 +
        num=leer.nextLine();
 +
        r1= new Racional(num);
 +
        break;
 +
case 2:
 +
  if (r1==null)
 +
  System.out.println("Primero inserta");
 +
  else
 +
  System.out.println("Racional = "+r1.toString());
 +
  break;
 +
case 3:
 +
  if (r1==null)
 +
  System.out.println("Primero inserta");
 +
  else{
 +
  System.out.print("Racional = "+r1.toString());
 +
  r1.simplificar();
 +
  System.out.println(" simplificado = "+r1.toString());
 +
  }
 +
  break;
 +
case 4:
 +
  if (r1==null)
 +
  System.out.println("Primero inserta");
 +
  else{
 +
  System.out.println(r1.toString()+"="+r1.diValor());
 +
  }
 +
  break;
 +
case 5:
 +
  String operacion;
 +
  System.out.println("inserta operacion a/b op c/d");
 +
  System.out.println("donde op =(+,-,*,:)");
 +
  operacion = leer.nextLine();
 +
  r1 = opera(operacion);
 +
  System.out.println(operacion+"="+r1.toString());
 +
  break;
 +
case 6:
 +
  System.out.println("Fin de programa");
 +
  break;
 +
}//End del switch
 +
}//End método accion()
 +
 
 +
 
 +
/**
 +
*
 +
* @param args (vacío, necesario por sintaxis
 +
* lee la opción de lo que retorna menu()
 +
* y le dice al método accion() que la realice
 +
* Se itera hasta que la opción sea salir (6)
 +
*/
 +
public static void main(String[] args) {
 +
int opcion;
 +
    do{
 +
  opcion = menu();
 +
  accion(opcion);
 +
}while (opcion!=6);
 +
}//fin de main
 +
 +
 +
}//Fin del programa principal
 +
 +
</source>

Revisión de 20:47 6 abr 2012



Práctica 1: Calculadora usando números Racionales

  • El enunciado de esta práctica se ha impartido en clase
  • Se facilitan los fuentes comentados
  • Conviene revisar y comprender la solución
  • Tanto la solución algorítmica ç
    • hay muchas alternativas y seguro que mejores, pero en clase hemos realizado ésta
  • A nivel de sintaxis
    • comprender los comandos y las clases utilizadas
    • comprender el usao de objetos de clases del api Scanner leer
    • Comprender el uso de métodos directamente de clases de java.lang
System.out.println Integer.pareInt(String) 
    • Métodos de la clase String
indexOf(char) substring(posicionInicial, posicionFinal)

Conviene revisarlo y plantear cualquier duda



Icon qmark.gif

Pregunta

si revisas este código anótate cualquier duda o anótala en discusion
  • El próximo día la planteamos :)


Clase Racional

  • Revisar constructores sobrecargados
public class Racional {
//Defino atributos
	private int num;
	private int den;
 
//Definimos los constructor sobrecargados
 
	/**
	 * A partir de la cadena "a/b" construyo el racional
	 * num=a
	 * den=b
	 * @param numero es una cadena de caracteres de la forma a/b
	 */
	Racional (String numero){
		int pos;
		pos = numero.indexOf('/');
		if (pos==-1){
			System.out.println("Error "+numero+"No es racional. " +"\n Crearemos el racional 1/1");
			this.num=1;
			this.den=1;
		}
		else{
			String n;
			n=numero.substring(0,pos);
			this.num=Integer.parseInt(n);
			n=numero.substring(pos+1);
			this.den=Integer.parseInt(n);
		}
	}
 
	/**
	 * A partir de los enteros pasados construyo el racional
	 * @param num
	 * @param den
	 */
	Racional(int num, int den){
		this.num=num;
		this.den = den;
	}
	/**
	 * Me pasan solo el numerador
	 * el denominador = 1
	 * @param num
	 */
	Racional(int num){
		this.num=num;
		this.den = 1;
	}
	/**
	 * No me pasan nada, construyo 1/1
	 */
	Racional(){
		this.num=1;
		this.den =1;
	}
	/**
	 * simplemento visualizo "num/den"  
	 */
	public void visualizar(){
		System.out.print(this.num+"/"+this.den);
	}
	/**
	 * @return la cadena de caracteres num/den
	 */
	public String toString() {
		return (this.num + "/" + this.den );
	}
	/**
	 * 
	 * @return el float de num/den
	 */
	public float diValor(){
		return ((float)this.num/(float)this.den);
	}
 
	/**
	 * suma al racional actual el racional que le paso por parámetro
	 * Retorna el racional suma
	 * @param r Racianal 2º sumndo
	 * @return Un racional suma del objeto actual y r
	 */
	public Racional sumar(Racional r){
	    Racional resultado = new Racional();
	    resultado.den=this.den*r.den;
	    resultado.num=this.num*r.den+this.den*r.num;
	    return resultado;
	    /*Posible en una sóla instruccion
	     * return (this.den*r.den,this.num*r.den+this.den*r.num);
	     */
	}
	public Racional restar(Racional r){
	    Racional resultado = new Racional();
	    resultado.den=this.den*r.den;
	    resultado.num=this.num*r.den-this.den*r.num;
	    return resultado;
	    /*Posible en una sóla instruccion
	     * return (this.den*r.den,this.num*r.den-this.den*r.num);
	     */
 
	}
	public Racional multiplicar(Racional r){
	    Racional resultado = new Racional();
	    resultado.den=this.den*r.den;
	    resultado.num=this.num*r.num;
	    return resultado;
	    /*Posible en una sóla instruccion
	     * return (this.den*r.den,this.num*r.num);
	     */
 
	}
	public Racional dividir(Racional r){
	    Racional resultado = new Racional();
	    resultado.num=this.num*r.den;
	    resultado.den=this.den*r.num;	    
	    return resultado;
	    /*Posible en una sóla instruccion
          return (this.num*r.den,this.den*r.num);
	     */
 
	}
	/**
	 * Modifica el objeto actual simplificandolo
         * si num y den no son primos entre ellos
	 */
	public void simplificar(){
		int n = mcd();
		this.num= this.num/n;
		this.den= this.den/n;
 
	}
	/**
	 * 
	 * @return el máximo común divisor de num y den
	 */
	private int mcd(){
		int mayor = this.num;
		int menor = this.den;
		int resto=1;
		if (mayor< menor){
			resto = menor;
		    menor = mayor;
		    mayor = resto;
	    }
 
		while (mayor!=menor){
			resto= mayor-menor;
			if (resto > menor){
			   mayor = resto;
			}
			else{
			  mayor=menor;
			  menor=resto;
			}
		}
		return menor;
	}
 
 
}

Clase Principal

  • Revisar el concepto de static (lo trataremos con más detalle)
import java.util.Scanner;
public class Principal {
	/**
	 * @param args
	 */
	static Scanner leer = new Scanner(System.in);
	static Racional r1 =null;
	/**
	 * 
	 * @param operacion Es la operacion que se quiere realizar '''a/b op d/e''' donde
*  '''op''' una de las siguientes operaciones +,-,*,:
* a/b es el primer operando (Racional)
* d/e es el segundo operando (Racional)
	 * @return un caracter que representa la operación o 0 si no hay ninguna 
	 */
public static char sacaOperando(String operacion){
		int pos;
		pos = operacion.indexOf('+');
		if (pos != -1)
			return '+';
		pos = operacion.indexOf('-');
		if (pos != -1)
			return '-';
		pos = operacion.indexOf('*');
		if (pos != -1)
			return '*';
		pos = operacion.indexOf(':');
		if (pos != -1)
			return ':';
		else {
		    System.out.println("Operadores permitidos ('+,-,*,:) no presente en "+operacion);	 
			return 0;
		}
}	
/**
 * 
 	 * @param operacion Es la operacion que se quiere realizar '''a/b op d/e''' donde
*  '''op''' una de las siguientes operaciones +,-,*,:
* a/b es el primer operando (Racional)
* d/e es el segundo operando (Racional
 * @return Un Racional con el resultado de la operacion a/b+c/d p.e
 */
 
public static Racional opera (String operacion){
	char operando = sacaOperando(operacion);
	int pos;
	String  op;
	pos = operacion.indexOf(operando);
	op = operacion.substring(0,pos);
	Racional op1 = new Racional(op);
	op = operacion.substring(pos+1);
	Racional op2 = new Racional(op);
	switch (operando){
	case '+':
		return (op1.sumar(op2));
	case'-':
		return (op1.restar(op2));
	case '*':
		return (op1.multiplicar(op2));
	case ':':
		return(op1.dividir(op2));
	default:
		System.out.println("Operacion no permitida");
		return(new Racional());
	}
 
}
 
 
	/** Visualiza opciones
	* valida que la opcion introducida es número
	* valida que la opcion introducida está en rango permitido
	*retornar  la opción seleccionada (1-6)
	*/
public static int menu(){
  int opcion;
  do{
    System.out.println("Menu princial");
	System.out.println("1.-Insertar Racional");
	System.out.println("2.-Visualizar");
	System.out.println("3.-Simplificar");
	System.out.println("4.-Visualiza valor");
	System.out.println("5.-Calculadora");
	System.out.println("6.-Salir");
	System.out.println("Elija una opción: ");
	while (leer.hasNextInt()==false){
	      System.out.println("Solo número por favor");
    	  leer.nextLine();
	}//End do...
	opcion=leer.nextInt();
  }while((opcion<1)|| (opcion >6));
      //Para dejar el buffer limpio 
      //(después de leer entero se queda en intro)
  leer.nextLine();
  return opcion;
}//End método menú()
 
 
/**
 * 
 * @param opcion es la opión seleccionada 1-6
 * En función de la opción seleccionada 
 * realiza las acciones correspondientes
 * Hacer notar que hay acciones que si el racional 
 * no se ha instanciado, no se pueden realizar (visualizar, simplificar y diValor)
 */
public static void accion (int opcion){
  String num;
  switch (opcion){
		case 1:  System.out.println("Inserta el racional a/b");
		         num=leer.nextLine();
		         r1= new Racional(num);
		         break;
		case 2:
			   if (r1==null)
	 			   System.out.println("Primero inserta");
			   else
				   System.out.println("Racional = "+r1.toString());
			   break;
		case 3:
			   if (r1==null)
				   System.out.println("Primero inserta");
			   else{
				   System.out.print("Racional = "+r1.toString());
				   r1.simplificar();
				   System.out.println(" simplificado = "+r1.toString());
			   }
			   break;
		case 4:
			   if (r1==null)
				   System.out.println("Primero inserta");
			   else{
				   System.out.println(r1.toString()+"="+r1.diValor());
			   }
			   break;
		case 5:
			   String operacion;
			   System.out.println("inserta operacion a/b op c/d");
 			   System.out.println("donde op =(+,-,*,:)");
			   operacion = leer.nextLine();
			   r1 = opera(operacion);
			   System.out.println(operacion+"="+r1.toString());
			   break;
		case 6:
			   System.out.println("Fin de programa");
			   break;
	}//End del switch
 }//End método accion()
 
 
/**
 * 
 * @param args (vacío, necesario por sintaxis
 * lee la opción de lo que retorna menu()
 * y le dice al método accion() que la realice
 * Se itera hasta que la opción sea salir (6) 
 */
 public static void main(String[] args) {
	int opcion;
    do{
	   opcion = menu();
	   accion(opcion);
	}while (opcion!=6);
 }//fin de main
 
 
}//Fin del programa principal