PADRÃO APRESENTADO SLIDE 1 TÍTULO

VÁ PARA O BLOGGER EDITAR HTML E ENCONTRAR ESTE TEXTO E SUBSTITUIR PELA SUA DESCRIÇÃO DO POST EM DESTAQUE......

Cursos Técnicos

Venha conhecer os nossos cursos!

PADRÃO APRESENTADO SLIDE 3 TÍTULO

VÁ PARA O BLOGGER EDITAR HTML E ENCONTRAR ESTE TEXTO E SUBSTITUIR PELA SUA DESCRIÇÃO DO POST EM DESTAQUE......

PADRÃO APRESENTADO SLIDE 4 TÍTULO

VÁ PARA O BLOGGER EDITAR HTML E ENCONTRAR ESTE TEXTO E SUBSTITUIR PELA SUA DESCRIÇÃO DO POST EM DESTAQUE......

PADRÃO APRESENTADO SLIDE 5 TÍTULO

VÁ PARA O BLOGGER EDITAR HTML E ENCONTRAR ESTE TEXTO E SUBSTITUIR PELA SUA DESCRIÇÃO DO POST EM DESTAQUE......

quarta-feira, 9 de outubro de 2013

Resolução de questões

Bons estudos à todos e ótima prova na sexta 11/10/2013

-- Resolucao da Prova

 --Dados necessarios para questao

type BancoDeDados = [Onibus]
type Onibus = (Codigo, Origem, Destino, Horario, [Passageiro])
type Codigo = Int
type Origem = String
type Destino = String
type Horario = String
type Passageiro = String

exemplo :: BancoDeDados
exemplo = [ (1, "salvador", "vitoria da conquista", "8:00", ["carlos", "maria", "rita"]),
(2, "salvador", "vitoria da conquista", "12:30", []),
(3, "vitoria da conquista", "Ilheus","9:00", ["ana", "joana", "rita"]),
(4, "salvador", "Ilheus", "22:00", ["fabio", "jose","carlos", "maria", "rita"])]

-- Questao 01
-- _ eh uma variavel anonima, utilizo quando esta variavel é irrelevante para o resultado da minha funcao
-- orig = oriigem recebida
-- ori = origem da tupla definida no BD
-- Letra a

quantOnibus :: BancoDeDados -> Origem -> Int
quantOnibus [ ]  _ = 0
quantOnibus (( cod, ori, des, hor, pas) : cauda) orig
|ori == orig = 1 + quantOnibus cauda orig
| otherwise = quantOnibus cauda orig

-- Letra b

obterHorario :: BancoDeDados -> Origem -> [Horario]
obterHorario [ ] _ = [ ]
obterHorario ((_, ori, _, hor, _) : cauda) orig
| ori == orig = hor : obterHorario cauda orig
| otherwise = obterHorario cauda orig

-- Letra c

obterHorario2 :: BancoDeDados -> Origem -> [Horario]
obterHorario2 bd orig = [ h | (_, ori, _, h, _) <- bd, ori == orig]

-- Letra d

incluir :: BancoDeDados -> Codigo -> Passageiro -> BancoDeDados
incluir [ ] _ _ = [ ]
incluir ((cod, ori, des, hor, pas) : cauda) codi pass
| cod == codi = (cod, ori, des, hor, pass: pas) : cauda
| otherwise = (cod, ori, des, hor, pas) : incluir cauda codi pass

-- Questao 02
-- Letra a
remove :: [Int] -> [Int]
remove [ ] = [ ]
remove [n] = [n]
remove (a : b : c)
| a == b = remove(b : c)
| otherwise = a : remove (b : c)

-- Letra b
intercalar :: [Int] -> [Int] -> [Int]
intercalar  [ ] lista = lista
intercalar (a : b) lista = inserir a (intercalar b lista)

inserir :: Int -> [Int] -> [Int]
inserir n [ ] = [n]
inserir n (a : b)
| n <= a = n : a : b
| otherwise = a : inserir n b

