Introdução à Programação. Uma Abordagem Funcional

Documentos relacionados
Expressões Condicionais

Introdução à Programação uma Abordagem Funcional

Expressão Condicional

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Linguagens de Programação Aula 13

Casamento de Padrão. Programação Funcional. Capítulo 5. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Casamento de Padrão. Programação Funcional. Capítulo 6. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Aula Prática 2. Paradigmas da Programação I / Programação Funcional

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013

Programação Funcional

Aula 6 Instruções de Seleção Cleverton Hentz

Conceitos de Linguagens de Programação

Aula 7: Estrutura de Decisão

Linguagem de Programação. Tutorial 3 Os comandos if, else e else if

Lista de Exercícios 2

Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções

ao paradigma imperativo

Linguagem C. Programação Estruturada. Estruturas de Controle. Prof. Luis Nícolas de Amorim Trigo

CAPÍTULO 4 ESTRUTURAS DE CONTROLE

Linguagem C/C++ Estrutura Condicional. Prof: Rosemary Melo

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Correção do 1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de 2006, 2º Semestre

Linguagem Pascal. Prof. Antonio Almeida de Barros Junior

Linguagem Haskell. Riocemar S. de Santana

Aula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006)

Lógica de Programação I

I1, I2 e In são instruções simples ou estruturadas da linguagem Pascal.

Lista de Exercícios 2 Condicionais

Algoritmo. Prof. Anderson Almeida Ferreira. Agradeço ao prof. Guilherme Tavares de Assis por fornecer slides que fazem parte desta apresentação

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

JavaScript (ou JScript)

Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz

Computação 1 - Python Aula 3 - Teórica: Tipos de dados, Strings, Estrutura Condicional 1/ 28

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Funções: Primeira Parte

Comandos em C (cont.)

Programação Estruturada

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Capítulo III : A Linguagem Pascal Estruturas de Controlo

Programação Funcional Capítulo 3 Tipos e Classes

Programação de Computadores Profa Jacqueline 1

Algoritmos e Lógica de Programação 80 horas // 4 h/semana. Exercício... Para começar... Resolução... Para começar... Para começar...

Notas de Aula de Algoritmos e Programação de Computadores

Procedimento. Função. Selecção Condicional - a instrução if-then-else. expressão if lógica then instrução else instrução

Elementos básicos das linguagens de programação

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro

Estruturas de Controle de Fluxo Pseudocódigo/Exercício Construa o pseudocódigo de um algoritmo para obter o resultado da divisão de dois números

1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de º Semestre

Programação Estruturada

Linguagem Java. Introdução. Rosemary Silveira Filgueiras Melo

LINGUAGEM C: COMANDOS DE CONTROLE CONDICIONAL

Aula prática 5. Funções Recursivas

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

CIT Aula 02 Variáveis e Estruturas de desvio condicional. Autor: Max Rodrigues Marques Carga Horária: 2 h 22/07/15 1

Aula 01. Programação Condicional Programação repetitiva

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Aula teórica 10 Tema 10. Selecção Instruções de selecção:

Programação: Vetores

Operadores e Estruturas de Decisão

Operadores e Estruturas de Decisão. Vanessa Braganholo

Bacharelado em Sistemas de Informação Programação Funcional. Lista de Exercicios - Linguagem Haskell

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Engenharia Civil. Introdução à Programação

Aula 03 Introdução à Programação com a Linguagem Python

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Introdução à Programação em C Input / Output

3.1 - Funções para manipular dados de entrada e saída padrão

Ler os valores dos coeficientes a, b e c Calcular o valor de delta Obter as raízes da equação Imprimir as raízes da equação

CCO 016 / COM 110 Fundamentos de Programação

Pedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas

Capítulo 8. Estruturas de Controle no Nível de Sentença

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Estruturas de Controle - Seleção. Prof. César Melo

Programação estruturada no Fortran 90-3

Estácio-FIC Graduação em Redes de Computadores

MCG114 Programação de Computadores I. Comandos de condição 3/26/18. Comando if. Comando if. Até agora... Comandos de Condição! Comandos de Condição

LINGUAGEM DE PROGRAMAÇÃO

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1

Transcrição:

Introdução à Programação Uma Abordagem Funcional

Tipos em Haskell

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.

O que é um tipo? Um tipo é um nome para uma coleção de valores relacionados. Por exemplo, em Haskell o tipo básico Bool contém os dois valores lógicos: False True

Erros de tipo A aplicação de uma função a um ou mais argumentos do tipo errado constitui um erro de tipo. Por exemplo: 1 é um número e False é um valor lógico, mas + requer dois números.

