Olá pessoal…tenho esse trabalho para entregar hoje e esta dando erro…uma ajuda pelo amor de Deus!!!
Aplicações de Pilha
Objetivo: Empregar pilhas na solução de problemas
Desenvolver um programa que analise uma expressão matemática e identifique que os elementos separadores de abertura ??, ?,? e ?(? são encerrados de forma correta com os elementos separadores de encerramento ?)?, ?-? e ?+?.
Por simplicidade, o programa não deve verificar a ordem de emprego desses elementos de abertura.
Ou seja, expressões tais como 2 * ( 3 ? [ 4+ { 2 + 3 }] ) e 2 * { 3 ? ( 4 + [ 2 + 3 ]) } são consideradas válidas.
Por outro lado, expressões tais como 2 * ( 3 ? [ 4+5 ) ] são consideradas inválidas, pois o último elemento aberto ??, posicionado antes do número 4, esta sendo encerrado com o ?)?, posicionado após o número 5. A Figura 1 ilustra essa comparação.
Interface:
Programa desenvolvido por:
Xxxxx xxxx xxxx RA xxxxxxx
Yyyyy yyy yyyy RA xxxxxxx
Entre com a expressão matemática para análise de separadores: (xx){dd+(88-99)}
Expressão válida ou
Expressão Inválida;
import <a href="http://java.io">java.io</a>.*;
public class Pilhas
{
public static PILHA separador;
public static int q = 0;
public static void inicializa()
{
separador = (PILHA) malloc(sizeof(PILHA));
separador.next = null;
}
public static void insira(String v)
{
PILHA novo = (PILHA) malloc(sizeof(PILHA));
novo.valor = v;
novo.next = separador.next;
separador.next = novo;
q++;
}
public static byte retire()
{
if (separador.next == null)
{
return 27;
}
else
{
PILHA novo = (PILHA) malloc(sizeof(PILHA));
novo = separador.next;
separador = separador.next;
q--;
return novo.valor;
}
}
public static int verifique(byte c)
{
byte guardado;
if ((c == '{') ||(c == '[') ||(c == '('))
{
Pilhas.insira(c);
return 1;
}
else if ((c == '}') ||(c == ']') ||(c == ')'))
{
guardado = Pilhas.retire();
if (((guardado == '(') && (c == ')')) || ((guardado == '[') && (c == ']')) || ((guardado == '{') && (c == '}')))
{
return 1;
}
else
return 0;
}
else
return 1;
}
public static int Main()
{
String teclado = new String(new char[256]);
int valida = 1;
Pilhas.inicializa();
System.out.print("\nEntre com a expressão matemática para análise de separadores:");
System.out.print(" a analise de separadores:");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
teclado = in.readLine();
for (int i = 0; i < teclado.length(); i++)
{
valida = Pilhas.verifique(teclado.charAt(i));
if (valida == 0) //FALSE
break;
}
if ((valida)&&(q == 0))
{
System.out.print("\nexpressao valida!");
}
else
{
System.out.print("\nExpressao invalida!");
};
return 1;
}
}
public class PILHA {
public String valor;
public PILHA next;
}