-- Outra forma para letra b da questao 02

intercalar2 :: [Int] -> [Int] -> [Int]
intercalar2 [ ] l = l
intercalar2 l [ ]  = l
intercalar2 (a:b) (c:d)
|a <= c = a : intercalar2 b (c:d)
|otherwise = c : intercalar2 (a:b) d

Com a ajuda de Jaime Freire

Lista 01 - Recursão Completa

-- Bons estudos à TODOS 
-- Lista de Exercicio 01

vendas :: Int -> Int
vendas 1 = 20
vendas 2 = 32
vendas 3 = 21
vendas 4 = 60
vendas 5 = 25
vendas 6 = 12
vendas 7 = 52
vendas 8 = 28
vendas 9 = 29
vendas 10 = 40
vendas 11 = 50
vendas 12 = 33

-- Questao 01

desloca :: Int -> String -> String
desloca d palavra
        | d == 0 = palavra
        | d > 0 =  " " ++ desloca (d - 1) palavra

-- Questao 02

impAsterisco :: Int -> String
impAsterisco  qtd
        | qtd == 0 = ""
        | qtd > 0 = "*" ++ impAsterisco (qtd - 1)
       
-- Questao 03

centraliza:: String -> String
centraliza palavra = desloca (length (palavra)) palavra ++ desloca (length (palavra)) ""

-- Questao 04

tamanhoLinha :: Int
tamanhoLinha = 40

cabecalho :: String
titulo = "Relatorio de Venda de Microcomputadores"
cabecalho = impAsterisco tamanhoLinha ++ centraliza titulo ++ impAsterisco (tamanhoLinha +1) ++ "\n"

-- Questao 05

mes :: Int -> String
mes m
        | m == 00 = "Este mes nao existe."
        | m == 01 = "Janeiro"
        | m == 02 = "Fevereiro"
        | m == 03 = "Marco"
        | m == 04 = "Abril"
        | m == 05 = "Maio"
        | m == 06 = "Junho"
        | m == 07 = "Julho"
        | m == 08 = "Agosto"
        | m == 09 = "Setembro"
        | m == 10 = "Outubro"
        | m == 11 = "Novembro"
        | m == 12 = "Dezembro"
       
-- Questao 06

impBranco :: Int -> String
impBranco  qtd
        | qtd == 0 = ""
        | qtd > 0 = " " ++ impBranco (qtd - 1)
       
-- Questao 07

impMes :: Int -> String
impMes mesp = desloca 6 (mes mesp) ++ impBranco (tamanhoLinha - length(mes mesp)) ++ show (vendas mesp) ++ "\n"

-- Questao 08

impMeses :: Int -> String
impMeses 1 = impMes 1 ++ "\n"
impMeses messp = impMeses (messp - 1) ++ impMes messp ++  "\n"  

-- Questao 09

somaVendas :: Int -> Int
somaVendas 1 = vendas 1
somaVendas v = somaVendas (v - 1) +  vendas v

-- Questao 10

impSoma :: Int -> String
impSoma sv = impAsterisco tamanhoLinha ++ "\n" ++ desloca 6 ("Total de Vendas: ") ++ show (somaVendas sv) ++ "\n"

-- Questao 11

maiorVenda :: Int -> Int
maiorVenda 1 = vendas 1
maiorVenda maior = maiorVendaAux (vendas maior) (maiorVenda (maior - 1))

maiorVendaAux :: Int  -> Int -> Int
maiorVendaAux v1 v2
        | v1 >= v2 = v1
        | otherwise = v2

-- Questao 12
       
impMaior :: Int -> String
impMaior mv = desloca 5 (" Maior Venda no Periodo: ") ++ show (maiorVenda mv)   

impVendaZerada :: Int -> String
impVendaZerada vz = desloca 6 ("Vendas Zeradas: ") ++ show (vendasZeradas vz) ++ "\n"

vendasZeradas :: Int -> Int
vendasZeradas 0 = 0
vendasZeradas vmes =  testa0 (vmes) + vendasZeradas (vmes - 1)

