Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1 Theme created by Sakari Koivunen and Henrik Omma Released under the LGPL license. 1
Expressões Lógicas e o tipo Boolean importante para a tomada de decisão; tipo boolean: tipo de dados para representar a satisfação ou não de uma condição; George Boole: estudou e formalizou operações com estes tipos de valores. 2
O número cinco é maior que zero Proposições Lógicas sentenças matemáticas: afirmações sobre elementos matemáticos; O número três é par O número cinco é maior que zero Proposições lógicas: afirmações sobre elementos do cotidiano. Hoje está chovendo Maria é irmã de José uma proposição lógica é verdadeira ou falsa 3
Sentenças fechadas e abertas Sentenças fechadas: todos os componentes da sentença estão explicitados, podendo ser avaliada imediatamente, conferindo o que elas afirmam com o mundo ao qual elas se referem; 7 + 3 < 20 Sentenças abertas: alguns componentes da sentença não estão devidamente explicitados. Para avaliá-la é preciso instanciar esses componentes x > 5
Flamengo não é o melhor time do Rio de Janeiro Sentenças compostas Formada a partir das proposições lógicas simples Hoje é domingo e faz sol 3 > 2 e 3 < 10 Flamengo não é o melhor time do Rio de Janeiro
Avaliação de sentenças compostas Como se avalia esse tipo de sentença? Hoje faz sol e eu vou à praia Nesta manhã Joãozinho não vai à escola Amanhã choverá ou ficará nublado
Tabelas de verdade Palavras lógicas: e, ou e não e p q p e q V F ou p p ou q V F nã o p não p V F
aval :: <sentença> {True, False} O tipo de dados boolean Formado pelas constantes True e False e as operações lógicas aval :: <sentença> {True, False}
Operador lógico (Haskell) Operadores Lógicos Operação lógica Operador lógico (Haskell) e && ou || não not
Operadores relacionais significado exemplo resultado == igualdade (2 + 3) == (8 – 3) True /= Diferença 5 /= (4 * 2 -3) False < Menor (2 + 3) < 6 <= Menor ou igual (2 * 3) <= 6 > Maior (4 + 2) > (2 * 3) >= Maior ou igual (8 – 3 * 2) >= (15 div 3)
Qual é a resposta da avaliação das expressões abaixo? > 3 < 5 && 7 > 2 > (3 + 5) == 8 && 30 /= 24 && 10 > 4 > not (7 > 8) || 4^2 == 16 && 50.5 <= 100
Definição de funções booleanas Funções booleanas: o contradomínio destas funções consiste no conjunto {True, False} Exemplos: Verificar se um número é ímpar: impar x = mod x 2 /= 0 Verificar se um número pertence ao intervalo [0,1]: intervalo0-1 x = x >= 0 && x <= 1
Mais exemplos Verificar se um número está dentro do intervalo [a,b], com a < b; Verificar se um número é maior que o outro; Verificar se um ponto pertence ao primeiro quadrante do plano cartesiano
Hierarquia dos operadores relacionais e lógicos Operadores aritméticos: todos estão no mesmo nível de hierarquia, que está abaixo dos operadores aritméticos e de funções e primitivas; Operadores lógicos && e ||: estão abaixo dos operadores aritméticos e o operador && tem precedência sobre ||; O operador not tem prioridade idêntica a qualquer outra primitiva do Haskell; Se a expressão possui operadores no mesmo nível de hierarquia, são avaliados da esquerda para a direita.
Exemplos > 3+4 > 7 False :: Bool > 3>4 && 5 < 9 || 3 ==3 True :: Bool
Exercício Faça uma função que verifique se um ponto P (x, y) pertence ao círculo de raio r e centro Q (x1, y1). r P (x,y) Q (x1,y1)