segunda-feira, 23 de setembro de 2013

Capítulo 02 do Livro Introdução ao Haskell

Respostas do capítulo 02 do Livro Introdução ao Haskell
Autores: Stenio Longo Araújo
                 Benedito Melo Acióly

import Data.Char
-- EXEMPLOS
----------------------------------------------------------------------------------------------------
-- Objetivo: Calcular a função nAnd 
----------------------------------------------------------------------------------------------------
nAnd :: Bool -> Bool -> Bool
nAnd p q = not (p && q)

----------------------------------------------------------------------------------------------------
-- Objetivo:
-- Verificar se um caracter é MAIÚSCULO;
-- Verificar se um caracter é minúsculo.

-- letra para teste entre ' '
----------------------------------------------------------------------------------------------------
ehMaiuscula :: Char -> Bool
ehMaiuscula ch = ('A' <= ch) && (ch <= 'Z')

ehMinuscula :: Char -> Bool
ehMinuscula ch = ('a' <= ch) && (ch <= 'z')

----------------------------------------------------------------------------------------------------
-- Objetivo: Concatenar três strings
-- palavras para teste entre " "
----------------------------------------------------------------------------------------------------
linhas :: String -> String -> String -> String
linhas s1 s2 s3 = s1 ++ s2 ++ s3

----------------------------------------------------------------------------------------------------
-- EXERCÍCIOS
----------------------------------------------------------------------------------------------------
-- Objetivo: Operação nOr, que retorna false se dois valores forem false
----------------------------------------------------------------------------------------------------
nOr :: Bool -> Bool -> Bool
nOr p q = not (p || q)

----------------------------------------------------------------------------------------------------
-- Objetivo: Comparar se três inteiros são diferentes entre si
----------------------------------------------------------------------------------------------------
tresDiferentes :: Int -> Int -> Int -> Bool
tresDiferentes a b c
        | a /= b && b /= c && a /= c = True
        | otherwise = False
       
----------------------------------------------------------------------------------------------------
-- Objetivo: Calcular àrea de um triângulo
----------------------------------------------------------------------------------------------------
areaT :: Float -> Float -> Float
areaT base altura = ((base * altura) / 2)

----------------------------------------------------------------------------------------------------
-- Objetivo: Calcular àrea de um círculo
----------------------------------------------------------------------------------------------------
areaC :: Float -> Float
areaC raio = (3.14 * (raio * raio))

----------------------------------------------------------------------------------------------------
-- Objetivo: Converter uma temperatura Farenheit para Centígrados
----------------------------------------------------------------------------------------------------
converteT :: Float -> Float
converteT temperatura = (5 / 9) * (temperatura - 32)

----------------------------------------------------------------------------------------------------
-- Objetivo: Converter Maiúscula para Minúscula
----------------------------------------------------------------------------------------------------
paraMinuscula :: Char -> Char
paraMinuscula a = chr (ord a + 32)

----------------------------------------------------------------------------------------------------
-- Objetivo: Converter Minúscula para Maiúscula
----------------------------------------------------------------------------------------------------
paraMaiuscula :: Char -> Char
paraMaiuscula a = chr (ord a - 32)

----------------------------------------------------------------------------------------------------
-- Objetivo: Calcular média de um aluno
----------------------------------------------------------------------------------------------------
calculaMedia :: Float -> Float -> Float -> Float
calculaMedia a b c = (a + b + c) / 3

----------------------------------------------------------------------------------------------------
-- Objetivo: Definir a posição do ponto no eixo cartesiano
----------------------------------------------------------------------------------------------------
cartesiano :: Float -> Float -> String
cartesiano x y
        | x > 0 && y > 0 = "Primeiro Quadrante"
        | x < 0 && y > 0 = "Segundo Quadrante"
        | x < 0 && y < 0 = "Terceiro Quadrante"
        | x > 0 && y < 0 = "Quarto Quadrante"
        | otherwise = "Os pontos nao esta em nenhum dos quadrantes pois eh o ponto 0."
       
----------------------------------------------------------------------------------------------------
-- Objetivo: Definir a unidade de um número
----------------------------------------------------------------------------------------------------
unidade :: Int -> Int
unidade a
        | a < 10 = a
        | otherwise = mod a 10
       
----------------------------------------------------------------------------------------------------
-- Objetivo: Definir a dezena de um número
----------------------------------------------------------------------------------------------------
dezena :: Int -> Int
dezena a
        | a < 100 = a
        | otherwise = mod a 100
       
----------------------------------------------------------------------------------------------------
-- Objetivo: Definir a centena de um número
----------------------------------------------------------------------------------------------------
centena :: Int -> Int
centena a
        | a < 1000 = a
        | otherwise = mod a 1000
       
----------------------------------------------------------------------------------------------------
-- Objetivo: Somar algarismos
----------------------------------------------------------------------------------------------------
somaAl :: Int -> Int
somaAl a
        | a < 10 = a
        | a >= 10 && a < 100 = (mod a 10) + (div a 10)
        | a >= 100 && a < 1000 = (mod a 10) + (mod (div a 10) 10) + (div a 100)
        | otherwise = error " Numero deve ser menor que 1000."
       
----------------------------------------------------------------------------------------------------
-- Objetivo: Soma lados dos triângulos
----------------------------------------------------------------------------------------------------
somaTri :: Int -> Int -> Int -> String
somaTri a b c
        | a == b && a == c = "Triangulo Equilatero"
        | a /= b && a /= c && b /= c = "Triangulo Escaleno"
        | otherwise = "Triangulo Isosceles"
       
----------------------------------------------------------------------------------------------------
-- Objetivo: Verificar se um número é par
----------------------------------------------------------------------------------------------------
ehPar :: Int -> Bool
ehPar a
        | mod a 2 == 0 =  True
        | otherwise = False
        

0 comentários:

Postar um comentário