testa0 :: Int -> Int
testa0  vmz
        | vendas vmz == 0 = 1
        | otherwise = 0

-- Questao 13

geraGraf :: Int -> String
geraGraf 1 = "\n" ++ desloca 6 ("Grafico de Vendas: ") ++ "\n"  ++ "\t" ++ impAsterisco (vendas 1) ++ "\n"
geraGraf astGraf = geraGraf (astGraf - 1) ++ "\t" ++ impAsterisco (vendas astGraf) ++ "\n"

-- Questao 14

relatorio :: Int -> IO( )
relatorio n = putStr (cabecalho ++ impMeses n ++
                                        impSoma n ++ impVendaZerada n ++  impMaior n ++ geraGraf n)

domingo, 6 de outubro de 2013

Listas em Haskell

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.

Lista 01 - Recursão

Alguns exercícios de recursão

-- Lista de Exercicio 01

vendas :: Int -> Int
vendas 1 = 20
vendas 2 = 32
vendas 3 = 21
vendas 4 = 60
vendas 5 = 25
vendas 6 = 12
vendas 7 = 52
vendas 8 = 28
vendas 9 = 29
vendas 10 = 40
vendas 11 = 50
vendas 12 = 33

-- Questao 01

desloca :: Int -> String -> String
desloca d palavra
        | d == 0 = palavra
        | d > 0 =  " " ++ desloca (d - 1) palavra

-- Questao 02

impAsterisco :: Int -> String
impAsterisco  qtd
        | qtd == 0 = ""
        | qtd > 0 = "*" ++ impAsterisco (qtd - 1)
       
-- Questao 03

centraliza:: String -> String
centraliza palavra = desloca (length (palavra)) palavra ++ desloca (length (palavra)) ""

-- Questao 04

tamanhoLinha :: Int
tamanhoLinha = 40

cabecalho :: String
titulo = "Relatorio de Venda de Microcomputadores"
cabecalho = impAsterisco tamanhoLinha ++ centraliza titulo ++ impAsterisco (tamanhoLinha +1) ++ "\n"

-- Questao 05

mes :: Int -> String
mes m
        | m == 00 = "Este mes nao existe."
        | m == 01 = "Janeiro"
        | m == 02 = "Fevereiro"
        | m == 03 = "Marco"
        | m == 04 = "Abril"
        | m == 05 = "Maio"
        | m == 06 = "Junho"
        | m == 07 = "Julho"
        | m == 08 = "Agosto"
        | m == 09 = "Setembro"
        | m == 10 = "Outubro"
        | m == 11 = "Novembro"
        | m == 12 = "Dezembro"
       
-- Questao 06

impBranco :: Int -> String
impBranco  qtd
        | qtd == 0 = ""
        | qtd > 0 = " " ++ impBranco (qtd - 1)
       
-- Questao 07

impMes :: Int -> String
impMes mesp = desloca 6 (mes mesp) ++ impBranco (tamanhoLinha - length(mes mesp)) ++ show (vendas mesp) ++ "\n"

-- Questao 08

impMeses :: Int -> String
impMeses 1 = impMes 1 ++ "\n"
impMeses messp = impMeses (messp - 1) ++ impMes messp ++  "\n"  

-- Questao 09

somaVendas :: Int -> Int
somaVendas 1 = vendas 1
somaVendas v = somaVendas (v - 1) +  vendas v

-- Questao 10

impSoma :: Int -> String
impSoma sv = impAsterisco tamanhoLinha ++ "\n" ++ desloca 6 ("Total de Vendas: ") ++ show (somaVendas sv) ++ "\n"

-- Questao 11

maiorVenda :: Int -> Int
maiorVenda 1 = vendas 1
maiorVenda maior = maiorVendaAux (vendas maior) (maiorVenda (maior - 1))

maiorVendaAux :: Int -> Int
maiorVenda v1 v2
        a >= b = a
        otherwise = b
       
Falta as útimas questões logo logo postarei aqui.