Ir para conteúdo

Arquivado

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

pkr

Notação Polonesa

Recommended Posts

Dae galera, to precisando montar um programinha em C++ modo console mesmo, que trabalhe com Notação polonesa....o ruim eh que nao entendi mto bem a materia...e to sem tempo pra montar algo completo, preciso de um programa em q você insira uma função infixa e converta para postfixa.....entao se alguem tiver algum codigo ae e puder me passar eu agradeçovaleu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

niguém vai te passar o codigo completo, pois esse não eh o objetivo do forum.....manda a tua dúvida ai, que ai podemos te ajudar sem problemas.....uma dica.....use o conceito de pilhas....fiz isso uma vez eh bem simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

minha duvida eh total....pois viajei no assunto, nao sei nem por onde começar a fazer o dito programa, sei q a parada eh com pilha e struct etc, mas nao sei como usa a notação, nao sei pra que ela serve hehhemas beleza, vo fica ai se alguem quise da uma explicada ou tive um codigo beleza

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha cara você precisa estudar mais, que tipo de profissional você pretende ser?????? corre atrás véio....ou você acha que sempre vão te entregar as coisas de mão beijada.....cara já pesquisou no google???? vai lah então que ta cheio de informação é só querer aprender....e outra você não vai aprender se não botar a mão na massa.....vai lah pesquisa e estuda ..... e se você tiver uma dúvida de sintaxe que tenha tentado fazer e não conseguiu....manda ai que nós ajudamos.....eu poderia te mandar esse programa, pois eu já fiz ele.... mas eu não vou ganhar nada com isso e nem você.....blza cara....e estuda .....

Compartilhar este post


Link para o post
Compartilhar em outros sites

aee..

nosso amigo agj ja disse tudo..

 

q tal dar uma olhada nesta apostila:

http://www.facens.br/alunos/material/Crmor...o_de_pilhas.doc

mto boa..

 

eu, em minha faculdade naum tive uma tao boa assim..

mas você vai ver que eh facil..

f*** eh qdo você entrar no conceito de arvores...

uhhhuuuu

por isso q eu amo programação..

mto loko

 

PKR.. leve estas criticas como algo construtivo..

nada de inhein inhein inhein...

rs flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pega aí:

 

Mas eu quero uma retribuição.

 

1° O programa aparece o nome do seu criador , tira fora no codigo fonte

2° Ele não mostra o calculo no fina descobre por que.

3° Me manda depois de feito. mauriciowallau@gmail.com

 

 

 

 

#include <iostream>

#include <stdlib.h>

#include <math.h>

 

#define TAM 255

#define upper© ( © + 'A' - 'a' )

 

using namespace std;

 

//---------------------- Prototipos

int get_prioridade( char );

float avalia( char, float, float );

 

//---------------------- Classes

 

template <class T>

class Pilha{

int topo;

T p[TAM];

public:

Pilha( void );

int vazia( void );

int insere( T );

int retira( T * );

};

 

template <class T>

class Lista{

int inicio;

int fim;

int num;

T l[TAM];

public:

Lista( void );

int vazia( void );

int insere( T );

int retira( T * );

};

 

//--------------- Metodos da Classe

 

template <class T> Pilha<T>::Pilha( void )

{

topo = 0;

}

 

template <class T> int Pilha<T>::vazia( void )

{

if( topo == 0 ) return 1;

else return 0;

}

 

template <class T> int Pilha<T>::insere( T x )

{

if( topo == TAM ) return 0; // Pilha esta cheia

topo++;

p[topo] = x;

return 1;

}

 

template <class T> int Pilha<T>::retira( T *x )

{

if( topo == 0 ) return 0; // Pilha vazia

*x = p[topo];

topo--;

return 1;

}

 

template <class T> Lista<T>::Lista( void )

{

inicio = 0;

fim = -1;

num = 0;

}

 

template <class T> int Lista<T>::vazia( void )

{

if( num == 0 ) return 1;

else return 0;

}

 

template <class T> int Lista<T>::insere( T x )

{

if( num == TAM ) return 0; // Lista cheia

fim = (fim+1 == TAM) ? 0 : fim+1;

l[fim] = x;

num++;

return 1;

}

 

template <class T> int Lista<T>::retira( T *x )

{

if( num == 0 ) return 0; // Lista vazia

*x = l[inicio];

inicio = (inicio+1 == TAM) ? 0 : inicio+1;

num--;

return 1;

}

 

 

 

//-------------------Procedimentos

 

inline int is_operando( char ch )

{

if( ( ch >= 'a' && ch <= 'z' ) || ( ch >= 'A' && ch <= 'Z' ) )

return 1; // Eh letra

else

if( ch >= '0' && ch <= '9' )

return 1; // Eh digito

else

return 0; // Nao eh letra nem digito

}

 

inline int is_operador( char ch )

{

if( ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '^' ||

ch == '(' || ch == ')' )

return 1;

else

return 0;

}

 

