Buscar

Trabalho de Haskell. Ex. Componente

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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes