SlideShare una empresa de Scribd logo
1 de 23
LOGICA DE NEGOCIOS<br />Este paquete se encargará exclusivamente de las restricciones y validaciones requeridas por el software,  estas restricciones deben ser tratadas de manera cautelosa  ya que si no las tomamos en cuentas pueden causar daños en el software,  haciendo que el software no pueda ejecutarse.<br />En este paquete hemos considerado necesario la creación de nueve clases, estas clases funcionaran de una manera que el usuario al momento de cometer un error  el software se encargará de tratarlo,  aquí se manejaran las excepciones que serán resueltas en un nivel superior, en la respectivas clases de las que son invocadas. Las excepciones serán manejadas en este software mediante las instrucciones Try y Catch.<br />Las clases a utilizar en este paquete son: GESTION NOTAS, CALCULADORA, APOSTFIJA, NOTAS, OPERACIONES, PILAS, PILARESULTADO, REEMPLAZO Y  VALIDAR. A continuación  haremos una descripción de las clases antes mencionadas <br />Clase Gestion Notas<br />Comenzaremos con la clase GESTION NOTAS, esta clase ha sido creada  para manejar las excepciones antes mencionadas, aquí crearemos ocho métodos los cuales son: Consultar Alumnos, Consultar Cursos, Registrar Alumno, RegistrarCurso, ModificarAlumno, ModificarCurso, EliminarAlumno y EliminarCurso. Para la creación de estos métodos, ha sido necesario importar los paquetes: Entidades (Alumno y Curso) y  Acceso a Datos (TablaAlumno y TablaCurso) además la librería de java,  ya que también utilizaremos listas. Todos estos métodos mencionados anteriormente utilizaran las excepciones try y catch, cada  uno de estos métodos se encargara de retornar los métodos  creados  por el paquete acceso a datos, tanto para alumnos y cursos  los cuales son:  Seleccionar, Insertar, Actualizar y eliminar.   <br />Ahora explicaremos  la clase Notas. En esta clase se ha debido importar los paquetes java.util.ArrayList, java.util.List. Además hemos declarado una variable tipo String llamada “frase”, y luego el respectivo constructor de la clase, esta variable(frase) será utilizada por los métodos de  esta clase, los cuales son: almacen, cadanota, esnumero, posiciónoperador, igualnota, búsqueda y listaauxiliar. <br />Empezaremos explicando el método almacén, en el cual se ha utilizado la variable “frase”, la misma que será  instanciada con la formula, luego hemos creado dos variables, una tipo String llamada “exa” (inicializada como vacía) y otra variable “examen” que será un vector tipo String (el cual será del tamaño de la frase ingresada), además de un contador “k” (inicializado en cero). En el respectivo código estamos inicializando un bucle con la instrucción “for” para recorrer la frase, luego con la instrucción condicional “if” se compara los caracteres de la frase recorrida para verificar si estos son letras entre  A y Z. Si se cumple esta condición entonces se evalúa una nueva, también con “if” para verificar si la posición siguiente en la frase es un número (para esto se implemento el método esnumero), si esto se cumple entonces a la variable “exa”  se le atribuye la subcadena de la frase desde la posición “i” hasta “posicionoperador(i)” (para esto se implemento el método posicionoperador) y luego al vector “examen” en la posición “k” le pasamos el valor de la variable “exa” y a la posición “i” la dejamos en “posicionoperador(i)-1”. De con cumplirse esta ultima condición (si no es número) entonces a la variable “exa” se le atribuye la subcadena de la frase desde la posición “i” hasta “i+1” y luego al vector “examen” en la posición “k” le pasamos el valor de la variable “exa”. De no cumplirse la primera condición (si la frase no contiene caracteres entre A y Z) entonces a la variable “exa”  le asignamos vacio (“”) y a la variable “k” la aumentamos en uno. Finalmente este método nos retornara la variable vector “examen”.<br />El método esnumero es para verificar si el carácter ubicado en una determinada posición es un número. Así este método tipo boolean nos devolverá un valor de verdad. En su código podemos ver que hemos creado la variable tipo carácter “numero”, luego con la instrucción condicional “if” verificamos que la variable “numero” este ente los valores 0 y 9. De tal forma si se cumple esta condición retornara el valor de verdad “true” y de no cumplirse retornara el valor “false”.<br />El método posicionoperador es para verificar la posición de un operador en la frase. Así este método de tipo “int” nos retornara un valor tipo entero (“a”). Hemos creado las variables tipo enteras “posicion” y “a”, de las cuales hemos asignado a la variable “a” el tamaño de la frase. En su código podemos ver que hemos inicializado un bucle con la instrucción “for”, en el cual al contador “i” le hemos asignado la variable entera “posicion”, luego recorremos la frase, y mediante una instrucción condicional “if” verificamos que la subcadena de la frase en la posición (i,i+1) pueda ser igual a “+, -, *, /, (, )” para luego asignarle a la variable “a” la posición “i”, y hacer un quiebre de bucle con la instrucción “break”. Finalmente el método nos retornara la variable “a”. <br />El método cadanota es para verificar los caracteres de la frase que forman una nota. Así este método que es una “lista” nos devolverá la lista (“resultado”). Hemos creado una lista tipo array “resultado” y un vector tipo String “examen”, al cual le hemos asignado el vector del método almacen. En su código podemos ver que hemos inicializado un bucle con la instrucción “for”, para recorrer la frase y mediante una instrucción condicional “if” verificamos que el vector “examen” en la posición “i” sea diferente de nulo(que no se encuentre vació), si se cumple esta condición entonces se agrega “examen” en la posición “i” a la lista tipo array “resultado”. Finalmente retornaremos la lista “resultado”.  <br />El método búsqueda es para realizar una determinada búsqueda de una nota en la lista, este método se esta declarando como booleano, aquí  hemos dado como parámetros una lista tipo String “lista” y una variable String “nota”, además se esta creando una variable tipo boolean “a” (inicializada en false).  En su código podemos ver que hemos inicializado una instrucción “for” para recorrer la lista y mediante una instrucción condicional “if” se esta comparando si una nota ingresada es igual a la que se encuentra en la posición de la lista, si se cumple esta condición a la variable “a” se le asigna el valor de verdad “true”. Finalmente el método nos retornara la variable “a”.<br />El método listaauxiliar, el cual se esta declarando como una lista tipo string, aquí hemos dado como parámetro un entero “posicion”, además se esta declarando una lista tipo String “resultado”, a la cual le asignamos el método cadanota  y también una lista tipo array “aux”. En su código podemos ver que hemos inicializado una instrucción “for” para recorrer la lista “resultado” y mediante una instrucción condicional “if” se esta comparando si el contador “i” es igual al de la variable posicion, de no ser igual entonces agregara a la lista “auxi” la lisa resultado en la posicion “i”. Finalmente este método retornara la lista “aux”. <br />  <br />El método igualnotas es para verificar si existen notas iguales dentro de la lista auxiliar, en este método se hace un llamado a busqueda y listaauxiliar. Aquí se ha creado una lista tipo String “resultado”, a la cual le asignamos el método cadanota y también una lista tipo array “aux”. en el codigo podemos ver  que hemos inicializado una instrucción “for” para recorrer la lista “resultado”, luego hemos asignado a la variable “aux” el método listaauxiliar con el parámetro indicador de posicion “i”, y mediante una instrucción condicional “if” hemos llamado al método busqueda para verificar si el valor de la lista aux para resultado.get(i) es igual a “true”, de cumplirse esta condición el valor de la variable “notasiguales” le asignamos el valor “true” y hacemos un quiebre de ciclo con la instrucción “break”. Finalmente este método nos retornara la variable “notasiguales”.<br />Siguiendo con las clases ahora explicaremos la clase operaciones. . En esta clase no se ha importado ningún paquete. Hemos declarado tres variables tipo double “x, y, respuesta” y una variable tipo String llamada “letras”, además de su respectivo constructor. Hemos considerado la creación de cuatro métodos, los cuales son: suma, resta, producto, division. En todos estos metodos se realiza una operación respectiva(+, -, *, /) y retorna una variable respuesta. Como todos tienen la misma logica vamos a explicar solo uno de ellos.<br />El método suma se encargara de realizar el proceso de suma entre las variables “x” y “y”, para  luego asignarlo a una variable resultado y finalmente retornando esta.<br />Ahora veremos la clase calculadora, en esta clase hemos importado los paquetes Entidades.Nota, java.util.ArrayList;, java.util.List y seran usado según la necesidad de los metodos, los cuales son: EsCorrecto, DeterminarTiposEvaluacion y Calcular. <br />Empezaremos explicando el metodo EsCorrecto, este metodo es de tipo boolean y tiene como parámetro la variable tipo String “Expresion” . Básicamente el metodo consistira en retornarnos que la expresión esta correcta.<br />Seguiremos con el metodo DeterminarTiposEvaluacion, el cual es una lista tipo String con su parámetro “Expresion”. Se ha creado una variable lista tipo String “resultado”, luego se ha creado el objeto “obj” de la clase notas y se le ha dado como parámetro la variable “Expresion”, después a la variable resultado se le ha asignado el objeto “obj” que ha llamado al metodo cadanota, de la clase notas. Finalmente este metodo nos retornara la lista “resultado”.<br />Finalmente veremos el método Calcular, este método es de tipo Double y se le ha asignado los parámetros “Expresion” y “Notas”. Se ha inicializado una variable “resultado” de tipo double con el valor 0,0 para ser reconocida. Luego se ha creado una lista tipo String “notitas” en la cual se almacenaran todas las notas del modelo de la tabla, tambien se han creado una variable tipo double “a” inicializada en 0. En el código podemos observar que hemos inicializado una instrucción “for” para recorrer  la lista Notas, luego con una instrucción condicional “if” verificamos si la nota es menor que cero o mayor que 20, si se cumple esta condición agregamos a la lista “notitas” el valor 0, de no cumplirse entonces agregamos la nota a la lista “notitas”.<br />Teniendo la lista notitas, creamos un objeto “ennumeros” de la clase remplazo con los parámetros “notitas”  y  ”Expresion” , luego le asignamos a una variable String “num” el objeto ennumeros con el metodo mejorado e imprimimos la variable “num”. Siguiendo el codigo se ha creado el objeto “posfija” de la clase aposfija y se le ha asignado a la variable String “pos” este objeto con el metodo resultado para luego imprimir la variable “pos”. Finalmente se ha creado el objeto “res” de la clase pilaresultado con el parámetro “pos” para luego asignar a la variable “resultado” el objeto “res” con el metodo PilaVacia2 convertido a tipo de dato double, para al final retornar esta variable.<br /> <br />CLASE VALIDAR <br />En esta clase  se comprueba la formula  si esta semántica y sintácticamente correcta,  para empezar se ha declarado una variable global “frase” la cual se utilizara para instanciarla por medio del constructor:<br />public validar(String frase) {<br />        this.frase = frase;<br />}<br />Después del constructor se ha creado una clase llamada validación en la cual retornará si la frase esta correctamente escrita o no, en este caso luego se llamara este método para  verificar si la formula esta correctamente escrita:<br />public boolean validacion(){<br />        if(hay()==true){<br />            if(parentesis()==true){  <br />                 pila Obj =new pila(frase);<br />                if(Obj.Pila()==true){<br />                    return conparentesis();<br />                }else{<br />                    return false;<br />                }<br />            }<br />            else{<br />                return sinparentesis();<br />            }<br />        }else{<br />            return false;<br />        }<br />    }<br />En este método  se ha llamado a otras funciones como “hay()”, la cual devuelve si es que la frase tiene operadores y notas, además el método “paréntesis” devuelve si hay una cantidad par de paréntesis, para luego crear un objeto “Obj” de la clase “Pila()” la cual contiene una pila con sus correspondientes métodos que devuelve si la frase esta correctamente escrita con sus paréntesis:<br />public boolean Pila(){<br />        boolean retornar=true;<br />        for (int i = 0; i < frase.length(); i++) {<br />          if(frase.substring(i,i+1).equals(quot;
(quot;
)){<br />              agregar(1);<br />          }<br />          if(frase.substring(i,i+1).equals(quot;
)quot;
)){<br />              if(pop()==true){<br />              }else{<br />                    retornar=false;<br />                    break;<br />              }<br />          }<br />        }<br />        return retornar;<br />    }<br />Luego colocamos una sentencia “if ” que divide cuando hay y no hay paréntesis : “conparentesis()” y “sinparentesis()”:<br />En estos dos métodos se usara el proceso de recursividad por cuestiones didácticas explicare el primer método “sinparéntesis()”, en esta podemos mencionar que hemos considerado un algoritmo recursivo que llama a diversos métodos: <br />private boolean EsLetra(String expresion, int posicion){<br />}=>>>En este método inicializa la recursividad puesto que en la expresión debe o bien comenzar con una letra o bien con un numero no puede comenzar de otra forma, este método llama a los siguientes. Luego aumenta la posición en que se encuentra y llama a los métodos recursivos como son que en el caso de que en la posición siguiente puede haber un operador, un numero, y un terminador el cual le hemos asignado un “;” para poder terminar el bucle, los siguientes métodos muestran lo que le continua por ejemplo:<br />Los siguientes métodos recursivos <br />private boolean EsOperador(String expresion, int posicion){<br />}=>>>Este Método devuelve recursivamente verdad o falsedad si al que le continua son:<br />Una letra o un numero con su respectivo método. <br />private boolean EsNumero(String expresion, int posicion){<br />}          =>>>Este Método devuelve recursivamente verdad o falsedad si al que le continua son:<br />Un numero, un punto, un operador un terminador con su respectivo método. <br />private boolean EsPunto(String expresion,int posicion){<br />}=>>>Este Método devuelve recursivamente verdad o falsedad si al que le continua son:<br />Es un numero con su respectivo método. <br />private boolean EsTerminador(String expresion, int posicion){<br />}=>>>Este Método devuelve recursivamente verdad o falsedad si al que le continua son:<br />En este caso el “;”.<br />En el método de conparentesis() igual se generan los métodos pero teniendo en cuenta por ejemplo que a un paréntesis cerrado no le puede seguir ni una nota ni un numero, y que necesariamente debe ser un operador <br />CLASE NOTA<br />En este clase igual que las demás clases se crea un constructor para después instanciarlo este clase nota esta compuesta por dos métodos principales  el primero almacen() que devuelve todas las notas que se encuentran en la frase en este caso las notas de la formula en un Array y el otro método convierte este array en una lista para su mejor uso.<br />    public String[] almacen(){<br />        frase=frase.toUpperCase();<br />        String exa=quot;
quot;
;<br />        String examen[] = new String[frase.length()];<br />        int k=0;<br />        for (int i = 0; i < frase.length(); i++) {<br />            if( frase.charAt(i) == 'A' || frase.charAt(i) == 'B'||<br />                frase.charAt(i) == 'C' || frase.charAt(i) == 'D'||<br />                frase.charAt(i) == 'E' || frase.charAt(i) == 'F'||<br />                frase.charAt(i) == 'G' || frase.charAt(i) == 'H'||<br />                frase.charAt(i) == 'I' || frase.charAt(i) == 'J'||<br />                frase.charAt(i) == 'K' || frase.charAt(i) == 'L'||<br />                frase.charAt(i) == 'M' || frase.charAt(i) == 'Ñ'||<br />                frase.charAt(i) == 'N' || frase.charAt(i) == 'O'||<br />                frase.charAt(i) == 'P' || frase.charAt(i) == 'Q'||<br />                frase.charAt(i) == 'R' || frase.charAt(i) == 'S'||<br />                frase.charAt(i) == 'T' || frase.charAt(i) == 'U'||<br />                frase.charAt(i) == 'V' || frase.charAt(i) == 'W'||<br />                frase.charAt(i) == 'X' || frase.charAt(i) == 'Y'||<br />                frase.charAt(i) == 'Z'){<br />                if(esnumero(frase.charAt(i+1))){<br />                    exa=exa+frase.substring(i, posicionoperador(i));//;i+2);<br />                    examen[k]=exa;<br />                    //i=i+1;<br />                    i=posicionoperador(i)-1;<br />                }<br />                else{<br />                    exa=exa+frase.substring(i, i+1);<br />                    examen[k]=exa;<br />                }<br />            }<br />            else{<br />                exa=quot;
quot;
;<br />                k=k+1;<br />          }<br />        }<br />        return examen;<br />    }<br />    public List<String> cadanota(){<br />        List<String> resultado = new ArrayList();<br />        String examen[] = almacen();<br />        for (int i = 0; i < frase.length(); i++) {<br />            if(examen[i]!=null){<br />                resultado.add(examen[i]);<br />            }<br />        }<br />        return resultado;<br />    } <br /> La algoritmo utilizado en el primer método es el de crear un array “examen[]” de la longitud de la “frase”,  luego se recorre la frase si encuentra una letra que la almacene en el array desde esta posición hasta la posición del siguiente operador para lo cual hemos utilizado el método posición operador()<br />  public int posicionoperador(int posicion){<br />        int a=frase.length();<br />        for (int i = posicion; i < frase.length(); i++) {<br />           if(frase.substring(i, i+1).equals(quot;
+quot;
)||frase.substring(i, i+1).equals(quot;
-quot;
)||frase.substring(i, i+1).equals(quot;
*quot;
)||<br />              frase.substring(i, i+1).equals(quot;
/quot;
)||frase.substring(i, i+1).equals(quot;
(quot;
)||frase.substring(i, i+1).equals(quot;
)quot;
)){<br />                   a=i;<br />                   break;<br />           }<br />        }<br />        return a;<br />    }<br />Para dar una mejor efectividad al programa he creido realizar tres funciones mas: igualnotas(), busquedad(List<String>lista, String nota),  listaauxiliar(int posicion), maximo():<br />    public boolean igualnotas(){<br />        boolean notasiguales=false;<br />        List<String> resultado =cadanota();<br />        List<String> aux = new ArrayList();<br />        for (int i = 0; i < resultado.size(); i++) {<br />            aux=listaauxiliar(i);<br />            if(busquedad(aux,resultado.get(i))==true){<br />                notasiguales=true;<br />                break;<br />            }<br />        }<br />        return notasiguales;<br />    }<br />En este método creamos una lista del método realizado con anterioridad “cadanota()” luego recorreremos esta lista y por cada nota crearemos una lista auxiliar con el método listaauxiliar() con el fin de con el método busquedad(aux, resultado.get(i)) devuelva si exite una lista igual.<br />Luego finalmente con el método máximo() se ha realizado un testeo con la nota 20 se ha creado una lista y se ha efectuado con la formula:<br />public boolean maximo(){<br />        double veinte;<br />        List<String> resultado =cadanota();<br />          List<String> aux =new ArrayList();<br />         for (int i = 0; i < resultado.size(); i++) {<br />             aux.add(quot;
20quot;
);<br />        }<br />        remplazo ennumeros=new remplazo(aux,frase);<br />        String num=ennumeros.mejorado();<br />        aposfijaa posfija=new aposfijaa();<br />        String pos=posfija.resultado(num);<br />         pilaresultado res=new pilaresultado(pos);<br />        veinte=Double.parseDouble(res.PilaVacia2());<br />        if(veinte==20){<br />            return true;<br />        }<br />        else{<br />          return false;<br />            }<br />        } <br />Como se puede observar se ha creado un objeto con la clase remplazo la cual con la lista de notas de 20 ha sido remplazado en la formula por las notas,<br />Luego se ha instanciado un objeto con la clase aposfijaa y este a su vez en pilaresultado() el cual  efectuara la formula hecha números en posfija y posteriormente su resultado.<br />Si el resultado es 20 significa que la formula esta correctamente escrita de no ser así esta incorrecta.<br />CLASE PILARESULTADO<br />En esta clase se resuelve la formula escrita en posfija para el  resultado final de la operación:<br />  public String PilaVacia(){<br />    String operando1;<br />    String operando2;<br />    String simbolo;<br />    double valor=0;<br />    <br />    String acumulador=quot;
quot;
;<br />    for (int i = 0; i < frase.length(); i++) {<br />       simbolo=frase.substring(i, i+1);<br />if(operando(simbolo)==true){<br />            acumulador=acumulador+simbolo;<br />         <br />        }else{<br />           if(simbolo.equals(quot;
 quot;
)){<br />                if(!acumulador.equals(quot;
quot;
)){<br />                    agregar(acumulador);<br />                    acumulador=quot;
quot;
;<br />                }<br />           }else{<br />               if(!simbolo.equals(quot;
 quot;
)&&vec.length>1){<br />operando1 = pop();<br />operando2 = pop();<br />                  Operaciones op= new <br />operaciones(Double.parseDouble(operando2),Double.parseDouble(operando1));<br />                       <br />      f (simbolo.equals(quot;
+quot;
)) {<br />                    valor=op.suma();<br />                } <br />if (simbolo.equals(quot;
-quot;
)) {<br />                    valor=op.resta();<br />                } <br />if (simbolo.equals(quot;
*quot;
) ){<br />                    valor=op.producto();<br />                } <br />if (simbolo.equals(quot;
/quot;
)) {<br />                    valor=op.division();<br />                }   <br />agregar(Double.toString(valor));<br />                  <br />               }<br />           }<br />}<br />}<br />}<br />En este método recorremos la expresión si encuentra un operando este que lo vaya acumulando.<br />Si no, si encuentra un vacío que extraiga de la pila los operadores y según su operación ejecutar con estos operadores la operación correspondiente.<br />Al Final se retornará el único elemento de la pila que será el resultado de la operación, que vendría hacer el promedio.<br /> <br />CLASE APOSFIJA<br />Esta  clase llamada posfija se encargará de convertir la formula de inflija a postfija, que es mejor trabajarlo así.<br />Empezaremos por crear un dato de tipo string llamado encontradas que será una variable de tipo global y nos devolverá el resultado evaluado o convertido.<br />Luego creamos el método resultado que se encargará de devolvernos el resultado de tipo string y  este método recibe de parámetro expresion. Hemos importado la pila de la librería java  para facilitarnos su uso, ya que habrá dos pilas una donde guardara los números y la otra los operadores, entonces creamos un objeto llamado PilaNumeros y PilaOperadores respectivamente de la clase Stack() . La expresion la pasamos a mayúsculas y la guardamos en “exp”, declaramos un dato de tipo string llamado fragmento se encargará de guardar el fragmento de texto que se esté utilizando en el momento (ya sea un número, un operador, etc.), un dato de tipo int llamad “posicion” y “tamaño”, se encargaran de la posicion del carácter que se esta procesando actualmente y  del tamaño del texto que se procesa en este momento respectivamente y un dato de tipo int llamado “cont”  que se encargará de contar, indica el número de caracteres que se sacan del string en un momento indicado, este no puede ser más de cuatro (la función con más caracteres).  <br />public class aposfija  El nombre de nuestra clase<br />private String encontadas;<br />    public String resultado(String expresion){<br />       Stack PilaNumeros=new Stack();<br />        Stack PilaOperadores= new Stack();<br />        String expr=expresion.toLowerCase();<br />        String fragmento; <br />        int pos=0, tamaño=0;.<br />        int cont=1;<br />        String funciones []={quot;
1 2 3 4 5 6 7 8 9 0 ( ) x + - * /quot;
}<br />        String parentesis=quot;
(quot;
;<br />        int anterior=0;<br />Comenzamos a recorrer la expresion, luego validamos si la suma de pos mas cont sea menor o igual al tamaño de la expresion y utilizamos el indexOf, hace que a cada elemento del array llamado funciones si hay el número de ocurrencias es por que será diferente de “-1”,  si no, quiere decir que no hay ocurrencias; si esto es correcto entonces tamaño es igual a cont y este se irá incrementando.<br />        for (int i = 0; i < expr.length(); i++) {<br />                    tamano=0;<br />                        cont=1;<br />                        if (tamano==0 && cont<=1){ //Este while revisa si el pedazo del texto sacado concuerda con algo conocido<br />                                if(pos+cont<=expr.length() && funciones[cont-1].indexOf(expr.substring(pos,pos+cont))!=-1){<br />                                        tamano=cont;<br />                                }<br />                                cont++;<br />                        }<br />Si encontró algo, de tamaño uno, y otra condición donde llama al método EsNumero, que le pasas como parámetro el recorrido de la expresion desde pos hasta po+tamaño, si lo es, se encargara de sacarlo por completo. Dentro de la condición inicializamos el fragmento como vacío que es el acumulador, ya que será ahí donde se guardará el número sacado anteriormente con la instrucción do while, que haga mientras siga siendo número o punto que vaya concatenando y siga aumentando el pos, mientras pos sea menor que el tamaño de la expresión o sea igual a un punto o una coma. Luego hace el fragmento lo agrega a la pila de números, anterior se le asigna uno y el contador disminuye en uno.<br />Pero si no es número  quiere decir que un operador, la cual puede ser una suma, resta, multiplicación o división; llama al método extraeOperadores que se encargará de que si el operador tiene menor prioridad del operador que se encuentra en la pila entonces  va ir sacando los operadores de mayor prioridad hasta  entrarlo en la pila, hay que tener en cuenta que va tener que llamar al método prioridad para que realice el cambio sucesivo hasta cuando encuentre uno que sea menor o igual. <br />Luego este método llamara al método extraerOperador se encargara de se sacar el operador que se va evaluar, si encuentra un operador saca dos elementos de la pila numeros y los guarda con el operador que fue evaluado a la PilaNumeros, pero hemos tenido que crear un objeto de la clase string debido a que vamos a concatenar los operadores con los espacios en blanco (Numeros.push(new String(a+quot;
 quot;
+b+quot;
 quot;
+operador)); ) y sino saca un elemento y lo concatena con el operador (Numeros.push(new String(a+quot;
 quot;
+operador)).<br /> <br />if(tamaño==1){ //Si encontró algo de tamaño uno<br />                                if(EsNumero(expr.substring(pos, pos+tamaño))){ //Si es un número se encarga de sacarlo completo<br />                                        fragmento=quot;
quot;
; <br />                                        do{ <br />                                                fragmento=fragmento+expr.charAt(pos);<br />                                                pos++;<br />                                        }while(pos<expr.length() && Numero(expr.substring(pos,pos+tamano)) || expr.charAt(pos) == '.' || expr.charAt(pos) == ','  ));<br />                                        PilaNumeros.push(new String(fragmento));<br />                                        anterior=1;<br />                                       pos--;<br />                                }else if (expr.charAt(pos)=='+' || expr.charAt(pos)=='*' || expr.charAt(pos)=='/' ){<br />ExtraeOperadores(PilaNumeros, PilaOperadores, expr.substring(pos, pos+tamano));<br />                                        anterior=2;<br />                                 }else if (expr.charAt(pos)=='-'){ //Si es una resta<br />                                        if(anterior==0 || anterior==2 || anterior==3){<br />                                                PilaNumeros.push(new String(quot;
-1quot;
));<br />                                             ExtraeOperadores(PilaNumeros, PilaOperadores, quot;
*quot;
);<br />                                        }else{//<br />                                            ExtraeOperadores(PilaNumeros, PilaOperadores, quot;
 -quot;
);<br />                                        }<br />                                        anterior=2;<br />                                }else if (expr.charAt(pos)=='('){<br />                                        if (anterior==1 || anterior == 4){<br />                                              ExtraeOperadores(PilaNumeros, PilaOperadores, quot;
*quot;
);<br />                                        }<br />                                        PilaOperadores.push(new String(quot;
(quot;
));<br />                                        anterior=3;<br />                                }else if (expr.charAt(pos)==')'){<br />                                        while(!PilaOperadores.empty() && parentesis.indexOf(((String)PilaOperadores.peek()))==-1){<br />                                                ExtraeOperador(PilaNumeros, PilaOperadores);<br />                                        }<br />                                        if(!((String)PilaOperadores.peek()).equals(quot;
(quot;
)){<br />                                             PilaNumeros.push(new String(((String)PilaNumeros.pop()) + quot;
 quot;
 + ((String)PilaOperadores.pop())));<br />                                        }else{<br />                                                PilaOperadores.pop();<br />                                        }<br />                                        anterior=4;<br />                                }<br />                        }<br />                        pos+=tamano;<br />                }<br />                //Procesa al final<br />                while(!PilaOperadores.empty()){ //Saca todos los operadores mientras la pila no esté vacía<br />                        ExtraeOperador(PilaNumeros, PilaOperadores);<br />                }<br />        encontadas = ((String)PilaNumeros.pop()); //Se obtiene el resultado final<br />        return encontadas; //Se devuelve el resultado evaluado<br />    }<br />En este método se crea una tercera pila con el fin evaluar la expresion y dividirla por morfemas luego que la divide recorre los tokens, cada token representa un numero o un operador, en caso de ser un operador va a ejecutar la operación en caso q no llena la pila en la pila en la operación realizada y si no la llena en el Token. <br />    public double f(String expresionParseada, double x) {<br />            Stack pilaEvaluar = new Stack();  // Pila de doubles para evaluar<br />            double a, b; //Estos valores son los que se van sacando de la pila de doubles<br />            StringTokenizer tokens=new StringTokenizer(expresionParseada); //La expresión partida en tokens<br />            String tokenActual; //El token que se procesa actualmente<br />                    while(tokens.hasMoreTokens()){ //Haga mientras hayan más tokens<br />                            tokenActual=tokens.nextToken();<br />                            if(tokenActual.equals(quot;
