EXPRESSÕES ARITMÉTICAS

Slides:



Advertisements
Apresentações semelhantes
«Forte do Bom Sucesso (Lisboa) – Lápides 1, 2, 3» «nomes gravados, 21 de Agosto de 2008» «Ultramar.TerraWeb»
Advertisements

IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Marco Antonio Montebello Júnior
UNICAMP Universidade Estadual de Campinas Centro Superior de Educação Tecnológica Divisão de Telecomunicações Propagação de Ondas e Antenas Prof.Dr. Leonardo.
INFORMAÇÕES COMPLEMENTARES
Palestras, oficinas e outras atividades
A busca das mulheres para alcançar seu espaço dentro das organizações
Material pedagógico Multiplicar x 5 Clica!
Vamos contar D U De 10 até 69 Professor Vaz Nunes 1999 (Ovar-Portugal). Nenhuns direitos reservados, excepto para fins comerciais. Por favor, não coloque.
Capa Disciplina: Ajustamento de Observações
Operadores e Funções do LINGO
Exercício do Tangram Tangram é um quebra-cabeças chinês no qual, usando 7 peças deve-se construir formas geométricas.
Nome : Resolve estas operações começando no centro de cada espiral. Nos rectângulos põe o resultado de cada operação. Comprova se no final.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 3.
Software Básico Silvio Fernandes
Curso de ADMINISTRAÇÃO
PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM PEDIATRIA E SAÚDE DA CRIANÇA Início do Mestrado: 1995 Início do Doutorado: 2004 Formou 63 Mestres e 3 doutores Conceito.
Série de Exercícios.
Relações Adriano Joaquim de O Cruz ©2002 NCE/UFRJ
Arquivos Seqüenciais Inhaúma Neves Ferraz
EXPRESSÕES ARITMÉTICAS
Aplicações de Pilhas Pilhas são fundamentais em diversas áreas da computação: Sistemas Operacionais Arquitetura de Computadores Compiladores Entre outros.
FUNÇÃO MODULAR.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Paulo Sérgio Rodrigues PEL205
Aula 4 Nomes, Vinculações, Tipos e Escopos
Aula 6 Subprogramas Universidade do Vale do Rio dos Sinos
EXEMPLOS DE ESTRUTURAS PROTENDIDAS
A Tabuada.
Mecânica dos Sólidos não Linear
Programação Baseada em Objectos Desenho de TAD
Nossa Velha - Nova Cruz Alta Parte 31.
Provas de Concursos Anteriores
Renda até 2 SM.
Hamburgo, Alemanha Definir o caminho que irá permitir a Lions Clubs International alcançar o seu potencial pleno como organização.
Diagnósticos Educativos = Diagnósticos Preenchidos 100% = 1.539
PESQUISA SOBRE PRAZO MÉDIO DA ASSISTÊNCIA NA SAÚDE SUPLEMENTAR
(CESPE/ Técnico Judiciário do TRT 17ª Região/ES) O Superior Tribunal de Justiça entende que o candidato aprovado em concurso público dentro do limite.
MECÂNICA - DINÂMICA Exercícios Cap. 13, 14 e 17. TC027 - Mecânica Geral III - Dinâmica © 2013 Curotto, C.L. - UFPR 2 Problema
1 CENTRO DE DESENVOLVIMENTO E PLANEJAMENTO REGIONAL – 2006 P Ó S-GRADUA Ç ÃO EM ECONOMIA Microeconomia I Prof.: Edson Domingues Cap í tulo II: Escolha.
CATÁLOGO GÉIA PÁG. 1 GÉIA PÁG. 2 HESTIA PÁG. 3.
PROCESSOS PRINCIPAIS Alunos - Grau de Satisfação 4971 avaliações * Questões que entraram em vigor em 2011 ** N.A. = Não Aplicável Versão: 07/02/2012 INDICADORES.
LINHAS MAIS RECLAMADAS Ranking Negativo para Fiscalização Direcionada Conservação - Frota ANO IV – Nº 11.
Estruturas de Dados com Jogos
Lemas (Sudkamp)  .
Trabalho sobre Cor Thiago Marques Toledo.
FISCALIZAÇÃO DIRECIONADA CONDUTA - AUXILIAR ANO III – Nº 05.
Medidas de posição  Estudando as distribuições de  frequência,  percebe-se que existe uma  posição de  concentração dos valores, que podem estar mais concentrados no início, no meio ou no 
Coordenação Geral de Ensino da Faculdade
Múltiplos de um número Sonia Regina de Souza Guedes.
Plataforma Brasil – Submissão de pesquisa
PERFIL DOS BENEFICIÁRIOS E NÃO-BENEFICIÁRIOS DO PROGRAMA BOLSA FAMÍLIA EM TERMOS DE MERCADO DE TRABALHO: CONSIDERAÇÕES METODOLÓGICAS E SUBSTANTIVAS Alessandra.
Tributação da Exportação nas Empresas optantes pelo Simples Nacional
Projeto Marcas que Eu Gosto 1 PROJETO MARCAS QUE EU GOSTO Estudos Quantitativo de Consumidores Janeiro / 2005.
Núcleo de Mídia – Comercial Ranking Nacional de Circulação - Domingos Evolução Mês* 3,38% 2,20% 1,39% 1,13% -4,84% 0,49% -6,16% -0,07% -0,71% 0,27% 0,43%
1/40 COMANDO DA 11ª REGIÃO MILITAR PALESTRA AOS MILITARES DA RESERVA, REFORMADOS E PENSIONISTAS - Mar 06 -
Projeto Medindo minha escola.
C ORROPIOS, C ARDINCHAS E C ÃES G RANDES O LIVRO de José Paixão em imagens – com pistas de leitura propostas por por www.joraga.net.
Nossa Velha - Nova Cruz Alta Parte 21.
1 2 Observa ilustração. Cria um texto. Observa ilustração.
DIEGO RICARDO DE ARAUJO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO INSTITUTO DE CIÊNCIA EXATAS UNIVERSIDADE FEDERAL DE JUIZ DE FORA Seleção de Características.
MATRICIAL CONSULTORIA LTDA. PREFEITURA MUNICIPAL DE GARIBALDI 23/10/ : ATENÇÃO Os locais descritos nas planilhas anexas não correspondem ao total.
1 Aplicações do Fecho Regular. 2 A interseção de uma linguagem livre de contexto e uma linguagem regular é uma linguagem livre de contexto livre de contexto.
MATRIZ DE PARENTESCO Nas equações do Modelo Misto, é incluída a matriz de parentesco ( a inversa desta, A-1). Para que? A matriz de parentesco de n indivíduos.
CONCEITOS FUNDAMENTAIS
Olhe fixamente para a Bruxa Nariguda
Máquina de Turing Universal
3ª PESQUISA DE REMUNERAÇÃO
Equipe Bárbara Régis Lissa Lourenço Lucas Hakim Ricardo Spada Coordenador: Gabriel Pascutti.
AM020C A interface entre Meio Ambiente, Sociedade e Economia Indicadores de produtividade e empregabilidade da agricultura do Brasil. Aluna Andressa Santos.
Transcrição da apresentação:

