Resolução da Lista 02
-- Funcao base para as questoes
nove,cinco,um,dois,tres,quatro,seis,sete,oito,zero :: [Int]
zero = [4,1,2,1,2,1,4]
um = [0,2,1,2,1,2,1,2,1,2,1]
dois = [3,2,5,2,3]
tres = [3,2,4,2,4]
quatro = [1,1,2,1,4,2,1,2,1]
cinco = [4,2,3,2,4]
seis = [4,2,4,1,4]
sete = [3,2,1,2,1,2,1,2,1]
oito = [4,1,5,1,4]
nove = [4,1,4,2,1,2,1]
--Questao 01
-- recebe um dos numeros por extenso e devolve a lista considerando que posicao 0 quantidade de asteriscos, porsicao 1 espacos e vai alternando entre asterisco e espacos
toString :: [Int] -> String
toString [ ] = [ ] -- nao necessita
toString [n] = impAsterisco n
toString (a : b : c) = impAsterisco a ++ impEspaco b ++ toString c -- c eh cauda, b eh segundo elemento e a eh o primeiro elemento
-- auxilia na impressao dos asteriscos
impAsterisco :: Int -> String
impAsterisco 0 = [ ]
impAsterisco qtd = "*" ++ impAsterisco (qtd - 1)
-- auxilia nos espacos
impEspaco :: Int -> String
impEspaco 0 = [ ]
impEspaco qtd = ' ' : impEspaco (qtd - 1) --aspas simples porque eh para concatenar com uma lista
-- Questao 02
type Linha = String
toLinhas :: String -> [Linha]
toLinhas [ ] = [ ]
toLinhas (a : b : c : d) = ([a] ++ [b] ++ [c] ) : toLinhas d -- a, b e c representa cada elemento ou seja cada "*" e d eh o resto dos astericos e espacos
--para testar coloque no terminal toLinhas (toString nove) nove pode ser qualquer um dos outros numeros de zer - nove
-- Questao 03
--imprime os \n a cada tres caracteres
showLinhas :: [Linha] -> String
showLinhas [n] = n
showLinhas (a : b) = a ++ "\n" ++ showLinhas b ++ "\n"
-- Questao 04
-- recebe duas listas que podem ser numeros e concatena numa so lista
juntaLinhas :: [Linha] -> [Linha] -> [Linha]
juntaLinhas [ ] [ ] = [ ]
juntaLinhas (a1 : b1) (a2 : b2) = (a1 ++ " " ++ a2) : juntaLinhas b1 b2
-- Questao 05
-- [ ] !! int concatena com a lista com o int
-- recebe numeros de ate tres digitos
toLcd :: Int -> String
toLcd n = showLinhas (toLcd2 n)
toLcd1 :: Int -> IO( )
toLcd1 n = putStr (showLinhas (toLcd2 n))
toLcd2 :: Int -> [Linha]
toLcd2 n
| n <= 9 = toLcdAux n
| n <= 99 = juntaLinhas (toLcd2 (div n 10)) (toLcd2 (mod n 10))
| n <= 999 = juntaLinhas (toLcd2 (div n 100)) (toLcd2 (mod n 100))
| otherwise = error "Garotinho so eh permitido numeros de tres digitos"
toLcdAux :: Int -> [Linha]
toLcdAux n = toLinhas (toString (numeros !! n))
numeros :: [[Int]]
numeros = [zero,um,dois,tres,quatro,cinco,seis,sete,oito,nove]
-- Questao 06
--toCompact :: String -> [Int]
--toCompact numero
Pelo monitor Jaime Freire
Falta a questão 06 que ainda tentarei fazer.
domingo, 6 de outubro de 2013
Inicio »
concatena lista em haskell
,
Haskell
,
numeros em asteriscos em haskell
,
toString em haskell
» Listas em Haskell
Listas em Haskell
14:41
concatena lista em haskell, Haskell, numeros em asteriscos em haskell, toString em haskell
Sem Comentarios
0 comentários:
Postar um comentário