Tema destacado: Suscripción al boletín mensual de elhacker.net
Autor
|
Tema: Notacion polaca (Leído 6,330 veces)
|
|
|
|
|
soser
Desconectado
Mensajes: 44
...
|
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
|
|
|
|
|
En línea
|
|
|
|
|
|
xAgramonx
Desconectado
Mensajes: 18
|
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; public static String invierte(String a) { 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); } public static String pofija(String entrefija) { 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: "); String pre=ent.next(); System.out.println("En prefijo es: "); uno.tercerpa(pre); } } import java.util.LinkedList; import java.util.*; public class AnalizadorIP{ private LinkedList PROCEDENCIA; private Pila pila; public AnalizadorIP() { Operador ope; PROCEDENCIA=new LinkedList(); 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(); } public String aPostfija(String expre) { LinkedList expPostfija=new LinkedList(); 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; } public int pdp(Object c ) { 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; } public int pfp(Object c ) { 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; } private String cnvCad(LinkedList ls){ String cad=""; for(int i=0;i<ls.size();i++) cad=cad+ls.get(i).toString().charAt(0); return cad; } private static void imprimirLs(LinkedList ls) { for(int i=0;i<ls.size();i++) System.out.print(ls.get(i).toString().charAt(0)); System.out.println(" "); } public static void main(String Args[]) { Scanner ent=new Scanner(System.in); System.out.println("Inserte la exprecion en infijo: "); String expresion=ent.next(); 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; String s=""; for(i=tope;i>=0;i--) { s+="posicion "+i+" = "+pila[i]+'\n'; } JOptionPane.showMessageDialog(null,s); 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 Object datos; public Nodo siguiente; public Nodo anterior; /*****Constructores************/ public Nodo (Object valor){ 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; } public Object desApilar(){ //if(vacia()) return ' '; Object dat; 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; public static void Convert(String entrefija,List uno,List dos,List tres,List cuatro,List cinco,List seis,Label letra) { 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]); } System.out.println(a[i]); uno.addItem(String.valueOf(a[i])); cuatro.addItem(String.valueOf(a[i])); } System.out.println(postfija); 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; } public static String quita(String a) { String ha=""; e=a.toCharArray(); for( n=0;n<e.length;n++) { if (Cabecera.evaluar(e[n])!=5) ha=ha+String.valueOf(e[n]); } return ha; } public static int signo(char al) { int f; if (al=='*'||al=='/'||al=='+'||al=='-'||al=='^') f=2; else f=1; return f; } }  [/code]
|
|
|
|
|
En línea
|
|
|
|
RORONOA ZORO
Desconectado
Mensajes: 4
|
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)
|
|
|
|
« Última modificación: 13 Diciembre 2010, 13:31 por RORONOA ZORO »
|
En línea
|
|
|
|
Darhius
Desconectado
Mensajes: 427
Divide y vencerás.
|
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  Si que me has hecho reir. Lo siento. Solo borra esa parte [ code = java ] Saludos.
|
|
|
|
|
En línea
|
"Cuenta mi historia... a quienes pregunten, cuéntala con verdad, las cosas malas junto con las buenas y permite que sea juzgado apegado ellas... el resto... es silencio." Dinobot (Beast Wars Transformers)
|
|
|
RORONOA ZORO
Desconectado
Mensajes: 4
|
JAJAJA  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  Y YA COMPILES LOS DEMAS PERO NADA
|
|
|
|
|
En línea
|
|
|
|
Darhius
Desconectado
Mensajes: 427
Divide y vencerás.
|
JAJAJA  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  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{ private LinkedList PROCEDENCIA; .... 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.
|
|
|
|
« Última modificación: 14 Diciembre 2010, 15:42 por Darhius »
|
En línea
|
"Cuenta mi historia... a quienes pregunten, cuéntala con verdad, las cosas malas junto con las buenas y permite que sea juzgado apegado ellas... el resto... es silencio." Dinobot (Beast Wars Transformers)
|
|
|
RORONOA ZORO
Desconectado
Mensajes: 4
|
Solo copie y pege  tal como estab  a, en algunos no me manda error  pero en otros si jala chido  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. 
|
|
|
|
« Última modificación: 16 Diciembre 2010, 02:26 por RORONOA ZORO »
|
En línea
|
|
|
|
Darhius
Desconectado
Mensajes: 427
Divide y vencerás.
|
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.
|
|
|
|
|
En línea
|
"Cuenta mi historia... a quienes pregunten, cuéntala con verdad, las cosas malas junto con las buenas y permite que sea juzgado apegado ellas... el resto... es silencio." Dinobot (Beast Wars Transformers)
|
|
|
|
|
|
|
s00rk
Desconectado
Mensajes: 139
|
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.
|
|
|
|
|
En línea
|
|
|
|
|
|