Procurar
Últimos assuntos
Quem está conectado?
Há 2 usuários online :: 0 registrados, 0 invisíveis e 2 visitantes Nenhum
[ Ver toda a lista ]
O recorde de usuários online foi de 192 em Ter Out 26, 2021 6:07 am
Notação Polonesa Reversa (infixa)
Página 1 de 1
Notação Polonesa Reversa (infixa)
Vamos Começar o desenvolvimento dessa maldita calculadora !!
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
Primeira tentativa ....
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);
}
juk- Mensagens : 264
Data de inscrição : 02/04/2012
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
Dom Abr 07, 2024 3:16 pm por juk
» Backup FULL CHROME
Dom Abr 07, 2024 2:59 pm por juk
» Dowloand de Videos youtube Sem Permissão adminstrador
Seg Jan 02, 2023 2:13 pm por juk
» Cypecad 2019
Seg Jan 02, 2023 1:41 pm por juk
» Atualizando é instalando o IExplorer 11 no windows 7
Ter Ago 30, 2022 10:54 pm por juk
» COMO HABILITAR INTERNET EXPLORER NO WINDOWS 10
Sex Abr 29, 2022 6:43 pm por juk
» Usando o Monitor de Recursos do sistema para identificar processos Associados.
Qua Abr 06, 2022 10:19 am por juk
» Fazendo backup do anydesk
Ter Abr 05, 2022 7:30 pm por juk
» Recuperando Favoritos, senhas apos formatar o navegador (Mozilla Firefox ou Chrome)
Ter Abr 05, 2022 7:28 pm por juk