Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > C / C++ > pila postfija
-Foros de debate

C / C++
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

pila postfija
Enviado por Dario el día 13 de mayo de 2005

hola a todos espero me puedan ayudar tengo este porgrama pero no se como hacerlo:

crear un programa que utilice una pila para resolver expresiones matematicas escritas en notacion postfija. La captura debe realizarse termino a termino de la expresion y como datos de cadena.

 
Re: pila postfija
Enviado por Cinthia el día 25 de mayo de 2005

tengo este programa a ver si te sirve

Aplicación.cpp

#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>
#include "clase.h"

int operacion(char,int,int);

void main()
{
pila objeto1;
int operando1,operando2,resultado,valor;
char arreglo[max];
char temporal[1];
char operando;
cout<<"\n Ingrese la ecuacion posfija \n"<<endl;
cin>>arreglo;
for(int i=0;arreglo[i]!=NULL;i++)
{
if(isdigit(arreglo[i]))
{
temporal[i]=arreglo[i];
arreglo[i]=atoi(&temporal[i]);
objeto1.push(arreglo[i]);
}
else
if(arreglo[i]=='+'||arreglo[i]=='-'||arreglo[i]=='*'||arreglo[i]=='/'||arreglo[i]=='^')
{
operando=arreglo[i];
operando2=objeto1.pop();
operando1=objeto1.pop();
resultado=operacion(operando,operando1,operando2);
objeto1.push(resultado);
valor=objeto1.ver_tope();
}
}
cout<<" \nEl resultado de la operacion es: "<<valor<<endl;
cout<<" \nEn caso de no recibir ningun resultado la expresion no es incorrecta \n"<<endl;
getch();
}

int operacion(char operando,int operando1, int operando2)
{
int resultado,temporal;
switch(operando)
{
case'+': resultado=operando1+operando2; break;
case'-': resultado=operando1-operando2; break;
case'*': resultado=operando1*operando2; break;
case'/': resultado=operando1/operando2; break;
case'^': if(operando2==2)
resultado=operando1*operando1;
if(operando2>2)
{
temporal=operando1;
for(int i=1;i<operando2;i++)
{
temporal=temporal*operando1;
resultado=temporal;
}
}
if(operando2==0)
resultado=1;
break;
}
return resultado;
}


Clase.h
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#define max 30

class pila
{
int tope;
char arreglo[max];
public:
bool lleno();
void push(int);
int pop();
bool empty();
int ver_tope();
pila(){tope=-1;}
};

bool pila::empty()
{
if(tope==-1)
return true;
return false;
}

bool pila::lleno()
{
if(tope==max-1)
return true;
return false;
}

void pila::push(int numero)
{
if(lleno())
exit (1);
arreglo[++tope]=numero;
}

int pila::pop()
{
if(empty())
exit(1);
return arreglo[tope--];
}


int pila::ver_tope()
{
if(empty())
exit(1);
return arreglo[tope];
}

 

Re: pila postfija
Enviado por roberto el día 8 de mayo de 2008

oye disculpa, es un buen aporte cinthya pero de casualidad no tendras lo que hace tu libreria clase para poder compilarlo bien.
si me la podrias enviar te lo agradeceria muchisimo

 


Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network