Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

batistelli

[Resolvido] validaçao de expressao matematica c++

Recommended Posts

Preciso Construir um programa em C++ para verificar se os parênteses de uma expressão matemática estão escritos de forma correta. O programa deve verificar se para cada ´abre parêntesis ( ´ há um ‘ fecha parêntesis )´ correspondente. Pode-se utilizar uma pilha estática.

 

exemplo: (5*4)+(6(+)#

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara...

 

Eu vou fazer aquela pergunta clássica....

O que você ja tem pronto?

Onde você está com problemas?

Qual a sua dúvida?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara...

 

Eu vou fazer aquela pergunta clássica....

O que você ja tem pronto?

Onde você está com problemas?

Qual a sua dúvida?

 

Cara vou abusar da ajuda, nao tenho nda pronto na verdade, to com 5 exercicios de lista dinamica duplamente encadeada pra fazer e esse ai

mais esse ai eu nao tenho nem ideia de como fazer

 

se tiver como me ajudar cara!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema clássico de pilha: o '(' é empilhado e o ')' faz com que seja desempilhado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

To fazendo assim mais com certeza ta faltando coisa. por favor alguem me de uma luz???

 

 

 

using namespace std;
typedef struct{   
	  int topo;   
	  int dado [10]; 
int expr;
char i;
int main(int argc, char *argv[])
{cout<< "digite a expressao ";
cin>>i;
}
	if i = "#"
		 else
		 if i ="("
				  else
				  p.topo=0
						if (p.topo=10){   
						cout<<"pilha cheia"  ;
							  else   
							  p.topo=p.topo+1
							  p.dado[p.topo]=d	  
	  { if i = ")" || p.topo=0 
	  cout<<"pilha vazia";
	   else
	   d=p.dado[p.topo];
	   p.topo=p.topo-1;
			  }
	   i=i+1;
	   }
	  if p.topo=0;
	  cout<<" a expressao esta correta";
	  else
	  cout<<"a expressao nao esta correta";
	   
	system("PAUSE");
	return EXIT_SUCCESS;
}

}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <iostream>
#include <stack>
using namespace std;

int main() {
  stack<char> st;

  string expressao;
  cout << "Digite a expressao: ";
  cin >> expressao;


 int i;
 bool valid = false;

 for(i=0; i < expressao.size(); i++) {
 if (expressao[i] == '(')
	  st.push(expressao[i]);
 else if (expressao[i] == ')') {
	  if (st.empty())
			  goto FIM;
	  st.pop();
 }
 }

 valid = st.empty();

 FIM:

  if (valid)
cout << "Expressao valida" << endl;
  else
cout << "Expressao invalida" << endl;
}

 

 

Note o motivo do goto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

EDIT: Isis... pra que aquele goto ali?? um break não faria o trabalho??

 

-------------------------------------------------------

Pois é... tem bastante coisa errada...

Pra começar, não se esqueça que, em C, o operador '=' é de atribuição, use '==' para comparação.

 

cin >> i

"i" deveria ser uma string para receber um "texto".

 

Detalhe...

int main(int argc, char *argv[])
{cout<< "digite a expressao ";
cin>>i;
}

main deve retornar um inteiro, e você está fechando a função antes da hora.

 

ps.: idente o seu código de uma forma mais coerente, por favor! facilita MUITO a leitura.

http://phpbrasil.com/artigo/UAjMBhf9jaOJ/a...-na-programacao

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites
EDIT: Isis... pra que aquele goto ali?? um break não faria o trabalho??

 

Não.

A pilha está vazia e um ')' sobrando é encontrado, então a expressão é inválida. O break sai do for, mas o valid assume true porque a pilha está vazia, mesmo a expressão sendo inválida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.