Departamento de Informática Universidade Federal do Espírito Santo

Slides:



Advertisements
Apresentações semelhantes
Departamento de Informática Universidade Federal do Espírito Santo
Advertisements

Introdução à Programação: uma Abordagem Funcional
Introdução à Programação: uma Abordagem Funcional
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1.
Departamento de Informática Universidade Federal do Espírito Santo
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres e Prof. Estefhan Dazzi Wandekoken 2010/1.
Pseudo-código: sintaxe
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Rafael Pinto Frederico Corrêa
Disciplina: AAM Profa. Ana Watanabe vol.3
1 Professor Rogério B. de Andrade - Aula 001- Dez/2008 Técnicas e Linguagem de Programação.
Universidade Federal do Espírito Santo
Construção de Compiladores
Unidades de Armazenamento
INTRODUÇÃO À PROGRAMAÇÃO
Linguagem Haskell Riocemar S. de Santana.
João Lucas de Oliveira Torres
Introdução a Computação e Cálculo Numérico
Introdução a Computação e Cálculo Numérico
Aula 5 - Operadores, Expressões e Funções Matemáticas
FTIN Formação Técnica em Informática
Algoritmos e Estruturas de Dados I – Tipos de dados
Fábio de Oliveira Borges
Estruturas de Dados Módulo 3 – Controle de Fluxo
O Portal do Estudante de Computação
Expressões e Instrução de Atribuição
Operadores e Atribuições Capítulo 3
Lógica de Programação/ Algoritmos Engenharia Produção 2014
Paradigmas de Programação - prof Gláucya Carreiro Boechat1 Elaborando um Programa Prof.: Gláucya Carreiro Boechat Universidade.
Lógica matemática.
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;
Analise Semântica aula-10-analise-semântica.pdf.
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery.
Campus de Caraguatatuba Aula 9: Noções Básicas sobre Erros (3)
Funções Matemáticas e de String
Acabias Marques Luiz. I - Introdução ao Ruby Parte 1 – Introdução a linguagem  O que é Ruby  Instalação  O IRB  Operadores Aritméticos  Tipos de.
Programação Funcional
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Haskell Programação Funcional Diego Lima Rubem Moreira.
Computação Eletrônica Variáveis Reais e Booleanas.
Fundamentos de linguagens de programação
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA ENGENHARIA DE AUTOMAÇÃO INDUSTRIAL  Operadores São meios pelo qual incrementamos, comparamos e avaliamos dados.
ALGORITMIA. ALGORITMO Conjunto de instruções ou acções que ao serem executadas, permitirão realizar uma determinada tarefa.
Programação de Computadores - 1
PROGRAMAÇÃO II – PARTE 3 Profa. Maria Augusta Constante Puget.
ALGORITMOS E PROGRAMAÇÃO
Tipos de Dados Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem.
Lógica matemática.
Introdução à Programação BSI – DEINFO - UFRPE
Álgebra Booleana Faculdade Pitágoras Prof. Edwar Saliba Júnior
PARADIGMAS DE LINGUAGENS EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
Tipos de Dados, Variáveis, Expressões Lógicas e Aritméticas
Programação estruturada unidade 2
Algoritmos e Estruturas de Dados I – Tipos de dados
VARIÁVEIS Desenvolvido pelo Mestrando Rodrigo Moreira Barreto – VHLab (Virtual Humans Simulation Laboratory – PUCRS) 1 Desenvolvido por: Rodrigo Moreira.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Sistemas para Internet Algoritmos e Lógica de Programação
Prof. Tertuliano Operadores Variáveis em C++.
IFRN Técnico em Informática para Internet Estruturas Condicionais Prof. Gilbert Azevedo.
Introdução à Lógica Matemática Prof. Gilbert Azevedo IFRN Técnico em Informática para Internet.
Lógica Matemática e Elementos de Lógica Digital
Lógica de Programação Aula 06 Prof. Marcelo Marcony.
Programação Funcional
Transcrição da apresentação:

Departamento de Informática Universidade Federal do Espírito Santo Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres boeres@inf.ufes.br CT VII - Sala 32 Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Theme created by Sakari Koivunen and Henrik Omma Released under the LGPL license. Co-Autoria: Clebson Oliveira 1

Tipo de Dado em Haskell Haskell possui um sistema de tipos estático: o tipo de qualquer expressão é conhecido durante a compilação do código É melhor identificar erros durante a compilação de programas do que durante a sua execução!

Tipo de Dado Um conjunto de valores, munido de um conjunto de operações aplicáveis a estes. Exemplo: S = {0,1,2,3, ...}, munido das operações de adição (a) e multiplicação (m). Cada operação possui um tipo, indicando o domínio e o contradomínio. Exemplo: o domínio de a é S X S e o contradomínio é S. Assinatura de a e de m: a :: (S x) x → x → x m :: (S x)  x → x → x 3 3