EXPRESSÕES ARITMÉTICAS Inhaúma Neves Ferraz Departamento de Ciência da Computação Universidade Federal Fluminense ferraz@ic.uff.br

Sumário Definições Avaliação de expressões Transformação de expressões infixas em pós-fixas Algoritmo com bastante abstração Exemplo Declaração de funções auxiliares Avaliação de expressões pós-fixas

Definições Uma expressão aritmética é composta de operandos, operadores e delimitadores. As operações são definidas por seus operadores. A ordem de avaliação das operações depende dos delimitadores e da prioridade dos operadores. As expressões aritméticas podem ser representas por 3 tipos de notação. Infixa Pré-fixa Pós-fixa

Avaliação de expressões (1) A avaliação de expressões na forma pós-fixa é bastante simplificada por diversas razões: Não há necessidade de emprego de delimitadores; A prioridade dos operadores deixa de ser relevante; As expressões podem ser analisadas fazendo uma varredura do início para o final armazenando os operandos em uma pilha, aplicando os operadores sobre os elementos da pilha e empilhando os resultados das operações efetuadas.

Avaliação de expressões (2) A avaliação de expressões aritméticas pode ser feita transformando as expressões infixas, familiares aos seres humanos, em expressões pós-fixas e, a seguir, avaliando o resultado das expressões pós-fixas obtidas. Para a transformação de expressões aritméticas infixas em pós-fixas e sua avaliação é conveniente definir diversas funções auxiliares.

