Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
-----Funcoes auxiliares genericas concatena :: [a] -> [a] -> [a] concatena [] a = a concatena (x:y) a = x : concatena y a concatenac :: [Char] -> [Char] -> [Char] concatenac [] (a) = a concatenac (b) [] = b concatenac (x:y) (a) = x : concatenac (y) (a) concatenaFloat :: [Float] -> [Float] -> [Float] concatenaFloat [] a = a concatenaFloat (x:y) a = x : concatenaFloat y a concatenaChar :: [Char] -> [Char] -> [Char] concatenaChar [] a = a concatenaChar (x:y) a = x : concatenaChar y a inverteLista1 :: [a] -> [a] inverteLista1 [] = [] inverteLista1 (x:y) = concatena (inverteLista1 y) [x] -----Fim funcoes auxiliares -----EXERCICIO 1 nEsimo :: Int -> [Int] -> Int nEsimo 1 (cabeca:cauda) = cabeca nEsimo n (cabeca:cauda) = nEsimo (n-1) cauda -----EXERCICIO 2 inserePrimeiro :: Int -> [Int] -> [Int] inserePrimeiro _ [] = [] inserePrimeiro n (cauda) | otherwise = (concatena [n] cauda) -----EXERCICIO 3 insereUltimo :: Int -> [Int] -> [Int] insereUltimo a b = concatena b [a] -----EXERCICIO 4 inserePosicao :: Int -> [Int] -> Int -> [Int] inserePosicao _ [] _ = [] inserePosicao x (cabeca:cauda) 1 = concatena [x] (cabeca:cauda) inserePosicao x (cabeca:cauda) y = concatena [cabeca] (inserePosicao x cauda (y-1)) -----EXERCICIO 5 retiraCaracter :: Char -> [Char] -> [Char] retiraCaracter a [] = [] retiraCaracter a (x:y) | x == a = retiraCaracter a y | otherwise = x : retiraCaracter a y -----EXERCICIO 6 trocaCaracter :: Char -> Char -> [Char] -> [Char] trocaCaracter a b [] = [] trocaCaracter a b (x:y) | a == x = b : trocaCaracter a b y | otherwise = x : trocaCaracter a b y -----EXERCICIO 7 inverteLista :: [Int] -> [Int] inverteLista [] = [] inverteLista (cabeca:cauda) = concatena (inverteLista cauda) [cabeca] -----EXERCICIO 8 serieFibonacci :: Int -> [Int] serieFibonacci a | a == 0 = [0] | a == 1 = [1] | a > 1 = (retornalistafib a 1 1 [0]) retornalistafib :: Int -> Int->Int->[Int]-> [Int] retornalistafib a b c (lista) |a==0=(lista) |otherwise = retornalistafib (a-1) (b+c) (b) (c:lista) -----EXERCICIO 9 palindromo :: [Char] -> Bool palindromo a | (inverteLista1 a == a ) = True | otherwise = False -----EXERCICIO 10 substring :: [Char] -> Int -> Int -> [Char] substring [] _ _ = [] substring (cabeca:cauda) 1 1 = [cabeca] substring (cabeca:cauda) 1 y = concatena [cabeca] (substring cauda 1 (y-1)) substring (cabeca:cauda) x y = substring cauda (x-1) y -----EXERCICIO 11 insereString :: [Char] -> [Char] -> Int -> [Char] insereString lista [] _ = lista insereString lista ilist n = inser lista ilist n inser :: [Char] -> [Char] -> Int -> [Char] inser (a:cauda) (ilist) c | c>0= a: (inser (cauda) (ilist) (c-1)) | c==0= concatenac ([a]) (concatenac ilist cauda) -----EXERCICIO 12 subString :: [Char] -> [Char] -> Bool subString a b = subStringAux a b subStringAux :: [Char] -> [Char] -> Bool subStringAux (m:n) [] = False subStringAux (m:n) (x:y) | m == x = if (compara n y) then True else subStringAux (m:n) (y) | otherwise = subStringAux (m:n) (y) compara :: [Char] -> [Char] -> Bool compara [] _ = True compara (m:n) (x:y) | m == x = compara n y | otherwise = False -----EXERCICIO 13 media :: [Float] -> Float media (cabeca:cauda) = soma (cabeca:cauda) / tamanho (cabeca:cauda) soma :: [Float] -> Float soma [] = 0 soma (cabeca:cauda) = cabeca + soma cauda tamanho :: [Float] -> Float tamanho [] = 0 tamanho (cabeca:cauda) = 1 + tamanho cauda -----EXERCICIO 14 mediana :: [Float] -> Float mediana [] = 0 mediana (lista) = if (mod (tamLista (ordena lista)) 2) == 0 then medianaPar (ordena lista) (tamLista (ordena lista)) 0 0 else medianaImpar (ordena lista) ((div (tamLista (lista)) 2)+1) 1 ordena::[Float]->[Float] ordena [] = [] ordena (x:y) = insere x (ordena y) insere::Float->[Float]->[Float] insere elem [] = [elem] insere elem (x:y) | (elem <= x) = elem:x:y | otherwise = x:insere elem y tamLista :: [Float] -> Int tamLista [] = 0 tamLista (x:y) = 1 + tamLista y medianaPar :: [Float] -> Int -> Int -> Float -> Float medianaPar (x:y) a b ant | b==(div a 2)= ((x+ant)/2) |otherwise = medianaPar (y) a (b+1) x medianapar:: [Float] -> Int -> Int -> Float -> Float medianapar (cabeca:cauda) parada var anterior | var==(parada)=((anterior+cabeca)/2) | var<(parada)=medianapar (cauda) parada (var+1) cabeca medianaImpar :: [Float] -> Int -> Int -> Float medianaImpar (x:y) a b | a == b = x | otherwise = medianaImpar y a (b+1) -----EXERCICIO 15 moda :: [Float] -> Float moda (x:y) = ctn x y 0 0 ctn :: Float -> [Float] -> Float -> Float -> Float ctn a [] b _ = b ctn a (x:y) b c = if (ctg a (x:y) 0) > c then ctn x y a (ctg a (x:y) 0) else ctn x y b c ctg :: Float -> [Float] -> Float -> Float ctg _ [] c = c ctg a (x:y) c | a == x = ctg a y (c+1) | otherwise = ctg a y c
Compartilhar