• Domingo 22 de Diciembre de 2024, 15:46

Autor Tema:  Problema con algoritmo  (Leído 1538 veces)

azael_valdo

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema con algoritmo
« en: Domingo 14 de Julio de 2013, 23:13 »
0
Necesito programar este algoritmo es en c#:
Algoritmo de infijo a postfijo
1. Insertar un paréntesis izquierdo '(' en la pila.
2. Agregar un paréntesis derecho ')' al final de la expresión infija.
3. En tanto la pila no esté vacía, leer la expresión infija de izquierda a derecha y hacer lossiguiente:
• Si el carácter actual en la expresión infija es un dígito, copiarlo en el siguiente elemento de la expresión postfija.
• Si el carácter actual en la expresión infija es un paréntesis izquierdo, insertarlo en la pila.
• Si el carácter actual en la expresión infija es un operador
- Retirar los operadores de la parte superior de la pila, en tanto tengan precedencia igual o mayor que el operador actual, e insertarlos en la expresión postfija.
- Insertar el carácter actual de la expresión infija en la pila.
• Si el carácter actual en la expresión infija es un paréntesis derecho
- Retirar los operadores de la parte superior de la pila e insertarlos en la expresión postfija hasta que en la parte superior de la pila quede un paréntesis izquierdo.
- Retirar y descartar el paréntesis izquierdo de la pila
Según prioridad
+ adición
- sustracción
* multiplicación
/ división
^ exponencial
% módulo

Y ya lo comence, pero a la hora de ejecutarlo me da un error de fin de arreglo alcanzado, alguien me podria decir cual es el problema?
public class InPos
{
string Infijo;
string Postfijo;
string ignorados;

public void LlenarInfijo()
{
Infijo = Console.ReadLine();
Console.WriteLine("La notacion Infija es:\n");
Console.WriteLine(Infijo);
return;
}

public void Convertir()
{
char c, a='0';
int val, b;
PilaChar p = new PilaChar(100);
p.Meter('(');
Infijo += ')';
while (p.Vacia() != true)
{
for (int i = 0; i < Infijo.Length; i++)
{
c = Infijo;
val=Operadores(c);

if (val != 1 || val != 2 || val != 3 || val != 4 || val != 5 || val != 6)
{
Postfijo += c;
}

if (c == '(')
{
p.Meter(c);
}
if (val == 1 || val == 2 || val == 3 || val == 4 || val == 5)
{
while((b=(Operadores(a=p.Sacar()))) >= val)
Postfijo += a;
p.Meter(c);
}
if (val == 6)
{
int t;
while((t=p.Sacar())!= '(')
Postfijo+=t;
ignorados += t;
}

}
}
Console.WriteLine("La notacion postfija es:\n");
Console.WriteLine(Postfijo);
Console.ReadLine();
return;
}

public int Operadores(char ch)
{
int aux = 0;
switch (ch)
{
case ')': aux = 6;
break;
case '^': aux = 5;
break;
case '/': aux = 4;
break;
case '*': aux = 3;
break;
case '-':aux = 2;
break;
case '+': aux = 1;
break;
}
return aux;
}
}

Espero su gran ayuda, soy nuevo en el foro.