Programação Funcional Aulas 9, 10 & 11

Tamanho: px
Começar a partir da página:

Download "Programação Funcional Aulas 9, 10 & 11"

Transcrição

1 Programação Funcional Aulas 9, 10 & 11 Sandra Alves DCC/FCUP 2015/16 1 Programas interativos Motivação Até agora apenas escrevemos programas que efetuam computação pura, i.e., transformações funcionais entre valores. Vamos agora ver como escrever programas interativos: lêm informação do teclado, ficheiros, etc.; escrevem no terminal ou em ficheiros;... Ações de I/O Introduzimos um novo tipo IO () para ações que, se forem executadas, fazem entrada/saída de dados. Exemplos: putchar A :: IO () putchar B :: IO () putchar :: Char -> IO () -- imprime um A -- imprime um B -- imprimir um carater 1

2 Encadear ações Podemos combinar duas ações de I/O usando o operador de sequenciação: (>>) :: IO () -> IO () -> IO () Exemplos: (putchar A >> putchar B ) :: IO () (putchar B >> putchar A ) :: IO () Note que >> é associativo mas não é comutativo! Em alternativa podemos usando a notação-do: -- imprimir AB -- imprimir BA = putchar A >> putchar B >> putchar C do {putchar A ; putchar B ; putchar C } Podemos omitir os sinais de pontuação usando a indentação: do putchar A putchar B putchar C Execução Para efetuar as ações de I/O definimos um valor main no módulo Main. module Main where main = do putchar A putchar B Compilar e executar: $ ghc Main.hs -o prog $./prog AB$ Também podemos efetuar ações IO diretamente no ghci: Prelude> putchar A >> putchar B ABPrelude> Definir novas ações Vamos agora definir novas ações de I/O combinando ações mais simples. Exemplo: definir putstr usando putchar recursivamente. putstr :: String -> IO () putstr [] =?? putstr (x:xs) = putchar x >> putstr xs Como completar? 2

3 Ação vazia putstr :: String -> IO () putstr [] = return () putstr (x:xs) = putchar x >> putstr xs return () é a ação vazia: se for efetuada, não faz nada. Mais geralmente IO a é o tipo de ações que, se forem executadas, fazem entrada/saída de dados e devolvem um valor de tipo a. Exemplos: putchar A :: IO () getchar :: IO Char -- escrever um A ; resultado vazio -- ler um caracter; resultado Char Ações IO pré-definidas getchar :: IO Char getline :: IO String getcontents :: IO String putchar :: Char -> IO () putstr :: String -> IO () putstrln :: String -> IO () print :: Show a => a -> IO () return :: a -> IO a -- ler um caracter -- ler uma linha -- ler toda a entrada padrão -- escrever um carater -- escrever uma linha de texto -- idem com mudança de linha -- imprimir um valor -- ação vazia Combinando leitura e escrita Usamos <- para obter valores retornados por uma ação I/O. Exemplo: ler e imprimir caracteres até obter um fim-de-linha. main :: IO () main = do x<-getchar putchar x if x== \n then return () else main Outro exemplo: boasvindas :: IO () boasvindas = do putstr "Como te chamas? " nome <- getline putstr ("Bem-vindo, " ++ nome ++ "!\n") 3

4 Valores de retorno Podemos usar return para definir valores de retorno de ações. boasvindas :: IO String boasvindas = do putstr "Como te chamas? " nome <- getline putstr ("Bem-vindo, " ++ nome ++ "!\n") return nome Outro exemplo: definir getline usando getchar. getline :: IO String getline = do x<-getchar if x== \n then return [] else do xs<-getline return (x:xs) Jogo Hi-Lo Exemplo maior: um jogo de perguntas-respostas. o computador escolhe um número secreto entre 1 e 100; o jogador vai fazer tentativas de advinhar; para cada tentativa o computador diz se é alto ou baixo; a pontuação final é o número de tentativas. Tentativa? 50 Demasiado alto! Tentativa? 25 Demasiado baixo! Tentativa? 35 Demasiado alto! Tentativa? 30 Demasiado baixo! Tentativa? 32 Acertou em 5 tentativas. Vamos decompor em duas partes: main escolhe o número secreto e inicia o jogo; jogo função recursiva que efetua a sequência perguntas-respostas. Programa module Main where import Data.Char(isDigit) import System.Random(randomRIO) 4

5 main = do x <- randomrio (1,100) -- escolher número aletório n <- jogo 1 x -- começar o jogo putstrln ("Acertou em " ++ show n ++ " tentativas") jogo :: Int -> Int -> IO Int jogo n x = do { putstr "Tentativa? " ; str <- getline ; if all isdigit str then let y = read str in if y>x then do putstrln "Demasiado alto!"; jogo (n+1) x else if y<x then do putstrln "Demasiado baixo!"; jogo (n+1) x else return n else do putstrln "Tentativa inválida!"; jogo n x } -- n: tentativas, x: número secreto Ações são valores As ações IO são valores de primeira classe: podem ser argumentos ou resultados de funções; podem passados em listas ou tuplos;... Isto permite muita flexibilidade ao combinar ações. Exemplo: uma função para efetuar uma lista de ações por ordem. seqn :: [IO a] -> IO () seqn [] = return () seqn (m:ms) = m >> seqn ms Exemplos de uso: > seqn [putstrln s s<-["ola", "mundo"]] ola mundo > seqn [print i i<-[1..5]] Sumário Programas reais necessitam de combinar interação e computação pura Em Haskell fica explícito nos tipos quais as funções que fazem interação e quais são puras. 5

