Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Últimos assuntos
Relogio

Notação Polonesa Reversa (infixa)

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Notação Polonesa Reversa (infixa)

Mensagem  juk em Qua Jan 30, 2013 3:48 pm

Vamos Começar o desenvolvimento dessa maldita calculadora !! afro
Vamos entender primeiramente....
Introdução

O projeto consiste em calcular uma expressão aritmética utilizando duas estruturas de dados, fila e pilha. Inicialmente lemos uma expressão aritmética valida como exemplo temos A+(B/C + D^E) – F , em seguida devemos colocar cada elemento em uma fila que chamamos que representara a expressão em sua notação infixa, depois devemos converter essa fila infixa para uma fila que guarde a representação pósfixa da expressão. E com a expressão posfixa conseguimos calcular o resultado.

Exemplos de notação

Infixa Pósfixa

1) A A

2) A + B AB+

3) A – B * C ^ D + E / F ABCD^*-EF/+

4) C – A / E + B CAE/-B+

5) A + (B * C) / (K + G) ABC*KG+/+

A logica para converter de infixa para pósfixa

1)Iniciar uma pilha vazia
2)Realizar uma busca na fila infixa :
3)Se encontrar um operador (+, – , * , / , ^)
4)Se a pilha não estiver vazia e existir um operador com prioridade maior do que o encontrado na busca, desempilhe o operador e coloque na fila pósfixa.
5)Empilhe o operador encontrado.
Se encontrar um parentese de abertura empilhe
6)Ao encontrar um parentese de fechamento desempilhe um operador e coloque na fila pósfixa ate encontrar o parentrese de fechamento.
7)Ao final desempilhe os elementos da pilha colocando na fila pósfixa

A tabela de prioridade dos operadores
Operador Prioridade
+ 1
-1
*2
/2
^ 3

Primeira tentativa ....
Código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void leitura ()
{
char expre[10];
int n;
int i;
         
       printf("Digite a Expresão:");
        scanf(" %[^\n]",expre);
        n = strlen(expre);
        printf("Lidos %d\n",n);
        for (i=0; i<n; i++)
        {
      if(expre[2] == '+')
      {
         printf("%c + %c=",expre[0],expre[1]);
         printf("%d\n",(expre[0]- 48) + (expre[1] - 48));
         break;
      }
      if(expre[2] == '-')
      {
         printf("%c - %c=",expre[0],expre[1]);
         printf("%d\n",(expre[0] - 48) - (expre[1] - 48));
         break;
      }
      if(expre[2] == '/')
      {
         printf("%c / %c=",expre[0],expre[1]);
         printf("%d\n",(expre[0] -48) / (expre[1] - 48));
         break;
      }
      if(expre[2] == '*')
      {
         printf("%c * %c=",expre[0],expre[1]);
         printf("%d\n",(expre[0] - 48) * (expre[1] - 48));
         break;
      }
   }
}

int main()
{
   printf("Notacao Polonesa Reversa que calcula digitos de 0 -9 \n");
   leitura ();
   getchar();
   getchar();
   main();
   return(0);
}
Nessa primeira tentativa conseguimos ler 2 algarismos e um operador
avatar
juk

Mensagens : 225
Data de inscrição : 02/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum