Meus caros!
Vamos resolver aqui um problema novo em Haskell! Não tão novo assim por já ter sido resolvido em C e C++ aqui no blog, mas dessa vez vamos fazer a solução do The Greatest (O Maior) nessa outra linguagem!
Problema: 1013
Enunciado:
Faça um programa que leia três valores e apresente o maior dos três valores lidos seguido da mensagem “eh o maior”. Utilize a fórmula:
MaiorAB = (a+b+abs(a-b))/2
Obs.: a fórmula apenas calcula o maior entre os dois primeiros (a e b). Um segundo passo, portanto é necessário para chegar no resultado esperado.
Linguagem: Haskell
Minha estratégia foi declarar uma função exatamente como a definição de MaiorAB. Por estarmos lidando com valores do tipo Int, em vez de usar o operador "/" a gente usa o "div". Assim, montei exatamente a função.
Tendo a definição da função, basta chamá-la para os parâmetros lidos na forma f ( f (a b) c), ou seja, obtenho o maior entre "a" e "b" e este maior será comparado com "c", o que resultará sempre no maior valor.
Como os valores são lidos na mesma linha, li a linha com getLine num primeiro momento para depois separar cada valor em palavras (com a função words) e convertê-los um a um para Int com map read, o que resulta, agora, em uma lista de Int que terá os três valores lidos.
Agora sim, com os valores Int, basta aplicar a função e imprimir com putStrLn o valor convertido para String, usando a função show, e exibindo o restante da mensagem como solicitado no enunciado.
Fácil? Difícil?
maiorAB :: Int -> Int -> Int maiorAB a b = div (a + b + abs(a-b)) 2 main :: IO () main = do line <- getLine let [a, b, c] = map read (words line) :: [Int] putStrLn (show(maiorAB (maiorAB a b) c) ++ " eh o maior")