6 A notação-do e o tipo IO é usada para: ler e escrever no terminal e em ficheiros; estabelecer comunicações de rede; serviços do sistema operativo (ex: obter data e hora do relógio de sistema); A notação-do pode usada para outras computações não puramente funcionais: estado, não-determinismo, exceções, etc. 2 Definição de tipos Declarações de sinónimos Podemos dar um nome novo a um tipo existente usando uma declaração de sinónimo. Exemplo (do prelúdio-padrão): type String = [Char] As declarações de sinónimos são usadas para melhorar legibilidade de programas. Exemplo: type Pos = (Int,Int) type Cells = [Pos] -- coluna,linha -- colónia Assim podemos escrever isalive :: Cells -> Pos -> Bool em vez de isalive :: [(Int,Int)] -> (Int,Int) -> Bool As declarações de sinónimos também podem ter parâmetros. Exemplo: associações entre chaves e valores. type Assoc ch v = [(ch,v)] -- tabela de associações idades :: Assoc String Int idades = [("Sara", 39), ("Jo~ao", 27), ("Maria", 19)] s :: Assoc String String s = [("Sandra", "sandra@dcc.fc.up.pt"), ("Jo~ao", "joao@gmail.com")] Os sinónimos podem ser usados noutras definições: type Pos = (Int,Int) type Cells = [Pos] -- OK Mas não podem ser usados recursivamente: type List a = (a,list a) -- ERRO 6

7 Declarações de novos tipos Podemos definir novos tipos de dados usando declarações data. Exemplo (do prelúdio-padrão): data Bool = True False A declaração data enumera as alternativas separadas por barras verticais. Cada alternativa deve ter um construtor (ex.: True e False). O nome dos tipos e construtores deve ser começar por uma letra maiúscula. Cada construtor só pode ser usado num único tipo. Podemos definir funções sobre novos tipos usando padrões. Exemplo: um tipo para as direções ortogonais (esquerda, direita, cima, baixo). data Dir = Esq Dir Cima Baixo Vamos definir algumas funções... contraria :: Dir -> Dir contraria Esq = Dir contraria Dir = Esq contraria Cima = Baixo contraria Baixo = Cima mover :: Dir -> Pos -> Pos mover Esq (x,y) = (x-1,y) mover Dir (x,y) = (x+1,y) mover Cima (x,y) = (x,y+1) mover Baixo (x,y)= (x,y-1) -- direção contrária -- deslocar numa direção Construtores com parâmetros Os construtores podem também ter parâmetros. Exemplo: data Figura = Circ Float -- raio Rect Float Float -- largura, altura quadrado :: Float -> Figura quadrado h = Rect h h area :: Figura -> Float area (Circ r) = pi*r^2 area (Rect w h) = w*h Os construtores podem ter diferentes números de parâmetros 7

8 Os parâmetros podem ser de tipos diferentes Podemos usar os construtores de duas formas: como funções para construir um valor Circ :: Float -> Figura Rect :: Float -> Float -> Figura em padrões no lado esquerdo de equações area (Circ r) = pi*r^2 area (Rect w h) = w*h Igualdade e conversão em texto Por omissão um novo tipo não tem métodos de igualdade ou conversão para texto. O interpretador dá erro se tentarmos mostrar ou comparar valores: > Circ 2 ERROR: No instance for (Show Figura)... > Rect 2 1 == Rect 1 2 ERROR: No instance for (Eq Figura)... Podemos definir igualdade e conversão para texto automaticamente usando deriving : data Figura = Circ Float Rect Float Float deriving (Eq, Show) Exemplo de uso: > Circ 2 Circ 2.0 > Rect 2 1 == Rect 1 2 False A igualdade é sintática: dois valores são iguais se e só se têm o mesmo construtor e argumentos. Novos tipos com parâmetros As declarações de novos tipos também podem ter parâmetros. Exemplo: data Maybe a = Nothing Just a -- do prelúdio-padrão safediv :: Int -> Int -> Maybe Int safediv _ 0 = Nothing safediv n m = Just (n div m) safehead :: [a] -> Maybe a safehead [] = Nothing safehead xs = Just (head xs) 8

9 Tipos recursivos As declarações data podem ser recursivas. Exemplo: os números naturais. data Nat = Zero Suc Nat Alguns valores de Nat: Zero Suc Zero Suc (Suc Zero) Suc (Suc (Suc Zero)). -- zero -- um -- dois -- três Em geral: n é obtido aplicado n vezes Succ a Zero. Suc (Suc (... (Suc Zero)...)) Usando recursão, podemos definir funções que convertem entre inteiros e naturais: -- n aplicações int2nat :: Int -> Nat int2nat 0 = Zero int2nat n n>0 = Suc (int2nat (n-1)) nat2int :: Nat -> Int nat2int Zero = 0 nat2int (Suc n)= 1+nat2int n Podemos usar as funções de conversão para somar naturais. add :: Nat -> Nat -> Nat add n m = int2nat (nat2int n + nat2int m) Em alternativa, podemos definir a soma usando recursão sobre naturais. add :: Nat -> Nat -> Nat add Zero m = m add (Suc n) m = Suc (add n m) Estas duas equações traduzem as seguintes igualdades algébricas: = = = 0 + m = m (1 + n) + m = 1 + (n + m) Exemplo: add (Suc (Suc Zero)) (Suc Zero) Suc (add (Suc Zero) (Suc Zero)) Suc (Suc (add Zero (Suc Zero))) Suc (Suc (Suc Zero)) 9

