QUESTOES DA CLASSE Ativ40questoes Exercícios de Programação Funcional Os itens estão mais ou menos em ordem de dificuldade.
- menorDeDois: recebe dois valores e retorna o menor
- menorDeTres: recebe três valores e retorna o menor
- fatorial: recebe um numero natural e retorna o seu fatorial
- fibonacci: recebe um número inteiro positivo e retorna o n-ésimo elemento da seqüência de Fibonacci (especificar no programa se sua seqüência começa com 0 e 1 ou com 1 e 1)
- elemento: recebe uma lista e um número inteiro positivo para retornar o n-ésimo elemento da lista ex.: (elemento 1 '(3 7 4 2)) ==> 3
- pertence: recebe uma lista e um elemento qualquer e verifica se o elemento pertence à lista ex.: pertence 1 [3,7,4,2] = False
- nro-elementos: recebe uma lista qualquer e retorna o número de elementos na lista obs.: não usar a função length
- maior: recebe uma lista de números e retorna o maior obs.: não usar a função max
- conta-ocorrencias: recebe um elemento e uma lista qualquer, retorna o número de ocorrências do elemento na lista
- unica-ocorrencia: recebe um elemento e uma lista e verifica se existe uma única ocorrência do elemento na lista ex.: unica-ocorrencia 2 [1,2,3,2] = False unica-ocorrencia 2 [3,1] = False unica-ocorrencia 2 [2] = True
- maiores-que: recebe um número e uma lista de números, retorna uma lista com os números que são maiores que o fornecido ex.: (maiores-que 10 '(4 6 30 3 15 3 10 7)) ==> (30 15)
- concatena: recebe duas listas quaisquer e retorna uma terceira lista com os elementos da primeira no início e os elementos da segunda no fim ex.: (concatena '() '()) ==> () (concatena '(1 2) '(3 4)) ==> (1 2 3 4)
- remover: recebe um elemento e uma lista e retorna a lista sem a primeira ocorrência do elemento
- remover-ultimo: recebe uma lista e remove o último elemento da lista
- remover-repetidos: recebe uma lista e retorna outra lista sem repetição de elementos ex.: (remover-repetidos '(7 4 3 5 7 4 4 6 4 1 2)) ==> (7 4 3 5 6 1 2)
- maiores: recebe um numero natural n e uma lista de números, retorna uma lista com os n maiores números sem alterar a ordem entre os elementos ex.: (maiores 4 '(9 3 5 7 8 4 4 7)) ==> (9 7 8 7)
- gera-sequencia: recebe um número inteiro n positivo e retorna a lista (1 -1 2 -2 3 -3 ... n -n)
- inverte: recebe uma lista e retorna outra, que contém os mesmos elementos da primeira, em ordem invertida
- divide: recebe uma lista e um número natural n, retorna um par onde o primeiro elemento é uma lista com os n primeiros números da lista original e o segundo elemento é uma lista com o resto dos elementos da lista original ex.: (divide '(1 2 3 4) 0) ==> (() 1 2 3 4) (divide '(1 2 3 4) 2) ==> ((1 2) 3 4)
- intercala: recebe duas listas e retorna outra lista com os elementos das listas originais intercalados. ex.: (intercala '(1 2 3) '(8 9)) ==> (1 8 2 8 3) (intercala '() '(1 2 6)) ==> (1 2 6)
- uniao: recebe duas listas que não contenham elementos repetidos e retorna uma nova com todos os elementos das duas listas originais (sem repetição) ex.: (uniao '(3 6 5 7) '(2 9 7 5 1)) ==> (3 6 5 7 2 9 1)
- interseccao: recebe duas listas sem elementos repetidos e retorna uma lista com os elementos que são comuns às duas ex.: (interseccao '(3 6 5 7) '(9 7 5 1 3)) ==> (3 5 7)
- sequencia: recebe dois numeros naturais n e m, e retorna uma lista com n elementos, onde o primeiro é m, o segundo é m+1, etc... ex.: (sequencia 0 2) ==> ( ) (sequencia 3 4) ==> (4 5 6)
- insere-ordenado: recebe uma lista de números em ordem crescente e um número qualquer, retorna uma lista de números em ordem crescente com os elementos da lista inicial mais o número passado.
- ordenado?: recebe uma lista de números e verifica se eles estão ordenados ou não
- ordena: recebe uma lista com números e retorna outra lista com os números ordenados ex.: (ordena '(7 3 5 7 8 4 4)) ==> (3 4 4 5 7 7 8)
- rodar-esquerda: recebe um número natural, uma lista e retorna uma nova lista onde a posição dos elementos mudou como se eles tivessem sido "rodados" ex.: (rodar-esquerda 0 '(a s d f g)) ==> (a s d f g) (rodar-esquerda 1 '(a s d f g)) ==> (s d f g a) (rodar-esquerda 3 '(a s d f g)) ==> (f g a s d) (rodar-esquerda 4 '(a s d f g)) ==> (g a s d f)
- rodar-direita: recebe um número natural, uma lista e retorna uma nova lista onde a posição dos elementos mudou como se eles tivessem sido "rodados" ex.: (rodar-direita 0 '(a s d f g)) ==> (a s d f g) (rodar-direita 1 '(a s d f g)) ==> (g a s d f) (rodar-direita 3 '(a s d f g)) ==> (d f g a s) (rodar-direita 4 '(a s d f g)) ==> (s d f g a)
- todas-maiusculas: Recebe uma string qualquer e retorna outra string onde todas as letras são maiúsculas. Pode ser útil saber os seguintes códigos ASCII: a=97, z=122, A=65, Z=90, 0=48, 9=57, espaço=32. ex.: todas-maiusculas "abc 123" = "ABC 123"
- primeiras-maiusculas: recebe uma string qualquer e retorna outra string onde somente as iniciais são maíusculas ex.: (primeiras-maiusculas "FuLaNo bElTrAnO silva") ==> "Fulano Beltrano Silva"
- seleciona: recebe uma lista qualquer e uma lista de posições, retorna uma lista com os elementos da primeira que estavam nas posições indicadas ex.: (seleciona '(a b c d e f) '(0 3 2 3)) ==> (a d c d)
- palindrome?: recebe uma string e verifica se ela é uma palíndrome ou nao ex.: (palindrome? "ana") ==> #t (palindrome? "abbccbba") ==> #t (palindrome? "abbdbbaa") ==> #f
- primo?: verifica se um número é primo ou não
- soma-digitos: recebe um número natural e retorna a soma de seus dígitos ex.: (soma-digitos 328464584658) ==> 63
- bolha: recebe uma lista de números e retorna a lista ordenada, pelo método da bolha (bolha burra)
- compactar: recebe uma lista de números e transforma todas as repetições em sub-listas de dois elementos: sendo o primeiro elemento o número de repetições encontradas e o segundo elemento é o número que repete na lista original. Os números que não repetem na lista original não devem ser alterados. ex.: (compactar '(2 2 2 3 4 4 2 9 5 2 4 5 5 5)) ==> ((3 2) 3 (2 4) 2 9 5 2 4 (3 5)) Em Haskell, como não é possível implementar listas heterogêneas, a função deve retornar uma lista de listas. Ex.: compactar [2,2,2,3,4,4,2,9,5,2,4,5,5,5] = [[3,2],[3],[2,4],[2],[9],[5],[2],[4],[3,5]]
- Faça um programa que dada uma lista, retorne uma tupla lista-lista (de inteiros) onde a lista da esquerda contém os números impares e a lista da direita os números pares ex: func :: [Int] -> ([Int],[Int]) [1,2,3,4,5,6,7] => ([1,3,5,7],[2,4,6])
- Dizemos que um quadrado perfeito é um numero cuja raiz quadrada é um número inteiro. Sabemos o que a raiz quadrada é um cálculo lento quando comparado à operações como adição ou multiplicação. Implemente uma função que verifica se um número é um quadrado perfeito sem usar uma função que calcula raiz quadrada.
- Faça um programa que encontra a representação de um número natural numa base b qualquer (1 < b < 37). Exemplo: (muda_base 17 2) ==> "10001"(muda_base 26 16) ==> "1A"
- O conjunto de todos os subconjuntos de um segundo conjunto é denominado conjuntos das partes desse segundo conjunto. Faça um programa que encontra o conjunto das partes de uma lista. Exemplo: partes [2,3,2,31] = [[],[2],[3],[31],[2,2],[2,3],[2,31],[3,31],[2,2,3],[2,2,31],[2,3,31],[2,2,3,31]]