Autor
|
Tema: Notacion polaca (Leído 33,507 veces)
|
|
xAgramonx
Desconectado
Mensajes: 18
|
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.
|
|
« Última modificación: 23 Octubre 2010, 19:45 pm por xAgramonx »
|
En línea
|
|
|
|
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; { 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]
|
|
|
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 pm por RORONOA ZORO »
|
En línea
|
|
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
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
|
abc
|
|
|
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
|
|
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
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{ .... 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 pm por Darhius »
|
En línea
|
abc
|
|
|
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 am por RORONOA ZORO »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Notacion Polaca Inversa
Ejercicios
|
gabymar
|
2
|
13,609
|
9 Mayo 2023, 11:20 am
por mcpelos
|
|
|
Notación Polaca Inversa
Programación C/C++
|
Rudy21
|
0
|
6,351
|
15 Septiembre 2010, 07:37 am
por Rudy21
|
|
|
notación polaca inversa
Programación C/C++
|
david_BS
|
0
|
4,592
|
31 Marzo 2012, 19:26 pm
por david_BS
|
|
|
[Duda] token/strtok /Notacion Polaca Inversa
Programación C/C++
|
digitalx2
|
1
|
2,482
|
23 Septiembre 2013, 19:10 pm
por eferion
|
|
|
Problema con la notación de punteros
Programación C/C++
|
apoeti
|
5
|
3,022
|
11 Julio 2014, 00:32 am
por apoeti
|
|