+quot;
)){//Si es una suma se sacan dos números y se suman<br />                                    b=((Double)pilaEvaluar.pop()).doubleValue();<br />                                    a=((Double)pilaEvaluar.pop()).doubleValue();<br />                                    pilaEvaluar.push(new Double(a+b));<br />                            }else if(tokenActual.equals(quot;
-quot;
)){//Si es resta se sacan dos valores y se restan (así con todos los operadores)<br />                                    b=((Double)pilaEvaluar.pop()).doubleValue();<br />                                    a=((Double)pilaEvaluar.pop()).doubleValue();<br />                                    pilaEvaluar.push(new Double(a-b));<br />                            }else if(tokenActual.equals(quot;
*quot;
)){//Multiplicación<br />                                    b=((Double)pilaEvaluar.pop()).doubleValue();<br />                                    a=((Double)pilaEvaluar.pop()).doubleValue();<br />                                    pilaEvaluar.push(new Double(a*b));<br />                            }else if(tokenActual.equals(quot;
/quot;
)){//División<br />                                    b=((Double)pilaEvaluar.pop()).doubleValue();<br />                                    a=((Double)pilaEvaluar.pop()).doubleValue();<br />                                    pilaEvaluar.push(new Double(a/b));<br />                            }else{//si es otra cosa tiene que ser un número, simplemente se mete en la pila<br />                                    pilaEvaluar.push(Double.valueOf(tokenActual));<br />                            }<br />                    }<br />            a=((Double)pilaEvaluar.pop()).doubleValue(); //El valor a devolver<br />            return a;<br />    }<br />Este método se va encargar de devolver la prioridad que será de tipo entero ya sea “0”, “1” ó  “-1”ya que la multiplicación y división tienen prioridad sobre el “+” mas y gggg “-“.<br />private int prioridad(char s) {<br />if (s=='+' || s=='-') //Si es una suma o una resta devuelve cero<br />return 0;<br />else if (s=='*' || s=='/') //Si es multiplicación, división o resto de división devuelve uno<br />return 1;<br />return -1; //Si no fue nada de lo anterior devuelve -1<br />} <br />Este método se va encargar de devolver si es número o no, si lo es retornará true, sino false y recibirá como parámetro un s de tipo String. <br />private boolean EsNumero(String s) {<br />            boolean como = true;<br />if (s.equals(quot;
0quot;
) || s.equals(quot;
1quot;
) || s.equals(quot;
2quot;
) || s.equals(quot;
3quot;
) || s.equals(quot;
4quot;
)                       || s.equals(quot;
5quot;
) || s.equals(quot;
6quot;
) || s.equals(quot;
7quot;
) || s.equals(quot;
8quot;
) || s.equals(quot;
9quot;
)) //Si el caracter está entre 0 y 9 (si es un número) {<br />return como;<br />}else<br />                       como=false;<br />}<br />return como;<br />}<br />private void ExtraeOperadores(Stack PilaNumeros, Stack PilaOperadores, String operador){<br />//Todas las funciones que se manejan como paréntesis de apertura<br />final String parentesis=quot;
(quot;
;<br />//mientras (While) la pila no esté vacía, el operador que sigue no sea un paréntesis de apertura, la longitud del operador sea uno (para que sea un operador), y la prioridad indique que tiene que seguir sacando elementos<br />while(!PilaOperadores.empty() && parentesis.indexOf((String) PilaOperadores.peek()) ==-1 && ((String)PilaOperadores.peek()).length()==1 && prioridad(((String)PilaOperadores.peek()).charAt(0))>=prioridad(operador.charAt(0))){<br />ExtraeOperador(PilaNumeros, PilaOperadores); //Saca el siguiente operador<br />}<br />PilaOperadores.push(operador);//Al final mete el nuevo operador luego de sacar todo lo que tenía que sacar.<br />}<br /> private void ExtraeOperador(Stack Numeros, Stack operadores) {<br />String operador,<br />String a; <br />String b;<br />String operadores=quot;
+ - * / quot;
; //Lista de los operadores <br />                operador= (String) operadores.pop(); //Saca el operador que se debe evaluar<br />if(operadores.indexOf(operador)!=-1){ //Si es un operador saca dos elementos de la pila y guarda la operación<br />b=(String)Numeros.pop();<br />a=(String)Numeros.pop();<br />Numeros.push(new String (a+quot;
 quot;
+b+quot;
 quot;
+ operador));<br />}else{     //==>Sino sólo saca un elemento<br />a=(String)Numeros.pop();<br />Numeros.push(new String(a+quot;
 quot;
+operador));<br />}<br />}//sacaOperador<br />
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES
LOGICA NEGOCIOS VALIDACIONES

