• Nenhum resultado encontrado

1ª Lista de Exercícios de Paradigmas de Linguagens Computacionais Professor: Fernando Castor Monitores: Agay Borges (abn), Cleivson Siqueira (csa3), Dennis Silveira (dwas), Eduardo Rocha (ejfrf), Lívia Vilaça (lcjbv), Lucas Inojosa (licf), Luís Gabriel Li

N/A
N/A
Protected

Academic year: 2019

Share "1ª Lista de Exercícios de Paradigmas de Linguagens Computacionais Professor: Fernando Castor Monitores: Agay Borges (abn), Cleivson Siqueira (csa3), Dennis Silveira (dwas), Eduardo Rocha (ejfrf), Lívia Vilaça (lcjbv), Lucas Inojosa (licf), Luís Gabriel Li"

Copied!
5
0
0

Texto

(1)

1ª Lista de Exercícios de Paradigmas de Linguagens Computacionais Professor: Fernando Castor

Monitores: Agay Borges (abn), Cleivson Siqueira (csa3),

Dennis Silveira (dwas), Eduardo Rocha (ejfrf),

Lívia Vilaça (lcjbv), Lucas Inojosa (licf), Luís Gabriel Lima (lgnfl),

Walter Ferreira (wflf), Wellington Oliveira (woj)

CIn-UFPE – 2011.1 Disponível desde: 10/03/2011

Entrega: 29/03/2011

A lista deverá ser respondida em dupla. A falha em entregar a lista até a data estipulada implicará na perda de 0,25 ponto na média da disciplina para os membros da dupla. Considera-se que uma lista na qual menos que 37%(7 questões) das respostas estão corretas não foi entregue. A entrega da lista com pelo menos 80%(15 questões) das questões corretamente respondidas implica em um acréscimo de 0,125 ponto na média da disciplina para os membros da dupla. Se qualquer situação de cópia de respostas for identificada, os membros de todas as duplas envolvidas perderão 0,5 ponto na média da disciplina. O mesmo vale para respostas obtidas a partir da Internet. As respostas deverão ser entregues exclusivamente em formato texto ASCII (nada de .pdf, .doc, .docx ou .odt) e deverão ser enviadas para o monitor responsável por sua dupla, sem cópia para o professor. Tanto podem ser organizadas em arquivos separados, um por questão (e, neste caso, deverão ser zipadas), quanto em um único arquivo texto onde a resposta de cada questão está devidamente identificada e é auto-contida (uma parte da resposta de uma questão que seja útil para responder uma outra deve estar duplicada neste última). Para definir qual será o monitor responsável por corrigir a sua lista, vá até o endereço http://sites.google.com/a/cin.ufpe.br/monitoria-plc/ e inclua (a página é editável) os nomes dos dois membros da sua dupla, junto com os logins, embaixo do nome do monitor que tiver menos duplas e com base na ordem em que os nomes dos monitores aparecem na página.

1) Defina uma função ehPalindromo :: [t] -> Bool, que recebe uma Lista de elementos e retorna True se for palíndromo e False em caso contrário.

- Exemplo:

Prelude> ehPalindromo "arara" True

Prelude>

2) Defina uma função changeCase :: [Char] -> [Char], que inverte as letras de uma String de entrada, de maiuscula para minuscula e vice-versa.

- Exemplo:

Prelude> changeCase ‚Isto eh Um TEStE‛ ‚iSTO EH uM tesTe‛

Prelude>

(2)

- Exemplo:

Prelude> montar ['t','e','s','t','e'] "testes" False

Prelude> montar ['a','b','c','l','e','f','h','l','k','s'] "haskell" True

Prelude>

4)

Escreva uma função primeFibonacci :: Int -> [Int], que recebe um inteiro e retorna a lista de números primos contidos na sequência de fibonacci para esse número n.

- Exemplo:

Prelude> primeFibonacci 5 [2,3,5]

Prelude>

5) Defina uma função group :: [(String, Int)] -> [(String, [Int])]. Essa função vai receber uma lista de tuplas que representam (chave, valor), onde pode existir mais de uma tupla com a mesma chave. A função group deve retornar uma nova lista de tuplas que represente uma

hashtable (ou seja, não pode existir mais de um par para uma determinada chave). Para isso a

função deve agrupar todos os valores das tuplas com mesma chave em uma lista de valores e retornar uma lista com elementos do tipo (chave, [valores]).

- Exemplo:

Prelude> group [("k1", 1), ("k2", 2), ("k1", 3), ("k1", 4), ("k3", 5), ("k2", 6)] [("k1",[1,3,4]),("k2",[2,6]),("k3",[5])]

Prelude>

6) Você está escrevendo uma aplicação em Haskell que se comunica com o Twitter. Dado a limitação de 140 caracteres por tweet é interessante utilizar recursos de encurtamento de url para quando for necessário colocar links nos tweets.

