Título: Notacion polaca
Publicado por: xAgramonx en 17 Octubre 2010, 03:31 am
hola que tal amigos del foro ps me tope con un gran problema creo que es el tema que mas se me a complicado en programcion java la situacion es esta como se daran cuenta hablaremos de notacion polacaNOTACIONES CON EXPRESIONES. Las pilas son estructuras de datos implementadas para la solución de diversos tipos de problemas. Pero tal vez la aplicación más importante de estas es el tratamiento de expresiones matemáticas. El convertir expresiones en notación infija en su equivalente en notación postfija (o prefija). A continuación es necesario analizar algunos conceptos para introducirnos a este tema. • La expresión A+B se dice que esta en notación infija, y su nombre se debe a que el operador + está entre los operandos A y B. • Dada la expresión AB+ se dice que esta en notación postfija y su nombre se debe a que el operador + esta después de los operandos A y B. • Dada la expresión +AB se dice que esta en notación prefija, y su nombre se debe a que el operador + está antes que los operandos A y B. La ventaja de usar estas expresiones en notación postfija o prefija radica en que no son necesarios los paréntesis para indicar el orden de la operación, ya que este queda establecido por la ubicación de los operadores con respecto a los operandos. Para convertir expresiones a las diferentes notaciones ya descritas, es necesario establecer ciertas condiciones: • Solamente se manejaran los siguientes operadores en orden de prioridad: ^ potencia * / Multiplicación y división + - suma y resta • Los operandos de más alta prioridad se ejecutan primero • Si hubiese una expresión de dos o más operadores de igual prioridad, se ejecutan de izquierda a derecha. • Las subexpresiones parentizadas tendrán más prioridad que cualquierY de una buena explicacion comenzamos no soy muy bueno en esto como dije se me complico el tema espero que para todos que esten como yo ps le sirva de al gun modo tendran alguno ejemplos que publiquen. Elabora un program en java utilizando algoritmos de estructura de datos pilas en memoria dinamica en donde evalue las expreciones utilizando expresion polaca.
- El programa debe pedir la expresion
- Verificar que la exprecion sea correcta si no volver a pedir.
- El programa debera pedir que de seas hacer en este caso serian casos elegir entre infijo y postfijo.
- La expresion resultante acsinarle valores, dar el resultado.
Como veran si estan complejo el programa sigo buscando entre los demas foros pero creo que no tocan ese tema espero que alguin me pueda ayudar y explicar.
Título: Re: Notacion polaca
Publicado por: xAgramonx en 23 Octubre 2010, 07:52 am
Hola que tal que vacio esta este post bueno a mi navegacion de por el internet en contre el programa en java de infijo a postfijo funciona de maravilla ha hora estoy batallando en que puedo cambiar para que lo pueda hacer en prefijo public class Pila{ public Nodo tope; public Pila(){ tope=null; } public boolean vacia (){ return tope == null;//==hace la compararcion de primernodo con null } public void apilar (Object dato ){ Nodo p=new Nodo(dato); p.datos=dato; p.siguiente=tope; tope=p; } //if(vacia()) return ' '; Nodo p=tope; dat=p.datos; tope=tope.siguiente; p=null; return dat; } public void imprimir(){ if (vacia()){ System. out. println("La pila esta vacia..."); } else{ Nodo Actual=tope; do{ System. out. print(Actual. getElemento(). toString()+" "); Actual=Actual.siguiente; }while(Actual != null); System. out. println();//imprime un salto de linea } } }
Bueno este es el codigo de infijo a postfijo ha hora quiero de infijo a prefijo me han dicho varios que modifique la pila por que es la que cambia el lugar pero ps la mera verdad nose que cambira si alguien me podria yudar por favor y que esto se de ejemplo a otros.
Título: Re: Notacion polaca
Publicado por: soser en 25 Octubre 2010, 00:40 am
Bien, tube el mismo problema que tu y la solucion para pasar una notacion infijo a prefijo es que se evalua exactamente igual que el postfijo solo que a la inversa, a lo que me refiero es que si por ejemplo tienes la expresion "a+b" en postfijo evaluas primero la a, depues el signo y al final la b, en el caso del prefijo se empieza a evaluar desde la b hacia la a, y ya terminada la expresion el resultado debe de ser invertido. Otro punto importante es que las prioridades en el prefijo cambian, en postfijo el ")" tiene una prioridad mayor al "(", en el prefijo es lo contrario. Saludos
Título: Re: Notacion polaca
Publicado por: Grave en 2 Noviembre 2010, 20:14 pm
http://es.wikipedia.org/wiki/Algoritmo_shunting_yard
Actualmente estoy haciendo una calculadora aritmetica q aplica ese algoritmo, no publico el codigo porq todavia no me califican y me pueden plagiar XD
Título: Re: Notacion polaca
Publicado por: xAgramonx en 21 Noviembre 2010, 03:17 am
Despues de tanto esfuerzo lo pude hacer me lo calificaron y ps para los que no quieran estar matándose como yo les dejo el código import java.util.Scanner; import javax.swing.JOptionPane; public class AnalizadorIJ{ public static char x[]; public static String invertida,postfija,nueva ; public static char a[]; public static char pila[]; public static int tope,i,cont,j,a1,a2,k,l,n,m; { invertida=""; nueva=""; x=a.toCharArray(); for(int p=x.length-1;p>=0;p--) { invertida =invertida +String. valueOf(x [p ]); } x=invertida.toCharArray(); for (int p=0;p<x.length;p++) { if (x[p]==')') {x[p]='('; nueva =nueva +String. valueOf(x [p ]);} else if(x[p]=='(') {x[p]=')'; nueva =nueva +String. valueOf(x [p ]);} else nueva =nueva +String. valueOf(x [p ]); } return(nueva); } { entrefija="("+entrefija+")"; tope=-1; postfija=""; pila=new char[250]; a=entrefija.toCharArray(); tope=Cabecera.pushPila(pila,tope,'#'); for(i=0;i<a.length;i++) { if(a[i]=='(') { tope=Cabecera.pushPila(pila,tope,a[i]); } else if(a[i]==')') { cont=tope; while(pila[cont]!='(') { postfija =postfija +String. valueOf(pila [cont ]); tope=Cabecera.popPila(pila,tope); cont--; } if (tope!=0) tope=Cabecera.popPila(pila,tope); } else if(Cabecera.evaluar(a[i])==4) { postfija =postfija +String. valueOf(a [i ]); } else { cont=tope; while(pila[cont]!='('&&Cabecera.evaluar(pila[cont])>=Cabecera.evaluar(a[i])) { postfija =postfija +String. valueOf(pila [cont ]); tope=Cabecera.popPila(pila,tope); cont--; } tope=Cabecera.pushPila(pila,tope,a[i]); } } return(postfija); } public static void tercerpa (String cade ) { System. out. println(invierte (pofija (invierte (cade )))); } public static void main (String args []) { AnalizadorIJ uno=new AnalizadorIJ(); Scanner ent =new Scanner (System. in); System. out. println("Inserta la exprecion en infijo: "); System. out. println("En prefijo es: "); uno.tercerpa(pre); } }
import java.util.LinkedList; import java.util.*; public class AnalizadorIP{ private Pila pila; public AnalizadorIP() { Operador ope; ope=new Operador("^",4,5);PROCEDENCIA.add(ope); ope=new Operador("%",3,4);PROCEDENCIA.add(ope); ope=new Operador("*",2,2);PROCEDENCIA.add(ope); ope=new Operador("/",2,2);PROCEDENCIA.add(ope); ope=new Operador("+",1,1);PROCEDENCIA.add(ope); ope=new Operador("-",1,1);PROCEDENCIA.add(ope); ope=new Operador("(",0,5);PROCEDENCIA.add(ope);//inicial y maximo pila=new Pila(); } public boolean valExpre (String expre ){ Pila p=new Pila(); for(int i=0;i<expre.length();i++){ char x=expre.charAt(i); if(x=='(' | x=='[' | x=='{') p.apilar(x); else{ if(x==')' | x==']' | x=='}') { if(p.vacia()==true) return false; char c=p.desApilar().toString().charAt(0); if( (x==')' & c!='(') | (x==']' & c!='[') | (x=='}' & c!='{')) return false; } } } return p.vacia(); } if(valExpre(expre)==false) return null; for(int c=0;c<expre.length();c++){ char x;int hcer=-1; x=expre.charAt(c); if(operador(x)==true) hcer=323;//si es operador direcciona al caso if(x==')' ) hcer=324;//si es de cierre, switch(hcer){ case 323: while(pila.vacia()==false) { if(pdp(pila.tope.datos)>=pfp(x)) expPostfija.add(pila.desApilar()); else break; } pila.apilar(x); break; case 324: while(pila.tope.datos.toString().charAt(0)!='(' ) expPostfija.add(pila.desApilar()); pila.desApilar(); //para q ignore el parentesis ( break; default: expPostfija.add(x); } } while(pila.vacia()==false) expPostfija.add(pila.desApilar()); return cnvCad(expPostfija); } public boolean operador (Object c ) { for(int i=0;i<PROCEDENCIA.size();i++){ Operador op=(Operador)PROCEDENCIA.get(i); if(op.OPE.equals(c.toString())) return true; } return false; } for(int i=0;i<PROCEDENCIA.size();i++){ Operador op=(Operador)PROCEDENCIA.get(i); if(op.OPE.equals(c.toString())) return op.PDP; } return -1; } for(int i=0;i<PROCEDENCIA.size();i++){ Operador op=(Operador)PROCEDENCIA.get(i); if(op.OPE.equals(c.toString())) return op.PFP; } return -1; } for(int i=0;i<ls.size();i++) cad=cad+ls.get(i).toString().charAt(0); return cad; } { for(int i=0;i<ls.size();i++) System. out. print(ls. get(i ). toString(). charAt(0)); } public static void main (String Args []) { Scanner ent =new Scanner (System. in); System. out. println("Inserte la exprecion en infijo: "); AnalizadorIP AS = new AnalizadorIP(); System. out. println("La sentencia es: "+AS. valExpre(expresion )); String expPostfija =AS. aPostfija(expresion ); if(expPostfija==null) System. out. println("Expresion invalida..."); else System. out. println(" En PostFijo es: "+expPostfija ); } }[code=java] import javax.swing.JOptionPane; class Cabecera { public static int eva; public static int pushPila(char pila[],int tope,char dato) { if (tope<pila.length) { tope++; pila[tope]=dato; return (tope); } else JOptionPane. showMessageDialog(null, "pila llena ... OverFlow"); return (tope); } public static int popPila(char pila[],int tope) { if (tope!=-1) { pila[tope]=0; tope--; return (tope); } else JOptionPane. showMessageDialog(null, "Pila vacia ... underflow"); return (tope); } public static int ver(char pila[],int tope) { int i; for(i=tope;i>=0;i--) { s+="posicion "+i+" = "+pila[i]+'\n'; } return tope; } public static int evaluar(char a) { if (a=='+'||a=='-') { eva=1; } else if(a=='/'||a=='*') { eva=2; } else if (a=='^') { eva=3; } else if (a=='('||a==')') eva=5; else { eva=4; } return eva; } }
public class Nodo{ /*****Propiedades**************/ public Nodo siguiente; public Nodo anterior; /*****Constructores************/ datos =valor; siguiente =anterior= null; } /*****Inicio***METODOS*********/ public Object getElemento (){return datos ;} public Nodo getSig(){return siguiente;} public Nodo getAnt(){return anterior; } /*****Fin******METODOS*********/ }
public class Operador { public String OPE ;//operador que se esta representando public int PDP;//prioridad dentro de la pila public int PFP;//prioridad fuera de la pila public Operador (String ope, int pd, int pf ){ OPE=ope; PDP=pd; PFP=pf; } }
public class Pila{ public Nodo tope; public Pila(){ tope=null; } public boolean vacia (){ return tope == null;//==hace la compararcion de primernodo con null } public void apilar (Object dato ){ Nodo p=new Nodo(dato); p.datos=dato; p.siguiente=tope; tope=p; } //if(vacia()) return ' '; Nodo p=tope; dat=p.datos; tope=tope.siguiente; p=null; return dat; } public void imprimir(){ if (vacia()){ System. out. println("La pila esta vacia..."); } else{ Nodo Actual=tope; do{ System. out. print(Actual. getElemento(). toString()+" "); Actual=Actual.siguiente; }while(Actual != null); System. out. println();//imprime un salto de linea } } /* public static void main(String[]args){ Pila p=new Pila(); p.apilar("1"); p.apilar("2"); p.apilar("3"); p.apilar("4"); p.imprimir(); p.desApilar(); p.imprimir();*/ }
import javax.swing.JOptionPane; import java.awt.*; class Procesos { public static String postfija ; public static char a[],b[],c[],d[],e[],f[]; public static char pila[],pila1[],pila2[]; public static int tope,i,cont,j,a1,a2,k,l,n,m; public static boolean t=false,lp; { entrefija="("+entrefija+")"; tope=-1; postfija=""; pila=new char[250]; a=entrefija.toCharArray(); tope=Cabecera.pushPila(pila,tope,'#'); for(i=0;i<a.length;i++) { if(a[i]=='(') { tope=Cabecera.pushPila(pila,tope,a[i]); dos. addItem(String. valueOf(a [i ])); cinco. addItem(String. valueOf(a [i ])); } else if(a[i]==')') { cont=tope; while(pila[cont]!='(') { postfija =postfija +String. valueOf(pila [cont ]); tres. addItem(String. valueOf(pila [cont ])); seis. addItem(String. valueOf(pila [cont ])); tope=Cabecera.popPila(pila,tope); cinco.remove(cont); cont--; } if (tope!=0) cinco.remove(tope); tope=Cabecera.popPila(pila,tope); } else if(Cabecera.evaluar(a[i])==4) { tres. addItem(String. valueOf(a [i ])); seis. addItem(String. valueOf(a [i ])); postfija =postfija +String. valueOf(a [i ]); } else { cont=tope; while(pila[cont]!='('&&Cabecera.evaluar(pila[cont])>=Cabecera.evaluar(a[i])) { tres. addItem(String. valueOf(pila [cont ])); seis. addItem(String. valueOf(pila [cont ])); postfija =postfija +String. valueOf(pila [cont ]); tope=Cabecera.popPila(pila,tope); cinco.remove(cont); cont--; } dos. addItem(String. valueOf(a [i ])); cinco. addItem(String. valueOf(a [i ])); tope=Cabecera.pushPila(pila,tope,a[i]); } uno. addItem(String. valueOf(a [i ])); cuatro. addItem(String. valueOf(a [i ])); } letra.setText(postfija); } public static boolean vercadena (String pp ) { if(balanceo(pp)==true&&entrefija(pp)==true) { b=pp.toCharArray(); for(j=0;j<b.length;j++) { if (b[j]=='A'||b[j]=='B'||b[j]=='C'||b[j]=='D'||b[j]=='E'||b[j]=='F'||b[j]=='G'||b[j]=='H'||b[j]=='I'||b[j]=='J'||b[j]=='K'||b[j]=='L'||b[j]=='M'||b[j]=='N'||b[j]=='Ñ'||b[j]=='O'||b[j]=='P'||b[j]=='Q'||b[j]=='R'||b[j]=='S'||b[j]=='T'||b[j]=='U'||b[j]=='V'||b[j]=='W'||b[j]=='X'||b[j]=='Y'||b[j]=='Z'||b[j]=='+'||b[j]=='-'||b[j]=='*'||b[j]=='/'||b[j]=='^'||b[j]=='('||b[j]==')') { t=true; } else { j=b.length; t=false; } } } return t; } public static boolean balanceo (String cadena ) { c=cadena.toCharArray(); for(k=0;k<c.length;k++) { if(c[k]=='(') a1=a1+1; else if (c[k]==')') a2=a2+1; } if (a1==a2) return true; else return false; } public static boolean entrefija (String algo ) { d=quita(algo).toCharArray(); for(l=1;l<d.length-1;l++) { if (signo(d[l-1])==1&&signo(d[l])==2&&signo(d[l+1])==1) { lp=true; } else if (signo(d[l-1])==2&&signo(d[l])==1&&signo(d[l+1])==2) { lp=true; } else { l=d.length-1; lp=false; } } return lp; } { e=a.toCharArray(); for( n=0;n<e.length;n++) { if (Cabecera.evaluar(e[n])!=5) } return ha; } public static int signo(char al) { int f; if (al=='*'||al=='/'||al=='+'||al=='-'||al=='^') f=2; else f=1; return f; } }
;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ::) ::) ::) [/code]
Título: Re: Notacion polaca
Publicado por: RORONOA ZORO en 13 Diciembre 2010, 13:29 pm
men manda error en la parte de } [ code = java ] por que se ria no me jala mejor dicho es el unico error que me manda urgente jiij defavor para ver como corregirlo por que no me jala (el de las converciones de xAgramonx)
Título: Re: Notacion polaca
Publicado por: 1mpuls0 en 13 Diciembre 2010, 19:52 pm
men manda error en la parte de } [ code = java ] por que se ria no me jala mejor dicho es el unico error que me manda urgente jiij defavor para ver como corregirlo por que no me jala (el de las converciones de xAgramonx) MEGALOL :laugh: Si que me has hecho reir. Lo siento. Solo borra esa parte [ code = java ] Saludos.
Título: Re: Notacion polaca
Publicado por: RORONOA ZORO en 14 Diciembre 2010, 13:11 pm
JAJAJA :D CASI ME LA CREO MEN PERO NEL A HORA ME MANDA OTRO ERROR import javax.swing.JOptionPane; ^ 1 error
Tool completed with exit code 1 IGUAL SI LO QUITO ME MANDA OTROS CUATRO 1* location: class Cabecera JOptionPane.showMessageDialog(null,"pila llena ... OverFlow"); 2* location: class Cabecera JOptionPane.showMessageDialog(null,"Pila vacia ... underflow"); 3* location: class Cabecera JOptionPane.showMessageDialog(null,s); 4* Note: Recompile with -Xlint:unchecked for details. 4 errors
Tool completed with exit code 1 :rolleyes: ;-) :laugh: :silbar: ::) :D Y YA COMPILES LOS DEMAS PERO NADA
Título: Re: Notacion polaca
Publicado por: 1mpuls0 en 14 Diciembre 2010, 15:40 pm
JAJAJA :D CASI ME LA CREO MEN PERO NEL A HORA ME MANDA OTRO ERROR import javax.swing.JOptionPane; ^ 1 error
Tool completed with exit code 1 IGUAL SI LO QUITO ME MANDA OTROS CUATRO 1* location: class Cabecera JOptionPane.showMessageDialog(null,"pila llena ... OverFlow"); 2* location: class Cabecera JOptionPane.showMessageDialog(null,"Pila vacia ... underflow"); 3* location: class Cabecera JOptionPane.showMessageDialog(null,s); 4* Note: Recompile with -Xlint:unchecked for details. 4 errors
Tool completed with exit code 1 :rolleyes: ;-) :laugh: :silbar: ::) :D Y YA COMPILES LOS DEMAS PERO NADA
1. NO escribas en mayusculas. 2. Seguro que eres programador de Java? :¬¬ 3. Tuve que compilar el código para ver cuál es el problema (creo que eres tú) Note: C:\Documents and Settings\Administrador\Mis documentos\JCreator Pro\MyProjects\AnalizadorIJ\src\Procesos.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: C:\Documents and Settings\Administrador\Mis documentos\JCreator Pro\MyProjects\AnalizadorIJ\src\AnalizadorIP.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
Process completed.
4. Creo que esto lo intentas compilar en un solo archivo por eso te marca ese error. import java.util.LinkedList; import java.util.*; public class AnalizadorIP{ .... else System. out. println(" En PostFijo es: "+expPostfija ); } } //De aquí para abajo pasalo a otro archivo import javax.swing.JOptionPane; class Cabecera { public static int eva; public static int pus ... { eva=4; } return eva; } } [/code=java]
Un saludo.
Título: Re: Notacion polaca
Publicado por: RORONOA ZORO en 16 Diciembre 2010, 02:23 am
Solo copie y pege ;D tal como estab ;D a, en algunos no me manda error :silbar: :rolleyes: :o pero en otros si jala chido :D :o :) ;-) jajajaj
Lo que copie fue desde donde decia esto empexando desde codigo --Despues de tanto esfuerzo lo pude hacer me lo calificaron y ps para los que no quieran estar matándose como yo les dejo el código Código ----+-+-+-+--+ y los que le siguen men pero me manda error y estoy con el editor de texto texpad pero nel no jala algunos compilan y no mandan error el pex esta al compilar los demas me mandan error. Es mas los volvi a copiar y apegar tal cual estan pero no jalan todos el AnalizadorIJ ni el AnalizadorIP.
PROGRAMA DE LA PROFE NORA Y TED EN PROCESO\Nueva carpeta\AnalizadorIJ.java:73: cannot find symbol symbol : variable Cabecera location: class AnalizadorIJ tope=Cabecera.pushPila(pila,tope,a); ^ 9 errors
PROGRAMA DE LA PROFE NORA Y TED EN PROCESO\Nueva carpeta\AnalizadorIP.java:115: class, interface, or enum expected import javax.swing.JOptionPane; ^ 1 error
Tool completed with exit code 1 men gracias pero no jala el programa o es que no me reconoce las variables por que no estoy usando el JCreator Pro
los unicos que memandan error es A..IP A..Jp y el programa de Procesos. :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh:
Título: Re: Notacion polaca
Publicado por: 1mpuls0 en 16 Diciembre 2010, 06:44 am
OMG! Alguien podria hacer el favor de explicarle aquí al amigo, creo que no entiende lo que trato de decirle.
@RORONOA ZORO: Felicidades, sigue así, copiando y pegando código, así aprenderas rápido.
Un saludo.
Título: Re: Notacion polaca
Publicado por: RORONOA ZORO en 16 Diciembre 2010, 12:43 pm
Men ni moss vale gracias pero ni modos mira que no se programar pero para mi descracia me pidieron un programa ya le he leido pero en fin ni moss no soy bueno, al parecer tu eres todo un programador que se la sabe de todas- todas ,al parecer naciste sabiendo que pex y ni te equivocas ;-) :silbar: :xD :rolleyes: :o ;D ;D ;D ;D ;D ;Djajajaj jaja :o :) ;-) :silbar: vale gracias .
Y si estoy empezando pero en fin se trata de aprender lose .Pero el copiar y pegar era la ultima alternativa que se me ocurrio jajajaj ;-). A el de infija a posfija salio bien . ;-)
No de este codigo men , si no de otro vale gracias . >:D :¬¬ :xD :laugh: ;-) :silbar: :huh: ;D :-( PERO GRACIAS JIIJJIJ DE ANTEMANO JAJAJ
Título: Re: Notacion polaca
Publicado por: jonathanrago en 7 Octubre 2011, 09:47 am
Buen trabajo bro, te extendiste "un poco", pero se nota q eres un buen programador. Hubiera sido mucho más interesante si ademas de convertirla a infija o prefija arrojaras el resultado final :)
Título: Re: Notacion polaca
Publicado por: s00rk en 7 Octubre 2011, 10:23 am
Buen trabajo bro, te extendiste "un poco", pero se nota q eres un buen programador. Hubiera sido mucho más interesante si ademas de convertirla a infija o prefija arrojaras el resultado final :)
Antes de comentar revisa la fecha. -------------------- Publicado en: 17 Octubre 2010, 03:31 Publicado por: xAgramonx -------------------- P.D. Eso mismo se puede hacer en menos codigo PostFija cosas necesarias { Pila P, String Expresion, String SolucionFinal } , PreFija cosas necesarias { Pila P, String Expresion, String SolucionFinal , String SolucionFinal1 } y ya lo demas puras operaciones jeje pero bueno esto no va al tema ahora.
Título: Re: Notacion polaca
Publicado por: Rocio Sol en 21 Octubre 2012, 09:09 am
emmm HOLA :) soy nueva en esto.... me llama la atención y enserio tengo mucha curiosidad ...... me encantaría saber primero que nada..... porque viene por partes el código??? ..... soy principiante no se mucho de esto, asi que no se si mi pregunta sea muy tonta >.< :-*
|