Más contenido relacionado

La actualidad más candente

2 desarrollo interfaz_grafico-capitulo1-02otroseventos
2 desarrollo interfaz_grafico-capitulo1-02otroseventos2 desarrollo interfaz_grafico-capitulo1-02otroseventos
2 desarrollo interfaz_grafico-capitulo1-02otroseventosCamilo Herreño
 
Capitulo III de calculo diferencial de Granville
Capitulo III de calculo diferencial de GranvilleCapitulo III de calculo diferencial de Granville
Capitulo III de calculo diferencial de GranvilleRogger Ariel Franco velasco
 
Calculo capitulo 3
Calculo capitulo 3Calculo capitulo 3
Calculo capitulo 3oto___
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamientomemorales_IUE
 

La actualidad más candente (6)

2 desarrollo interfaz_grafico-capitulo1-02otroseventos
2 desarrollo interfaz_grafico-capitulo1-02otroseventos2 desarrollo interfaz_grafico-capitulo1-02otroseventos
2 desarrollo interfaz_grafico-capitulo1-02otroseventos
 
Capitulo III de calculo diferencial de Granville
Capitulo III de calculo diferencial de GranvilleCapitulo III de calculo diferencial de Granville
Capitulo III de calculo diferencial de Granville
 
Calculo capitulo 3
Calculo capitulo 3Calculo capitulo 3
Calculo capitulo 3
 