Escreva uma função shorten :: String -> String que encurta links do YouTube.

Obs: A string passada como entrada para função será sempre uma url de vídeo válida do YouTube (incluindo http:// e www) onde o primeiro parâmetro da requisição GET será sempre o

parâmetro “v”.

- Exemplo:

Prelude> shorten ‚http://www.youtube.com/watch?v=Sa0C5Uxpd3c‛ "http://youtu.be/Sa0C5Uxpd3c"

Prelude> shorten ‚http://www.youtube.com/watch?v=ZiCSBH-uPxI&feature=youtu.be‛ ‚http://youtu.be/ZiCSBH-uPxI‛

Prelude>

7) Escreva uma função insertSeparator :: [String] -> String -> String, que recebe uma lista de strings e um separador e retorna a string resultado da concatenação entre as strings passadas, intercaladas pelo separador.

Obs: Não colocar o separador no final.

- Exemplo:

(3)

8) Defina a função maxMin :: [(Int,Int)] → ((Int,Int),(Int,Int)) que recebe uma lista de tuplas de dois inteiros e retorna a tupla que contém o maior inteiro e a tupla que contem o menor inteiro.

- Exemplo:

Prelude> maxMin [(6,4),(1,8),(3,6),(7,9)] ((7,9),(1,8))

Prelude> maxMin [] ((0,0),(0,0)) Prelude>

9) Construa uma função partition :: [Int] -> Int -> ([Int], [Int]) para particionar uma lista de inteiros em duas novas listas a partir de um valor k.

- Exemplo:

Prelude> partition [7,1,2,3,6,2,0,5,2,6,3,4,6,8] 3 ([7,1,2],[3,6,2,0,5,2,6,3,4,6,8])

Prelude>

10) Defina uma função separarEMultiplicarNumeros :: [Int] -> Int -> ([Int], [Int]), a qual recebe uma lista de números inteiros, e retorna uma tupla com 2 listas: a da esquerda com os números pares da lista da entrada, e a da direita os números ímpares da lista de entrada multiplicados pelo número passado como segundo argumento. Os números devem estar na mesma ordem da lista original.

- Exemplo:

Prelude> separarEMultiplicarNumeros [2, 93, 7, 29, 62, 49, 47, 31, 94] 3 ([2, 62, 94], [279, 21, 87, 147, 141, 93])

Prelude>

11) Defina uma função calcularMMCeMDC :: [Int] -> (Int,Int), que recebe uma lista de inteiros, e retorna uma tupla, cujo primeiro valor é o Mínimo Múltiplo Comum (MMC) e o segundo valor é o Máximo Divisor Comum (MDC) dos elementos da lista.

- Exemplo:

Prelude> calcularMMCeMDC [15,24,60] (120,3)

Prelude>

12) Defina uma função eliminaMaiusculas :: String -> String que recebe uma string qualquer e retorna uma string sem as letras maiúsculas contidas na string de entrada.

- Exemplo:

Prelude> eliminaMaiusculas "ZaQpAYno" "apno"

Prelude>

(4)

- Exemplo:

Prelude> busca "Maracatu" ["Samba","Maracatu Rural","Frevo","Maracatu Nação","Cavalo Marinho"]

["Maracatu Rural","Maracatu Nação"] Prelude>

14) Construa uma função que recebe uma lista de nomes e retorna uma tupla com o nome e a quantidade de ocorrencias deste nome nesta lista.

- Exemplo:

Prelude> occurrences ["macaco", "macaco", "girafa", "zebra", "zebra", "zebra", "macaco", "girafa"]

[("macaco",3),("girafa",2),("zebra",3)] Prelude>

15) Defina uma função polimórfica eliminarPadrao :: Eq w => [[w]] -> [w] -> [[w]], a qual recebe uma lista de listas, e uma lista, ambas contendo elementos do mesmo tipo. essa função deverá procurar o padrão da segunda lista recebida nas primeiras listas, inclusive algum que comece numa lista e termine na próxima. E o retorno será a nova lista de listas com os padrões retirados.

Para esclarecer, um exemplo:

Prelude> eliminarPadrao ["oitudobom","blzcomovaitu","dootimocara"] "tudo"

O padrão "tudo" está contido duas vezes nesta lista de listas, uma dentro da primeira das 3 listas (uma String é uma lista, lembrem!), e o outro começa na segunda lista e acaba na terceira. O algoritmo deve retirar esses padrões e retornar uma nova lista de listas, que ficará assim:

["oibom","blzcomovai","otimocara"]

- Exemplo:

Prelude> eliminarPadrao ["abcde","abcdefgabc","defghij"] "abcde" ["","fg","fghij"]

Prelude> eliminarPadrao [[1,2,3],[4,5,6],[3,4]] [3,4] [[1,2],[5,6],[]]

Prelude>