Transformação de expressões aritméticas infixas em pós-fixas Esta transformação será mostrada da seguinte maneira: Inicialmente será apresentado um algoritmo com bastante abstração Será apresentado um exemplo Finalmente serão apresentadas as declarações de funções utilizadas em um algoritmo com pouca abstração (para implementação)

Transformação de expressões infixas em pós-fixas

Conversão da forma infixa para pós-fixa (algoritmo com bastante abstração) A entrada é um vetor infixVect de tokens (strings) de uma expressão infixa A saída é um vetor postficVect de tokens (strings) que armazena a expressão infixa correspondente Utilizar uma pilha stackVector de tokens para armazenar operadores Os tokens são operandos, operadores e delimitadores O processamento consistem em uma repetição que analisa cada token de entrada e gerencia a pilha e a transferência para a saída A repetição continua enquanto não ocorrer erro e não terminar a expressão infixa Quando todos os tokens de infixVect tiverem sido processados, repetidamente desempilhar um token de stackVect e adicioná-lo a postfixVect até esvaziar stackVect

Conversão da forma infixa para pós-fixa (passos da repetição) Caso o token seja: um operando Incluí-lo no final do vetor postfixVect um “(“ Empilhar o token x em stackVect um “)” Repetidamente desempilhar um token de stackVect e adicioná-lo ao vetor postfixVect até encontrar “(“ no final da pilha stackVect Desempilhar “(“ de stackVect Se stackVect esvaziar antes de encontrar um “(“, a expressão de entrada não é válida. um operador Se stackVect estiver vazia ou o token de entrada tiver prioridade maior do que a operador topo de pilha Empilhar o token de entrada. Caso contrário desempilhar o token de stackVect, adicioná-lo ao vetor postfixVect Repetir a comparação do token de entrada com o novo topo de pilha

Conversão da forma infixa para pós-fixa infixVect ( a + b - c ) * d – ( e + f ) postfixVect stackVect

Conversão da forma infixa para pós-fixa infixVect a + b - c ) * d – ( e + f ) postfixVect ( stackVect

Conversão da forma infixa para pós-fixa infixVect + b - c ) * d – ( e + f ) postfixVect a ( stackVect

Conversão da forma infixa para pós-fixa infixVect b - c ) * d – ( e + f ) postfixVect a + ( stackVect

Conversão da forma infixa para pós-fixa infixVect - c ) * d – ( e + f ) postfixVect a b + ( stackVect

Conversão da forma infixa para pós-fixa infixVect c ) * d – ( e + f ) postfixVect a b + - ( stackVect

Conversão da forma infixa para pós-fixa infixVect ) * d – ( e + f ) postfixVect a b + c - ( stackVect

Conversão da forma infixa para pós-fixa infixVect * d – ( e + f ) postfixVect a b + c - stackVect

Conversão da forma infixa para pós-fixa infixVect d – ( e + f ) postfixVect a b + c - * stackVect

Conversão da forma infixa para pós-fixa infixVect – ( e + f ) postfixVect a b + c - d * stackVect

Conversão da forma infixa para pós-fixa infixVect ( e + f ) postfixVect a b + c – d * - stackVect

Conversão da forma infixa para pós-fixa infixVect e + f ) postfixVect a b + c – d * ( - stackVect

Conversão da forma infixa para pós-fixa infixVect + f ) postfixVect a b + c – d * e ( - stackVect

Conversão da forma infixa para pós-fixa infixVect f ) postfixVect a b + c – d * e + ( - stackVect

Conversão da forma infixa para pós-fixa infixVect ) postfixVect a b + c – d * e f + ( - stackVect

Conversão da forma infixa para pós-fixa infixVect postfixVect a b + c – d * e f + - stackVect

Conversão da forma infixa para pós-fixa infixVect postfixVect a b + c – d * e f + - stackVect

Conversão da forma infixa para pós-fixa infixVect ( a + b * c ) * d – ( e + f ) postfixVect stackVect

Conversão da forma infixa para pós-fixa infixVect a + b * c ) * d – ( e + f ) postfixVect ( stackVect

Conversão da forma infixa para pós-fixa infixVect + b * c ) * d – ( e + f ) postfixVect a ( stackVect

Conversão da forma infixa para pós-fixa infixVect b * c ) * d – ( e + f ) postfixVect a + ( stackVect

Conversão da forma infixa para pós-fixa infixVect * c ) * d – ( e + f ) postfixVect a b + ( stackVect

Conversão da forma infixa para pós-fixa infixVect c ) * d – ( e + f ) postfixVect a b * + ( stackVect

Conversão da forma infixa para pós-fixa infixVect ) * d – ( e + f ) postfixVect a b c * + ( stackVect

Conversão da forma infixa para pós-fixa infixVect ) * d – ( e + f ) postfixVect a b c * + ( stackVect

Conversão da forma infixa para pós-fixa infixVect * d – ( e + f ) postfixVect a b c * + stackVect

Conversão da forma infixa para pós-fixa infixVect d – ( e + f ) postfixVect a b c * + * stackVect

Conversão da forma infixa para pós-fixa infixVect – ( e + f ) postfixVect a b c * + d * stackVect

Conversão da forma infixa para pós-fixa infixVect ( e + f ) postfixVect a b c * + d * - stackVect

Conversão da forma infixa para pós-fixa infixVect e + f ) postfixVect a b c * + d * ( - stackVect

Conversão da forma infixa para pós-fixa infixVect + f ) postfixVect a b c * + d * e ( - stackVect

Conversão da forma infixa para pós-fixa infixVect f ) postfixVect a b c * + d * e + ( - stackVect

Conversão da forma infixa para pós-fixa infixVect ) postfixVect a b c * + d * e f + ( - stackVect

Conversão da forma infixa para pós-fixa infixVect postfixVect a b c * + d * e f + - stackVect

Conversão da forma infixa para pós-fixa infixVect postfixVect a b c * + d * e f + - stackVect

Funções auxiliares Transformação de expressões aritméticas infixas em pós-fixas isoperand isdigit prio expon oper orcd postfix Avaliação de expressões aritméticas pós-fixas eval

Transformação de expressões aritméticas infixas em pós-fixas (1) isoperand Recebe um caractere, ou “token”, e retorna verdadeiro (TRUE) quando o caractere não for +, -, *, /, , (, ). isdigit Recebe um caractere, ou “token”, e retorna TRUE quando o “token” for numérico.

Transformação de expressões aritméticas infixas em pós-fixas (2) prio Recebe um “token”, que seja operador e retorna 1 caso o operador seja + ou - 2 caso o operador seja * ou / 3 caso o operador seja ^ 0 em caso contrário expon Recebe dois reais e retorna o valor do primeiro real elevado à potencia igual ao segundo real oper Recebe um “token” (operador) e dois reais (operandos) e retorna o resultado da aplicação do operador aos dois operandos

Transformação de expressões aritméticas infixas em pós-fixas (3) prcd Recebe dois “tokens”, representando operadores e retorna TRUE quando o primeiro operador tem precedência sobre o segundo operador ao aparecer à esquerda deste último em uma expressão infixa sem parênteses. Casos particulares ocorrem com o tratamento de parênteses.

Transformação de expressões aritméticas infixas em pós-fixas (4) Regras de tratamento de precedência de parênteses Ao entrar um ‘)’ saem todos os elementos até encontrar um ‘(‘. Ambos os delimitadores são descartados.

Transformação de expressões aritméticas infixas em pós-fixas (5) postfix Recebe dois strings. O primeiro string (de entrada) representa uma expressão aritmética sob a forma infixa. O segundo string serve para retornar uma expressão aritmética na forma pós-fixa. O string de entrada é varrido do início até o final. Se o token do string de entrada for um operando é imediatamente copiado para o string de saída Se o token de entrada for um operador, enquanto houver operadores empilhados com precedência maior do que o operador de entrada, estes operadores que estavam empilhados são transferidos para a expressão de saída O operador de entrada é empilhado. Ao término da varredura os operadores são desempilhados e copiados para a expressão de saída Os delimitadores não são transferidos para o string de saída.

Avaliação de expressões aritméticas pós-fixas eval Recebe um string que representa uma expressão infixa e faz uma varredura do início para o final do string Se o token corrente for um operando deve ser empilhado sob a forma de real Se o token corrente for um operador devem ser desempilhados dois operandos sobre os quais o operador vá atuar O resultado da aplicação do operador aos operandos é empilhado Ao término da varredura do string a função retorna o topo da pilha

Avaliação de expressões pós-fixas

Avaliação de expressões aritméticas pós-fixas Esta avaliação será mostrada da seguinte maneira: Inicialmente será apresentado um algoritmo com bastante abstração Será apresentado um exemplo

Avaliação de expressões aritméticas pós-fixas Ler os tokens de um vetor de tokens (strings) postfixVect contendo uma expressão pós-fixa Quando o token for um operando Empilhá-lo em stackVect Quando o token for um operador Desempilhar de stackVect dois operandos Aplicar o operador aos dois operandos desempilhados de stackVect obtendo um valor (novo operando) Empilhar em stackVect o valor obtido da aplicação do operador aos operandos desempilhados Ao término da varredura do string de postfixVect a função retorna o topo da pilha

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Situação inicial stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Empilhado o operando a a stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Empilhado o operando b b a stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Desempilhados operandos a e b Operador + aplica-se a a e b stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Empilhado o resultado a + b a + b stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Empilhado o operando c c a + b stackVect

Avaliação de expressões pós-fixas postfixVect a b + c - d * e f + - Desempilhados operandos (a + b) e c Operador - aplica-se a (a + b) e c stackVect

Avaliação de expressões pós-fixas postfixVect a b + c - d * e f + - Empilhado o resultado (a + b - c) a + b - c stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Empilhado o operando d d a + b - c stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Desempilhados (a+b-c) e d Operador * aplica-se a (a+b-c) e d stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Empilhado o operando (a+b-c) * d (a + b - c) * d stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Empilhado o operando e e (a + b - c) * d stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Empilhado o operando f f e (a + b - c) * d stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Desempilhados operandos e e f Operador + aplica-se a e e f (a + b - c) * d stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Empilhado operando e + f e + f (a + b - c) * d stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Desempilhados operandos (a+b-c)*d e (e+ f) Operador - aplica-se a (a+b-c)*d e (e+ f) stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Empilhado (a + b - c) * d – (e + f) (a + b - c) * d – (e + f) stackVect

Avaliação de expressões pós-fixas postfixVect a b + c – d * e f + - Saída obtida Desempilhar (a + b - c) * d – (e + f) stackVect