Diferencia entre revisiones de «Usuario:ManuelRomero/practica 1»
De WikiEducator
Línea 3: | Línea 3: | ||
=Práctica 1: Calculadora usando números Racionales= | =Práctica 1: Calculadora usando números Racionales= | ||
*El enunciado de esta práctica se ha impartido en clase | *El enunciado de esta práctica se ha impartido en clase | ||
− | * | + | *Puede descargarlo aqui [[Archivo:practica_1_Racional.odt]] |
− | *Conviene revisar y comprender la solución | + | *Conviene revisar y comprender la solución: |
− | *Tanto la solución algorítmica | + | ** Tanto la solución algorítmica |
− | ** hay muchas alternativas y seguro que mejores, pero en clase hemos realizado ''ésta'' | + | *** hay muchas alternativas y seguro que mejores, pero en clase hemos realizado ''ésta'' |
− | *A nivel de sintaxis | + | ** A nivel de sintaxis |
− | ** comprender | + | *** comprender las instrucciones y las clases utilizadas |
− | ** comprender el | + | *** comprender el uso de objetos de clases del api |
− | ** Comprender el uso de métodos directamente de clases de java.lang | + | ''p.e'' '''Scanner leer ...''' |
− | System.out.println Integer.pareInt(String) | + | *** Comprender el uso de métodos directamente de clases de java.lang |
− | **Métodos de la clase String | + | ''p.e.'' '''System.out.println Integer.pareInt(String) ''' |
− | indexOf(char) substring(posicionInicial, posicionFinal) | + | *** Métodos de la clase String |
+ | ''p.e.`` '''indexOf(char) substring(posicionInicial, posicionFinal)''' | ||
Conviene revisarlo y plantear cualquier duda | Conviene revisarlo y plantear cualquier duda | ||
− | {{Pregunta| | + | {{Pregunta|#Revisa este código #anótate cualquier duda o anótala en discusion |
− | + | Plantéala el próximo día en clase:)}} | |
+ | ==Propuesta de solucion== | ||
+ | *Realizamos la solución implementando dos clases | ||
+ | *La clase Racional | ||
+ | *La implemntación de un programa principal | ||
+ | ** Hecho en una clase principal | ||
+ | ** Para implementar el método main | ||
+ | ** Recordar todos los métodos y atributos que usa main státicos | ||
+ | |||
==Clase Racional== | ==Clase Racional== | ||
− | + | {{Idea|Revisar constructores sobrecargados}} | |
<source lang=java> | <source lang=java> | ||
public class Racional { | public class Racional { | ||
//Defino atributos | //Defino atributos | ||
− | + | private int num; | |
− | + | private int den; | |
//Definimos los constructor sobrecargados | //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); | ||
+ | } | ||
+ | }//End constructor Racional(Strint) | ||
+ | |||
+ | /** | ||
+ | * A partir de los enteros pasados construyo el racional | ||
+ | * @param num | ||
+ | * @param den | ||
+ | */ | ||
+ | Racional(int num, int den){ | ||
+ | this.num=num; | ||
+ | this.den = den; | ||
+ | }//End Racional | ||
+ | |||
+ | /** | ||
+ | * Me pasan solo el numerador | ||
+ | * el denominador = 1 | ||
+ | * @param num | ||
+ | */ | ||
+ | Racional(int num){ | ||
+ | this.num=num; | ||
+ | this.den = 1; | ||
+ | }//End Racional | ||
+ | |||
+ | /** | ||
+ | * No me pasan nada, construyo 1/1 | ||
+ | */ | ||
+ | Racional(){ | ||
+ | this.num=1; | ||
+ | this.den =1; | ||
+ | }//End Racional() | ||
+ | |||
+ | /** | ||
+ | * simplemento visualizo "num/den" | ||
+ | */ | ||
+ | public void visualizar(){ | ||
+ | System.out.print(this.num+"/"+this.den); | ||
+ | }//End visualizar() | ||
+ | |||
+ | /** | ||
+ | * @return la cadena de caracteres num/den | ||
+ | */ | ||
+ | |||
+ | public String toString() { | ||
+ | return (this.num + "/" + this.den ); | ||
+ | }//End | ||
+ | |||
+ | /** | ||
+ | * | ||
+ | * @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); | |
− | + | */ | |
− | + | }//End sumar | |
− | + | ||
− | + | 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); | ||
+ | */ | ||
+ | }//End restar | ||
+ | |||
+ | 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); | ||
+ | */ | ||
+ | }//End multiplicar | ||
− | + | 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; | ||
+ | } | ||
+ | }//End while (mayor!=menor) | ||
+ | return menor; | ||
+ | }//End mcd() | ||
+ | }//End class Racional() | ||
+ | </source> | ||
− | |||
− | |||
− | =Clase Principal= | + | ==Clase Principal== |
*Revisar el concepto de '''static''' (lo trataremos con más detalle) | *Revisar el concepto de '''static''' (lo trataremos con más detalle) | ||
<source lang=java> | <source lang=java> |
Revisión de 22:01 6 abr 2012
Práctica 1: Calculadora usando números Racionales
- El enunciado de esta práctica se ha impartido en clase
- Puede descargarlo aqui Archivo:Practica 1 Racional.odt
- 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 las instrucciones y las clases utilizadas
- comprender el uso de objetos de clases del api
- Tanto la solución algorítmica
p.e Scanner leer ...
- Comprender el uso de métodos directamente de clases de java.lang
p.e. System.out.println Integer.pareInt(String)
- Métodos de la clase String
p.e.`` indexOf(char) substring(posicionInicial, posicionFinal) Conviene revisarlo y plantear cualquier duda
Propuesta de solucion
- Realizamos la solución implementando dos clases
- La clase Racional
- La implemntación de un programa principal
- Hecho en una clase principal
- Para implementar el método main
- Recordar todos los métodos y atributos que usa main státicos
Clase Racional
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); } }//End constructor Racional(Strint) /** * A partir de los enteros pasados construyo el racional * @param num * @param den */ Racional(int num, int den){ this.num=num; this.den = den; }//End Racional /** * Me pasan solo el numerador * el denominador = 1 * @param num */ Racional(int num){ this.num=num; this.den = 1; }//End Racional /** * No me pasan nada, construyo 1/1 */ Racional(){ this.num=1; this.den =1; }//End Racional() /** * simplemento visualizo "num/den" */ public void visualizar(){ System.out.print(this.num+"/"+this.den); }//End visualizar() /** * @return la cadena de caracteres num/den */ public String toString() { return (this.num + "/" + this.den ); }//End /** * * @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); */ }//End sumar 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); */ }//End restar 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); */ }//End multiplicar 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; } }//End while (mayor!=menor) return menor; }//End mcd() }//End class Racional()
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