Está en la página 1de 9

Página 1

Universidad Nacional de Trujillo


Página 2

ENCRIPTACIÓN

PROGRAMA PARA DESARROLLAR UN TEXTO POSTFIJO A PREFIJO

1. DISEÑO DEL FORMULARIO

2. VENTANA DE PROPIEDADES

OBJETO PROPIEDAD VALOR


textBox1 Text <En Blanco>
Name TxtPOSTFIX

textBox2 Text <En Blanco>


Name TxtPREFIX

buttom1 Text Convertir


Name Button1

3. IMPLEMENTACION DE LAS CLASES

 Seleccione las opciones del menú principal:


 Menú Principal -> Proyecto -> Agregar Clase

Universidad Nacional de Trujillo


Página 3

 Aparecerá la siguiente ventana:

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

3.1 CREACIÓN DE LA PILAS : pilas.h

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


activaremos la opción check InLine.

Universidad Nacional de Trujillo


Página 4

 Clic en Finalizar, entonces veremos:

3.2 CREACIÓN DE LA CLASE OPERACIONES: Operaciones.h

 Al igual que en el caso anterior; crear la clase y colocar en Nombre de


Clase: Operaciones

Universidad Nacional de Trujillo


Página 5

#pragma once
#include "Pilas.h"
class Operaciones
{
public:
void Push(Pilas &, char);
char Pop(Pilas &);
char Top(Pilas);
bool Vacio(Pilas);

//Postfix a Infix
char Evaluar(char);
void Cambio1(Pilas &, char, char);
void Cambio2(Pilas &, char, char);
void Cambio3(Pilas &, char[], char, int);
void Cambio4(Pilas &, char[], char, int);
//Infix a Prefix
int Prior(char, int);
Operaciones()
{
}
};

int Operaciones::Prior(char simbolo, int n)


{
if (simbolo == '^')
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);
}

void Operaciones::Cambio4(Pilas &P, char Op2[], char operador, int tam)


{
char Op1[100];
int z = 0, CI = 1, CF = 0;
while (CI != CF)

Universidad Nacional de Trujillo


Página 6

{
Op1[z] = Pop(P);
z++;
if (Top(P) == ')') CI++;
if (Top(P) == '(') CF++;
}
Op1[z] = Pop(P);
Push(P, '(');
for (int i = z; i >= 0; i--)
Push(P, Op1[i]);
Push(P, operador);
for (int i = tam; i >= 0; i--)
Push(P, Op2[i]);
Push(P, ')');
}

void Operaciones::Cambio3(Pilas &P, char Op2[], char operador, int tam)


{
char Op1 = Pop(P);
Push(P, '(');
Push(P, Op1);
Push(P, operador);
for (int i = tam; i >= 0; i--)
Push(P, Op2[i]);
Push(P, ')');
}
void Operaciones::Cambio2(Pilas &P, char operador, char Op2)
{
char Op1[100];
int tam = 0, CI = 1, CF = 0;
while (CI != CF)
{
Op1[tam] = Pop(P);
tam++;
if (Top(P) == ')') CI++;
if (Top(P) == '(') CF++;
}
Op1[tam] = Pop(P);
Push(P, '(');
for (int i = tam; i >= 0; i--)
Push(P, Op1[i]);
Push(P, operador);
Push(P, Op2);
Push(P, ')');
}
void Operaciones::Cambio1(Pilas &P, char operador, char Op2)
{ char Op1 = Pop(P);
Push(P, '(');
Push(P, Op1);
Push(P, operador);
Push(P, Op2);
Push(P, ')');
}
char Operaciones::Evaluar(char elemento)
{
if (elemento == '^' || elemento == '*' || elemento == '/' || elemento == '+' ||
elemento == '-')
return ('r');

Universidad Nacional de Trujillo


Página 7

if (elemento == '(' || elemento == ')')


return (elemento);
else
return ('n');
}
bool Operaciones::Vacio(Pilas P)
{
if (P.top == -1)
return (true);
else
return (false);
}
char Operaciones::Top(Pilas P)
{
char wdato = ' ';
if (P.top > -1)
{
wdato = P.datos[P.top];
}
return (wdato);
}
char Operaciones::Pop(Pilas &P)
{
char wdato = ' ';
if (P.top > -1)
{
wdato = P.datos[P.top];
P.top--;
}
return (wdato);
}
void Operaciones::Push(Pilas &P, char xdato)
{
if (P.tamaño > P.top)
{
P.top++;
P.datos[P.top] = xdato;
}
}

