infijo-postfijo

Verillo_003
06 de Octubre del 2005
Hola! Soy novata y necesito un programa que covierta uns expresion infija a postfija mediante pilas. Se agradece la atencion prestada!

to?
06 de Octubre del 2005
Hola! Soy novata y necesito un programa que covierta uns expresion infija a postfija mediante pilas. Se agradece la atencion prestada!


kidfun
06 de Octubre del 2005
#include <stdio.h> // programa hecho por FELIPE ROMERO PEDREROS
#include <conio.h>
#include <alloc.h> // en dev++ es malloc y alloc es para usar "std"
#include <string.h>
#define TAM 7 //tamaño de arreglo
#define TRUE 1
#define FALSE 0

typedef char TipoP;

typedef struct { // Declaracion de estructura
TipoP info[TAM];
int tope;
}TPila;

TPila *InicPila( ) // iniciacion de la Pila
{ TPila *p = (TPila *) malloc (sizeof(TPila));
p->tope = 0; /*Se tiene una pila vacía*/
return(p);
}

int VaciaPila(TPila *p) // funciones de las pilas
{ if (p->tope == 0) return(TRUE);
else return(FALSE);
}

int LlenaPila(TPila *p)
{ if (p->tope == TAM) return TRUE;
else return FALSE;
}

void AdicPila(TPila *p, TipoP dato)
{ if (LlenaPila(p))
printf("Error, Pila Llenan");
else {
p->info[p->tope] = dato;
p->tope++;
}
}

void ElimPila(TPila *p)
{ if (VaciaPila(p))
printf ("Error, Pila Vacían");
else
p->tope--; /*Elimina el elemento del tope*/
}

TipoP InfoPila(TPila *p)
{ if (VaciaPila(p))
{ printf ("Error, Pila Vacían");
return(0);}
else
return(p->info[p->tope-1]);
}

void DestruirPila(TPila *p)
{ free(p);
}

int verifica(char arreglo[TAM],int i) // funcion para compara caracteres
{ if (arreglo[i]=='/' || arreglo[i]=='*' || arreglo[i]=='+' || arreglo[i]=='-')
return(TRUE);
else
return(FALSE);

}

void posorden(TPila *p,TPila *p2,char arreglo[TAM]) // funcion hace el cambio
{
int i=0,j=0,k;
do{
if(verifica(arreglo,i)==0) // pasa los numeros
{AdicPila(p,arreglo[i]);
i++;
}
if(verifica(arreglo,i)==1) // pasa los caracteres
{
do{
for(k=0;k<j*2+1;k++) // paso caracter 1 a pila 2 y elimino caracter pila 1
{AdicPila(p2,InfoPila(p));
ElimPila(p);
}
if(j>=1) // condicion cuando los operadores sean mas de 1 y no se produsca un error de paso parametro y qeden dos operedores juntos
{ if(InfoPila(p)=='-' || InfoPila(p)=='+' || InfoPila(p)=='/' || InfoPila(p)=='*' )
if(InfoPila(p2)=='-' || InfoPila(p2)=='+' || InfoPila(p2)=='/' || InfoPila(p2)=='*')
for(k=0;k<2;k++)
{AdicPila(p2,InfoPila(p));
ElimPila(p);
}
else // si no es operador el ultimo de pila1 se pasa
{AdicPila(p2,InfoPila(p));
ElimPila(p);
}
}
AdicPila(p,arreglo[i]); // se agrega a la pila el operador del arreglo
do{ // se pasan todos los datos de pila2 a pila1
AdicPila(p,InfoPila(p2));
ElimPila(p2);
}while(VaciaPila(p2)==0);
i++; j++; // contador para aumentar el arreglo y contador de operadores
}while(verifica(arreglo,i)==1); // continua mientras el areglo sgiente sea operador
j=0;} // se pone en 0 el contador de j porke viene una variable de numero
}while(i<TAM); // termina todo el procedimiento
}

int main()
{ int i;
char arreglo[TAM]={'A','B','/','C','D','*','/'}; //se ingresa los valores
TPila *pp,*pp2; // inicializan las pilas
pp = InicPila();
pp2 = InicPila();
posorden(pp,pp2,arreglo); // funcion hace cambio
for(i=0;i<TAM;i++) // imprime arreglo
printf("%c ",arreglo[i]);
printf("n");
do{ //se da vuelta la pila
AdicPila(pp2,InfoPila(pp));
ElimPila(pp);
}while(VaciaPila(pp)==0);

for(i=0;i<TAM;i++) // imprime la pila
{
printf(" %c",InfoPila(pp2));
ElimPila(pp2);
}
getchar(); // un espacio antes de cerrar
}

rene padilla
06 de Octubre del 2005
/*clase que convierte una ecuacion infija a una postfija, para proyecto de una
calculadora cientifica, creada viernes 23 de septiembre del 2005, para entregarse
el lunes 26 de septiembre. &&Stradivarius productions&& */

class inf_Posf{

Pila ePos; // ecuacion posfija
private Pila pila=new Pila(10);// crear pila de n numeros que tendra la calculadora

Pila pilaAux;


private int tope;// es un tope
private String eI;//ecuacion infija



char simbolo;// se le asignada un caracter del String
private int prioridad;

public int prioridad(int operador){

switch(operador){

case \\\\'*\\\\' : prioridad=5;break;
case \\\\'/\\\\' : prioridad=5;break;
case \\\\'+\\\\' : prioridad=1;break;
case \\\\'-\\\\' : prioridad=1;break;
case \\\\'^\\\\' : prioridad=10;break;
}

return prioridad;

}



public void convertir(String eI){
this.eI=eI;
int tomaChars=0;

while(eI!=null){
simbolo=eI.charAt(tomaChars);//le asigno a char un caracter del String Ei
tomaChars++;

if(simbolo==\\\\'(\\\\'){
pila.insertar(simbolo);

}
else{

if(simbolo==\\\\')\\\\'){

while(pila.mostrarT()!=\\\\'(\\\\'){

pila.eliminar();
ePos=new Pila(pila.t);

ePos.insertar(pila.mostrarT());

}


pila.eliminar();


}else{

if(simbolo!=\\\\'*\\\\'&& simbolo!= \\\\'-\\\\' && simbolo!= \\\\'+\\\\' && simbolo !=\\\\'/\\\\' && simbolo != \\\\'^\\\\'){

ePos.insertar(simbolo);


}else{

while(pila.mostrarVacia()==false && prioridad(simbolo)<=prioridad(pila.mostrarT())){
pila.eliminar();
ePos.insertar(pila.mostrarT());

}





}

}





}


}


while(pila.mostrarVacia()==false){
pila.eliminar();
ePos.insertar(pila.mostrarT());
}

while(ePos.mostrarVacia()==false){

System.out.println(\\\"ecuacion pos fija es=\\\"+ePos.mostrarT());
ePos.eliminar();

}


}// Metodo




}//clase



ahi tengo esa madre pero no se porque no correo bien checalo a lo mejor tu sabes porque