Tipo de Dado Básicos: numéricos, booleanos, caracteres; Compostos: tuplas e listas. 4 4

Linguagem fortemente tipada Em Haskell, conhecendo-se o tipo das operações e funções que compõem uma expressão podemos determinar o tipo do valor que dela resultará; Em linguagens de programação isto equivale a dizer que a linguagem é fortemente tipada. 5

Variáveis de tipo Função sqrt: Função identidade: :t sqrt sqrt :: (Floating a) => a → a Função identidade: :t id id :: a → a Funções definidas com variáveis de tipo são chamadas de funções polimórficas

Tipos Numéricos Tipos de dados fundamentais na computação; Inteiros e reais; Tratamentos de números pelo computador: requer adaptações e simplificações. Em HUGS é possível visualizar o tipo da expressão avaliada através do comando :set +t OBS: para desfazer a configuração use o comando :set -t 7

Exemplos > :set +t > 2^20 1048576 :: Integer > :set -t > 2^100 1267650600228229401496703205376 8

Números Inteiros tipo Integer: representação de números com uma quantidade ilimitada de algarismos. a memória do computador é finita: limites de representação são impostos; o limite pode estar bem longe e podemos não atingí-lo em nossas aplicações. > 2^1000 1071508607186267320948425049060001810561404811705533 607443750388370351051124936122493198378815695858127 59467291755314682518714528569231404359845775746985 748039345677748242309854210746050623711418779541821 530464749835819412673987675591655439460770629145711 96477686542167660429831652624386837205668069376 9

Números Inteiros Tipo Int: representação de inteiros mais restrita (intervalo fixo e reduzido de valores); minBound e maxBound Economia de memória do computador e tempo de processamento; Para que um número seja representado como tipo Int, devemos indicar explicitamente 10

Exemplos > 1234567890::Int 1234567890 :: Int > 12345678901::Int Program error: arithmetic overflow > 1089979879870979879 1089979879870979879 :: Integer > 1089979879870979879::Int 11

Operações sobre inteiros Nome Descrição + Adição * Multiplicação - Subtração div, quot divisão inteira ^ Potência rem resto da divisão inteira entre dois inteiros mod módulo do resto da divisão inteira entre dois inteiros (sempre positivo) abs valor absoluto signum produz -1, 0 ou 1, indicando se o número é negativo, zero ou positivo 12

Números Reais Tipo Float: representação dos números reais Para a representação, considera-se a magnitude e a precisão de um número; Precisão: nos diz quantos algarismos significativos são usados; Magnitude: nos diz qual o maior expoente admitido; Exemplo: uma determinada implementação pode utilizar 6 algarismos significativos: o número 123456.789 seria representado pelo número 123457.0, onde o 6 foi arredondado para 7. A magnitude permite a representação tanto de números bem pequenos e bem grandes. 99999999999999999999999999999 → 1.0e+29 0.00000000009999999999999999999999999999 → 1.0e-010 13

Exemplos > 0.1234567890123456789012345678901234567890 0.123456789012346 :: Double A representação científica é utilizada quando necessário: > 1234567890123456789012345678.9 1.23456789012346e+027 :: Double 14

Operações sobre reais Nome Descrição + Adição * Multiplicação - Subtração / Divisão ^ potência (o expoente tem que ser Int e positivo) sin Seno cos Coseno tan Tangente sqrt raiz quadrada log logaritmo na base e logBase logaritmo na base escolhida exp potência na base e 15

Conversão de tipos > 3 + 5 8 :: Integer > 3 + 5.0 8.0 :: Double 16

Conversão de tipos Existem funções específicas para conversão de tipos: a função truncate converte um real x para o menor inteiro menor ou igual x. > truncate pi 3 :: Integer a função round converte um real x para o inteiro mais próximo de x, ou seja: round x = truncate (x + 0.5) > round pi > round (exp 1) 17

Precedência dos operadores 1ª) div, mod, abs, sqrt e qualquer outra função 2ª) ^ 3ª) * / 4ª) +, - 18

Exemplos > 2 + 3 * 5 17 > (2 + 3) * 5 25 > 2 + 3 * 5 17 > (2 + 3) * 5 25 > 3 * mod 10 4 + 5 11 > 3 ^ mod 10 4 9 > 4 ^ mod (div 20 4) 2 4 19

