Dúvidas com Pilhas

4 respostas
B

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;

}

4 Respostas

ViniGodoy
  1. Melhore o nome e as convenções das suas classes. A classe PILHA chame de classe No;
  2. Quando postar código, use a tag code: http://www.guj.com.br/posts/list/50115.java
  3. Haverá uma terceira classe. A Main, que usará a Pilha para resolver o problema;
  4. Se você está usando C++, não tem pq usar malloc e free. Use new e delete;
  5. Se você está usando java (não deu para saber, pq seu código tem um import), dê uma olhada nesse post: http://www.guj.com.br/posts/list/55235.java
  6. Se o trabalho é para hoje, começou um pouco tarde, não acha? O que você fez o final de semana inteiro?
B
<blockquote><div class="quote-author">ViniGodoy:</div>1. Melhore o nome e as convenções das suas classes. A classe PILHA chame de classe No;

2. Quando postar código, use a tag code: <a href="http://www.guj.com.br/posts/list/50115.java">http://www.guj.com.br/posts/list/50115.java</a>

3. Haverá uma terceira classe. A Main, que usará a Pilha para resolver o problema;

4. Se você está usando C++, não tem pq usar malloc e free. Use new e delete;

5. Se você está usando java (não deu para saber, pq seu código tem um import),  uma olhada nesse post: <a href="http://www.guj.com.br/posts/list/55235.java">http://www.guj.com.br/posts/list/55235.java</a>

6. Se o trabalho é para hoje, começou um pouco tarde, não acha? O que você fez o final de semana inteiro?

</blockquote>

1-irei fazer
2-irei fazer
3-irei fazer
4-eu converti esse programa que estava C para java…
5-irei ver
6-obrigado pela comida… :oops:

e…obrigado pela respota…vou tentar resolver(me fuder) valeu msmo cara…um abraço!

edu_fernandes

Aow Bruno.
Essas coisas de Pilhas são do saci mesmo.
Por isso uma das dicas que lhe dou é a seguinte: Nunca deixe para amanhã, algo que pode ser feito hoje. O amanhã, quase nunca chega, e quando chega já é hoje. Dae meu amigo, como diria o poeta: Foi pro vinagre.

Quando se trata de estruturas de dados a coisa é simples. Visualização.
Desenhe no papel a pilha e como ela deve se portar. Não tente por no código diretamente, afinal isso é algo meio ‘diferentão’, até para mais experientes, já que se você tem uma visualização do projeto, implementar é o mais ‘facil’.

Vou te explicar de forma geral, por que não identifiquei a linguagem que você está usando.
Malloc se usa em C, para alocação de memória, M(memoria) ALLOC(Alocação).
Mas vamos continuar.
Ao encontrar um separador você empilha ele. E vai percorrendo e comparando com o que está na pilha.
Se não for o de fechamento você empilha ele e refaz o processo.
Agora quanto a implementação disso, creio que não haja problemas maiores. Use Java que fica mais fácil, tenho aqui um projeto em C mas ae seria mamão com açucar pra ti.

Boa sorte, você vai precisar.
Espero ter ajudado.

B

edu_fernandes:
Aow Bruno.
Essas coisas de Pilhas são do saci mesmo.
Por isso uma das dicas que lhe dou é a seguinte: Nunca deixe para amanhã, algo que pode ser feito hoje. O amanhã, quase nunca chega, e quando chega já é hoje. Dae meu amigo, como diria o poeta: Foi pro vinagre.

Quando se trata de estruturas de dados a coisa é simples. Visualização.
Desenhe no papel a pilha e como ela deve se portar. Não tente por no código diretamente, afinal isso é algo meio ‘diferentão’, até para mais experientes, já que se você tem uma visualização do projeto, implementar é o mais ‘facil’.

Vou te explicar de forma geral, por que não identifiquei a linguagem que você está usando.
Malloc se usa em C, para alocação de memória, M(memoria) ALLOC(Alocação).
Mas vamos continuar.
Ao encontrar um separador você empilha ele. E vai percorrendo e comparando com o que está na pilha.
Se não for o de fechamento você empilha ele e refaz o processo.
Agora quanto a implementação disso, creio que não haja problemas maiores. Use Java que fica mais fácil, tenho aqui um projeto em C mas ae seria mamão com açucar pra ti.

Boa sorte, você vai precisar.
Espero ter ajudado.

valeu pela força cara…consegui entender oq vc postou…mass…fuuuuuuuuuuu…não sei se vo conseguir terminar hoje, pensei q era um pouco mais simples, por isso da enrolação…mas enfim…obrigado próxima vez quem sabe não começo antes :oops:

Criado 22 de novembro de 2010
Ultima resposta 22 de nov. de 2010
Respostas 4
Participantes 3