10 Árvores sintáticas Podemos representar expressões por uma árvore sintática em que os operadores são os nós e as constantes são as folhas. Exemplo: As árvores podem ser representadas em Haskell por um tipo recursivo. data Expr = Val Int -- constante Soma Expr Expr -- nó + Mult Expr Expr -- nó A árvore no slide anterior é: Soma (Val 1) (Mult (Val 2) (Val 3)) Exemplos de funções sobre árvores de expressões. -- contar o número de folhas tamanho :: Expr -> Int tamanho (Val n) = 1 tamanho (Soma e1 e2) = tamanho e1 + tamanho e2 tamanho (Mult e1 e2) = tamanho e1 + tamanho e2 -- calcular o valor valor :: Expr -> Int valor (Val n) = n valor (Soma e1 e2) = valor e1 + valor e2 valor (Mult e1 e2) = valor e1 * valor e2 Árvores binárias Também podemos usar árvores binárias para facilitar a organização e pesquisa de informação Podemos representar árvores binárias de inteiros por um tipo recursivo. data Arv = Folha Int No Arv Int Arv 7 10

11 A árvore no slide anterior seria representa por: No (No (Folha 1) 3 (Folha 4)) 5 (No (Folha 6) 7 (Folha 9)) Podemos agora definir uma função recursiva para procurar um valor numa árvore. ocorre :: Int -> Arv -> Bool ocorre m (Folha n) = n==m ocorre m (No esq n dir) = (n==m ocorre m esq ocorre m dir) Numa árvore ordenada todos os nós têm valores inferiores na sub-árvore esquerda e superiores na subárvore direira. Nesse caso podemos simplificar a pesquisa: ocorre :: Int -> Arv -> Bool ocorre m (Folha n) = n==m ocorre m (No esq n dir) n==m = True m<n = ocorre m esq m>n = ocorre m dir Esta definição é mais eficiente: percorre apenas os nós num caminho da raiz até uma folha em vez de todos os nós da árvore. 3 Verificador de tautologias Proposições lógicas Uma proposição lógica é construida apartir de: constantes T, F (verdade e falsidade) variáveis a, b, c,... conectivas lógicas,,, = parêntesis (, ) Exemplos: Tabelas de verdade das conectivas a b a (( a) = F ) ( (a b)) = (( a) ( b)) a b a b F F F T F F F T F T T T a b a b F F F T F T F T T T T T a a F T T F a b a = b F F T T F F F T T T T T 11

12 Tautologias Uma proposição cujo valor é verdade para qualquer atribuição de valores às variáveis diz-se uma tautologia. Exemplo: a a a a F T T T F T Conclusão: a a é uma tautologia. Representação de proposições Vamos definir um tipo recursivo para representar proposições. data Prop = Const Bool -- constantes Var Char -- variáveis Neg Prop -- negação Conj Prop Prop -- conjunção Disj Prop Prop -- disjunção Impl Prop Prop -- implicação deriving (Eq,Show) Exemplo: a proposição é representada como a = (( a) = F ) Impl (Var a ) (Impl (Neg (Var a )) (Const False)) Associação de valores a variáveis Para atribuir valores de verdade às variáveis vamos usar uma lista de associações. Exemplo: a atribuição é representada pela lista [( a,true),( b,false),( c,true)] Definimos: listas de associações entre chaves e valores; a = T b = F c = T uma função para procurar o valor associado a uma chave. type Assoc ch v = [(ch,v)] find :: Eq ch => ch -> Assoc ch v -> v find ch assocs = head [v (ch,v)<-assocs, ch==ch ] É uma função parcial: dá um erro se não encontrar a chave! 12

13 Calcular o valor duma proposição Vamos definir o valor de verdade de uma proposição por recursão. O primeiro argumento é uma atribuição de valores às variáveis. type Atrib = Assoc Char Bool valor :: Atrib -> Prop -> Bool valor s (Const b) = b valor s (Var x) = find x s valor s (Neg p) = not (valor s p) valor s (Conj p q) = valor s p && valor s q valor s (Disj p q) = valor s p valor s q valor s (Impl p q) = not (valor s p) valor s q Gerar atribuições às variáveis Para n variáveis distintas há 2 n linhas na tabela de verdade. Como obter todas as atribuições de forma sistemática? Vamos escrever uma função para gerar todas as sequências de n boleanos (cf. exercício 46): bits :: Int -> [[Bool]] Exemplo, as sequências de comprimento 3 (três variáveis): F F F F F T F T F F T T bits 3 T F F T F T T T F T T T Podemos decompor em duas cópias da tabela para 2 variáveis com uma coluna extra: F F F F F T bits 2 F T F F T T T F F T F T bits 2 T T F T T T Em geral: vamos gerar as sequências de forma recursiva. bits :: Int -> [[Bool]] bits 0 = [[]] bits n = [b:bs bs<-bits (n-1), b<-[false,true]] Falta ainda gerar atribuições; começamos por listar todas as variáveis numa proposição. 13