Ordenamiento ppt
Ordenamiento pptOrdenamiento ppt
Ordenamiento ppt
 
Informe insercion
Informe insercionInforme insercion
Informe insercion
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamiento
 

Destacado

Referencement SEO
Referencement SEOReferencement SEO
Referencement SEOtyron1
 
Comment devenir producteur d'experiences digitales efficaces ? Workshop The d...
Comment devenir producteur d'experiences digitales efficaces ? Workshop The d...Comment devenir producteur d'experiences digitales efficaces ? Workshop The d...
Comment devenir producteur d'experiences digitales efficaces ? Workshop The d...KANTAR MEDIA Ad Intelligence
 
Rapport d'égrenage camp 2012 2013
Rapport d'égrenage camp 2012 2013Rapport d'égrenage camp 2012 2013
Rapport d'égrenage camp 2012 2013Abdoulaye BERETE
 
Made en enfer: La filière textile et l'éthique 18 mois après le drame du Rana...
Made en enfer: La filière textile et l'éthique 18 mois après le drame du Rana...Made en enfer: La filière textile et l'éthique 18 mois après le drame du Rana...
Made en enfer: La filière textile et l'éthique 18 mois après le drame du Rana...TradeForDevelopment Centre
 
Modelos y maquetas 7°mo a 30 09
Modelos y maquetas 7°mo a 30 09Modelos y maquetas 7°mo a 30 09
Modelos y maquetas 7°mo a 30 09claujof
 
SUE Trent Canada
SUE Trent CanadaSUE Trent Canada
SUE Trent Canadaaudpel
 
EMDay 2015 - La data intelligence au service de la distribution des e-mailings
EMDay 2015 - La data intelligence au service de la distribution des e-mailingsEMDay 2015 - La data intelligence au service de la distribution des e-mailings
EMDay 2015 - La data intelligence au service de la distribution des e-mailingsClic et Site
 
SYNFIE - Newsletter N3 - Juin 2015
SYNFIE - Newsletter N3 - Juin 2015SYNFIE - Newsletter N3 - Juin 2015
SYNFIE - Newsletter N3 - Juin 2015Eric HANSEN
 
Recette Gâteau de Pâques de Anabel
Recette Gâteau de Pâques de AnabelRecette Gâteau de Pâques de Anabel
Recette Gâteau de Pâques de Anabelanabeluxi
 
Mission xxii - Charlevalm Andelle Massili
Mission xxii - Charlevalm Andelle MassiliMission xxii - Charlevalm Andelle Massili
Mission xxii - Charlevalm Andelle MassiliDesmares
 
Applications en bibliothèque
Applications en bibliothèqueApplications en bibliothèque
Applications en bibliothèquearbeloma
 
Apprendre à utiliser Canva avec Egg3
Apprendre à utiliser Canva avec Egg3Apprendre à utiliser Canva avec Egg3
Apprendre à utiliser Canva avec Egg3Tristan Girard
 
EMDay 2015 - Facteurs clés de succès d'une opération emailing de conquête client
EMDay 2015 - Facteurs clés de succès d'une opération emailing de conquête clientEMDay 2015 - Facteurs clés de succès d'une opération emailing de conquête client
EMDay 2015 - Facteurs clés de succès d'une opération emailing de conquête clientClic et Site
 

Destacado (20)

USA IMPORT EXPERT
USA IMPORT EXPERTUSA IMPORT EXPERT
USA IMPORT EXPERT
 
Referencement SEO
Referencement SEOReferencement SEO
Referencement SEO
 
El problema+
El problema+El problema+
El problema+
 
Les Prix d'excellence 2013 de l'ACRDQ
Les Prix d'excellence 2013 de l'ACRDQLes Prix d'excellence 2013 de l'ACRDQ
Les Prix d'excellence 2013 de l'ACRDQ
 
Comment devenir producteur d'experiences digitales efficaces ? Workshop The d...
Comment devenir producteur d'experiences digitales efficaces ? Workshop The d...Comment devenir producteur d'experiences digitales efficaces ? Workshop The d...
Comment devenir producteur d'experiences digitales efficaces ? Workshop The d...
 
