Gerador de Tabela-Verdade

Slides:



Advertisements
Apresentações semelhantes
Árvores Passeios.
Advertisements

Programação em Java Prof. Maurício Braga
Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB.
Avaliador de Expressões
Collections Marco Antonio, Arquiteto de Software – TJDF Atualizado Dezembro/2008.
Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Java Básico Arrays Marco Antonio, Arquiteto de Software – TJDF Atualizado: Fevereiro/2009.
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
Projeto de Sistemas de Software Trabalho de Padrões de Projeto
Padrão de Projeto Iterator
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Generalização, Especialização e Conceitos
Iniciação ao Java – Márcio F. Campos
Árvores.
Walfredo Cirne walfredo.dsc.ufpb.br
Wagner Santos C. de Jesus
Programação Baseada em Objectos Desenho de TAD
Métodos Programação II
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Elementos de Classe, class wrappers.
Padrão de Projeto Chain of Responsability e Template Method
Curso de extensão em Desenvolvimento Web
Tipos Agregados Homogêneos e Listas
Unidade I: “Dê um mergulho rápido”
Professor: Hyggo Almeida
Prof. Rafael Mesquita Integração Numérica Prof. Rafael Mesquita
Informática Teórica Engenharia da Computação
Hashing - Espalhamento
Programação I Aula 2 (Métodos)
Banco de Dados de Objetos
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Orientada a Objetos Augusto Sampaio Jackson, Jean, Patrícia, Saulo Centro de Informática.
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Linguagem de Programação JAVA
Os métodos equals() e hashCode()
Orientação a Objetos e Java Graduação em Ciência da Computação
Pilhas Profa. Nádia Félix.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Wagner Santos C. de Jesus
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Programação Orientada a Objetos - Java
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Programação Orientada a Objetos - Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Aula Prática 4 Monitoria IP/CC (~if669).
Tradução Dirigida por Sintaxe
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Curso de Linguagem Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Funções Matemáticas e de String
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
M ÉTODOS DA C LASSE S TRING. FUNÇÕES COM STRING Uma string é um tipo texto que corresponde à união de um conjunto de caracteres. Em Java, as strings são.
Linguagem I Strings.
Módulo 9 Strings , Coleções e I/O
Estruturas de Dados I Segundo Período de 2008 Gabarito da Primeira Prova.
JAVA Sintaxe.
Aula Prática 5 05/05/2010. //Estrutura do método public int subtrair (int a, int b){ //Calcule a operação desejada. int resultado = a – b; //Retorne o.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Fundamentos da Linguagem C#
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
Coleções em Java - Parte 2
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Recursividade Profs. De Prog2 e Lab2.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Array e ArrayList LPOO – 01/09/14.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
Transcrição da apresentação:

Gerador de Tabela-Verdade Diego Correia Aragão (dca) Slides adaptados de Luiz Carlos d´Oleron (lcadb)

O Problema Modelar (sub-conjunto das) expressões da lógica proposicional (sintaxe e propriedades) Interpretar a cadeia com todas as suas possíveis valorações e construir sua tabela verdade. A especificação do projeto está em: http://www.cin.ufpe.br/~mlogica/tabela

Bem vindo ao mundo Virtual Desafios: Adaptar o modelo matemático a uma realidade virtual Para isso usaremos algumas linguagens que não são especializadas para isso: Java, C ou C++

Modelo de Negócios

Exemplo: (x + (-y)) (x+(-y)) Expressao x = new ExpressaoAtomica(‘x’); Expressao y = new ExpressaoAtomica(‘y’); Expressao negY = new Negacao(y); Expressao ou = new ExpressaoOU(x, negY); String e = ou.representacao(); System.out.println(e); (x+(-y))

Definição recursiva: representacao() //na classe ExpressaoAtomica String representacao(){ return this.simbolo + “”; } //na classe Negacao return “(-” + this.getE().representacao() + “)”; //na classe ExpressaoE, bem parecido na //ExpressaoOU return “(” + this.getE1().representacao() + “.” + this.getE2().representacao() + “)”;

Definição recursiva: listaSubExpressoes() //na classe ExpressaoAtomica List listaSubExpressoes (){ List retorno = new ArrayList(); //o conjunto de subexpressões de uma expressão //atomica é ela mesma String e = this.representacao(); retorno.add(e); return retorno; } //na classe Negacao //pega lista de sua sub-expressão List retorno = this.getE().listaSubExpressoes(); //adiciona a si mesma

Definição recursiva: listaSubExpressoes() //na classe ExpressaoBinaria List listaSubExpressoes (){ //pega lista de suas sub-expressões List retorno = this.getE1().listaSubExpressoes(); List temp = this.getE2().listaSubExpressoes(); Object o = null; Iterator i = temp .iterator(); while(i.hasNext()){ o = i.next(); //Só adiciona se não contiver if(!retorno.contains(o)){ retorno.add(o); } //adiciona a si mesma String e = this.representacao(); retorno.add(e); return retorno;

E agora? Temos duas missões: Construir uma Expressão a partir de uma String Interpretá-la, calculando suas possíveis valorações

Solução Vamos usar o conceito que nos foi passado pelo Teorema da Extensão Homomórfica Única, utilizando recursão Usaremos recursão para: Dada uma expressão φ qualquer, identificaremos suas sub-expressões (se existirem), construindo/calculando recursivamente

Construindo a expressão Dada uma string s: Se é de tamanho 1, construímos uma nova ExpressaoAtomica Se não, encontramos seu operador raiz*, e criamos uma Expressao(Neg, E, Ou ou Imp), a partir da operação correspondente a este char, utilizando recursão nos seus operandos

Encontrando o operador raiz O operador raiz é o operador que fica na raiz da árvore da expressão: Para encontrá-lo vamos contar

Encontrando o operador raiz Desconsidere o primeiro ‘(’ e o último ‘)’ Percorra a expressão e vá contando sempre a diferença ∆ entre o número de ‘(’ e o número de ‘)’ O primeiro operador (+,- ou .) que você encontrar quando (∆ == 0) é o operador raiz.

Interpretando expressões Para interpretar (i.e. calcular) as expressões, devemos implementar o método de calcular obedecendo a tabela-verdade de cada operador, e calcular a partir da chamada recursiva do método com seus operandos (como na definição do Teorema de Extensão H.U.) O método deverá se apoiar num conjunto de valorações pré-definidos para os casos base (i.e. v(x) = 1, onde x é atômica)

Agora é só imprimir Agora que sabemos modelar uma Expressao a partir de uma String, e temos métodos para encontrar suas sub-expressões, seu valor-verdade, e sua representação como String, é só imprimir as tabelas conforme a especificação do projeto  Cuidado para não adicionar sub-expressões repetidas!

Observações Para projetos em Java, tirem bem proveito de conceitos de Orientação a Objetos Esta não é a única forma de resolver o projeto, é possível resolvê-lo utilizando pilhas e diversas outras maneiras, fica a critério do aluno utilizar o método que se sentir mais à vontade. Boa Sorte *Adaptado por Diego Aragão (dca), a partir de slides originais produzidos por Luiz Carlos (lcadb), para o projeto do Avaliador de Expressões (na época)