int get_prioridade( char ch )

{

switch( ch ){

case '+': return 1;

case '-': return 2;

case '*': return 3;

case '/': return 3;

case '^': return 4;

case '(': return 5;

}

return 0;

}

 

float avalia( char ch, float n1, float n2 )

{

switch( ch ){

case '-': return (n2 - n1);

case '+': return (n2 + n1);

case '*': return (n2 * n1);

case '/': return (n2 / n1);

case '^': return pow(n2, n1);

}

return 0;

}

 

int main()

{

char expr[TAM], pol[TAM], vet[43], ch;

Lista <char> lista;

Pilha <char> pilha;

Pilha <float> aval;

int i, val;

float vet_num[36], total, n1, n2;

 

cout << "Conversao e Avaliacao de Expressoes - V1.1(2003) - M.Carrard\n";

cout << "\nDigite a expressao (sem espacos): ";

cin >> expr;

 

for( i = 0; i<43; i++ ) vet = -1; // Vetor de presencas

 

i = 0;

while( expr != '\0' ){

 

if( is_operando( expr ) ){

if( !lista.insere( expr ) ){

cout << "Erro => Espaco insuficiente na lista!\n";

exit( 1 );

}

if( expr >= 97 ) expr = upper(expr);

vet[expr-48] = 1; // Indica presenca

}

else{

if( !is_operador( expr ) ){

cout << "Erro => Simbolo desconhecido na expressao: "

<< expr << "\n";

exit( 1 );

}

if( expr == ')' ){

while( !pilha.vazia() ){

pilha.retira( &ch );

if( ch == '(' ) break;

lista.insere( ch );

}

if( ch != '(' ){

cout << "Erro => Casamento de parenteses!\n";

exit( 1 );

}

}

else{

if( pilha.vazia() )

pilha.insere( expr );

else{

do{

if( !pilha.retira( &ch ) ){

pilha.insere( expr );

break;

}

if( ch == '-' && expr == '-' ){

pilha.insere( ch );

lista.insere( ch );

break;

}

if( ch == '(' ||

get_prioridade( ch ) < get_prioridade( expr ) ){

pilha.insere( ch );

pilha.insere( expr );

break;

}

else lista.insere( ch );

}while(1);

}

}

} // else isletra

 

i++;

 

} // While

while( pilha.retira( &ch ) ){

if( ch == '(' ){

cout << "Erro => Casamento de parenteses!\n";

exit( 1 );

}

else lista.insere( ch );

}

 

i = 0;

while( lista.retira( &ch ) )

pol[i++] = ch;

pol = '\0';

 

cout << "Expressao em notacao poloneza:\t";

cout << pol << "\n";

 

cout << "Digite os valores das variaveis para solucao:\n";

val = 0;

for( i=0; i<43; i++ )

if( vet == 1 ){

if( i >= 17 ){

ch = i+48;

cout << "\t " << ch << " = ";

vet = val++;

cin >> vet_num[vet];

}

else{

vet = val++;

vet_num[vet] = (float)i;

}

}

 

// Soluciona o problema

i = 0;

while( ( ch = pol[i++] ) != '\0' ){

if( is_operando( ch ) ){

if( ch >=97 ) ch = upper(ch);

aval.insere( vet_num[vet[ch-48]] );

}

else{

if( !aval.retira( &n1 ) || !aval.retira( &n2 ) ){

cout << "\nErro => Nao foi possivel avaliar a expressao!\n";

exit( 1 );

}

total = avalia( ch, n1, n2 );

aval.insere( total );

}

}

if( !aval.retira( &total ) )

cout << "Erro => Nao foi possivel avaliar a expressao!\n";

else

cout << "Avaliacao da expressao: " << total << "\n";

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria mto mais interessante fazer nosso colega RACIOCINAR na logica do problemaAssim o forum perde realmente o seu verdadeiro sentido.. que é o de discutir assuntos levantados por usuarios..Por favor, naum postem codigos prontos..

Compartilhar este post


Link para o post
Compartilhar em outros sites

concordo com você.....e tem outra....certamente o professor dele vai olhar este codigo e vai ver que nao foi ele quem fez.....os professores conhecem os seus alunos....e suas capacidades......cara cuidado se você copiar este codigo...eu nao aconselho.....tenta fazer pra nao tirar 0.....blza...o recado esta dado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

concordo com oq vcs falaram, eu nao vou copiar este código até pq nao aprendemos a programar templates e talz....apenas queria pra entender a logica e a base do programavaleu ae cara, qdo eu montar o meu eu repasso, isso é se eu montar, pois final de semestre to cheio de trabalho pra entrega e nem comecei hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

caraca agora que fui ver.....haehueahMauricio de Wallau você eh de onde???ali diz M. Carrard....esse cara era professor aqui da faculdade...interior do RS, na Unijui....você teve aula com ele onde?? falow

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.