Rapport d'égrenage camp 2012 2013
Rapport d'égrenage camp 2012 2013Rapport d'égrenage camp 2012 2013
Rapport d'égrenage camp 2012 2013
 
Made en enfer: La filière textile et l'éthique 18 mois après le drame du Rana...
Made en enfer: La filière textile et l'éthique 18 mois après le drame du Rana...Made en enfer: La filière textile et l'éthique 18 mois après le drame du Rana...
Made en enfer: La filière textile et l'éthique 18 mois après le drame du Rana...
 
Modelos y maquetas 7°mo a 30 09
Modelos y maquetas 7°mo a 30 09Modelos y maquetas 7°mo a 30 09
Modelos y maquetas 7°mo a 30 09
 
SUE Trent Canada
SUE Trent CanadaSUE Trent Canada
SUE Trent Canada
 
EMDay 2015 - La data intelligence au service de la distribution des e-mailings
EMDay 2015 - La data intelligence au service de la distribution des e-mailingsEMDay 2015 - La data intelligence au service de la distribution des e-mailings
EMDay 2015 - La data intelligence au service de la distribution des e-mailings
 
SYNFIE - Newsletter N3 - Juin 2015
SYNFIE - Newsletter N3 - Juin 2015SYNFIE - Newsletter N3 - Juin 2015
SYNFIE - Newsletter N3 - Juin 2015
 
Recette Gâteau de Pâques de Anabel
Recette Gâteau de Pâques de AnabelRecette Gâteau de Pâques de Anabel
Recette Gâteau de Pâques de Anabel
 
V y C
V y CV y C
V y C
 
Présentation1
Présentation1Présentation1
Présentation1
 
Importancia de agua para el cerebro
Importancia de agua para el cerebroImportancia de agua para el cerebro
Importancia de agua para el cerebro
 
Vendre sur les marketplaces en Europe
Vendre sur les marketplaces en EuropeVendre sur les marketplaces en Europe
Vendre sur les marketplaces en Europe
 
Mission xxii - Charlevalm Andelle Massili
Mission xxii - Charlevalm Andelle MassiliMission xxii - Charlevalm Andelle Massili
Mission xxii - Charlevalm Andelle Massili
 
Applications en bibliothèque
Applications en bibliothèqueApplications en bibliothèque
Applications en bibliothèque
 
Apprendre à utiliser Canva avec Egg3
Apprendre à utiliser Canva avec Egg3Apprendre à utiliser Canva avec Egg3
Apprendre à utiliser Canva avec Egg3
 
EMDay 2015 - Facteurs clés de succès d'une opération emailing de conquête client
EMDay 2015 - Facteurs clés de succès d'une opération emailing de conquête clientEMDay 2015 - Facteurs clés de succès d'une opération emailing de conquête client
EMDay 2015 - Facteurs clés de succès d'une opération emailing de conquête client
 

Similar a LOGICA NEGOCIOS VALIDACIONES

Similar a LOGICA NEGOCIOS VALIDACIONES (20)

LOGICANEGOCIO
LOGICANEGOCIOLOGICANEGOCIO
LOGICANEGOCIO
 
Acceso a datos
Acceso a datosAcceso a datos
Acceso a datos
 
PRESENTACION
PRESENTACIONPRESENTACION
PRESENTACION
 
Seminario 5
Seminario 5Seminario 5
Seminario 5
 
Longitud de cadena y funciones en java
Longitud de cadena y funciones en javaLongitud de cadena y funciones en java
Longitud de cadena y funciones en java
 
Seminario V: SPSS
Seminario V: SPSSSeminario V: SPSS
Seminario V: SPSS
 
ACCESODATOS
ACCESODATOSACCESODATOS
ACCESODATOS
 
Funciones
FuncionesFunciones
Funciones
 
Arreglos Expresiones y Control de Flujo
Arreglos Expresiones y Control de FlujoArreglos Expresiones y Control de Flujo
Arreglos Expresiones y Control de Flujo
 
métodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javamétodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control java
 
1.1 palabras reservadas para hacer un pseudocódigo
1.1 palabras reservadas para hacer un pseudocódigo1.1 palabras reservadas para hacer un pseudocódigo
1.1 palabras reservadas para hacer un pseudocódigo
 
Clase6 collections
Clase6 collectionsClase6 collections
Clase6 collections
 
Función buscar v y buscar si
Función buscar v y buscar si Función buscar v y buscar si
Función buscar v y buscar si
 
Ejercicio seminario 5 paloma
Ejercicio seminario 5 palomaEjercicio seminario 5 paloma
Ejercicio seminario 5 paloma
 
Ejercicio seminario 5 paloma
Ejercicio seminario 5 palomaEjercicio seminario 5 paloma
Ejercicio seminario 5 paloma
 
Resulteset
ResultesetResulteset
Resulteset
 
Mat lab05
Mat lab05Mat lab05
Mat lab05
 
Funciones de excel
Funciones de excelFunciones de excel
Funciones de excel
 
Manual de funciones
Manual de funcionesManual de funciones
Manual de funciones
 
Manual de excel
Manual de excelManual de excel
Manual de excel
 

Más de Luiggi Inga Barboza (13)

Propuesta sica
Propuesta sicaPropuesta sica
Propuesta sica
 
Logica de negocios
Logica de negociosLogica de negocios
Logica de negocios
 
Presentacion
PresentacionPresentacion
Presentacion
 
Entidades
EntidadesEntidades
Entidades
 
Entidades
EntidadesEntidades
Entidades
 
Entidades
EntidadesEntidades
Entidades
 
Parte Principal
Parte  Principal Parte  Principal
Parte Principal
 
Datos previos
Datos previosDatos previos
Datos previos
 
Datos Previos
Datos PreviosDatos Previos
Datos Previos
 
Datos Previos
Datos PreviosDatos Previos
Datos Previos
 
Para
ParaPara
Para
 
Para
ParaPara
Para
 
Tutorial 3
Tutorial 3Tutorial 3
Tutorial 3
 

Último

Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Marketing BRANDING
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 

Último (20)

Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 