4. IMPLEMENTACIÓN DEL CÓDIGO EN EL FORMULARIO

Hagamos doble clic sobre el formulario principal; entonces escribiremos el nombre de la


clase Operaciones para que se añada a nuestro programa:

Universidad Nacional de Trujillo


Página 8

#pragma once
#include "Operaciones.h"

Botón: btnConvertir:

#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
Pilas P, Aux;
P.tamaño = 50;
P.top = -1;
for (int i = 0; i < P.tamaño; i++)
P.datos[i] = ' ';
Aux.tamaño = 50;
Aux.top = -1;
for (int i = 0; i < Aux.tamaño; i++)
Aux.datos[i] = ' ';

Operaciones op;
int longitud = TxtPOSTFIX->Text->Length;
String^ Cadena = TxtPOSTFIX->Text;
char Cad[100];
for (int i = 0; i < longitud; i++)
Cad[i] = Convert::ToChar(Cadena->Substring(i, 1));
//En la pila
int x = 0;
while (x < longitud)
{
char elemento = Cad[x];
if (op.Evaluar(elemento) == 'n')
{
op.Push(P, elemento);
}
if (op.Evaluar(elemento) == 'r')
{
if (op.Top(P) != ')')
{
char Op2 = op.Pop(P);
if (op.Top(P) != ')')
op.Cambio1(P, elemento, Op2);
else
op.Cambio2(P, elemento, Op2);
}
else
{
char Op2[100];
int tam = 0, CI = 1, CF = 0;
while (CI != CF)
{
Op2[tam] = op.Pop(P);
tam++;
if (op.Top(P) == ')') CI++;
if (op.Top(P) == '(') CF++;
}
Op2[tam] = op.Pop(P);
if (op.Top(P) != ')')
op.Cambio3(P, Op2, elemento, tam);
else
op.Cambio4(P, Op2, elemento, tam);
}

Universidad Nacional de Trujillo


Página 9

}
x++;
}
String^ Linea = "";
while (!op.Vacio(P))
op.Push(Aux, op.Pop(P));
while (!op.Vacio(Aux))
Linea += Char::ToString(op.Pop(Aux));

//CONVIRTIENDO A PREFIJA

int tamaño = Linea->Length;


char INFIX[50], PREFIX[50];
for (int i = 0; i < tamaño; i++)
INFIX[i] = Convert::ToChar(Linea->Substring(i, 1));
int m = tamaño - 1, z = 0;
while (m >= 0)
{
char elemento = INFIX[m];
if (op.Evaluar(elemento) == 'n')
{
PREFIX[z] = elemento;
z++;
}
if (op.Evaluar(elemento) == 'r' || op.Evaluar(elemento) == ')')
{
while (op.Prior(elemento, 1) < op.Prior(op.Top(P), 2))
{
PREFIX[z] = op.Pop(P);
z++;
}
op.Push(P, elemento);
}
if (op.Evaluar(elemento) == '(')
{
while (op.Top(P) != ')')
{
PREFIX[z] = op.Pop(P);
z++;
}
char xx = op.Pop(P);
}
m--;
}
while (!op.Vacio(P))
{
PREFIX[z] = op.Pop(P);
z++;
}
String^ xLineax = "";
z = z - 1;
for (int i = z; i >= 0; i--)
xLineax += Char::ToString(PREFIX[i]);
TxtPREFIX->Text = xLineax;
}
};
}

Universidad Nacional de Trujillo