Está en la página 1de 6

Pgina 1

ESTRUCTURA DE DATOS

OPERACIONES CON PILAS DE DATOS


PROGRAMA PARA CONVERTIR EXPRESIONES INFIJAS A POSTFIJAS
1. DISEO DEL FORMULARIO

2. VENTANA DE PROPIEDADES
OBJETO
textBox1

PROPIEDAD
Text
Name

VALOR
<En Blanco>
textINFIX

buttom1

Text
Name

&CONVERTIR
btnCONVERTIR

textBox2

Text
Name

<En Blanco>
textPOSTFIX

buttom2

Text
Name

&NUEVO
btnNUEVO

buttom3

Text
Name

&SALIR
btnSALIR

3. IMPLEMENTACION DE LAS CLASES

Seleccione las opciones del men principal:


Men Principal -> Proyecto -> Agregar Clase
Aparecer la siguiente ventana:

Dr. Luis Boy Chavil

ESTRUCTURA DE DATOS

Pgina 2

Hagamos doble clic en el objeto: Clase de C++, entonces veremos:

3.1 CREACIN DE LA CLASE ESTRUCTURA: Pila

En la ventana anterior, escribiremos en Nombre de Clase: Pila y


activaremos la opcin check InLine.
Clic en Finalizar, entonces veremos:

Dr. Luis Boy Chavil

ESTRUCTURA DE DATOS

Pgina 3

Definicin de la Clase Estructura:

class Pila
{
public:
int tamano;
int top;
char datos[50];
public:
Pila(void)
{
}
};
3.2 CREACIN DE LA CLASE PROCESO: MiPila

Al igual que en el caso anterior; crear la pila y colocar en Nombre de Clase:


MiPila
El cdigo de la Clase, es:

Dr. Luis Boy Chavil

Pgina 4

ESTRUCTURA DE DATOS

#pragma once
#include "Pila.h"
class MiPila
{
public:
void Push(Pila &, char);
char Pop(Pila &);
char Top(Pila);
char Evaluar(char);
int Prior(char, int);
MiPila(void)
{
}
};
void MiPila::Push(Pila &P, char xdato)
{
if(P.tamano>P.top)
{
P.top++;
P.datos[P.top]=xdato;
}
}
char MiPila::Pop(Pila &P)
{
char wdato=' ';
if(P.top > -1)
{
wdato=P.datos[P.top];
P.top--;
}
return(wdato);
}
char MiPila::Top(Pila P)
{
char wdato= ' ';
if(P.top > -1)
wdato=P.datos[P.top];
return(wdato);
}
char MiPila::Evaluar(char elemento)
{
if(elemento=='^'||elemento=='*'||elemento=='/'||elemento=='+'||elemento=='-')
return('r');
if(elemento=='('||elemento==')')
return(elemento);
else
return('n');
}
int MiPila::Prior(char simbolo, int n)
{
if(simbolo=='^')
Dr. Luis Boy Chavil

ESTRUCTURA DE DATOS

Pgina 5

return(3);
if(simbolo=='*'||simbolo=='/')
return(2);
if(simbolo=='+'||simbolo=='-')
return(1);
if(simbolo==')'||simbolo=='#')
return(0);
if(simbolo=='('&&n==1)
return(4);
if(simbolo=='('&&n==2)
return(0);
}

4. IMPLEMENTACIN DEL CDIGO EN EL FORMULARIO


Hagamos doble clic sobre el botn CONVERTIR del formulario principal; entonces
escribiremos:
private: System::Void btnCONVERTIR_Click(System::Object^ sender, System::EventArgs^ e) {

Pila P;
P.tamano=50;
P.top=-1;
for(int k=0; k<50; k++)
P.datos[k]=' ';
MiPila PILA;
PILA.Push(P, '#');
int longitud=textINFIX->Text->Length;
char INFIX[50], POSTFIX[50];
for(int k=0; k<50; k++)
INFIX[k]=' ';
String^ Infija = textINFIX->Text;
for(int k=0; k<longitud; k++)
{
INFIX[k]=Convert::ToChar(Infija->Substring(k,1));
}
int m=0, z=0;
while(m<longitud)
{
char elemento=INFIX[m];
if(PILA.Evaluar(elemento)=='n')
{
POSTFIX[z]=elemento;
z++;
}
if((PILA.Evaluar(elemento)=='r')||(PILA.Evaluar(elemento)=='('))
{
while(PILA.Prior(elemento,1)<PILA.Prior(PILA.Top(P),2))
{
POSTFIX[z]=PILA.Pop(P);
z++;
}
PILA.Push(P, elemento);

Dr. Luis Boy Chavil

ESTRUCTURA DE DATOS

Pgina 6

}
if(PILA.Evaluar(elemento)==')')
{
while(PILA.Top(P)!='(')
{
POSTFIX[z]=PILA.Pop(P);
z++;
}
char xx=PILA.Pop(P);
}
m++;
}
while(PILA.Top(P)!='#')
{
POSTFIX[z]=PILA.Pop(P);
z++;
}
// Pasando el array de Postfix a la caja de texto
textPOSTFIX->Text="";
String^ Postfija="";
for(int w=0; w<longitud; w++)
Postfija+=Char::ToString(POSTFIX[w]);
textPOSTFIX->Text = Postfija;
}
};
}

NOTA IMPORTANTE

No olvidar que se debe incluir la clase MiPila al inicio del cdigo para poder
utilizarla, de la siguiente manera:
#include MiPila.h

Dr. Luis Boy Chavil

También podría gustarte