LOGICA NEGOCIOS VALIDACIONES

  • 1. LOGICA DE NEGOCIOS<br />Este paquete se encargará exclusivamente de las restricciones y validaciones requeridas por el software, estas restricciones deben ser tratadas de manera cautelosa ya que si no las tomamos en cuentas pueden causar daños en el software, haciendo que el software no pueda ejecutarse.<br />En este paquete hemos considerado necesario la creación de nueve clases, estas clases funcionaran de una manera que el usuario al momento de cometer un error el software se encargará de tratarlo, aquí se manejaran las excepciones que serán resueltas en un nivel superior, en la respectivas clases de las que son invocadas. Las excepciones serán manejadas en este software mediante las instrucciones Try y Catch.<br />Las clases a utilizar en este paquete son: GESTION NOTAS, CALCULADORA, APOSTFIJA, NOTAS, OPERACIONES, PILAS, PILARESULTADO, REEMPLAZO Y VALIDAR. A continuación haremos una descripción de las clases antes mencionadas <br />Clase Gestion Notas<br />Comenzaremos con la clase GESTION NOTAS, esta clase ha sido creada para manejar las excepciones antes mencionadas, aquí crearemos ocho métodos los cuales son: Consultar Alumnos, Consultar Cursos, Registrar Alumno, RegistrarCurso, ModificarAlumno, ModificarCurso, EliminarAlumno y EliminarCurso. Para la creación de estos métodos, ha sido necesario importar los paquetes: Entidades (Alumno y Curso) y Acceso a Datos (TablaAlumno y TablaCurso) además la librería de java, ya que también utilizaremos listas. Todos estos métodos mencionados anteriormente utilizaran las excepciones try y catch, cada uno de estos métodos se encargara de retornar los métodos creados por el paquete acceso a datos, tanto para alumnos y cursos los cuales son: Seleccionar, Insertar, Actualizar y eliminar. <br />Ahora explicaremos la clase Notas. En esta clase se ha debido importar los paquetes java.util.ArrayList, java.util.List. Además hemos declarado una variable tipo String llamada “frase”, y luego el respectivo constructor de la clase, esta variable(frase) será utilizada por los métodos de esta clase, los cuales son: almacen, cadanota, esnumero, posiciónoperador, igualnota, búsqueda y listaauxiliar. <br />Empezaremos explicando el método almacén, en el cual se ha utilizado la variable “frase”, la misma que será instanciada con la formula, luego hemos creado dos variables, una tipo String llamada “exa” (inicializada como vacía) y otra variable “examen” que será un vector tipo String (el cual será del tamaño de la frase ingresada), además de un contador “k” (inicializado en cero). En el respectivo código estamos inicializando un bucle con la instrucción “for” para recorrer la frase, luego con la instrucción condicional “if” se compara los caracteres de la frase recorrida para verificar si estos son letras entre A y Z. Si se cumple esta condición entonces se evalúa una nueva, también con “if” para verificar si la posición siguiente en la frase es un número (para esto se implemento el método esnumero), si esto se cumple entonces a la variable “exa” se le atribuye la subcadena de la frase desde la posición “i” hasta “posicionoperador(i)” (para esto se implemento el método posicionoperador) y luego al vector “examen” en la posición “k” le pasamos el valor de la variable “exa” y a la posición “i” la dejamos en “posicionoperador(i)-1”. De con cumplirse esta ultima condición (si no es número) entonces a la variable “exa” se le atribuye la subcadena de la frase desde la posición “i” hasta “i+1” y luego al vector “examen” en la posición “k” le pasamos el valor de la variable “exa”. De no cumplirse la primera condición (si la frase no contiene caracteres entre A y Z) entonces a la variable “exa” le asignamos vacio (“”) y a la variable “k” la aumentamos en uno. Finalmente este método nos retornara la variable vector “examen”.<br />El método esnumero es para verificar si el carácter ubicado en una determinada posición es un número. Así este método tipo boolean nos devolverá un valor de verdad. En su código podemos ver que hemos creado la variable tipo carácter “numero”, luego con la instrucción condicional “if” verificamos que la variable “numero” este ente los valores 0 y 9. De tal forma si se cumple esta condición retornara el valor de verdad “true” y de no cumplirse retornara el valor “false”.<br />El método posicionoperador es para verificar la posición de un operador en la frase. Así este método de tipo “int” nos retornara un valor tipo entero (“a”). Hemos creado las variables tipo enteras “posicion” y “a”, de las cuales hemos asignado a la variable “a” el tamaño de la frase. En su código podemos ver que hemos inicializado un bucle con la instrucción “for”, en el cual al contador “i” le hemos asignado la variable entera “posicion”, luego recorremos la frase, y mediante una instrucción condicional “if” verificamos que la subcadena de la frase en la posición (i,i+1) pueda ser igual a “+, -, *, /, (, )” para luego asignarle a la variable “a” la posición “i”, y hacer un quiebre de bucle con la instrucción “break”. Finalmente el método nos retornara la variable “a”. <br />El método cadanota es para verificar los caracteres de la frase que forman una nota. Así este método que es una “lista” nos devolverá la lista (“resultado”). Hemos creado una lista tipo array “resultado” y un vector tipo String “examen”, al cual le hemos asignado el vector del método almacen. En su código podemos ver que hemos inicializado un bucle con la instrucción “for”, para recorrer la frase y mediante una instrucción condicional “if” verificamos que el vector “examen” en la posición “i” sea diferente de nulo(que no se encuentre vació), si se cumple esta condición entonces se agrega “examen” en la posición “i” a la lista tipo array “resultado”. Finalmente retornaremos la lista “resultado”. <br />El método búsqueda es para realizar una determinada búsqueda de una nota en la lista, este método se esta declarando como booleano, aquí hemos dado como parámetros una lista tipo String “lista” y una variable String “nota”, además se esta creando una variable tipo boolean “a” (inicializada en false). En su código podemos ver que hemos inicializado una instrucción “for” para recorrer la lista y mediante una instrucción condicional “if” se esta comparando si una nota ingresada es igual a la que se encuentra en la posición de la lista, si se cumple esta condición a la variable “a” se le asigna el valor de verdad “true”. Finalmente el método nos retornara la variable “a”.<br />El método listaauxiliar, el cual se esta declarando como una lista tipo string, aquí hemos dado como parámetro un entero “posicion”, además se esta declarando una lista tipo String “resultado”, a la cual le asignamos el método cadanota y también una lista tipo array “aux”. En su código podemos ver que hemos inicializado una instrucción “for” para recorrer la lista “resultado” y mediante una instrucción condicional “if” se esta comparando si el contador “i” es igual al de la variable posicion, de no ser igual entonces agregara a la lista “auxi” la lisa resultado en la posicion “i”. Finalmente este método retornara la lista “aux”. <br /> <br />El método igualnotas es para verificar si existen notas iguales dentro de la lista auxiliar, en este método se hace un llamado a busqueda y listaauxiliar. Aquí se ha creado una lista tipo String “resultado”, a la cual le asignamos el método cadanota y también una lista tipo array “aux”. en el codigo podemos ver que hemos inicializado una instrucción “for” para recorrer la lista “resultado”, luego hemos asignado a la variable “aux” el método listaauxiliar con el parámetro indicador de posicion “i”, y mediante una instrucción condicional “if” hemos llamado al método busqueda para verificar si el valor de la lista aux para resultado.get(i) es igual a “true”, de cumplirse esta condición el valor de la variable “notasiguales” le asignamos el valor “true” y hacemos un quiebre de ciclo con la instrucción “break”. Finalmente este método nos retornara la variable “notasiguales”.<br />Siguiendo con las clases ahora explicaremos la clase operaciones. . En esta clase no se ha importado ningún paquete. Hemos declarado tres variables tipo double “x, y, respuesta” y una variable tipo String llamada “letras”, además de su respectivo constructor. Hemos considerado la creación de cuatro métodos, los cuales son: suma, resta, producto, division. En todos estos metodos se realiza una operación respectiva(+, -, *, /) y retorna una variable respuesta. Como todos tienen la misma logica vamos a explicar solo uno de ellos.<br />El método suma se encargara de realizar el proceso de suma entre las variables “x” y “y”, para luego asignarlo a una variable resultado y finalmente retornando esta.<br />Ahora veremos la clase calculadora, en esta clase hemos importado los paquetes Entidades.Nota, java.util.ArrayList;, java.util.List y seran usado según la necesidad de los metodos, los cuales son: EsCorrecto, DeterminarTiposEvaluacion y Calcular. <br />Empezaremos explicando el metodo EsCorrecto, este metodo es de tipo boolean y tiene como parámetro la variable tipo String “Expresion” . Básicamente el metodo consistira en retornarnos que la expresión esta correcta.<br />Seguiremos con el metodo DeterminarTiposEvaluacion, el cual es una lista tipo String con su parámetro “Expresion”. Se ha creado una variable lista tipo String “resultado”, luego se ha creado el objeto “obj” de la clase notas y se le ha dado como parámetro la variable “Expresion”, después a la variable resultado se le ha asignado el objeto “obj” que ha llamado al metodo cadanota, de la clase notas. Finalmente este metodo nos retornara la lista “resultado”.<br />Finalmente veremos el método Calcular, este método es de tipo Double y se le ha asignado los parámetros “Expresion” y “Notas”. Se ha inicializado una variable “resultado” de tipo double con el valor 0,0 para ser reconocida. Luego se ha creado una lista tipo String “notitas” en la cual se almacenaran todas las notas del modelo de la tabla, tambien se han creado una variable tipo double “a” inicializada en 0. En el código podemos observar que hemos inicializado una instrucción “for” para recorrer la lista Notas, luego con una instrucción condicional “if” verificamos si la nota es menor que cero o mayor que 20, si se cumple esta condición agregamos a la lista “notitas” el valor 0, de no cumplirse entonces agregamos la nota a la lista “notitas”.<br />Teniendo la lista notitas, creamos un objeto “ennumeros” de la clase remplazo con los parámetros “notitas” y ”Expresion” , luego le asignamos a una variable String “num” el objeto ennumeros con el metodo mejorado e imprimimos la variable “num”. Siguiendo el codigo se ha creado el objeto “posfija” de la clase aposfija y se le ha asignado a la variable String “pos” este objeto con el metodo resultado para luego imprimir la variable “pos”. Finalmente se ha creado el objeto “res” de la clase pilaresultado con el parámetro “pos” para luego asignar a la variable “resultado” el objeto “res” con el metodo PilaVacia2 convertido a tipo de dato double, para al final retornar esta variable.<br /> <br />CLASE VALIDAR <br />En esta clase se comprueba la formula si esta semántica y sintácticamente correcta, para empezar se ha declarado una variable global “frase” la cual se utilizara para instanciarla por medio del constructor:<br />public validar(String frase) {<br /> this.frase = frase;<br />}<br />Después del constructor se ha creado una clase llamada validación en la cual retornará si la frase esta correctamente escrita o no, en este caso luego se llamara este método para verificar si la formula esta correctamente escrita:<br />public boolean validacion(){<br /> if(hay()==true){<br /> if(parentesis()==true){ <br /> pila Obj =new pila(frase);<br /> if(Obj.Pila()==true){<br /> return conparentesis();<br /> }else{<br /> return false;<br /> }<br /> }<br /> else{<br /> return sinparentesis();<br /> }<br /> }else{<br /> return false;<br /> }<br /> }<br />En este método se ha llamado a otras funciones como “hay()”, la cual devuelve si es que la frase tiene operadores y notas, además el método “paréntesis” devuelve si hay una cantidad par de paréntesis, para luego crear un objeto “Obj” de la clase “Pila()” la cual contiene una pila con sus correspondientes métodos que devuelve si la frase esta correctamente escrita con sus paréntesis:<br />public boolean Pila(){<br /> boolean retornar=true;<br /> for (int i = 0; i < frase.length(); i++) {<br /> if(frase.substring(i,i+1).equals(quot; (quot; )){<br /> agregar(1);<br /> }<br /> if(frase.substring(i,i+1).equals(quot; )quot; )){<br /> if(pop()==true){<br /> }else{<br /> retornar=false;<br /> break;<br /> }<br /> }<br /> }<br /> return retornar;<br /> }<br />Luego colocamos una sentencia “if ” que divide cuando hay y no hay paréntesis : “conparentesis()” y “sinparentesis()”:<br />En estos dos métodos se usara el proceso de recursividad por cuestiones didácticas explicare el primer método “sinparéntesis()”, en esta podemos mencionar que hemos considerado un algoritmo recursivo que llama a diversos métodos: <br />private boolean EsLetra(String expresion, int posicion){<br />}=>>>En este método inicializa la recursividad puesto que en la expresión debe o bien comenzar con una letra o bien con un numero no puede comenzar de otra forma, este método llama a los siguientes. Luego aumenta la posición en que se encuentra y llama a los métodos recursivos como son que en el caso de que en la posición siguiente puede haber un operador, un numero, y un terminador el cual le hemos asignado un “;” para poder terminar el bucle, los siguientes métodos muestran lo que le continua por ejemplo:<br />Los siguientes métodos recursivos <br />private boolean EsOperador(String expresion, int posicion){<br />}=>>>Este Método devuelve recursivamente verdad o falsedad si al que le continua son:<br />Una letra o un numero con su respectivo método. <br />private boolean EsNumero(String expresion, int posicion){<br />} =>>>Este Método devuelve recursivamente verdad o falsedad si al que le continua son:<br />Un numero, un punto, un operador un terminador con su respectivo método. <br />private boolean EsPunto(String expresion,int posicion){<br />}=>>>Este Método devuelve recursivamente verdad o falsedad si al que le continua son:<br />Es un numero con su respectivo método. <br />private boolean EsTerminador(String expresion, int posicion){<br />}=>>>Este Método devuelve recursivamente verdad o falsedad si al que le continua son:<br />En este caso el “;”.<br />En el método de conparentesis() igual se generan los métodos pero teniendo en cuenta por ejemplo que a un paréntesis cerrado no le puede seguir ni una nota ni un numero, y que necesariamente debe ser un operador <br />CLASE NOTA<br />En este clase igual que las demás clases se crea un constructor para después instanciarlo este clase nota esta compuesta por dos métodos principales el primero almacen() que devuelve todas las notas que se encuentran en la frase en este caso las notas de la formula en un Array y el otro método convierte este array en una lista para su mejor uso.<br /> public String[] almacen(){<br /> frase=frase.toUpperCase();<br /> String exa=quot; quot; ;<br /> String examen[] = new String[frase.length()];<br /> int k=0;<br /> for (int i = 0; i < frase.length(); i++) {<br /> if( frase.charAt(i) == 'A' || frase.charAt(i) == 'B'||<br /> frase.charAt(i) == 'C' || frase.charAt(i) == 'D'||<br /> frase.charAt(i) == 'E' || frase.charAt(i) == 'F'||<br /> frase.charAt(i) == 'G' || frase.charAt(i) == 'H'||<br /> frase.charAt(i) == 'I' || frase.charAt(i) == 'J'||<br /> frase.charAt(i) == 'K' || frase.charAt(i) == 'L'||<br /> frase.charAt(i) == 'M' || frase.charAt(i) == 'Ñ'||<br /> frase.charAt(i) == 'N' || frase.charAt(i) == 'O'||<br /> frase.charAt(i) == 'P' || frase.charAt(i) == 'Q'||<br /> frase.charAt(i) == 'R' || frase.charAt(i) == 'S'||<br /> frase.charAt(i) == 'T' || frase.charAt(i) == 'U'||<br /> frase.charAt(i) == 'V' || frase.charAt(i) == 'W'||<br /> frase.charAt(i) == 'X' || frase.charAt(i) == 'Y'||<br /> frase.charAt(i) == 'Z'){<br /> if(esnumero(frase.charAt(i+1))){<br /> exa=exa+frase.substring(i, posicionoperador(i));//;i+2);<br /> examen[k]=exa;<br /> //i=i+1;<br /> i=posicionoperador(i)-1;<br /> }<br /> else{<br /> exa=exa+frase.substring(i, i+1);<br /> examen[k]=exa;<br /> }<br /> }<br /> else{<br /> exa=quot; quot; ;<br /> k=k+1;<br /> }<br /> }<br /> return examen;<br /> }<br /> public List<String> cadanota(){<br /> List<String> resultado = new ArrayList();<br /> String examen[] = almacen();<br /> for (int i = 0; i < frase.length(); i++) {<br /> if(examen[i]!=null){<br /> resultado.add(examen[i]);<br /> }<br /> }<br /> return resultado;<br /> } <br /> La algoritmo utilizado en el primer método es el de crear un array “examen[]” de la longitud de la “frase”, luego se recorre la frase si encuentra una letra que la almacene en el array desde esta posición hasta la posición del siguiente operador para lo cual hemos utilizado el método posición operador()<br /> public int posicionoperador(int posicion){<br /> int a=frase.length();<br /> for (int i = posicion; i < frase.length(); i++) {<br /> if(frase.substring(i, i+1).equals(quot; +quot; )||frase.substring(i, i+1).equals(quot; -quot; )||frase.substring(i, i+1).equals(quot; *quot; )||<br /> frase.substring(i, i+1).equals(quot; /quot; )||frase.substring(i, i+1).equals(quot; (quot; )||frase.substring(i, i+1).equals(quot; )quot; )){<br /> a=i;<br /> break;<br /> }<br /> }<br /> return a;<br /> }<br />Para dar una mejor efectividad al programa he creido realizar tres funciones mas: igualnotas(), busquedad(List<String>lista, String nota), listaauxiliar(int posicion), maximo():<br /> public boolean igualnotas(){<br /> boolean notasiguales=false;<br /> List<String> resultado =cadanota();<br /> List<String> aux = new ArrayList();<br /> for (int i = 0; i < resultado.size(); i++) {<br /> aux=listaauxiliar(i);<br /> if(busquedad(aux,resultado.get(i))==true){<br /> notasiguales=true;<br /> break;<br /> }<br /> }<br /> return notasiguales;<br /> }<br />En este método creamos una lista del método realizado con anterioridad “cadanota()” luego recorreremos esta lista y por cada nota crearemos una lista auxiliar con el método listaauxiliar() con el fin de con el método busquedad(aux, resultado.get(i)) devuelva si exite una lista igual.<br />Luego finalmente con el método máximo() se ha realizado un testeo con la nota 20 se ha creado una lista y se ha efectuado con la formula:<br />public boolean maximo(){<br /> double veinte;<br /> List<String> resultado =cadanota();<br /> List<String> aux =new ArrayList();<br /> for (int i = 0; i < resultado.size(); i++) {<br /> aux.add(quot; 20quot; );<br /> }<br /> remplazo ennumeros=new remplazo(aux,frase);<br /> String num=ennumeros.mejorado();<br /> aposfijaa posfija=new aposfijaa();<br /> String pos=posfija.resultado(num);<br /> pilaresultado res=new pilaresultado(pos);<br /> veinte=Double.parseDouble(res.PilaVacia2());<br /> if(veinte==20){<br /> return true;<br /> }<br /> else{<br /> return false;<br /> }<br /> } <br />Como se puede observar se ha creado un objeto con la clase remplazo la cual con la lista de notas de 20 ha sido remplazado en la formula por las notas,<br />Luego se ha instanciado un objeto con la clase aposfijaa y este a su vez en pilaresultado() el cual efectuara la formula hecha números en posfija y posteriormente su resultado.<br />Si el resultado es 20 significa que la formula esta correctamente escrita de no ser así esta incorrecta.<br />CLASE PILARESULTADO<br />En esta clase se resuelve la formula escrita en posfija para el resultado final de la operación:<br /> public String PilaVacia(){<br /> String operando1;<br /> String operando2;<br /> String simbolo;<br /> double valor=0;<br /> <br /> String acumulador=quot; quot; ;<br /> for (int i = 0; i < frase.length(); i++) {<br /> simbolo=frase.substring(i, i+1);<br />if(operando(simbolo)==true){<br /> acumulador=acumulador+simbolo;<br /> <br /> }else{<br /> if(simbolo.equals(quot; quot; )){<br /> if(!acumulador.equals(quot; quot; )){<br /> agregar(acumulador);<br /> acumulador=quot; quot; ;<br /> }<br /> }else{<br /> if(!simbolo.equals(quot; quot; )&&vec.length>1){<br />operando1 = pop();<br />operando2 = pop();<br /> Operaciones op= new <br />operaciones(Double.parseDouble(operando2),Double.parseDouble(operando1));<br /> <br /> f (simbolo.equals(quot; +quot; )) {<br /> valor=op.suma();<br /> } <br />if (simbolo.equals(quot; -quot; )) {<br /> valor=op.resta();<br /> } <br />if (simbolo.equals(quot; *quot; ) ){<br /> valor=op.producto();<br /> } <br />if (simbolo.equals(quot; /quot; )) {<br /> valor=op.division();<br /> } <br />agregar(Double.toString(valor));<br /> <br /> }<br /> }<br />}<br />}<br />}<br />En este método recorremos la expresión si encuentra un operando este que lo vaya acumulando.<br />Si no, si encuentra un vacío que extraiga de la pila los operadores y según su operación ejecutar con estos operadores la operación correspondiente.<br />Al Final se retornará el único elemento de la pila que será el resultado de la operación, que vendría hacer el promedio.<br /> <br />CLASE APOSFIJA<br />Esta clase llamada posfija se encargará de convertir la formula de inflija a postfija, que es mejor trabajarlo así.<br />Empezaremos por crear un dato de tipo string llamado encontradas que será una variable de tipo global y nos devolverá el resultado evaluado o convertido.<br />Luego creamos el método resultado que se encargará de devolvernos el resultado de tipo string y este método recibe de parámetro expresion. Hemos importado la pila de la librería java para facilitarnos su uso, ya que habrá dos pilas una donde guardara los números y la otra los operadores, entonces creamos un objeto llamado PilaNumeros y PilaOperadores respectivamente de la clase Stack() . La expresion la pasamos a mayúsculas y la guardamos en “exp”, declaramos un dato de tipo string llamado fragmento se encargará de guardar el fragmento de texto que se esté utilizando en el momento (ya sea un número, un operador, etc.), un dato de tipo int llamad “posicion” y “tamaño”, se encargaran de la posicion del carácter que se esta procesando actualmente y del tamaño del texto que se procesa en este momento respectivamente y un dato de tipo int llamado “cont” que se encargará de contar, indica el número de caracteres que se sacan del string en un momento indicado, este no puede ser más de cuatro (la función con más caracteres). <br />public class aposfija El nombre de nuestra clase<br />private String encontadas;<br /> public String resultado(String expresion){<br /> Stack PilaNumeros=new Stack();<br /> Stack PilaOperadores= new Stack();<br /> String expr=expresion.toLowerCase();<br /> String fragmento; <br /> int pos=0, tamaño=0;.<br /> int cont=1;<br /> String funciones []={quot; 1 2 3 4 5 6 7 8 9 0 ( ) x + - * /quot; }<br /> String parentesis=quot; (quot; ;<br /> int anterior=0;<br />Comenzamos a recorrer la expresion, luego validamos si la suma de pos mas cont sea menor o igual al tamaño de la expresion y utilizamos el indexOf, hace que a cada elemento del array llamado funciones si hay el número de ocurrencias es por que será diferente de “-1”, si no, quiere decir que no hay ocurrencias; si esto es correcto entonces tamaño es igual a cont y este se irá incrementando.<br /> for (int i = 0; i < expr.length(); i++) {<br /> tamano=0;<br /> cont=1;<br /> if (tamano==0 && cont<=1){ //Este while revisa si el pedazo del texto sacado concuerda con algo conocido<br /> if(pos+cont<=expr.length() && funciones[cont-1].indexOf(expr.substring(pos,pos+cont))!=-1){<br /> tamano=cont;<br /> }<br /> cont++;<br /> }<br />Si encontró algo, de tamaño uno, y otra condición donde llama al método EsNumero, que le pasas como parámetro el recorrido de la expresion desde pos hasta po+tamaño, si lo es, se encargara de sacarlo por completo. Dentro de la condición inicializamos el fragmento como vacío que es el acumulador, ya que será ahí donde se guardará el número sacado anteriormente con la instrucción do while, que haga mientras siga siendo número o punto que vaya concatenando y siga aumentando el pos, mientras pos sea menor que el tamaño de la expresión o sea igual a un punto o una coma. Luego hace el fragmento lo agrega a la pila de números, anterior se le asigna uno y el contador disminuye en uno.<br />Pero si no es número quiere decir que un operador, la cual puede ser una suma, resta, multiplicación o división; llama al método extraeOperadores que se encargará de que si el operador tiene menor prioridad del operador que se encuentra en la pila entonces va ir sacando los operadores de mayor prioridad hasta entrarlo en la pila, hay que tener en cuenta que va tener que llamar al método prioridad para que realice el cambio sucesivo hasta cuando encuentre uno que sea menor o igual. <br />Luego este método llamara al método extraerOperador se encargara de se sacar el operador que se va evaluar, si encuentra un operador saca dos elementos de la pila numeros y los guarda con el operador que fue evaluado a la PilaNumeros, pero hemos tenido que crear un objeto de la clase string debido a que vamos a concatenar los operadores con los espacios en blanco (Numeros.push(new String(a+quot; quot; +b+quot; quot; +operador)); ) y sino saca un elemento y lo concatena con el operador (Numeros.push(new String(a+quot; quot; +operador)).<br /> <br />if(tamaño==1){ //Si encontró algo de tamaño uno<br /> if(EsNumero(expr.substring(pos, pos+tamaño))){ //Si es un número se encarga de sacarlo completo<br /> fragmento=quot; quot; ; <br /> do{ <br /> fragmento=fragmento+expr.charAt(pos);<br /> pos++;<br /> }while(pos<expr.length() && Numero(expr.substring(pos,pos+tamano)) || expr.charAt(pos) == '.' || expr.charAt(pos) == ',' ));<br /> PilaNumeros.push(new String(fragmento));<br /> anterior=1;<br /> pos--;<br /> }else if (expr.charAt(pos)=='+' || expr.charAt(pos)=='*' || expr.charAt(pos)=='/' ){<br />ExtraeOperadores(PilaNumeros, PilaOperadores, expr.substring(pos, pos+tamano));<br /> anterior=2;<br /> }else if (expr.charAt(pos)=='-'){ //Si es una resta<br /> if(anterior==0 || anterior==2 || anterior==3){<br /> PilaNumeros.push(new String(quot; -1quot; ));<br /> ExtraeOperadores(PilaNumeros, PilaOperadores, quot; *quot; );<br /> }else{//<br /> ExtraeOperadores(PilaNumeros, PilaOperadores, quot; -quot; );<br /> }<br /> anterior=2;<br /> }else if (expr.charAt(pos)=='('){<br /> if (anterior==1 || anterior == 4){<br /> ExtraeOperadores(PilaNumeros, PilaOperadores, quot; *quot; );<br /> }<br /> PilaOperadores.push(new String(quot; (quot; ));<br /> anterior=3;<br /> }else if (expr.charAt(pos)==')'){<br /> while(!PilaOperadores.empty() && parentesis.indexOf(((String)PilaOperadores.peek()))==-1){<br /> ExtraeOperador(PilaNumeros, PilaOperadores);<br /> }<br /> if(!((String)PilaOperadores.peek()).equals(quot; (quot; )){<br /> PilaNumeros.push(new String(((String)PilaNumeros.pop()) + quot; quot; + ((String)PilaOperadores.pop())));<br /> }else{<br /> PilaOperadores.pop();<br /> }<br /> anterior=4;<br /> }<br /> }<br /> pos+=tamano;<br /> }<br /> //Procesa al final<br /> while(!PilaOperadores.empty()){ //Saca todos los operadores mientras la pila no esté vacía<br /> ExtraeOperador(PilaNumeros, PilaOperadores);<br /> }<br /> encontadas = ((String)PilaNumeros.pop()); //Se obtiene el resultado final<br /> return encontadas; //Se devuelve el resultado evaluado<br /> }<br />En este método se crea una tercera pila con el fin evaluar la expresion y dividirla por morfemas luego que la divide recorre los tokens, cada token representa un numero o un operador, en caso de ser un operador va a ejecutar la operación en caso q no llena la pila en la pila en la operación realizada y si no la llena en el Token. <br /> public double f(String expresionParseada, double x) {<br /> Stack pilaEvaluar = new Stack(); // Pila de doubles para evaluar<br /> double a, b; //Estos valores son los que se van sacando de la pila de doubles<br /> StringTokenizer tokens=new StringTokenizer(expresionParseada); //La expresión partida en tokens<br /> String tokenActual; //El token que se procesa actualmente<br /> while(tokens.hasMoreTokens()){ //Haga mientras hayan más tokens<br /> tokenActual=tokens.nextToken();<br /> if(tokenActual.equals(quot; +quot; )){//Si es una suma se sacan dos números y se suman<br /> b=((Double)pilaEvaluar.pop()).doubleValue();<br /> a=((Double)pilaEvaluar.pop()).doubleValue();<br /> pilaEvaluar.push(new Double(a+b));<br /> }else if(tokenActual.equals(quot; -quot; )){//Si es resta se sacan dos valores y se restan (así con todos los operadores)<br /> b=((Double)pilaEvaluar.pop()).doubleValue();<br /> a=((Double)pilaEvaluar.pop()).doubleValue();<br /> pilaEvaluar.push(new Double(a-b));<br /> }else if(tokenActual.equals(quot; *quot; )){//Multiplicación<br /> b=((Double)pilaEvaluar.pop()).doubleValue();<br /> a=((Double)pilaEvaluar.pop()).doubleValue();<br /> pilaEvaluar.push(new Double(a*b));<br /> }else if(tokenActual.equals(quot; /quot; )){//División<br /> b=((Double)pilaEvaluar.pop()).doubleValue();<br /> a=((Double)pilaEvaluar.pop()).doubleValue();<br /> pilaEvaluar.push(new Double(a/b));<br /> }else{//si es otra cosa tiene que ser un número, simplemente se mete en la pila<br /> pilaEvaluar.push(Double.valueOf(tokenActual));<br /> }<br /> }<br /> a=((Double)pilaEvaluar.pop()).doubleValue(); //El valor a devolver<br /> return a;<br /> }<br />Este método se va encargar de devolver la prioridad que será de tipo entero ya sea “0”, “1” ó “-1”ya que la multiplicación y división tienen prioridad sobre el “+” mas y gggg “-“.<br />private int prioridad(char s) {<br />if (s=='+' || s=='-') //Si es una suma o una resta devuelve cero<br />return 0;<br />else if (s=='*' || s=='/') //Si es multiplicación, división o resto de división devuelve uno<br />return 1;<br />return -1; //Si no fue nada de lo anterior devuelve -1<br />} <br />Este método se va encargar de devolver si es número o no, si lo es retornará true, sino false y recibirá como parámetro un s de tipo String. <br />private boolean EsNumero(String s) {<br /> boolean como = true;<br />if (s.equals(quot; 0quot; ) || s.equals(quot; 1quot; ) || s.equals(quot; 2quot; ) || s.equals(quot; 3quot; ) || s.equals(quot; 4quot; ) || s.equals(quot; 5quot; ) || s.equals(quot; 6quot; ) || s.equals(quot; 7quot; ) || s.equals(quot; 8quot; ) || s.equals(quot; 9quot; )) //Si el caracter está entre 0 y 9 (si es un número) {<br />return como;<br />}else<br /> como=false;<br />}<br />return como;<br />}<br />private void ExtraeOperadores(Stack PilaNumeros, Stack PilaOperadores, String operador){<br />//Todas las funciones que se manejan como paréntesis de apertura<br />final String parentesis=quot; (quot; ;<br />//mientras (While) la pila no esté vacía, el operador que sigue no sea un paréntesis de apertura, la longitud del operador sea uno (para que sea un operador), y la prioridad indique que tiene que seguir sacando elementos<br />while(!PilaOperadores.empty() && parentesis.indexOf((String) PilaOperadores.peek()) ==-1 && ((String)PilaOperadores.peek()).length()==1 && prioridad(((String)PilaOperadores.peek()).charAt(0))>=prioridad(operador.charAt(0))){<br />ExtraeOperador(PilaNumeros, PilaOperadores); //Saca el siguiente operador<br />}<br />PilaOperadores.push(operador);//Al final mete el nuevo operador luego de sacar todo lo que tenía que sacar.<br />}<br /> private void ExtraeOperador(Stack Numeros, Stack operadores) {<br />String operador,<br />String a; <br />String b;<br />String operadores=quot; + - * / quot; ; //Lista de los operadores <br /> operador= (String) operadores.pop(); //Saca el operador que se debe evaluar<br />if(operadores.indexOf(operador)!=-1){ //Si es un operador saca dos elementos de la pila y guarda la operación<br />b=(String)Numeros.pop();<br />a=(String)Numeros.pop();<br />Numeros.push(new String (a+quot; quot; +b+quot; quot; + operador));<br />}else{ //==>Sino sólo saca un elemento<br />a=(String)Numeros.pop();<br />Numeros.push(new String(a+quot; quot; +operador));<br />}<br />}//sacaOperador<br />