(- x)^y ou - (x^y) e nunca -x^y ou x^-y Ordem de associação Quando há ocorrência de operadores de mesma precedência leva-se em consideração a ordem de associação que pode ser à direita ou à esquerda. a) O operador unário deve ser sempre representado entre parênteses quando utilizado junto com outro operador (- x)^y ou - (x^y) e nunca -x^y ou x^-y b) A potência, quando repetida em uma expressão, é avaliada da direita para a esquerda 2^3^3 = 2^(3^3) c) Os demais operadores, na situação acima, são avaliados da esquerda para a direita 2 - 3 - 5 = (2 - 3) – 5 e 2 + 3 + 3 = (2 + 3) + 3 20

Exemplos >3 - 7 - 2 - 6 > 3 * 7 + 4 25 > 3 * ( 7 + 4) 33 >3 - 7 - 2 - 6 > 3 * 7 + 4 25 > 3 * ( 7 + 4) 33 > 3 ^ ( 1 + 3) 81 21

mediaB x y = truncate ((x + y) / 2) Tipos de novas definições de funções As funções abaixo são de que tipo? mediaA x y = (x + y) / 2 e mediaB x y = truncate ((x + y) / 2) 22

Hierarquia de tipos Eq, Ord: tudo menos I/O Num: Int, Integer, Float, Double Real: Int, Integer, Float, Double Fractional: Float, Double RealFrac: Float, Double Floating: Float, Double RealFloat: Float, Double Integral: Int, Integer OBS: Classes em Haskell representam um conjunto de tipos 23

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. 24 24

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 25 25

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 26

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 27

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 28

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 29

avalia :: <sentença> {True, False} O tipo de dados boolean Formado pelas constantes True e False e as operações lógicas avalia :: <sentença> {True, False} 30

Operador lógico (Haskell) Operadores Lógicos Operação lógica Operador lógico (Haskell) e && ou || não not 31

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) 32

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 33

Hierarquia dos operadores relacionais e lógicos Operadores relacionais: 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. 34

intervalo0-1 x = x >= 0 && x <= 1 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 35

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 36

Exemplos > 3+4 > 7 False :: Bool > 3>4 && 5 < 9 || 3 ==3 True :: Bool 37

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) 38

O ponto P (x, y) pertence à área cinza? C (x1, y1) a/2 a

Adequadas para representação de situações de Definições Condicionais Adequadas para representação de situações de tomada de decisão 40 40

Estrutura if-then-else Sintaxe: if <expressão lógica> then <expressão 1> else <expressão 2> 41

Exemplo Considere a função que determina o valor da passagem aérea de um adulto, para um determinado trecho, por exemplo, Vitória-Manaus, considerando a sua idade. Pessoas com idade a partir de 60 anos possuem um desconto de 40% do valor. Considere ainda que a passagem para o trecho considerado custe R$ 600,00. 42

Exemplo Considere a função que associa com um determinado rendimento o Imposto de Renda a ser pago. Até um determinado valor, o contribuinte não paga imposto, e a partir de então o rendimento é dividido em faixas (intervalos), aos quais se aplicam diferentes taxas: 1800 25 acima de 30.000 1500 20 entre 20.001 e 30.000 1000 10 entre 10.801 e 20.000 inferior ou igual a 10.800 Desconto alíquota Faixa

Árvore de Decisão

Árvore de decisão s <= 10800 s  (10800, 20000] ir1

Solução ir s = if s <= 10800 then ir1 else if pert s 10800 20000 else ir4 where ir1 = 0 ir2 = s * 0.1 - 1000 ir3 = s * 0.2 - 1500 ir4 = s * 0.25 - 1800 pert x a b = x>=a && x<=b

Solução Qual o problema do código anterior? Outra alternativa: ir s = if s <= 10800 then ir1 else if s <= 20000 then ir2 else if s <= 30000 then ir3 else ir4 where ir1 = 0 ir2 = s * 0.1 - 1000 ir3 = s * 0.2 - 1500 ir4 = s * 0.25 - 1800

Exercício Dados três números, determine o maior deles. Faça a árvore de decisão Descreva a solução em haskell usando expressões condicionais

Guarded commands Permite que uma mesma função seja descrita por várias definições, cada uma delas protegida por uma expressão lógica; Sintaxe: <nome da função> <parâmetros> | <proteção 1> = <definição 1> | <proteção 2> = <definição 2> | <proteção 3> = <definição 3> . . . | <proteção n> = <definição n> | otherwise = <definição n + 1>

Exemplo ir2 s | s <= 10800 = ir1 | s <= 20000 = ir2 | otherwise = ir4 where ir1 = 0 ir2 = s * 0.1 - 1000 ir3 = s * 0.2 - 1500 ir4 = s * 0.25 - 1800

O ponto P (x, y) pertence a qual das áreas 1, 2, 3 e 4? C (x1, y1) 1 2 a/2 a 3