Tipos em Haskell Se a avaliação de uma expressão e produz um valor do tipo t, então o tipo de e é t, e escrevemos: e :: t Toda expressão bem formada tem um tipo, que pode ser calculado automaticamente em tempo de compilação usando um processo chamado inferência de tipos.

Tipos em Haskell Todos os erros de tipo são encontrados em tempo de compilação, o que torna os programas mais seguros e mais rápidos, eliminando a necessidade de verificações de tipo em tempo de execução. No GHCi, o comando :type calcula o tipo de uma expressão, sem avaliá-la:

Tipos Básicos Haskell tem vários tipos básicos, como:

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

Conversão de tipos Existem funções específicas para conversão de tipos: Função truncate converte um real x para o menor inteiro menor ou igual x. > truncate pi 3 :: Integer Função round converte um real x para o inteiro mais próximo de x, ou seja: > round 1.4 1 :: Integer > round 1.5 2 :: Integer

Exercício As funções abaixo são de que tipo? mediaa x y = (x + y) / 2 mediab x y = truncate((x + y) / 2)

Condicional em Haskell

Estrutura IF-THEN-ELSE Sintaxe: if <expressão lógica> then <expressão 1> else <expressão 2> <expressão lógica> True False <expressão 1> <expressão 2>

Expressão condicional A expressão condicional é uma expressão, portanto sempre tem um valor. É possível omitir o else? Se sim, qual seria o valor da expressão quando a condição for falsa? Uma expressão condicional pode ser usada dentro de outra expressão.

Exemplo de expressão condicional

Exercício 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. a) Faça a função em Haskell b) Faça a função genérica para o valor da passagem.

Exemplo - Resolução passagem idade = if idade >= 60 then 600 - (600*0.4) else 600

Exercício Considerando a tabela de Imposto de Renda. 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. Faça a função Haskell Faixa Alíquota Desconto Inferior ou igual a 10800 0 0 Entre 10801 e 20000 10 1000 Entre 20001 e 30000 20 1500 Acima de 30000 25 1800

Exercício Para os exercícios em sequência faça sua função em Haskell. 1. Dado três números, determine o maior deles; 2. Dados a, b, c informe se formam um triângulo; 3. Se a, b e c formarem um triângulo, informe seu tipo (equilátero, isósceles ou escaleno).

Exercício Para os exercícios em sequência faça sua função em Haskell. 1. Retorne o valor absoluto de N; 2. Retorne o sinal de um número. Ex.: Negativo = -1, igual a zero = 0 e 1 se positivo.

Equações de guarda

Equações com guardas Funções podem ser definidas através de equações com guardas, onde uma sequência de expressões lógicas chamadas guardas é usada para escolher um resultado. Uma equação com guarda é formada por uma sequência de cláusulas escritas logo após a lista de argumentos. Cada cláusula é introduzida por uma barra vertical ( ) e consiste em uma condição chamada guarda e uma expressão (resultado), separados por =.

Equações com guardas Cada guarda é uma expressão lógica. Os resultados devem ser todos do mesmo tipo. Exemplo: valor absoluto de um número

Exemplo Valor absoluto: Nesta definição de abs, as guardas são n >= 0 e n < 0, e as expressões associadas são n e -n, respectivamente.

Equações com guardas Quando a função é aplicada, as guardas são verificadas em sequência. A primeira guarda verdadeira define o resultado. Assim no exemplo anterior o teste n < 0 pode ser substituído pela constante True:

Otherwise otherwise é uma condição que captura todas as outras situações que ainda não foram consideradas. otherwise é definida no prelúdio simplesmente como o valor verdadeiro:

Benefícios Equações com guardas podem ser usadas para tornar definições que envolvem múltiplas condições mais fáceis de ler. Exemplo: determina o sinal de um número:

Benefícios Exemplo: analisa o índice de massa corporal

Matching Se todas as guardas de uma equação forem falsas, a próxima equação é considerada. Se não houver uma próxima equação, ocorre um erro.

Erro comum Um erro comum cometido por iniciantes é colocar um sinal de igual (=) depois do nome da função e parâmetros, antes da primeira guarda. Isso é um erro de sintaxe.

Exercício Para todos os exercícios, faça uma versão usando IF-ELSE e outra com Guard command. 1. Função que informe se um caractere é maiúsculo, minúsculo ou se não é uma letra. 2. Função retorna o maior de 2 valores. 3. Função retorna o maior de 3 valores.

Resolução describeletter c = if c >= 'a' && c <= 'z' then "Lower case" else if c >= 'A' && c <= 'Z' then "Upper case" else Nao e letra" describeletter c c >= 'a' && c <= 'z' = "Lower case" c >= 'A' && c <= 'Z' = "Upper case" otherwise = "Not an ASCII letter