14 vars :: Prop -> [Char] vars (Const _) = [] vars (Var x) = [x] vars (Neg p) = vars p vars (Conj p q) = vars p ++ vars q vars (Disj p q) = vars p ++ vars q vars (Impl p q) = vars p ++ vars q A função seguinte gera todas as as atribuições de variáveis duma proposição: atribs :: Prop -> [Atrib] atribs p = map (zip vs) (bits (length vs)) where vs = nub (vars p) (A função nub da biblioteca Data.List remove repetidos.) Verificar tautologias Uma proposição é tautologia se e só se for verdade para todas as atribuições de variáveis. tautologia :: Prop -> Bool tautologia p = and [valor s p s<-atribs p] Alguns exemplos: > tautologia (Var a ) False > tautologia (Impl (Var p ) (Var p )) True > tautologia (Disj (Var a ) (Neg (Var a )) True Exercícios 1. Escrever uma função que calcula a lista das atribuições que tornam uma proposição falsa (i.e. uma lista de contra-exemplos). 2. Escrever um programa para imprimir a tabela de verdade duma proposição. 14

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos Programação Funcional 13 a Aula Definição de tipos Pedro Vasconcelos DCC/FCUP 2014 Declarações de sinónimos Podemos dar um nome novo a um tipo existente usando uma declaração de sinónimo. Exemplo (do prelúdio-padrão):

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia Programação Funcional 14 a Aula Um verificador de tautologias Pedro Vasconcelos DCC/FCUP 2014 Proposições lógicas Uma proposição lógica é construida apartir de: constantes T, F (verdade e falsidade) variáveis

Leia mais

Linguagens de Programação. Programação Funcional e Haskell Declarando Tipos Thiago Alves

Linguagens de Programação. Programação Funcional e Haskell Declarando Tipos Thiago Alves Linguagens de Programação Programação Funcional e Haskell Declarando Tipos Thiago Alves 1 Declarações de Tipos Em Haskell, um novo nome para um tipo existente pode ser definido usando uma declaração de

Leia mais

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

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto Programação Funcional Capítulo 11 Tipos Algébricos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/33 1 Tipos Algébricos 2/33 Tópicos 1 Tipos Algébricos 3/33

Leia mais

Linguagens de Programação. Programação Funcional e Haskell Programação Interativa Thiago Alves

Linguagens de Programação. Programação Funcional e Haskell Programação Interativa Thiago Alves Linguagens de Programação Programação Funcional e Haskell Programação Interativa Thiago Alves 1 Introdução Vimos como Haskell pode ser usado para escrever programas batch que recebem todas suas entradas

Leia mais

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas Programação Funcional 4 a Aula Listas Pedro Vasconcelos DCC/FCUP 2014 Listas Listas são coleções de elementos: em que a ordem é significativa; possivelmente com elementos repetidos. Listas em Haskell Uma

Leia mais

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções Programação Funcional 3 a Aula Definição de funções Pedro Vasconcelos DCC/FCUP 2014 Definição de funções Podemos definir novas funções simples usando funções pré-definidas. minuscula :: Char -> Bool minuscula

Leia mais

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes Programação Funcional 2 a Aula Tipos e classes Pedro Vasconcelos DCC/FCUP 2012 Tipos Um tipo é um nome para uma coleção de valores relacionados. Por exemplo, o tipo Bool True contém dois valores lógicos:

Leia mais

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs Layout Ao contrário de quase todas as linguagens de programação, o Haskell não necessita de marcas para delimitar as diversas declarações que constituem um programa. Em Haskell a identação do texto (isto

Leia mais

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

Aula Prática 2. Paradigmas da Programação I / Programação Funcional Aula Prática 2 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se introduzir os conceitos seguintes: valores e expressões; tipos básicos e tipos compostos;

Leia mais

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 8 a Aula Listas infinitas Programação Funcional 8 a Aula Listas infinitas Pedro Vasconcelos DCC/FCUP 2014 Listas infinitas Podemos usar listas para sequências finitas, por ex.: [1,2,3,4] = 1:2:3:4:[] Nesta aula vamos ver que podemos

Leia mais

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas Programação Funcional 5 a Aula Definições recursivas Pedro Vasconcelos DCC/FCUP 2014 Definições usando outras funções Podemos definir funções usando outras previamente definidas (e.g. do prelúdio-padrão).

Leia mais

Programação Funcional Aulas 5 & 6

Programação Funcional Aulas 5 & 6 Programação Funcional Aulas 5 & 6 Sandra Alves DCC/FCUP 2016/17 Definições usando outras funções Podemos definir funções usando outras previamente definidas (por exemplo: do prelúdio-padrão). Exemplo:

Leia mais

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

Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro em Haskell Linguagem Haskell Faculdade de Computação - UFU Setembro - 2009 em Haskell 1 em Haskell Noções sobre Construção de por Compreensão Funções Sobre Processamento de Fundamentos em Haskell Noções

Leia mais

Expressões Condicionais

Expressões Condicionais Programação Funcional Capítulo 4 Expressões Condicionais José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/39 1 Combinando funções 2 Expressão condicional 3

Leia mais

Expressão Condicional

Expressão Condicional Programação Funcional UFOP DECOM 2014.1 Aula prática 4 Expressão Condicional Resumo Expressões condicionais permitem a escolha entre duas alternativas na obtenção do valor da expressão, com base em uma

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas

Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas Programação Funcional 16 a Aula Árvores equilibradas Pedro Vasconcelos DCC/FCUP 2014 Aula anterior Operações sobre árvores binárias ordenadas: 1 pesquisa; 2 inserção; 3 remoção. Estas operações são mais

Leia mais

Programas Interativos

Programas Interativos Programação Funcional Capítulo 7 Programas Interativos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.2 1/75 1 Interação com o mundo 2 Ações de saída padrão 3

Leia mais

Funções de Ordem Superior

Funções de Ordem Superior Programação Funcional UFOP DECOM 2014.1 Aula prática 15 Funções de Ordem Superior Sumário Resumo Uma função é conhecida como função de ordem superior quando ela tem uma função como argumento ou resulta

Leia mais

Funções de Ordem Superior

Funções de Ordem Superior Programação Funcional Capítulo 7 Funções de Ordem Superior José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2013.2 1/37 1 Funções de Ordem Superior 2 Composição de funções

Leia mais

Simulação de Caixa Automático

Simulação de Caixa Automático Programação Funcional UFOP DECOM 2014.1 Trabalho 1 Simulação de Caixa Automático Sumário Resumo Com esta atividade pretende-se explorar a construção de programas interativos usando ações de entrada e saída

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 18 a Aula Plataforma Haskell

Pedro Vasconcelos DCC/FCUP. Programação Funcional 18 a Aula Plataforma Haskell Programação Funcional 18 a Aula Plataforma Haskell Pedro Vasconcelos DCC/FCUP 2014 A plataforma Haskell Compilador e interpretador (GHC/GHCi) Ferramentas de desenvolvimento Um conjunto de módulos de base:

Leia mais

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

Aula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006) Aula Prática 3 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se que os alunos: consolidem os conceitos de expressão, tipo e redução; compreendam a

Leia mais

Programação Funcional. Capítulo 13. Mônadas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.

Programação Funcional. Capítulo 13. Mônadas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013. Programação Funcional Capítulo 13 Mônadas José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2013.1 1/42 1 Mônadas 2 Entrada e saída 3 Expressão do 4 Computações que podem

Leia mais

Programas Interativos

Programas Interativos Programação Funcional Capítulo 8 Programas Interativos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/73 1 Interação com o mundo 2 Ações de saída padrão 3

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 7 a Aula Funções de ordem superior

Pedro Vasconcelos DCC/FCUP. Programação Funcional 7 a Aula Funções de ordem superior Programação Funcional 7 a Aula Funções de ordem superior Pedro Vasconcelos DCC/FCUP 2013 Funções de ordem superior Uma função é de ordem superior se tem um argumento que é uma função ou um resultado que

Leia mais

4.2. CLASSES Versão

4.2. CLASSES Versão 4.2. CLASSES Versão 1.5 28 4.2 Classes Em Haskell é possível definir novos tipos e inseri-los na estrutura de classe de tipos. Desta forma é possível obter funções para comparar valores dos novos tipos,

Leia mais

Introdução à Programação Aula 3 Primeiros programas

Introdução à Programação Aula 3 Primeiros programas Introdução à Programação Aula 3 Primeiros programas Pedro Vasconcelos DCC/FCUP 2015 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 3 Primeiros programas 2015 1 / 23 Nesta aula... 1 Tipos básicos

Leia mais

Expressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Expressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto Programação Funcional Capítulo 7 Expressões Lambda José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/64 1 Valores de primeira classe 2 Expressão lambda 3 Aplicação

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 09 Programação Funcional (Haskell) Edirlei Soares de Lima Programação Funcional A programação funcional modela um problema computacional

Leia mais

Programação Funcional

Programação Funcional Programação Funcional Lucília Camarão de Figueiredo Universidade Federal de Ouro Preto lucilia@dcc.ufmg.br Aula 04: Definição de funções 1 DEFINIÇÃO DE FUNÇÕES f x1 x2...xn = E Define uma função f de tipo

Leia mais

Programas Interativos

Programas Interativos Programação Funcional DECOM UFOP 2012-1 Aula prática Capítulo 8 Prof. José Romildo Malaquias Programas Interativos Resumo Nesta aula pretende-se explorar construção de programas interativos usando ações

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa

Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa Programação Funcional 15 a Aula Árvores de pesquisa Pedro Vasconcelos DCC/FCUP 2014 Árvores binárias Um árvore binária é um grafo dirigido, conexo e acíclico em que cada vértice é de um de dois tipos:

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 17 a Aula Tipos abstratos

Pedro Vasconcelos DCC/FCUP. Programação Funcional 17 a Aula Tipos abstratos Programação Funcional 17 a Aula Tipos abstratos Pedro Vasconcelos DCC/FCUP 2014 Tipos concretos Até agora definimos um novo tipo de dados começando por listar os seus construtores. data Bool = False True

Leia mais

Programação Funcional. Aula 10. Parsers. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto /74 ...

Programação Funcional. Aula 10. Parsers. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto /74 ... Programação Funcional Aula 10 Parsers José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011.2 1/74 1 Parsers 2 Definindo um tipo para parsers 3 Parsers básicos 4 Combinadores

Leia mais

Programação Funcional em Haskell

Programação Funcional em Haskell Funções Genéricas sobre Listas Junho - 2009 1 Funções Genéricas 2 Introdução Em Haskell, como em qualquer linguagem funcional, funções são objetos de primeira classe, em que funções não avaliadas podem

Leia mais

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

Variáveis e Entrada de Dados Marco André Lopes Mendes  marcoandre.googlepages. Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre@ifc-araquari.edu.br marcoandre@gmail.com marcoandre.googlepages.com Algoritmos é a base Primeiro programa Este programa possui apenas uma

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 10 a Aula O Jogo da Vida

Pedro Vasconcelos DCC/FCUP. Programação Funcional 10 a Aula O Jogo da Vida Programação Funcional 10 a Aula O Jogo da Vida Pedro Vasconcelos DCC/FCUP 2014 O Jogo da Vida Um autómato celular inventado pelo matemático John H. Conway. O jogo desenrola-se numa grelha bi-dimensional.

Leia mais

Entrada e Saída de Dados

Entrada e Saída de Dados UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO TECNOLÓGICO PET - Engenharia de Computação Entrada e Saída de Dados Programação 1 Vitória, 28 de Maio de 2010 Ivan de Oliveira Nunes Engenharia de Computação

Leia mais

Casamento de Padrão. Programação Funcional. Capítulo 6. 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 Programação Funcional Capítulo 6 Casamento de Padrão José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.2 1/66 1 Casamento de padrão 2 Expressão case 3 Definição

Leia mais

Professor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL

Professor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL Professor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL Sobre a Linguagem Haskell Inicialmente temos no trabalho o uso da versão

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4 Algoritmos e Estruturas de Dados I (DCC/003) 2013/1 Estruturas Básicas Aula Tópico 4 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para

Leia mais

Linguagens de Programação Aula 13

Linguagens de Programação Aula 13 Linguagens de Programação Aula 13 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Suporte para a programação orientada a objetos 2 Na aula de hoje Programação Funcional Linguagem Haskell 3 Roteiro

Leia mais

Conceitos Básicos Linguagem C

Conceitos Básicos Linguagem C Conceitos Básicos Linguagem C PROF. MAURÍCIO A DIAS MACDIASPAE@GMAIL.COM 2 Método Método básico para construção de algoritmos 1. Compreender completamente o problema a ser resolvido, se possível dividindo

Leia mais

Linguagem Haskell. Maria Adriana Vidigal de Lima

Linguagem Haskell. Maria Adriana Vidigal de Lima em Haskell Linguagem Haskell Faculdade de Computação - UFU Dezembro - 2009 em Haskell 1 em Haskell Noções sobre Fundamentos em Haskell Noções sobre Uma árvore é uma estrutura de dados baseada em listas

Leia mais

Implementação de Linguagens

Implementação de Linguagens Implementação de Linguagens Pedro Vasconcelos DCC/FCUP 11 de Abril de 2016 Objectivos Introdução à implementação de linguagens de programação funcionais. Enfoce sobre técnicas de interpretação/compilação

Leia mais

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados Métodos Computacionais Operadores, Expressões Aritméticas e Entrada/Saída de Dados Tópicos da Aula Hoje aprenderemos a escrever um programa em C que pode realizar cálculos Conceito de expressão Tipos de

Leia mais

Introdução à Programação em C (II)

Introdução à Programação em C (II) Introdução à Programação em C (II) Resumo Streams de Texto Leitura e escrita de caracteres Caracteres como números inteiros Exemplos Cópia de Ficheiros Contagem de Caracteres Contagem de Linhas Contagem

Leia mais

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU Aula 5 Oficina de Programação Introdução ao C Profa. Elaine Faria UFU - 2017 Linguagem de Programação Para que o computador consiga ler um programa e entender o que fazer, este programa deve ser escrito

Leia mais

Linguagem Haskell. Riocemar S. de Santana

Linguagem Haskell. Riocemar S. de Santana Linguagem Haskell Riocemar S. de Santana Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem ao matemático americano Haskell B. Curry (1900 1982).

Leia mais

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 5. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto Programação Funcional Capítulo 5 Casamento de Padrão José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/63 1 Casamento de padrão 2 Expressão case 3 Definição

Leia mais

quadrado(a)*0.5 -((a+2)*f(x,(1.0+n)/x)) Arquitectura de Computadores (2008/2009) - Linguagem C - Expressões 2

quadrado(a)*0.5 -((a+2)*f(x,(1.0+n)/x)) Arquitectura de Computadores (2008/2009) - Linguagem C - Expressões 2 Linguagem C Expressões Expressões em C Cast, condições, atribuições Operadores lógicos de bits Precedência dos operadores Expressões em C Uma expressão é a forma de calcular um valor num programa: quadrado(a)*0.5

Leia mais

Conceitos básicos de programação

Conceitos básicos de programação Constantes class Exemplo { static void Main() { float fahr, celsius; int lower, upper, step; lower = 0; /* limite inferior da tabela de temperaturas */ upper = 300; /* limite superior */ step = 20; /*

Leia mais

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

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica. Computação L2 Linguagem C++ ovsj@cin.ufpe.br Observação: Material Baseado na Disciplina Computação Eletrônica. Alfabeto São os símbolos ( caracteres ) permitidos na linguagem: Letras (maiúsculas e minúsculas);

Leia mais

Aula prática 5. Funções Recursivas

Aula prática 5. Funções Recursivas Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário

Leia mais

Lógica Computacional Aula 4

Lógica Computacional Aula 4 Lógica Computacional Aula 4 DCC/FCUP 2017/18 Conteúdo 1 Lógica proposicional 1 1.1 Fórmulas de Horn.......................................... 1 1.2 Satisfazibilidade............................................

Leia mais

Introdução à Ciência da Computação scc-120

Introdução à Ciência da Computação scc-120 ICMC USP 1.semestre/2011 Introdução à Ciência da Computação scc-120 Aula : Variáveis em C Profa. Roseli Romero mailto: rafrance@icmc.sc.usp.br Slides cedidos pela profa. Renata Fortes Variáveis variáveis

Leia mais

TCC 00308: Programação de Computadores I Organização de programas em Python

TCC 00308: Programação de Computadores I Organização de programas em Python TCC 00308: Programação de Computadores I 2017.1 Organização de programas em Python Vamos programar em Python! Como um programa é organizado? Quais são os tipos de dados disponíveis? Como variáveis podem

Leia mais

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S PROGRAMAÇÃO I VA R I Á V E I S, C O N S TA N T E S, O P E R A D O R E S E N T R A DA E S A Í DA D E DA D O S Variáveis 2 Variáveis são locais onde são armazenados os valores na memória. Toda variável é

Leia mais

Introdução à Programação em C (I)

Introdução à Programação em C (I) Introdução à Programação em C (I) IAED Tagus, 2009/2010 Organização de Ficheiros em C Organização Típica de Ficheiros em C Inclusão de bibliotecas de sistema Inclusão de bibliotecas locais Definição de

Leia mais

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA ÁRVORES E ÁRVORE BINÁRIA DE BUSCA Prof. André Backes Definição 2 Diversas aplicações necessitam que se represente um conjunto de objetos e as suas relações hierárquicas Uma árvore é uma abstração matemática

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp Introdução Quais das expressões abaixo têm o mesmo significado? (vector-ref a 42) Introdução Quais das expressões

Leia mais

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores Nesta aula... Conteúdo 1 Expressões, valores e tipos 1 2 Variáveis e atribuições 5 1 Expressões, valores e tipos Expressões e valores Tipos programas calculam expressões para produzir valores cálculo de

Leia mais

Linguagens de Programação I

Linguagens de Programação I Linguagens de Programação I Tema # 4 Operadores em C Susana M Iglesias FUNÇÕES ENTRADA-SAÍDA I/O printf(), utilizada para enviar dados ao dispositivo de saída padrão (stdout), scanf(), utilizada para ler

Leia mais

Funções de Entrada e Saída

Funções de Entrada e Saída inicio Escrita no ecrã (Saída de dados) Escrever( introduza o valor do raio ) Raio Leitura do valor do raio S Raio < 0 N O utilizador insere o valor do raio (Entrada de dados do teclado) Escrita no ecrã

Leia mais

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

Programação Funcional Capítulo 3 Tipos e Classes Programação Funcional Capítulo 3 Tipos e Classes José Romildo Malaquias 2012.1 Departamento de Computação Universidade Federal de Ouro Preto 1 / 68 1 Valores, expressões e tipos 2 Listas 3 Tuplas 4 Funções

Leia mais

DURAÇÃO DA PROVA: 2 horas

DURAÇÃO DA PROVA: 2 horas MAC2166 Introdução à Computação Grande Áreas Civil, Mecânica, Petróleo e Química Escola Politécnica Terceira Prova 21 de junho de 2016 Nome: Assinatura: N o USP: Turma: Professor: Instruções: 1. Não destaque

Leia mais

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. 1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras

Leia mais

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015 PRIMEIROS PASSOS COM PYTHON Prof. Msc. Luis Filipe Alves Pereira 2015 PRIMEIROS PASSOS COM PYTHON 02/47 O QUE É PYTHON? Python é uma linguagem de propósito geral, de alto nível e interpretada Python será

Leia mais

Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python

Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python Exercícios: Funções 1. Crie uma função que recebe como parâmetro um número

Leia mais

Introdução à Programação em C

Introdução à Programação em C Introdução à Programação em C Tipos e Operadores Elementares Estruturas de Controlo Resumo Novidades em C Exemplo: Factorial Tipos de Dados Básicos Saltos Condicionais: if-then-else Valor de retorno de

Leia mais

1/50. Conceitos Básicos. Programa Básico

1/50. Conceitos Básicos. Programa Básico 1/50 Conceitos Básicos Programa Básico 2/50 Operações básicas de entrada e saída #include main retorna um inteiro int main() { std::cout

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Tipos abstratos de dados

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Tipos abstratos de dados Programação Funcional 14 a Aula Tipos abstratos de dados Pedro Vasconcelos DCC/FCUP 2012 Tipos concretos de dados Até agora definimos um novo tipo de dados listamos os seus construtores. data Bool = False

Leia mais

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição Fundamentos de Programação Linguagem C++ Estruturas de controle Parte II Estruturas de repetição Prof. Bruno E. G. Gomes IFRN 1 Estruturas de Controle Permitem o controle da sequência de execução de um

Leia mais

Os valores são as entidades básicas da linguagem Haskell. São os elementos atómicos.

Os valores são as entidades básicas da linguagem Haskell. São os elementos atómicos. Valores & Expressões Os valores são as entidades básicas da linguagem Haskell. São os elementos atómicos. As expressões são obtidas aplicando funções a valores ou a outras expressões. O interpretador Haskell

Leia mais

Linguagem C: Introdução

Linguagem C: Introdução Linguagem C: Introdução Linguagem C É uma Linguagem de programação genérica que é utilizada para a criação de programas diversos como: Processadores de texto Planilhas eletrônicas Sistemas operacionais

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

Introdução a Programação

Introdução a Programação Introdução a Programação Prof. André Gustavo Duarte de Almeida andre.almeida@ifrn.edu.br docente.ifrn.edu.br/andrealmeida Aula 02 Primeiro Programa Roteiro Primeiros Passos Variáveis Expressões Comandos

Leia mais

1 Definição de funções 1. 2 Valores boleanos e condicionais 5. Podemos depois usar as novas funções tal qual as pré-definidas

1 Definição de funções 1. 2 Valores boleanos e condicionais 5. Podemos depois usar as novas funções tal qual as pré-definidas Nesta aula... Conteúdo 1 Definição de funções 1 2 Valores boleanos e condicionais 5 1 Definição de funções Definição de novas funções Na aula passada: vimos como usar os operadores e funções pré-definidas

Leia mais

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Análise Semântica Disciplina: Compiladores Equipe: Luiz Carlos dos Anjos Filho José Ferreira Júnior Compiladores Um compilador

Leia mais

Introdução à Programação em C (I)

Introdução à Programação em C (I) Introdução à Programação em C (I) Factorial Definição de função para cálculo de factorial Scheme (define (factorial n) (if (= n 1) 1 (* n (factorial (- n 1))))) C int factorial (int n) { if (n == 1) return

Leia mais

Vetores em Haskell. Vetores e Matrizes. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU.

Vetores em Haskell. Vetores e Matrizes. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Vetores em Haskell Linguagem Haskell Faculdade de Computação - UFU Setembro - 2009 Vetores em Haskell 1 Vetores em Haskell Fundamentos Vetores em Haskell Um vetor é um conjunto finito de elementos homogêneos.

Leia mais

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

Introdução à Programação uma Abordagem Funcional 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 34 Departamento de Informática Centro Tecnológico

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Variáveis em C Slides da Profa. Roseli Romero Comandos de Entrada e Saída O objetivo de escrevermos programas é em última análise, a obtenção de resultados (Saídas) depois da elaboração

Leia mais

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador; 1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e

Leia mais

ESTRUTURAS DE CONTROLE

ESTRUTURAS DE CONTROLE ESTRUTURAS DE CONTROLE ESTRUTURA SEQUENCIAL E ESTRUTURAS CONDICIONAIS Introdução à Ciência da Computação Estruturas de Controle ESTRUTURA SEQUENCIAL ESTRUTURAS CONDICIONAIS Estrutura Condicional Simples

Leia mais

Árvores. Prof. César Melo DCC/ICE/UFAM

Árvores. Prof. César Melo DCC/ICE/UFAM Árvores Prof. César Melo DCC/ICE/UFAM Introdução As estruturas anteriores são chamadas de unidimensionais (ou lineares) Exemplo são vetores e listas Não podem ser usadas como hierarquias. Exemplo: árvore

Leia mais

LISTA DE EXERCÍCIOS MÊS 04

LISTA DE EXERCÍCIOS MÊS 04 São José dos Campos, 05 de Junho de 2008 Disciplina: CES 10 Introdução à Computação. Semestre 2008-2º Período Professor: Carlos Henrique Quartucci Forster Estagiária: Michelle de Oliveira Parreira Instituto

Leia mais

Árvores. Prof. César Melo DCC/ICE/UFAM

Árvores. Prof. César Melo DCC/ICE/UFAM Árvores Prof. César Melo DCC/ICE/UFAM Introdução As estruturas anteriores são chamadas de unidimensionais (ou lineares) Exemplo são vetores e listas Não adequadas para representar hierarquias. Exemplo:

Leia mais

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES LINGUAGEM C: VARIÁVEIS E EXPRESSÕES Prof. André Backes LINGUAGENS DE PROGRAMAÇÃO Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve

Leia mais

Computação Fiável Indução - exercícios básicos

Computação Fiável Indução - exercícios básicos Computação Fiável Indução - exercícios básicos Simão Melo de Sousa 17 de Outubro de 2011 Conteúdo 1 Indução Estrutural 1 2 Indução Bem Fundada 9 1 Indução Estrutural Exercício 1 Demonstre por indução estrutural

Leia mais

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema ALGORITMIA Resolução De Problemas Em Informática Docente: Ana Paula Afonso 2000-2001 Resolução de Problemas 1. Analisar o problema Conhecer o bem o problema Descrever o problema: subdividir, detalhar 2.

Leia mais

Linguagens de Programação. Programação Funcional. Carlos Bazilio

Linguagens de Programação. Programação Funcional. Carlos Bazilio Linguagens de Programação Programação Funcional Carlos Bazilio carlosbazilio@puro.uff.br http://www.ic.uff.br/~bazilio/cursos/lp Funções como Valores de 1a. Classe Atribuição a Variáveis a = f() g = f

Leia mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

TÉCNICO DE INFORMÁTICA - SISTEMAS 782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar

Leia mais

MATRIZES. Conceitos e Operações

MATRIZES. Conceitos e Operações MATRIZES Conceitos e Operações As matrizes são tabelas de números reais utilizadas em quase todos os ramos da ciência e da engenharia. Várias operações realizadas por computadores são através de matrizes.

Leia mais

Estruturas de Dados Aula 16: Árvores com Número Variável 13/06/2011

Estruturas de Dados Aula 16: Árvores com Número Variável 13/06/2011 Estruturas de Dados Aula 16: Árvores com Número Variável de Filhos 13/06/2011 1 Fontes Bibliográficas Livros: Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo 13; Projeto de Algoritmos

Leia mais

Aula 15 Variáveis Indexadas (vetores)

Aula 15 Variáveis Indexadas (vetores) Aula 15 Variáveis Indexadas (vetores) Além das variáveis normais já conhecidas, podemos ter também variáveis indexadas. Tais variáveis são referenciadas por um nome e um índice. Especialmente úteis para

Leia mais

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais

Leia mais