16) Defina uma função inverterSubstr :: String -> String -> String, que recebe uma cadeia de caracteres e um elemento, que será considerado como um delimitador das substrings. Ela deve retornar uma nova cadeia de caracteres, com a ordem dos caracteres de cada substring invertida. A ordem das substrings na cadeia deve mantida e as substrings devem ser separadas pelos elementos delimitadores, deixando-os em suas posições originais. Caso o elemento delimitador não se encontrar na cadeia, então inverta os caracteres da cadeia original.

- Exemplo :

Prelude> inverterSubstr "Meu nome eh Fulano" " "

"ueM emon he onaluF" --OBS: As substrings são as próprias palavras separadas por " " Prelude> inverterSubstr "Meu nome eh Fulano" "e"

"Memon ue eonaluF h" --OBS: As substrings são "M", "u nom", " ", "h Fulano" Prelude> inverterSubstr "Meu nome eh Fulano" "a"

"luF he emon ueMaon" --OBS: As substrings são "Meu nome eh Ful", "no" Prelude> inverterSubstr "Meu nome eh Fulano" "z"

"onaluF he emon ueM" --OBS: Como não encontra-se o elemento separador, então inverte-se toda a cadeia

(5)

17) Defina uma função batalhaNaval :: [(Char,Int,Bool)] -> Int -> [(Char,Int)] -> String onde [(Char,Int,Bool)] representa um tabuleiro com por exemplo (‘A’, 2, True) representando uma casa do tabuleiro com um navio presente, Int representa a quantidade de navios no tabuleiro, [(Char,Int)] representa as jogadas do adversário. A função deve devolver ‚vitória‛ se as jogadas conseguirem destruir todos os navios ou ‚derrota‛ se as jogadas não conseguirem destruir todos os navios.

- Exemplo:

Prelude> batalhaNaval [('A',1,False), ('A',2,False), ('A',3,True), ('B',1,True), ('B',2,True), ('B',3,False), ('C',1,False), ('C',2,False), ('C',3,False)] 3 [('A',1), ('B',1), ('B',2), ('C',2), ('A',3)]

"vitoria"

Prelude> batalhaNaval [('A',1,True), ('A',2,False), ('A',3,True), ('B',1,False), ('B',2,True), ('B',3,False), ('C',1,False), ('C',2,False), ('C',3,True)] 4 [('A',1), ('A',2), ('C',1), ('C',2), ('A',3)]

"derrota" Prelude>

18) Faca a função ordenar :: [String] -> [String] que ordena uma lista de strings da que tem menos caracteres para a que tem mais. Caso seja encontrado duas strings com o mesmo tamanho elas devem ficar em ordem lexicográfica.

- Exemplo :

Prelude> ordenar ["ac","a","addd","aab","add","ad","adde","ade","af"] ["a","ac","ad","af","aab","add","ade","addd","adde"]

Prelude>

19) Defina uma função avaliadorEBF :: String -> Bool, que recebe uma expressão como parâmetro e retorna um valor booleano indicando se ela é uma expressão bem-formada (EBF).

Considere as regras de construção das EBF’s. Os caracteres utilizados serão:

- ‘0’ como False e ‘1’ como True; - ‘x’ e ‘y’ como variáveis;

- ‘+’ como OR, ‘.’ como AND, ‘-‘ como NOT, ‘>’ como implicação e ‘^’ como XOR; - ‘(’ e ‘)‘ são os parênteses para separar os operadores.

Obs: Note que para cada operação, deve haver um par de parênteses associados.

- Exemplo:

Prelude> avaliadorEBF "((x+y)+(0.1))" True

Prelude> avaliadorEBF "((x.x)+(-y))" True

Prelude> avaliadorEBF "((x+y)+(0.1()" False

Referências

Documentos relacionados

5 “A Teoria Pura do Direito é uma teoria do Direito positivo – do Direito positivo em geral, não de uma ordem jurídica especial” (KELSEN, Teoria pura do direito, p..

nesta nossa modesta obra O sonho e os sonhos analisa- mos o sono e sua importância para o corpo e sobretudo para a alma que, nas horas de repouso da matéria, liberta-se parcialmente

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

No entanto, maiores lucros com publicidade e um crescimento no uso da plataforma em smartphones e tablets não serão suficientes para o mercado se a maior rede social do mundo

esta espécie foi encontrada em borda de mata ciliar, savana graminosa, savana parque e área de transição mata ciliar e savana.. Observações: Esta espécie ocorre

3.3 o Município tem caminhão da coleta seletiva, sendo orientado a providenciar a contratação direta da associação para o recolhimento dos resíduos recicláveis,

utilizada, pois no trabalho de Diacenco (2010) foi utilizada a Teoria da Deformação Cisalhante de Alta Order (HSDT) e, neste trabalho utilizou-se a Teoria da

Neste estudo foram estipulados os seguintes objec- tivos: (a) identifi car as dimensões do desenvolvimento vocacional (convicção vocacional, cooperação vocacio- nal,