gerador de tabela-verdade

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

Upload: liz

Post on 13-Jan-2016

25 views

Category:

Documents


0 download

DESCRIPTION

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) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Gerador de Tabela-Verdade

Gerador de Tabela-Gerador de Tabela-VerdadeVerdade

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

Page 2: Gerador de Tabela-Verdade

O ProblemaO Problema

1.1. Modelar (sub-conjunto das) expressões Modelar (sub-conjunto das) expressões da lógica proposicional (sintaxe e da lógica proposicional (sintaxe e propriedades)propriedades)

2.2. Interpretar a cadeia com todas as suas Interpretar a cadeia com todas as suas possíveis valorações e construir sua possíveis valorações e construir sua tabela verdade.tabela verdade.

3.3. A especificação do projeto está em:A especificação do projeto está em:http://www.cin.ufpe.br/~mlogica/tabela

Page 3: Gerador de Tabela-Verdade

Bem vindo ao mundo VirtualBem vindo ao mundo Virtual

Desafios:Desafios: Adaptar o modelo matemático a Adaptar o modelo matemático a

uma realidade virtualuma realidade virtual Para isso usaremos algumas Para isso usaremos algumas

linguagens que não são linguagens que não são especializadas para isso:especializadas para isso:

Java, C ou C++Java, C ou C++

Page 4: Gerador de Tabela-Verdade

Modelo de NegóciosModelo de Negócios

Page 5: Gerador de Tabela-Verdade

Exemplo: (x + (-y))Exemplo: (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))

Page 6: Gerador de Tabela-Verdade

Definição recursiva: Definição recursiva: representacao()representacao()//na classe ExpressaoAtomicaString representacao(){

return this.simbolo + “”;}

//na classe NegacaoString representacao(){

return “(-” + this.getE().representacao() + “)”;

}

//na classe ExpressaoE, bem parecido na//ExpressaoOUString representacao(){

return “(” + this.getE1().representacao() + “.” + this.getE2().representacao() + “)”;

}

Page 7: Gerador de Tabela-Verdade

Definição recursiva: Definição recursiva: listaSubExpressoes()listaSubExpressoes()//na classe ExpressaoAtomicaList listaSubExpressoes (){

List retorno = new ArrayList();//o conjunto de subexpressões de uma expressão //atomica é ela mesmaString e = this.representacao();retorno.add(e);return retorno;

}

//na classe NegacaoList listaSubExpressoes (){

//pega lista de sua sub-expressãoList retorno = this.getE().listaSubExpressoes();//adiciona a si mesmaString e = this.representacao();retorno.add(e);return retorno;

}

Page 8: Gerador de Tabela-Verdade

Definição recursiva: Definição recursiva: listaSubExpressoes()listaSubExpressoes()//na classe ExpressaoBinariaList listaSubExpressoes (){

//pega lista de suas sub-expressõesList 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 contiverif(!retorno.contains(o)){

retorno.add(o);}

}//adiciona a si mesmaString e = this.representacao();retorno.add(e);return retorno;

}

Page 9: Gerador de Tabela-Verdade

E agora?E agora?

Temos duas missões:Temos duas missões: Construir uma Expressão a partir Construir uma Expressão a partir

de uma Stringde uma String Interpretá-la, calculando suas Interpretá-la, calculando suas

possíveis valoraçõespossíveis valorações

Page 10: Gerador de Tabela-Verdade

SoluçãoSolução

Vamos usar o conceito que nos Vamos usar o conceito que nos foi passado pelo Teorema da foi passado pelo Teorema da Extensão Homomórfica Única, Extensão Homomórfica Única, utilizando recursãoutilizando recursão

Usaremos recursão para:Usaremos recursão para: Dada uma expressão Dada uma expressão φφ qualquer, qualquer,

identificaremos suas sub-identificaremos suas sub-expressões (se existirem), expressões (se existirem), construindo/calculando construindo/calculando recursivamenterecursivamente

Page 11: Gerador de Tabela-Verdade

Construindo a expressãoConstruindo a expressão

Dada uma string s:Dada uma string s: Se é de tamanho 1, construímos Se é de tamanho 1, construímos

uma nova ExpressaoAtomicauma nova ExpressaoAtomica Se não, encontramos seu Se não, encontramos seu

operador raiz*operador raiz*, e criamos uma , e criamos uma Expressao(Neg, E, Ou ou Imp), a Expressao(Neg, E, Ou ou Imp), a partir da operação correspondente partir da operação correspondente a este char, utilizando recursão a este char, utilizando recursão nos seus operandosnos seus operandos

Page 12: Gerador de Tabela-Verdade

Encontrando o operador raizEncontrando o operador raiz

O operador raiz é o operador que O operador raiz é o operador que fica na raiz da árvore da fica na raiz da árvore da expressão:expressão:

Para encontrá-lo vamos contarPara encontrá-lo vamos contar

Page 13: Gerador de Tabela-Verdade

Encontrando o operador raizEncontrando o operador raiz

1.1. Desconsidere o primeiro ‘(’ e o Desconsidere o primeiro ‘(’ e o último ‘)’último ‘)’

2.2. Percorra a expressão e vá Percorra a expressão e vá contando sempre a diferença contando sempre a diferença ∆∆ entre o número de ‘(’ e o entre o número de ‘(’ e o número de ‘)’número de ‘)’

3.3. O primeiro operador (+,- ou .) O primeiro operador (+,- ou .) que você encontrar quando (que você encontrar quando (∆ ∆ == 0) é o operador raiz.== 0) é o operador raiz.

Page 14: Gerador de Tabela-Verdade

Interpretando expressõesInterpretando expressões

Para interpretar (i.e. calcular) as Para interpretar (i.e. calcular) as expressões, devemos implementar o expressões, devemos implementar o método de calcular obedecendo a método de calcular obedecendo a tabela-verdade de cada operador, e tabela-verdade de cada operador, e calcular a partir da chamada recursiva calcular a partir da chamada recursiva do método com seus operandos do método com seus operandos (como na definição do Teorema de (como na definição do Teorema de Extensão H.U.)Extensão H.U.)

O método deverá se apoiar num O método deverá se apoiar num conjunto de valorações pré-definidos conjunto de valorações pré-definidos para os casos base (i.e. v(x) = 1, onde para os casos base (i.e. v(x) = 1, onde x é atômica)x é atômica)

Page 15: Gerador de Tabela-Verdade

Agora é só imprimirAgora é só imprimir

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

Cuidado para não adicionar sub-Cuidado para não adicionar sub-expressões repetidas!expressões repetidas!

Page 16: Gerador de Tabela-Verdade

ObservaçõesObservações

Para projetos em Java, tirem bem Para projetos em Java, tirem bem proveito de conceitos de Orientação a proveito de conceitos de Orientação a ObjetosObjetos

Esta não é a única forma de resolver o Esta não é a única forma de resolver o projeto, é possível resolvê-lo utilizando projeto, é possível resolvê-lo utilizando pilhas e diversas outras maneiras, fica pilhas e diversas outras maneiras, fica a critério do aluno utilizar o método a critério do aluno utilizar o método que se sentir mais à vontade.que se sentir mais à vontade.

Boa SorteBoa Sorte

**Adaptado por Diego Aragão (dca), a partir de slides originais produzidos por Luiz Carlos (lcadb), 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)para o projeto do Avaliador de Expressões (na época)